
์คํ๋ฅดํ ์ฝ๋ฉํด๋ฝ์์ ๋ฌด๋ฃ๋ก css,html ๊ฐ์๋ฅผ ํ์ด์คฌ๋๋ฐ,

์ด๊ฑด ๊ทธ๋ฅ ๊ฐ๋จํ html,css๋ ๋ฃ์ง ์๊ณ ์ฌ๊ธฐ์ ์๊ฐ์ ์ป์ด... ๋ฆฌ์กํธ๋ก ์ธ์๋ค์ปท ๋ง๋ค๊ธฐ๋ฅผ ํด๋ดค๋ฐ.
๋ฐ๋์ ์ด๋ฉด ๊ฐ๋จํ ๋๋ผ ์ค ์์๋๋ฐ, ์ด๋ฐ ์ ๋ฐ ๋ณต๋ณ์ ๋ง์ฃผ์ณ ๊ฒฐ๊ตญ ๊ฒ์๊ธ๋ ๋ ๊ฐ๋ก ๋๋๊ฒ ๋จ ^_6 (์ธ ๊ฐ๊ฐ ๋ ์๋)
๐ช ๊ธฐ๋ณธ ํ

์ผ๋จ ๋ง๋ค๊ณ ๋ธ๋ก๊น
ํ๋ ๊ฑฐ๋ผ ํ์ฌ๊น์ง ์ํฉ์ ์ด๋ฌํ๋ค์ ์์ด๋ธ๊ณ ์ฅ์์์ด๋๋ฉด,... ์์ด๋ธ ์ ๊ณก์ด ๋๋ฌด ์ข๊ณ ์์์ด๊ฐ ๋๋ฌด ์ด๋ป์.. ใ
์คํ์ผ ์ปดํฌ๋ํธ ์ฐ๋ ค๋ค๊ฐ ๊ทธ๋ฅ css ์๋ค๊ฐ ํ๋ค.
์งํํ๋ฉด์ ์๋ก ์๊ฒ ๋ ๊ฒ๋ค๋ง ์ ๋ฆฌํด๋ด
๋ฐฐ๊ฒฝ๋ง ํฌ๋ช ๋ ์ค์
์ ์ฌ์ง์ ๋ณด์ด๋ ๋ฐฐ๊ฒฝ์ ์ฌ์ค

์ด๋ฌํ ์ฌ์ง์ด๋ค.
๊ทผ๋ฐ ๋ง๋ค์ด ๋๊ณ ๋ณด๋ ๋ฐฐ๊ฒฝ์ด ๋๋ฌด ์ ์ ์ด ์์ด์ ใ
ใ
ํฌ๋ช
๋๋ฅผ ์กฐ๊ธ ์ฃผ๊ณ ์ถ์๋๋ฐ App์์ฒด์ ์ฃผ๊ฒ ๋๋ ์ ๋ถ๋ค ํฌ๋ช
๋๊ฐ ๋ค์ด๊ฐ๋๋ผ..
๊ทธ๋์ ์ด๋ถ๋ถ์ before๋ฅผ ์ด์ฉํด ๊ฐ์์์๋ฅผ ๋ง๋ค์ด์ฃผ๊ณ ๊ฑฐ๊ธฐ์ ๋ฐฐ๊ฒฝ์ด๋ฏธ์ง๋ฅผ ๋ฃ์ด์ฃผ์ด ํด๊ฒฐํ๋ค
.App {
margin: 0;
display: flex;
justify-content: center;
overflow: hidden;
}
.App::before {
content: "";
background-image: url("./../public/background.png");
background-size: cover;
opacity: 50%;
position: absolute;
top: 0;
left: 0;
right: 0;
bottom: 0;
}
๊ทธ๋ผ๋ฐ์ด์
ํ๋์ ํ์ดํ๋ก ๋๊ธฐ๋ ๋จธ์ฑํ์ง๋ง
๋์ค์ ์ฌ๊ธฐ์ ํ๋ค๊ณ ๊ธฐ๋ก๋ ํ ๊ฒธ..
https://cssgradient.io/
์ฌ๊ธฐ์ ๋ง๋ค๊ณ ์น์ ํ ์ฝ๋๋ ๋ณต์ฌํด์ ์ธ ์ ์๋ค.
.container {
width: 290px;
background: linear-gradient(
0deg,
rgba(2, 0, 36, 1) 0%,
rgba(51, 51, 52, 1) 0%,
rgba(233, 233, 233, 1) 100%,
rgba(113, 135, 139, 1) 100%
);
height: 749px;
margin-top: 30px;
z-index: 1;
}
์ค๋ ๋ ์ง๋ก!
let today = new Date();
let year = today.getFullYear();
let month = ("0" + (today.getMonth() + 1)).slice(-2);
let day = ("0" + today.getDate()).slice(-2);
let dateString = year + "-" + month + "-" + day;
๊ทธ ๋์ ๋ง์ด ํด์์ง๋ง ๋ ๊ฒ์ํด์ ํ๊ธฐ ๋๋ฌธ์ ^^ ๋ค์ ์ ๋ฆฌ.
console.log(`today:`, today);
console.log(`year:`, year);
console.log(`month:`, month);
console.log(`day:`, day);

๊ทธ๋ฆฌ๊ณ ์ํ๋ ๊ณณ์ {dateString} ~
๐ ์ฌ์ง ์ ๋ก๋
์ด์ ๊ทธ์ ๊ป ๊ฐ๋จํ ๊ณต๋ถํ๋ ๊ฒ์ ์ด์ฉํจ!
์ผ๋จ ๋ค๋ชจ๋ ๊ฑฐ ํ ์นธ์ ํ๋์ฉ ๋ค์ด๊ฐ์ผ ํ๊ธฐ ๋๋ฌธ์
์ฝ๋๊ฐ ๋๋ฌด ์ ์ ์์ด ์ง ๊ฒ ๊ฐ์ ๋ฐ๋ก component๋ฅผ ๋ง๋ค์ด ์ฃผ์๋ค.
์ฌ์ง์์ญ ๋๋ฌ ์ฌ์ง ์ ๋ก๋
Upload.js
const Upload = () => {
const [Image, setImage] = useState(null);
const fileInput = useRef(null);
const onChange = (e) => {
const file = e.target.files[0];
console.log(e.target.files);
const reader = new FileReader();
reader.readAsDataURL(file);
return new Promise((resolve) => {
reader.onload = () => {
setImage(reader.result);
resolve();
};
});
};
return ( ... )
ํ์ผ์ ์ฒจ๋ถํ ๋ onChange ํจ์๊ฐ ์คํ๋๋ค.
FileReader๋ฅผ ์์ฑํ๊ณ readAsDataURL๋ก ๋ฐ์์จ ํ์ผ์ reader๋ก ๋ถ๋ฌ์์ค๋ค.
์ผ๋จ ์ง๋๋ฒ์ ๊ณต๋ถํ๋ ๊ฒ์ input์ ๋๋ฅด๋ฉด ํ์ผ ์๋์ฐ๊ฐ ๋จ๋ ๊ฒ์ด์๋๋ฐ,
์ง๊ธ์ ์ฌ์ง์์ญ์์ฒด๊ฐ ์ด๋ฏธ์ง์
๋ก๋๊ฐ ๋ ๊ฒ์ด๋ค.
img ํ๊ทธ์ ๊ธฐ๋ณธ ์ด๋ฏธ์ง๋ฅผ ์ด๊น๊ฐ์ผ๋ก ํ state๋ฅผ ๋ง๋ค์ด src์ ๋ฃ์ด์ค๋ค.
useRef() ๋ณ์๋ฅผ ์์ฑํด์ ์ฌ์ง์ ํด๋ฆญํ๋ฉด ํ์ผ ์
๋ก๋๋ฅผ ๋์ธ ์ ์๋๋ก onClickํจ์์ ์ด๋ฒคํธ์ ๋ฃ์ด์ฃผ์๋ค.
const [Image, setImage] = useState(null);
const fileInput = useRef(null);
...
<img
style={{
width: "250px",
height: "150px",
margin: "10px 20px",
cursor: "pointer",
}}
src={Image ? Image : process.env.PUBLIC_URL + "blank.jpg"}
onClick={() => {
fileInput.current.click();
}}
/>
input์ ๋ง๋ค์๋ useRef() ๋ณ์๋ฅผ ์ฐธ์กฐํ๋๋ก ํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ input ๋ชจ๋ฅ์ด ๋ณด์ด๋ฉด ๊ตฌ๋ฆฌ๋ฏ๋ก display: "none"์ ํด์ค์ผ ํจ
<input
style={{ display: "none" }}
accept="image/*"
type="file"
onChange={(e) => onChange(e)}
ref={fileInput}
/>
๋ง์ง๋ง์ผ๋ก App.js์์ ๋ถ๋ฌ์์ฃผ๋ฉด ๋!
<Upload onChange={onChange} />

์ผ๋จ ์ฌ๊ธฐ๊น์ง ์งํํ๋๋ฐ,
๋ง์ง๋ง์ฌ์ง์ฒ๋ผ ๋น์จ์ด ๋ค๋ฅธ ์ฌ์ง์ ์ฐ๊ฒ ๋๋ฉด ์ฐ๋ถ๋ฌ์ง๋ค ใ
ใ
๋ญ ์ด๋ฏธ์ง ์์ฒด๋ฅผ ์กฐ์ ํ์ผ๋๊น ๋น์ฐํ์ง๋ง, ์ด๋ถ๋ถ์ ์์ ํด์ผํจ
์ฌ์ด์ฆ๋ฅผ ์กฐ์ ํ๋ ๋ชจ๋ฌ์ฐฝ์ ๋ง๋ค์ด์ ์งํํ๋ค๊ฐ,
์ด๋์๋ถํฐ ๊ผฌ์๋์ง ์คํจํ๊ฒ ๋์ด,
objectFit: "cover"
๋ฅผ ์ด์ฉํด์ ์ผ๋จ ์ฐ๋ถ๋ฌ์ง ์ฌ์ง์ ๋ฐ๊พธ์์
'Project > Toy-project' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ธ์๋ค์ปท ๋ง๋ค๊ธฐ ํ๋ก์ ํธ 3 - ํ๋ฉด ์ ์ฅํ๊ธฐ (0) | 2023.05.20 |
---|---|
์ธ์๋ค์ปท ๋ง๋ค๊ธฐ ํ๋ก์ ํธ 2 - ์ด๋ฏธ์ง ํฌ๋กญ์ฐฝ ๋ง๋ค๊ธฐ (์คํจ ๊ธฐ๋ก) (0) | 2023.05.20 |
๋๋ฌผ์ ์ฒ ์ ๋ณด ์นํ์ด์ง ๋ง๋ค๊ธฐ 1 - API ๋ถ๋ฌ์ค๊ธฐ (1) | 2023.05.20 |
๊ฐ์ ์ผ๊ธฐ์ฅ ๋ง๋ค๊ธฐ 5 - ๋ฐฐํฌ & ํ๊ธฐ (1) | 2023.05.20 |
๊ฐ์ ์ผ๊ธฐ์ฅ ๋ง๋ค๊ธฐ 4 - ์ต์ ํ (0) | 2023.05.19 |