Nomad Coders ๊ฐ์๋ ์์ ์ ๋ค์์๋๋ฐ ๋ ธ์ ์ ์ ๋ฆฌํ ๋ด์ฉ์ ๋ธ๋ก๊ทธ์๋ ์ ๋ฆฌํ๋ฉด ์ข์ ๊ฒ ๊ฐ์์ ๋ณต์ต ๊ฒธ ์ ๋ฆฌ๋ฅผ ํด๋ณด์๋ค.
React ํ๋ก์ ํธ์ CSS๋ฅผ ์ ์ฉํ๋ ๋ฐฉ์์๋ ์ง์ CSS๋ฅผ ์ ์ฉํ๋ ๋ฐฉ์, module.css๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์, styled-components๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์ ๋ฑ์ด ์๋ค.
1. ์ง์ CSS๋ฅผ ์ ์ฉํ๋ ๋ฐฉ์
๊ฐ์ฅ ๋จ์ํ ๋ฐฉ์์ธ๋ฐ, hover ๋ฑ์ ์ด๋ฒคํธ ๋ฑ์ ์ ์ฉํ ์ ์๋ค.
function Header(){
return(<div style={{backgroundColor: "skyblue", width: "100%", height: 72}}>
Header
</div>)
}
2. module.css๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์
๋ด๊ฐ ํ๋ก์ ํธ๋ฅผ ์งํํ ๋ ๊ฐ์ฅ ๋ง์ด ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค. ํ์ผ์ด๋ฆ.module.css๋ผ๋ ์ด๋ฆ์ ๊ฐ์ง ํ์ผ์ ๋ง๋ค๊ณ styles๋ฅผ ๋ถ๋ฌ์ ์ฌ์ฉํ๋ค.
*Header.tsx ํ์ผ
import styles from "./Header.module.css";
function Header(){
return(<div className={styles.header__container}>
Header
</div>)
}
*Header.module.css ํ์ผ
.header__container{
background-color: skyblue;
width: 100%;
height: 72px;
}
module.css๋ฅผ ์ฌ์ฉํ๋ฉด className์ ๋๋คํ๊ฒ ๋ง๋ค์ด์ค์ ํ๋ก์ ํธ ๋ด์์ className์ด ๊ฒน์น๋ ๊ฒ์ ๊ฑฑ์ ํ์ง ์์๋ ๋๋ค.
3. styled-components๋ฅผ ์ฌ์ฉํ๋ ๋ฐฉ์
styled-components๋ฅผ ์ฌ์ฉํ๊ธฐ ์ํด์ styled-components๋ฅผ ๋จผ์ ์ค์นํ์
โจ์ค์น
npm i styled-components
*Typescript๋ก ํ๋ก์ ํธ๋ฅผ ์งํํ๋ ๊ฒฝ์ฐ
npm i styled-components
npm install --save-dev @types/styled-components
styled-components ๋ฌธ๋ฒ์ ๋ค์๊ณผ ๊ฐ๋ค. ์ฃผ์ํด์ผํ ์ ์ ์์ ๋ฐ์ดํ๊ฐ ์๋๋ผ "๋ฐฑํฑ"์ ์ฌ์ฉํด์ผ ํ๋ค.
import styled from "styled-components";
const Header = styled.div`
background-color: skyblue;
width: 100%;
height: 72px;
`;
function MainPage() {
return (
<div>
<Header>
Header
</Header>
</div>
)
}
๐styled-components์์ ์ปดํฌ๋ํธ๋ฅผ ํ์ฅ์ฑ ์๊ฒ ์ฌ์ฉํ๋ ๋ฐฉ๋ฒ
1. ์์
import styled from "styled-components";
const Header = styled.div`
width: 100%;
height: 72px;
`;
const BlueHeader = styled(Header)`
background-color: "skyblue";
`;
const PinkHeader = styled(Header)`
background-color: "pink";
`;
function MainPage() {
return (
<div>
<BlueHeader />
<PinkHeader />
</div>
)
}
2. props๋ฅผ ์ด์ฉํด ์ปดํฌ๋ํธ์ ๊ฐ ์ ๋ฌํ๊ธฐ
import styled from "styled-components";
interface IHeader{
backgroundColor: string;
}
const Header = styled.div<IHeader>`
background-color: ${props=>props.backgroundColor};
width: 100%;
height: 72px;
`;
function MainPage() {
return (
<div>
<Header backgroundColor="skyblue" />
<Header backgroundColor="pink" />
</div>
)
}
3. HTML tag๋ฅผ ๋ฐ๊พธ๋ 'As', ์์ฑ ๊ฐ์ ์ค์ ํ๋ 'Attrs'
styled-components์์ 'As'๋ฅผ ํตํด์ HTML tag์ ์ด๋ฆ์ ๋ฐ๊ฟ ์ ์๋ค.
<Header as="a" backgroundColor="skyblue">
Header
</Header>
'Attrs'๋ฅผ ํตํด์๋ HTML ํ๊ทธ ๋ด์ ์์ฑ๊ฐ์ ์ง์ ํ ์ ์๊ฒ ํ๋ค.
const Input = styled.input.attrs({required: true, maxLength: 30})``;
function MainPage() {
return (
<div>
<Input/>
</div>
)
}
*styled-components์์ animation ์ ์ฉํ๊ธฐ
const HeaderAnimation = keyframes`
from{
transform: translateY(20px);
}
to{
transform: translateX(-20px);
}
`;
const Header = styled.div`
width: 100%;
height: 72px;
animation: ${HeaderAnimation} 1s linear infinite;
`;
function MainPage() {
return (
<div>
<Header>
Hello
</Header>
</div>
)
}
'๐ป์น(Web) > React' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React]Netlify๋ก React ๋ฐฐํฌํ๊ธฐ: ์๋ก๊ณ ์นจ, API ์ฐ๊ฒฐ ์๋ฌ ํด๊ฒฐ๋ฐฉ๋ฒ (0) | 2023.09.01 |
---|---|
[React]์น ํ์ค์ ์ค์ํ๋ฉฐ ๊ฐ๋ฐํ๋ ๋ฐฉ๋ฒ (0) | 2023.08.28 |
[React]Themes๋ฅผ ์ด์ฉํ ์ผ๊ด์ฑ ์๋ ์คํ์ผ ๊ด๋ฆฌ (0) | 2023.06.17 |
[React]CORS ์๋ฌ (0) | 2023.06.16 |
[React]์นด์นด์คํก ์์ ๋ก๊ทธ์ธ, ๊ตฌ๊ธ ์์ ๋ก๊ทธ์ธ ๊ตฌํ (4) | 2023.06.15 |