Today, What I learned?
UI๋ฅผ ๋จผ์ ์์ ํ๋ฉด์ input ํ๊ทธ ์ค ์ฒดํฌ๋ฐ์ค์ ๋ผ๋์ค๋ฒํผ์ ์ปค์คํ ํด์ผ๊ฒ ๋ค ์๊ฐ์ด ๋ค์๋๋ฐ,
๊ธฐ๋ณธ์ ์ผ๋ก ์กํ์๋ UI๋ฅผ ๋ ๋ฆฌ๋ฉด์ ์ด๋ป๊ฒ ๋์์ธ๋๋ก ๊ตฌํํ ๊ฒ์ธ์ง์ ๋ํ ์ฝ์ง ์๊ฐ์ด ์ข ๊ธธ์๋ค.
๊ฒฐ๋ก ์ ์ผ๋ก ์ปค์คํ ์ ์ฑ๊ณตํ๊ณ ์ด๋ป๊ฒ ํด๋์๋์ง ๊ธฐ๋กํด๋ณด๋ ค ํ๋ค!..
์ฐ๋ฆฌ ํ๋ก์ ํธ๋ ์ด๋ชจ์ ์ ์ฐ๊ณ ์์ง๋ง Styled-components ํ์๊ณผ ๋์ผํ๊ฒ ์ฌ์ฉ ์ค์ด๋ผ๋ ์ ..
input type='radio'
์์ฑ๋ ๋ชจ์ต์ ์ด๋ ๋ค.
์ด๋ป๊ฒ ์ปค์คํ
์ ํ ๊ฒ์ด๋? ๋ผ๋ฒจ์ htmlFor
์ ์ธํ์ name
์ด ๋์ผํ ๊ฒฝ์ฐ ๋ผ๋ฒจ์ ๋๋ฅด๊ธฐ๋ง ํด๋ ์ธํ์ด ๋์๋๋ค๋ ์ ์ ์ด์ฉํ ๊ฒ์ด๋ค.
{career.map((career) => (
<CareerRadioBox key={career.value}>
<InfoRadioBoxInput
type="radio"
id={career.id}
name={career.value}
/>
<InfoCheckBoxLabel htmlFor={career.id}>
<InfocCheckBoxSpan>{career.name}</InfocCheckBoxSpan>
</InfoCheckBoxLabel>
</CareerRadioBox>
))}
์ฌ๊ธฐ์ ์ค์ํ ๊ฒ์ ๋ผ๋์ค ๋ฒํผ์ name
๊ฐ์ด ๊ฐ์์ผ ํ ๋ฌถ์์ผ๋ก ์ฒ๋ฆฌ๊ฐ ๋๋ค๋ ๊ฒ!
Styled-components์ CSS ์ฝ๋๋ฅผ ๋ณด๋ฉด ์ด๋ ๋ค.
์๋ ์ฝ๋๋ ์๋์ ์ธํ์ ๋ณด์ด์ง ์๋ ๊ฒ์ฒ๋ผ ๋ฉ๋ฆฌ ๋ณด๋ด๋ฒ๋ฆฌ๊ณ , ์ฒดํฌ๊ฐ ๋์์ ๊ฒฝ์ฐ ๋ผ๋ฒจ์ ๋ฐฐ๊ฒฝ์, ๊ธ์์์ ๋ณ๊ฒฝํด์ฃผ๊ณ ์๋ค.
์ธํํ๊ทธ๋ฅผ display:none
์ฒ๋ฆฌ๋ ํด๋ณด์์ง๋ง ๋์์ด ์๋์ด์ ์ง๊ธ๊น์ง ์ด ๋ฐฉ๋ฒ์ด ์ต์ ๊ฐ๋ค.
const InfoRadioBoxInput = styled.input`
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
&:checked + label {
background-color: ${COLORS.violetB400};
color: ${COLORS.white};
}
`;
input type='checkbox'
์ฒดํฌ๋ฐ์ค๋ ๋ผ๋์ค๋ฒํผ๊ณผ ๋น์ทํ๋ค.
๋์ผํ๊ฒ ๋ผ๋ฒจ์ ์ด์ฉํ๊ณ , ์ธํ์ id
์ ๋ผ๋ฒจ์ htmlFor
๋ฅผ ๊ฐ์ ๊ฐ์ ์ค๋ค.
...
<CheckBoxWrapper key={type}>
<CheckBoxInput type="checkbox" id={type} name="skills" />
<CheckboxLabel htmlFor={type}>
<CheckBoxText>{name}</CheckBoxText>
</CheckboxLabel>
</CheckBoxWrapper>
CSS ์ค ๋ฐฉ์๋ ์์ ๋์ผํจ..
const CheckBoxInput = styled.input`
position: absolute;
width: 1px;
height: 1px;
padding: 0;
margin: -1px;
overflow: hidden;
clip: rect(0, 0, 0, 0);
white-space: nowrap;
border: 0;
&:checked + label {
background-color: ${COLORS.violetB400};
color: ${COLORS.white};
}
`;
const CheckboxLabel = styled.label`
padding: 0.5rem 1rem;
height: 2.25rem;
cursor: pointer;
border-radius: 2rem;
background-color: #f2f4f6;
font-size: 0.75rem;
color: #383838;
`;
์ปค์คํ ํ๋๋ผ ์ฝ๊ฐ ์ฝ์งํ์ง๋ง ๋์ค์๋ ์ ์ฉํ๊ฒ ์ฌ์ฉํด ๋ณผ ์ ์์ ๊ฒ ๊ฐ๋ค!
'๐ Studying > ๐ TIL' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[React] input type = 'radio', 'checkbox'์ ์ํ๊ด๋ฆฌ (0) | 2023.02.14 |
---|---|
[Project Detto] ๊ธฐ์ ์คํ ์ค๋ณต ์ฒ๋ฆฌ์ ๋ํ ๊ณ ์ฐฐ (0) | 2023.02.10 |
Yarn Berry ์ค์ (0) | 2023.02.07 |
Emotion vs SCSS vs Styled-components (0) | 2023.02.06 |
[TypeScript] CRA์์ tsconfig ์ ๋๊ฒฝ๋ก ์ง์ ํ๊ธฐ (0) | 2023.02.03 |
Comment