Section3 Unit5 [์ฌ์ฉ์ ์นํ ์น] ์น ํ์ค & ์ ๊ทผ์ฑ
- ๊ณผ์ ์น ํ์ค & ์ ๊ทผ์ฑ ๊ฐ์
โญ๏ธ ๊ณผ์ . ์น ํ์ค & ์ ๊ทผ์ฑ ๊ฐ์
โ๏ธ Bare Minimum Requirement
โ ๊ณผ์ ์๋ ์ด 8๊ฐ์ ๋ฌธ์ ๊ฐ ์์ต๋๋ค. ๋ฌธ์ ์ ๋ด์ฉ๊ณผ ๋ฌธ์ ๊ฐ์ด๋ ๋ด์ฉ์ ๋ฐ๋ผ ์ค์ต์ ์งํํ์๋ฉด ๋ฉ๋๋ค.
โป๏ธ Cmarket Redux ๋ฆฌํฉํ ๋ง์ Cmarket Redux ๋ ํผ๋ฐ์ค ๋ ํฌ์งํ ๋ฆฌ๋ฅผ ํด๋ก ํ์ฌ ์งํํฉ๋๋ค. Cmarket Redux ๋ฆฌํฉํ ๋ง๋ ๊ณผ์ ์์ ๊ฐ์ด๋๊ฐ ์์ต๋๋ค. ๊ฐ์ด๋ ๋ด์ฉ์ ๋ฐ๋ผ ์งํํ์๋ฉด ๋ฉ๋๋ค. → ๋ด์ผ ๊ณผ์
๊ณผ์ : What I Learned
1. Semantic ์์ ์ฌ์ฉ: ๐ ์๋งจํฑ ์์๋ฅผ ์ฌ์ฉํ ๋งํฌ์ ์ด ์ค์
2. styled-components๋ html๊ณผ css ๊ด์ฌ์ฌ ๋ถ๋ฆฌ๊ฐ ๋์ด ์๊ธฐ ๋๋ฌธ์ ์นํ์ค์ ์งํจ ๊ตฌ์กฐ๊ฐ ๋๋ค.
import styled from 'styled-components';
const FontStyledComponent = styled.li`
font-size: ${ (props) => props.fontSize || "16px" };
color: ${ (props) => (props.color || "black") };
font-weight: bold;
`;
<ul>
<FontStyledComponent fontSize="1.5rem">๊ธ์จ ํฌ๊ธฐ๋ฅผ ์กฐ์ ํ๊ณ ์ถ์ ๋</FontStyledComponent>
<FontStyledComponent color="blue">์์ ์ข
๋ฅ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ์๋๋ผ</FontStyledComponent>
<FontStyledComponent>CSS๋ฅผ ์ด์ฉํด์ฃผ์ธ์.</FontStyledComponent>
<FontStyledComponent>์์์ ์๋ฏธ์ ๋ง์ง ์์ต๋๋ค.</FontStyledComponent>
</ul>
3. ๋์ฒด ํ ์คํธ ์์ฑ: ์ด๋ฏธ์ง ์์์ ๋์ฒด ํ ์คํธ(alt) ์์ฑ
<!-- alt ์์ฑ์ ์๋ฌด๊ฒ๋ ์์ผ๋ฉด ์คํฌ๋ฆฐ๋ฆฌ๋๋ ์์๋ฅผ ์ธ์ํ์ง ์๋๋ค.
์ด๋ฏธ์ง๋ฅผ ์ถฉ๋ถํ ์ค๋ช
ํด์ฃผ๋ ์ธ์ ์์๊ฐ ์์ผ๋ฉด ๋์ฒด ํ
์คํธ๋ ๋น ๋ฌธ์์ด๋ก ์์ฑํ๋ค. (์ค๋ณต๋๋ ๊ฒฝ์ฐ ์์ฑ X)
๋์ฒด ํ
์คํธ๋ ์ง๋์น๊ฒ ์์ธํ ์ค๋ช
์ ์์ฑํ์ง ์๋๋ค.
ํ์ํ ์ ๋ณด๋ง ํจ์จ์ ์ผ๋ก ์์ฑํ๋ค. -->
<img src="" alt="์ํฌํ๋ ๊ณ ์์ด" />
<img src="" alt="" />
4. ์ฝํ ์ธ ์ ํ ๊ตฌ์กฐ: ์ฝํ ์ธ ๋ ๋ ผ๋ฆฌ์ ์ธ ์์์ ๊ตฌ์กฐ๋ก ๋งํฌ์ ๋์ด์ผ ํ๋ค.
<!-- example 1 -->
<div class="tabContainer">
<div className="tabList">
<div>tab title 1</div>
<div>tab title 2</div>
<div>tab title 3</div>
</div>
<div>tab content 1</div>
<div>tab content 2</div>
<div>tab content 3</div>
</div>
<!-- example 2 -->
<div class="tabContainer">
<div className="tabList">
<div>
<div>tab title 1</div>
<div>tab content 1</div>
</div>
<div>
<div>tab title 2</div>
<div>tab content 2</div>
</div>
<div>
<div>tab title 3</div>
<div>tab content 3</div>
</div>
</div>
</div>
→ ์คํฌ๋ฆฐ ๋ฆฌ๋๋ ๋งํฌ์ ์์๋๋ก ๋ด์ฉ์ ์ฝ์ด์ค๋ค. ์ฝํ ์ธ ๋ ๋ ผ๋ฆฌ์ ์ธ ์์๋ก ์ ๊ณตํด์ผ ํ๊ณ , ๊ธ์ ์ ๋ชฉ - ๋ด์ฉ ์์ผ๋ก ์ ๊ณต๋๋ ๊ฒ์ด ๋ ผ๋ฆฌ์ ์ด๋ค.
5. ์๋งจํฑ ์์๋ง์ผ๋ก ์๋ฏธ๋ฅผ ์ถฉ๋ถํ ๋ถ์ฌํ ์ ์๋ค๋ฉด, WAI-ARIA๋ฅผ ์ฌ์ฉ
<div className="iconButtonContainer">
<button className="iconButton" aria-label="home ๋ฒํผ"><img src={home} /></button>
<button className="iconButton" aria-label="web ๋ฒํผ"><img src={web} /></button>
<button className="iconButton" aria-label="mail ๋ฒํผ"><img src={mail}/></button>
</div>
→ ์ ๋ฒํผ์ ์ด๋ฏธ์ง์ ์ญํ ๋ณด๋ค๋ ๋ฒํผ์ ์ญํ ์ด๊ธฐ ๋๋ฌธ์ ๋ฒํผ์ img
์์์ alt
๊ฐ์ ๋ฃ๋ ๊ฒ๋ณด๋ค๋ WAI-ARIA๋ฅผ ์ฌ์ฉํ๋๊ฒ ๋ ์ ํฉํ ๊ฒ์ผ๋ก ๋ณด์ธ๋ค.
6. ์น ์ ๊ทผ์ฑ์ ๊ณ ๋ คํ ํ
์ด๋ธ ๋งํฌ์
: scope
๋๋ id
headers
์์ฑ ์ฌ์ฉ
7. input ์์์ label ์ ๊ณต
<div className="inputContainer">
<label for="์์ด๋">์์ด๋</label>
<input id="์์ด๋" type="text" />
<label for="๋น๋ฐ๋ฒํธ">๋น๋ฐ๋ฒํธ</label>
<input id="๋น๋ฐ๋ฒํธ" type="text" />
</div>
๐ ์ค๋์ ํ๊ณ
์ด์ ์น ํ์ค๊ณผ ์น ์ ๊ทผ์ฑ์ ์ดํด๋ดค๊ณ , ์ค๋์ ์น ํ์ค๊ณผ ์น ์ ๊ทผ์ฑ ๊ฐ์ ์ ๊ดํ ๊ณผ์ ๋ฅผ ํ๋ค. ๊ธฐ์กด์ ์๋ ๋ด์ฉ๋ค์ด ๋ง์์ ๊ธ๋ฐฉ ํ์ด๋ฅผ ํ์ง๋ง ์น ์ ๊ทผ์ฑ ์์ฒด์ ๋ํ ๊ถ๊ธํ ๋ถ๋ถ์ด ์์ด์ Q&A ์๊ฐ์ ์ง๋ฌธ์ ํ์๋๋ฐ, ์๋ฏธ์๋ ๋ต์ ๋ฃ์ง๋ ๋ชปํ๋ ๊ฒ ๊ฐ๋ค. (์ฌ์ง์ด Q&A ์๊ฐ์ธ๋ฐ, ์ง๋ฌธ์ ๋ํ ๋ต๋ณ์ ์๊ฐ์ด ๋จ์ผ๋ฉด ํ๊ณ ๋ณธ์ธ์ด ์ค๋นํ ๊ฐ์๊ฐ ์์ผ๋ ๊ทธ๊ฑธ ํ์๊ฒ ๋ค๊ณ ํ์ ์… ๊ทธ๋ถ๊ป๋ ์ฌ๋ผ์จ ์ง๋ฌธ๋ค์ ๋ํ ์ด๋ ํ ๋ต๋ณ๋ ๋ฃ์ง ๋ชปํ๋ค. ๋ชจ๋ฐ์ผ๋ก Q&A ๋ต๋ณ์ ํด์ฃผ์๋ ๋ค๋ฅธ ๊ฐ์ฌ๋ ์ธ์ ์ ์ฐธ๊ฐ๋ฅผ ํด์ ๋ต์ ๋ค์๋๋ฐ ๊ธฐ๋ํ๋ ๋ด์ฉ์ ์๋์ด์ ์กฐ๊ธ ์์ฌ์ ๋ค.)
๊ฐ์ธ์ ์ธ ์๊ฐ์ด์ง๋ง, ์ง๊ธ๊น์ง ๊ณต๋ถํ ๋ด์ฉ๋ค๊ณผ ํ์ ๊ฐ๋ฐ์๋ค์ ์๊ฒฌ์ ๋ค์ด๋ดค์ ๋ ๋ค์๊ฐ ์น ์ ๊ทผ์ฑ์ ๋ํด์๋ ํฌ๊ฒ ์ ๊ฒฝ์ ์ฐ์ง ์๋ ๊ฒ ๊ฐ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ์น ํ์ค ๋ํ ํผ๋ธ๋ฆฌ์ ๊ฐ ์๋ ๊ธฐ์ ์์๋ ํผ๋ธ๋ฆฌ์ ๊ฐ ์ด๋ฏธ ์์ ํ HTML์ ๋๊ฒจ๋ฐ์ํ ๋ ํ๋ก ํธ์๋ ๊ฐ๋ฐ์ ์ ์ฅ์์๋ ์๊ณ ๋ ์์ด์ผ ํ์ง๋ง ํฌ๊ฒ ์ ๊ฒฝ์ฐ์ง ์๋๋ค๋ ๋๋์ ๋ฐ์๋ค. ๋ฌผ๋ก ์น๊ฐ๋ฐ์ ๊ณต๋ถํ๋ ์์ ์์ ๋ ๋ํ ์ ๊ทผ์ฑ์๋ ๋๋ฌด ํฐ ๋น์ค์ ๋ ์๊ฐ์ด ๋น์ฅ์ ์์ง๋ง, ๋๊ตฌ๋ ์ฐจ๋ณ์์ด ์ ๋ณด๋ฅผ ์ป์ ์ ์์ด์ผ ํ๋ค๋ ๊ฒ์๋ ํฌ๊ฒ ๊ณต๊ฐํ๊ณ , ์นํ์ค๊ณผ ์ ๊ทผ์ฑ์ ๋ํด ๋ ๊ณต๋ถํ๊ณ ์ถ๋ค๋ ์๊ฐ์ด ๋ค์๋ค. ๐ฅ