Skip to content

Breadcrumbย #1

@hsskey

Description

@hsskey

๐Ÿ“‹ ์ปดํฌ๋„ŒํŠธ ์ •๋ณด

  • ์ปดํฌ๋„ŒํŠธ ์ด๋ฆ„: Breadcrumb
  • ์ปดํฌ๋„ŒํŠธ ์„ค๋ช…: ๋ธŒ๋ ˆ๋“œํฌ๋Ÿผ์€ ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ์œ„์น˜์™€ ์‚ฌ์ดํŠธ์˜ ๊ตฌ์กฐ๋ฅผ ์‰ฝ๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์ด๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ๋‚ด๋น„๊ฒŒ์ด์…˜ ์ปดํฌ๋„ŒํŠธ
  • ์‚ฌ์šฉ ์‚ฌ๋ก€: ํŽ˜์ด์ง€ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋‚˜ํƒ€๋‚ด์–ด ์‚ฌ์šฉ์ž๊ฐ€ ์ƒ์œ„ ํŽ˜์ด์ง€๋กœ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋„๋ก ์ง€์›. ์ผ๋ฐ˜์ ์œผ๋กœ ํŽ˜์ด์ง€ ์ƒ๋‹จ์— ๋ฐฐ์น˜

๐Ÿ“š ์ฐธ์กฐ ๋ฐ ๋ ˆํผ๋Ÿฐ์Šค

  • ARIA Authoring Practices: W3C ARIA Patters
    • ๊ด€๋ จ ํŒจํ„ด ๋ฐ ์ ์šฉ๋œ ์ ‘๊ทผ์„ฑ ๊ธฐ์ค€ ํ™•์ธ
  • ๊ธฐํƒ€ ๋ ˆํผ๋Ÿฐ์Šค: Spectrum, MUI, Ant Design ๋“ฑ์˜ ๋ฌธ์„œ์™€ ๋น„๊ตํ•˜์—ฌ ํŒจํ„ด ๋ถ„์„

๐Ÿ“ ์ ‘๊ทผ์„ฑ ๋ฐ ARIA ์ ์šฉ ์—ฌ๋ถ€

  • ARIA Pattern ์ ์šฉ: ARIA Pattern ๋งํฌ
    • ์‚ฌ์šฉ๋œ ARIA ์†์„ฑ: role="navigation", aria-label="Breadcrumb", aria-current="page" ๋“ฑ์ด ์‚ฌ์šฉ๋จ. role="navigation"์€ ๋‚ด๋น„๊ฒŒ์ด์…˜ ์—ญํ• ์„ ๋ช…์‹œํ•˜๋ฉฐ, aria-label="Breadcrumb"๋ฅผ ํ†ตํ•ด ์Šคํฌ๋ฆฐ ๋ฆฌ๋”๊ฐ€ ์ปดํฌ๋„ŒํŠธ์˜ ๋ชฉ์  ์ธ์‹. ๋งˆ์ง€๋ง‰ ๋งํฌ์— aria-current="page" ์ ์šฉํ•ด ํ˜„์žฌ ํŽ˜์ด์ง€ ๋‚˜ํƒ€๋ƒ„
  • ์ ‘๊ทผ์„ฑ ๊ด€๋ จ ๊ณ ๋ ค์‚ฌํ•ญ: ์‹œ๊ฐ์  ๊ตฌ๋ถ„์ž๋Š” CSS๋กœ ์ถ”๊ฐ€๋˜์–ด ์Šคํฌ๋ฆฐ ๋ฆฌ๋”์—์„œ ๋ถˆํ•„์š”ํ•œ ๋ฐ˜๋ณต ํ”ผํ•˜๊ณ , ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ชฉ์  ๋ช…ํ™•ํžˆ ์ „๋‹ฌ
  • ์ ‘๊ทผ์„ฑ ๊ธฐ๋Šฅ ์š”์•ฝ: ์‹œ๊ฐ์  ๊ตฌ๋ถ„์ž๋Š” aria-hidden="true"๋กœ ์„ค์ •๋˜์–ด ์Šคํฌ๋ฆฐ ๋ฆฌ๋” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ค‘๋ณต๋œ ์ •๋ณด ์ฐจ๋‹จ

๐Ÿ—๏ธ ๋งˆํฌ์—… ๊ตฌ์กฐ ๋ถ„์„

  • HTML ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ ์‚ฌ์šฉ: <nav>, <ol>, <li>, <a>์™€ ๊ฐ™์€ ์‹œ๋งจํ‹ฑ ํƒœ๊ทธ ์‚ฌ์šฉ. <nav>๋Š” ๋‚ด๋น„๊ฒŒ์ด์…˜ ๋ชฉ์  ๋‚˜ํƒ€๋‚ด๊ณ , <ol>๊ณผ <li> ํ†ตํ•ด ๊ณ„์ธต์  ๊ตฌ์กฐ ๋ช…ํ™•ํžˆ ํ‘œํ˜„, ๊ฐ ํ•ญ๋ชฉ์— <a> ํƒœ๊ทธ ์‚ฌ์šฉํ•ด ๋งํฌ๋กœ ์—ฐ๊ฒฐ
  • ๋งˆํฌ์—… ๊ตฌ์กฐ ๋น„๊ต:
// W3C, MUI ์˜ˆ์‹œ
<nav>
  <ol>
    <li>
      <a></a>
    </li>
  </ol>
</nav>

// Web.dev
<nav>
  <a></a>
</nav>
  • ๊ตฌ์กฐ์  ์„ ํƒ ์ด์œ :
    • W3C ๋ฐ MUI: <nav><ol><li> ๊ตฌ์กฐ ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๋งจํ‹ฑํ•˜๊ฒŒ ํŽ˜์ด์ง€ ๊ณ„์ธต ๊ตฌ์กฐ๋ฅผ ๋ช…ํ™•ํžˆ ํ‘œํ˜„. ์ด๋ฅผ ํ†ตํ•ด ์Šคํฌ๋ฆฐ ๋ฆฌ๋” ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ์œ„์น˜์™€ ์ „์ฒด ๊ตฌ์กฐ๋ฅผ ์‰ฝ๊ฒŒ ํŒŒ์•…ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ, SEO์—๋„ ๊ธ์ •์ ์ธ ์˜ํ–ฅ์„ ๋ฏธ์นจ
    • Web.dev: <nav><a> ๊ตฌ์กฐ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๊ฒฐํ•จ์„ ์ค‘์‹œ. ์ด ์ ‘๊ทผ ๋ฐฉ์‹์€ ๋‹จ์ˆœํ•œ ํŽ˜์ด์ง€ ๊ตฌ์กฐ์ผ ๋•Œ ์ ํ•ฉํ•˜๋ฉฐ, ์ธํ„ฐ๋ž™์…˜์ด ํ•„์š” ์—†๋Š” ๊ฒฝ์šฐ ๊ฐ„๊ฒฐํ•˜๊ฒŒ ํ‘œํ˜„ ๊ฐ€๋Šฅ. ์„ ํƒ์ง€๋ฅผ ์ œ๊ณตํ•˜๋Š” <select> ์š”์†Œ๋ฅผ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜์„ ๊ฐ•ํ™”

๐Ÿ’ก UI ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋น„๊ต ๋ถ„์„

  • MUI: <nav><ol><li> ๊ตฌ์กฐ ์‚ฌ์šฉํ•ด ์‹œ๋งจํ‹ฑ ์›น ๊ณ„์ธต์  ๊ตฌ์กฐ ์œ ์ง€ํ•˜๋ฉฐ, ์ ‘๊ทผ์„ฑ ํ–ฅ์ƒ ์œ„ํ•ด aria-current์™€ ๊ฐ™์€ ์†์„ฑ ์ถ”๊ฐ€
  • Web.dev: <nav><a> ๊ตฌ์กฐ์— ์ถ”๊ฐ€์ ์ธ ์ธํ„ฐ๋ž™์…˜ ์œ„ํ•ด <select> ์š”์†Œ ํฌํ•จํ•ด ์„ ํƒ์ง€ ์ œ๊ณต. ์‚ฌ์šฉ์ž๊ฐ€ ๋™์ผํ•œ ๋ ˆ๋ฒจ์˜ ๋‹ค๋ฅธ ํŽ˜์ด์ง€๋กœ ๋น ๋ฅด๊ฒŒ ์ด๋™ํ•  ์ˆ˜ ์žˆ๋Š” ๊ธฐ๋Šฅ ์ถ”๊ฐ€ํ•˜์—ฌ ์‚ฌ์šฉ์ž ๊ฒฝํ—˜ ๊ฐ•ํ™”ํ•  ์ˆ˜ ์žˆ์Œ

โš™๏ธ ๊ตฌํ˜„ ๋ฐ ์„ค๊ณ„ ๊ณ ๋ ค์‚ฌํ•ญ

  • ์ฃผ์š” ์„ค๊ณ„ ๊ณ ๋ ค์‚ฌํ•ญ: ๋ธŒ๋ ˆ๋“œํฌ๋Ÿผ ์ปดํฌ๋„ŒํŠธ๋Š” ์‚ฌ์šฉ์ž๊ฐ€ ํ˜„์žฌ ์œ„์น˜ ๋น ๋ฅด๊ฒŒ ์ดํ•ดํ•˜๊ณ  ์‚ฌ์ดํŠธ ๋‚ด์—์„œ ์‰ฝ๊ฒŒ ์ด๋™ ๋„์›€. ์ด๋ฅผ ์œ„ํ•ด ์‹œ๋งจํ‹ฑํ•œ HTML ํƒœ๊ทธ์™€ ์ ์ ˆํ•œ ARIA ์†์„ฑ ์ ์šฉํ•˜์—ฌ ์ ‘๊ทผ์„ฑ ๊ฐ•ํ™” ์ค‘์š”
  • ์ฝ”๋“œ ์˜ˆ์‹œ:
<nav class="breadcrumbs" role="navigation" aria-label="Breadcrumb">
  <ol>
    <li><a href="/">Home</a></li>
    <li><a href="/category">Category</a></li>
    <li aria-current="page">Current Page</li>
  </ol>
</nav>

๐Ÿ” ํ…Œ์ŠคํŠธ ๋ฐ ๊ฒ€ํ† 

  • ์ ‘๊ทผ์„ฑ ํ…Œ์ŠคํŠธ: ์Šคํฌ๋ฆฐ ๋ฆฌ๋”์™€ ํ˜ธํ™˜์„ฑ ๋ฐ ํ‚ค๋ณด๋“œ ๋‚ด๋น„๊ฒŒ์ด์…˜ ์‚ฌ์šฉ์„ฑ ํ…Œ์ŠคํŠธ. ๊ฐ ๋งํฌ๊ฐ€ ์ ์ ˆํžˆ ์ธ์‹๋˜๋Š”์ง€, aria-current ์†์„ฑ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋™์ž‘ํ•˜๋Š”์ง€ ํ™•์ธ
  • ๋ธŒ๋ผ์šฐ์ € ํ˜ธํ™˜์„ฑ ํ…Œ์ŠคํŠธ: ์ฃผ์š” ๋ธŒ๋ผ์šฐ์ €(Chrome, Firefox, Safari, Edge)์—์„œ ๋ธŒ๋ ˆ๋“œํฌ๋Ÿผ์ด ์˜ฌ๋ฐ”๋ฅด๊ฒŒ ๋ Œ๋”๋ง๋˜๋Š”์ง€ ํ™•์ธ
  • ์‚ฌ์šฉ์ž ํ”ผ๋“œ๋ฐฑ: ์‚ฌ์šฉ์ž ํ…Œ์ŠคํŠธ ํ†ตํ•ด ๋ธŒ๋ ˆ๋“œํฌ๋Ÿผ์„ ํ†ตํ•œ ๋‚ด๋น„๊ฒŒ์ด์…˜์ด ์ง๊ด€์ ์ธ์ง€ ํ™•์ธํ•˜๊ณ , ๊ฐœ์„  ์‚ฌํ•ญ ๋ฐ˜์˜

๐Ÿ“Œ ์ถ”๊ฐ€ ์ฐธ๊ณ  ์‚ฌํ•ญ

  • ๊ด€๋ จ ๋ฌธ์„œ: W3C ARIA Authoring Practices, Web.dev Breadcrumb Article
  • ์˜๊ฒฌ ๋ฐ ์ œ์•ˆ: ๋ธŒ๋ ˆ๋“œํฌ๋Ÿผ ์ปดํฌ๋„ŒํŠธ์— ๋Œ€ํ•œ ์˜๊ฒฌ์ด๋‚˜ ๊ฐœ์„  ์‚ฌํ•ญ ์ถ”๊ฐ€

๐ŸŽฏ ์—ญํ• , ์†์„ฑ, ์ƒํƒœ ๋ฐ ํƒœ๊ทธ ์†์„ฑ

  • Role, Attribute, State
    • Role: role="navigation"์œผ๋กœ ๋ธŒ๋ ˆ๋“œํฌ๋Ÿผ์ด ๋‚ด๋น„๊ฒŒ์ด์…˜ ์—ญํ•  ๋ช…์‹œ
    • Attribute: aria-label="Breadcrumb"๋ฅผ ํ†ตํ•ด ์Šคํฌ๋ฆฐ ๋ฆฌ๋” ์‚ฌ์šฉ์ž์—๊ฒŒ ์ด ์š”์†Œ๊ฐ€ ๋ธŒ๋ ˆ๋“œํฌ๋Ÿผ์ž„ ์•Œ๋ฆผ
    • State: ํ˜„์žฌ ํŽ˜์ด์ง€๋ฅผ ๋‚˜ํƒ€๋‚ด๋Š” ์š”์†Œ์— aria-current="page" ์‚ฌ์šฉํ•˜์—ฌ ์‹œ๊ฐ์  ๋ฐ ํ”„๋กœ๊ทธ๋žจ์ ์œผ๋กœ ํ˜„์žฌ ์œ„์น˜ ๋ช…ํ™•ํžˆ ํ‘œ์‹œ
  • JavaScript ๋ฐ CSS ์‚ฌ์šฉ ์—ฌ๋ถ€
    • JavaScript ์‚ฌ์šฉ ์—ฌ๋ถ€: ํŠน์ • ์ƒํ™ฉ์—์„œ ์„ ํƒ์ง€ ์ œ๊ณตํ•˜๊ธฐ ์œ„ํ•ด <select> ์š”์†Œ์™€ JavaScript ์‚ฌ์šฉํ•˜์—ฌ ๋™์  ํŽ˜์ด์ง€ ์ „ํ™˜ ์ง€์› ๊ฐ€๋Šฅ
    • CSS ์ ์šฉ ์‚ฌํ•ญ: ์‹œ๊ฐ์  ๊ตฌ๋ถ„์ž๋Š” aria-hidden="true"๋กœ ์„ค์ •ํ•˜์—ฌ ์Šคํฌ๋ฆฐ ๋ฆฌ๋” ์‚ฌ์šฉ์ž์—๊ฒŒ ๋ถˆํ•„์š”ํ•œ ๋ฐ˜๋ณต ํ”ผํ•˜๋„๋ก ํ•จ

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions