๋ฆฌ์กํธ ์ปดํฌ๋ํธ ์คํ์ผ๋ง์ ํ๊ณ ์๋๋ฐ, ์ํฉ์ ๋ฐ๋ผ ๊ฐ์ ์ปดํฌ๋ํธ์ ๋ค๋ฅธ ์คํ์ผ ๊ฐ์ ์ ์ฉํด์ผ ํ๋ค.
๋ก๊ทธ์ธ input์ฐฝ์ border-bottom
์์์ ํ์์๋ ํ์, focus ์ผ๋๋ ์ด๋ก์, ์ ํจ์ฑ ๊ฒ์ฌ ํต๊ณผ๋ฅผ ์คํจํ๋ฉด ๋นจ๊ฐ์์ผ๋ก ์ง์ ํ๊ณ ์ถ์๋คโ
focus์ผ ๋ ์ด๋ก์์ ์ฃผ๋๊ฑด ๊ฐ๋จํ ํด๊ฒฐํ์ง๋ง, ์ ํจ์ฑ๊ฒ์ฌ ํต๊ณผ ์ฌ๋ถ์ ๋ฐ๋ผ์ ์ถ๊ฐ์ ์ปดํฌ๋ํธ๋ฅผ ๋ง๋ค์ง ์๊ณ ์ด๋ป๊ฒ ์์์ ๋ค๋ฅด๊ฒ ์ค์ง ๊ณ ๋ฏผํ๋ค๊ฐ sytled-components๋ฅผ ํตํด ํด๊ฒฐํ๋ค.๐คฉ๐๐ป
React ์ ํ๋ฆฌ์ผ์ด์ ์์ ์ปดํฌ๋ํธ๋ฅผ ๊ธฐ๋ฐ์ผ๋ก style์ ๋์์ฃผ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ
ํ ํ๋ฆฟ ๋ฆฌํฐ๋ด ๋ฌธ๋ฒ์ ์ฌ์ฉํด style์ ์์ฑํ๋ฉด, ๊ณ ์ ํ ํด๋์ค ์ด๋ฆ์ ์์ฑํ์ฌ ํด๋น ์ปดํฌ๋ํธ์ ์ ์ฉ๋จ
์ปดํฌ๋ํธ ๊ฐ์ style ์ฌ์ฌ์ฉ์ฑ์ด ๋์์ง๊ณ ์ฝ๋ ์ค๋ณต ์ค์ผ ์ ์์
์ปดํฌ๋ํธ ์์ฑํ๊ณ ๋ฐฑํฑ( ` ) ์์ CSS ์์ฑ ์์ฑ
์์ฑ์ ๋ณ์ ํฌํจ ๊ฐ๋ฅ
props ํตํ ์กฐ๊ฑด๋ถ๋ก ๋์ ์คํ์ผ ์ ์ฉ ๊ฐ๋ฅ
npm install styled-components
import React from "react";
import styled from "styled-components";
const Title = styled.h1`
color: blue;
margin-top: 1em;
`;
export default function App() {
return <Title>Hello World!</Title>;
}
์์
ProfileCommonStyle
๋ก ๋ฐ๋ก ๋นผ๊ณ ,// ๊ณตํต๋ ์คํ์ผ
const ProfileCommonStyle = css`
vertical-align: top;
border-radius: 50%;
object-fit: cover;
`;
// ๊ณตํต ์คํ์ผ ์ปดํฌ๋ํธ ๊ฐ์ ธ์ ์ ์ฉํ๊ธฐ
const ProfileLgStyle = styled.img`
${ProfileCommonStyle}
width: 110px;
height: 110px;
`;
const ProfileMdStyle = styled.img`
${ProfileCommonStyle}
width: 50px;
height: 50px;
`;
์์
export function Input(props) {
return (
<>
<label htmlFor={props.id}>{props.label}</label>
<InputStyle {...props}></InputStyle>
</>
);
}
const InputStyle = styled.input`
border-bottom: 1px solid ${(props) => (props.valid ? '#DBDBDB' : '#eb5757')};
&:focus {
border-bottom: 1px solid ${(props) => (props.valid ? '#1C8A00' : '#eb5757')};
}
`;
<Input id={'example1'} type={'text'} label={'์ ํจ์ฑ O'} valid={true} />
<Input id={'example2'} type={'text'} label={'์ ํจ์ฑ X'} valid={false} />
๊น๋ํ ์ ๋ฆฌ๋ค์ ๊ฐ์๋ณด๋ค ์ด ๊ธ๋ก ๋ ์ดํด๊ฐ ์ ๋ ๊ฒ ๊ฐ์ต๋๋ค ^-^