๊ด€๋ฆฌ ๋ฉ”๋‰ด

UI Code Lab

๋ฐ˜์‘ํ˜• ์›น์„ ์œ„ํ•œ table ๊ตฌ์กฐ ๊ฐœ์„  – ul, li๋กœ ๋ฐ”๊พธ๊ณ  ์ ‘๊ทผ์„ฑ๊นŒ์ง€ ์ฑ™๊ธฐ๊ธฐ ๋ณธ๋ฌธ

์ž๋ฐ”์Šคํฌ๋ฆฝํŠธUI

๋ฐ˜์‘ํ˜• ์›น์„ ์œ„ํ•œ table ๊ตฌ์กฐ ๊ฐœ์„  – ul, li๋กœ ๋ฐ”๊พธ๊ณ  ์ ‘๊ทผ์„ฑ๊นŒ์ง€ ์ฑ™๊ธฐ๊ธฐ

๐Ÿฏ๊ฟ€์ƒ์ด๐Ÿ 2025. 6. 25. 09:53

๋ฐ˜์‘ํ˜• ์›น์„ ์œ„ํ•œ table ๊ตฌ์กฐ ๊ฐœ์„ 

 

 

 

์›น์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ํ‘œ(table) ํ˜•ํƒœ๋กœ ๋ณด์—ฌ์ฃผ๋Š” ๊ฑด ํ”ํ•œ ์ผ์ด์ง€๋งŒ,

๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ์—์„œ๋Š” ํ‘œ๊ฐ€ ์ž˜๋ ค ๋ณด์ด๊ฑฐ๋‚˜ ๊ฐ€๋…์„ฑ์ด ๋–จ์–ด์ง€๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ์Šต๋‹ˆ๋‹ค.

์ด๋Ÿด ๋•Œ ์œ ์šฉํ•œ ๋ฐฉ๋ฒ•์ด ๋ฐ”๋กœ table์„ ul, li ๊ตฌ์กฐ๋กœ ๋ฐ”๊ฟ” ๋ฐ˜์‘ํ˜•์œผ๋กœ ๊ตฌํ˜„ํ•˜๋Š” ๊ฒƒ์ž…๋‹ˆ๋‹ค.

 

์ด๋ฒˆ ๊ธ€์—์„œ๋Š” ์‹ค์ œ ์˜ˆ์ œ๋ฅผ ํ†ตํ•ด table์„ ul/li๋กœ ๋ฐ”๊พธ๋Š” ๋ฐฉ๋ฒ•๊ณผ,

์ ‘๊ทผ์„ฑ(Accessibility)๊นŒ์ง€ ๊ณ ๋ คํ•œ ๋งˆํฌ์—… ์ „๋žต์„ ์†Œ๊ฐœํ•ฉ๋‹ˆ๋‹ค.

 

โœ… ์™œ table ๋Œ€์‹  ul, li๋ฅผ ์‚ฌ์šฉํ• ๊นŒ?

 

ํ•ญ๋ชฉ table ul, li
๋ฐ˜์‘ํ˜• ๊ตฌํ˜„ ์–ด๋ ค์›€ ์œ ์—ฐํ•จ
์Šคํƒ€์ผ ์ปค์Šคํ„ฐ๋งˆ์ด์ง• ์ œํ•œ์  ์ž์œ ๋กœ์›€
์ ‘๊ทผ์„ฑ ๋ช…ํ™•ํ•œ ๊ตฌ์กฐ ์ œ๊ณต ์ถ”๊ฐ€ ์†์„ฑ ํ•„์š”
๋ชจ๋ฐ”์ผ ๊ฐ€๋…์„ฑ ๋‚ฎ์Œ ๋†’์Œ

table์€ ์˜๋ฏธ๋ก ์ ์œผ๋กœ๋Š” ์ข‹์ง€๋งŒ, ์ž‘์€ ํ™”๋ฉด์—์„œ ์Šคํฌ๋กค ์—†์ด ๋ณด๊ธฐ ์–ด๋ ต๊ณ  ์Šคํƒ€์ผ๋ง๋„ ์ œํ•œ์ ์ž…๋‹ˆ๋‹ค. ul, li ๊ตฌ์กฐ๋Š” ๋” ์œ ์—ฐํ•˜๊ฒŒ ๋ ˆ์ด์•„์›ƒ์„ ๊ตฌ์„ฑํ•  ์ˆ˜ ์žˆ์–ด ๋ชจ๋ฐ”์ผ ์นœํ™”์ ์ธ UI๋ฅผ ๋งŒ๋“ค๊ธฐ์— ์ ํ•ฉํ•ฉ๋‹ˆ๋‹ค.

 

This tool changed everything!

 

๐Ÿงฉ ๊ธฐ๋ณธ ๊ตฌ์กฐ ์˜ˆ์‹œ (ul, li ๊ธฐ๋ฐ˜)

 
<section aria-labelledby="price-list-heading">
  <h2 id="price-list-heading">์š”๊ธˆ ์ •๋ณด</h2>
  <ul class="price-list" role="list" aria-label="์š”๊ธˆ ํ…Œ์ด๋ธ”">
    <li class="price-row" role="listitem" aria-label="์ผ๋ฐ˜ ์š”๊ธˆ: 10,000์›">
      <span class="label">์ผ๋ฐ˜</span>
      <span class="price">10,000์›</span>
    </li>
    <li class="price-row" role="listitem" aria-label="ํ•™์ƒ ์š”๊ธˆ: 8,000์›">
      <span class="label">ํ•™์ƒ</span>
      <span class="price">8,000์›</span>
    </li>
    <li class="price-row" role="listitem" aria-label="๊ฒฝ๋กœ ์šฐ๋Œ€ ์š”๊ธˆ: 5,000์›">
      <span class="label">๊ฒฝ๋กœ ์šฐ๋Œ€</span>
      <span class="price">5,000์›</span>
    </li>
  </ul>
</section>

 

๐ŸŽจ CSS๋กœ ๋ฐ˜์‘ํ˜• ์ฒ˜๋ฆฌํ•˜๊ธฐ

 
.price-list {
  display: flex;
  flex-direction: column;
  gap: 12px;
  padding: 0;
  list-style: none;
}

.price-row {
  display: flex;
  justify-content: space-between;
  padding: 12px;
  border: 1px solid #ccc;
  border-radius: 6px;
}

.label {
  font-weight: bold;
}

@media (max-width: 480px) {
  .price-row {
    flex-direction: column;
    align-items: flex-start;
  }
}

 

์ด๋ ‡๊ฒŒ ํ•˜๋ฉด ๋ฐ์Šคํฌํ†ฑ์—์„œ๋Š” ๊ฐ€๋กœ ์ •๋ ฌ, ๋ชจ๋ฐ”์ผ์—์„œ๋Š” ์„ธ๋กœ ์ •๋ ฌ๋กœ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ „ํ™˜๋ฉ๋‹ˆ๋‹ค.

 

 

TABLE UI Design Collection

 

 

์šฐ๋ฆฌ๊ฐ€ ํ”ํ•˜๊ฒŒ ์‚ฌ์šฉํ•˜๋Š” ๊ณต์ง€์‚ฌํ•ญ ๊ฒŒ์‹œํŒ์„ ๋งŒ๋“ค ๋•Œ, table์„ ์‚ฌ์šฉํ•˜๋Š”๋ฐ ๋ชจ๋ฐ”์ผ ๋ฐ˜์‘ํ˜•์œผ๋กœ ๋Œ€์‘ํ•˜๊ธฐ์—”

๊ตฌ์กฐ๊ฐ€ ์œ ์—ฐํ•˜์ง€ ์•Š์Šต๋‹ˆ๋‹ค. ๊ทธ๋Ÿด ๊ฒฝ์šฐ ul, li๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ PC๋ฒ„์ „์—์„  table ๋ชจ์–‘์œผ๋กœ ๋‚˜์˜ค๋„๋ก ํ•˜๊ณ 

๋ชจ๋ฐ”์ผ์—์„œ ์œ ์—ฐํ•˜๊ฒŒ ๊ตฌ์กฐ๋ฅผ ๋ฐ”๊พธ์–ด ๊ฐ€๋…์„ฑ์„ ์ฑ™๊ธธ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ์‹œ๋ฅผ ํ•˜๋‚˜ ๋“ค์–ด๋ณด์ฃ .

 

โœ… ๊ณต์ง€์‚ฌํ•ญ ๊ฒŒ์‹œํŒ (ul/li ๊ธฐ๋ฐ˜ 4 ์นผ๋Ÿผ UI)

<section aria-labelledby="notice-heading">
  <h2 id="notice-heading">๊ณต์ง€์‚ฌํ•ญ</h2>

  <!-- ์ปฌ๋Ÿผ ํ—ค๋” ์˜์—ญ -->
  <ul class="notice-board header" role="presentation" aria-hidden="true">
    <li class="col-no">No</li>
    <li class="col-title">Title</li>
    <li class="col-file">Files</li>
    <li class="col-date">Date</li>
  </ul>

  <!-- ๊ณต์ง€ ๋ชฉ๋ก -->
  <ul class="notice-board" role="list" aria-label="๊ณต์ง€์‚ฌํ•ญ ๋ชฉ๋ก">
    <li class="notice-row" role="listitem" aria-label="๊ณต์ง€ 101: ์‹œ์Šคํ…œ ์ ๊ฒ€ ์•ˆ๋‚ด, ์ฒจ๋ถ€ ํŒŒ์ผ ์žˆ์Œ, 2025๋…„ 6์›” 23์ผ">
      <span class="col-no">101</span>
      <a href="/notice/101" class="col-title">[๊ณต์ง€] ์‹œ์Šคํ…œ ์ ๊ฒ€ ์•ˆ๋‚ด</a>
      <span class="col-file">
        <span class="icon" aria-hidden="true">๐Ÿ“Ž</span>
        <span class="visually-hidden">์ฒจ๋ถ€ํŒŒ์ผ ์žˆ์Œ</span>
      </span>
      <time class="col-date" datetime="2025-06-23">2025.06.23</time>
    </li>

    <li class="notice-row" role="listitem" aria-label="๊ณต์ง€ 100: ์—ฌ๋ฆ„ ํœด๋ฌด ์•ˆ๋‚ด, ์ฒจ๋ถ€ ํŒŒ์ผ ์—†์Œ, 2025๋…„ 6์›” 10์ผ">
      <span class="col-no">100</span>
      <a href="/notice/100" class="col-title">[์•ˆ๋‚ด] ์—ฌ๋ฆ„ ํœด๋ฌด ์•ˆ๋‚ด</a>
      <span class="col-file visually-hidden">์ฒจ๋ถ€ํŒŒ์ผ ์—†์Œ</span>
      <time class="col-date" datetime="2025-06-10">2025.06.10</time>
    </li>
  </ul>
</section>

 

๐ŸŽจ ๋ฐ˜์‘ํ˜• CSS (๊ธฐ๋ณธ ์˜ˆ์‹œ)

.notice-board {
  display: grid;
  grid-template-columns: 60px 1fr 50px 120px;
  gap: 8px;
  padding: 0;
  list-style: none;
  align-items: center;
}

.notice-board.header {
  font-weight: bold;
  border-bottom: 2px solid #333;
  padding-bottom: 8px;
}

.notice-row {
  border-bottom: 1px solid #ddd;
  padding: 8px 0;
}

.col-no,
.col-title,
.col-file,
.col-date {
  overflow: hidden;
  text-overflow: ellipsis;
  white-space: nowrap;
}

/* ๋ฐ˜์‘ํ˜• ๋Œ€์‘ */
@media (max-width: 600px) {
  .notice-board {
    grid-template-columns: 1fr;
    row-gap: 4px;
  }

  .col-no,
  .col-file,
  .col-date {
    display: none;
  }
}

 

โ™ฟ ์ ‘๊ทผ์„ฑ์„ ์œ„ํ•œ ๋งˆํฌ์—… ํŒ

 

ul, li๋Š” ๋ณธ๋ž˜ ๋ชฉ๋ก์ด๊ธฐ ๋•Œ๋ฌธ์— ํ‘œ์ฒ˜๋Ÿผ ์˜๋ฏธ๋ฅผ ์ „๋‹ฌํ•˜๋ ค๋ฉด ์ถ”๊ฐ€ ์†์„ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค:

  • role="list"์™€ role="listitem"์œผ๋กœ ์Šคํฌ๋ฆฐ๋ฆฌ๋”๊ฐ€ ๊ตฌ์กฐ๋ฅผ ์ธ์‹ํ•  ์ˆ˜ ์žˆ๋„๋ก ์„ค์ •
  • aria-label์— ๊ณต์ง€ ์ œ๋ชฉ, ์ฒจ๋ถ€ ์—ฌ๋ถ€, ๋‚ ์งœ ์ •๋ณด๋ฅผ ์š”์•ฝํ•ด ์Šคํฌ๋ฆฐ๋ฆฌ๋” ์ง€์›
  • <section>๊ณผ aria-labelledby๋กœ ์ œ๋ชฉ๊ณผ ์ฝ˜ํ…์ธ ๋ฅผ ์—ฐ๊ฒฐ
  • ํŒŒ์ผ ์œ ๋ฌด๋Š” ์•„์ด์ฝ˜(์‹œ๊ฐ์ )๊ณผ visually-hidden ํ…์ŠคํŠธ(๋ณด์กฐ ๊ธฐ์ˆ ์šฉ)๋กœ ๋ณ‘ํ–‰
  • <time datetime="YYYY-MM-DD"> ์š”์†Œ ์‚ฌ์šฉ์œผ๋กœ ๋‚ ์งœ ๊ธฐ๊ณ„ ํŒ๋… ์ง€์›

 

โœ๏ธ  ์ •๋ฆฌ ๋ฐ ํŒ

  • ํ‘œ๋Š” ๋น„๊ต ๋ชฉ์ ์ผ ๋•Œ๋งŒ ์‚ฌ์šฉ. ์ผ๋ฐ˜ ์ •๋ณด ํ‘œ์‹œ์šฉ์ด๋ผ๋ฉด ul/li๊ฐ€ ๋” ์œ ์—ฐํ•˜๊ณ  ์ ‘๊ทผ์„ฑ ๋†’์Œ.
  • ์‹œ๋งจํ‹ฑ ๋ ˆ์ด์•„์›ƒ + ARIA์˜ ์กฐํ™”. ์‹œ๊ฐ ๋ชจ๋“œ๋Š” ul/li ๊ตฌ์กฐ, ๋ณด์กฐ๊ธฐ์ˆ  ๋ชจ๋“œ๋Š” table ์—ญํ•  ์œ ์ง€.
  • ๋ฏธ๋””์–ด์ฟผ๋ฆฌ ํ™œ์šฉ: ํฐ ํ™”๋ฉด์—์„œ๋Š” table, ์ž‘์€ ํ™”๋ฉด์—์„œ๋Š” ul/li ๊ตฌ์กฐ๋กœ ํ† ๊ธ€.
  • ์Šคํฌ๋ฆฐ๋ฆฌ๋” ํ…Œ์ŠคํŠธ ํ•„์ˆ˜: Chrome, Safari ๋“ฑ ๋‹ค์–‘ํ•œ ํ™˜๊ฒฝ์—์„œ semantics๊ฐ€ ์œ ์ง€๋˜๋Š”์ง€ ํ™•์ธํ•ด์•ผ ํ•จ

 

โœจ ๋งˆ๋ฌด๋ฆฌํ•˜๋ฉฐ

table์€ ๊ตฌ์กฐ์ ์œผ๋กœ ๊ฐ•๋ ฅํ•˜์ง€๋งŒ,

๋ชจ๋ฐ”์ผ ํ™˜๊ฒฝ๊ณผ ์ ‘๊ทผ์„ฑ๊นŒ์ง€ ๊ณ ๋ คํ•œ๋‹ค๋ฉด

ul, li ๊ตฌ์กฐ๋กœ์˜ ์ „ํ™˜์ด ๋” ๋‚˜์€ ์„ ํƒ์ผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

ํŠนํžˆ ์š”๊ธˆํ‘œ, ๋ฆฌ์ŠคํŠธํ˜• ๋ฐ์ดํ„ฐ, ์นด๋“œํ˜• UI ๋“ฑ์— ์ ์šฉํ•˜๋ฉด

๊ฐ€๋…์„ฑ๊ณผ ์œ ์—ฐ์„ฑ ๋ชจ๋‘๋ฅผ ์žก์„ ์ˆ˜ ์žˆ์–ด์š”.