๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ

Frontend Dev/๐Ÿฅ ์ฝ”๋“œ์Šคํ…Œ์ด์ธ  FE ๋ถ€ํŠธ์บ ํ”„

Section3 Unit5 [์‚ฌ์šฉ์ž ์นœํ™” ์›น] ์›น ํ‘œ์ค€ & ์ ‘๊ทผ์„ฑ - ๊ณผ์ œ ์›น ํ‘œ์ค€ & ์ ‘๊ทผ์„ฑ ๊ฐœ์„ 

๋ฐ˜์‘ํ˜•


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์„ ๋„˜๊ฒจ๋ฐ›์„ํ…Œ๋‹ˆ ํ”„๋ก ํŠธ์—”๋“œ ๊ฐœ๋ฐœ์ž ์ž…์žฅ์—์„œ๋Š” ์•Œ๊ณ ๋Š” ์žˆ์–ด์•ผ ํ•˜์ง€๋งŒ ํฌ๊ฒŒ ์‹ ๊ฒฝ์“ฐ์ง€ ์•Š๋Š”๋‹ค๋Š” ๋Š๋‚Œ์„ ๋ฐ›์•˜๋‹ค. ๋ฌผ๋ก  ์›น๊ฐœ๋ฐœ์„ ๊ณต๋ถ€ํ•˜๋Š” ์‹œ์ ์—์„œ ๋‚˜ ๋˜ํ•œ ์ ‘๊ทผ์„ฑ์—๋Š” ๋„ˆ๋ฌด ํฐ ๋น„์ค‘์„ ๋‘˜ ์ƒ๊ฐ์ด ๋‹น์žฅ์€ ์—†์ง€๋งŒ, ๋ˆ„๊ตฌ๋‚˜ ์ฐจ๋ณ„์—†์ด ์ •๋ณด๋ฅผ ์–ป์„ ์ˆ˜ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋Š” ๊ฒƒ์—๋Š” ํฌ๊ฒŒ ๊ณต๊ฐํ–ˆ๊ณ , ์›นํ‘œ์ค€๊ณผ ์ ‘๊ทผ์„ฑ์— ๋Œ€ํ•ด ๋” ๊ณต๋ถ€ํ•˜๊ณ  ์‹ถ๋‹ค๋Š” ์ƒ๊ฐ์ด ๋“ค์—ˆ๋‹ค. ๐Ÿ”ฅ

๋ฐ˜์‘ํ˜•