| ์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ | 
|---|---|---|---|---|---|---|
| 1 | ||||||
| 2 | 3 | 4 | 5 | 6 | 7 | 8 | 
| 9 | 10 | 11 | 12 | 13 | 14 | 15 | 
| 16 | 17 | 18 | 19 | 20 | 21 | 22 | 
| 23 | 24 | 25 | 26 | 27 | 28 | 29 | 
| 30 | 
- ์น๊ฐ๋ฐ
 - ์๋ฐ์คํฌ๋ฆฝํธui
 - ์ ๊ทผ์ฑ
 - ์ฌ์๋ณด์ด์ฆ
 - UX๋์์ธ
 - ๋น๋ณด๋์ฐจํธ
 - ๋คํฌ๋ชจ๋
 - ๋คํฌ๋ชจ๋ํ ๊ธ
 - ์น์ ๊ทผ์ฑ
 - ๋ฐ๋๋ผ์คํฌ๋ฆฝํธ
 - JavaScript
 - ํ๋ก ํธ์๋
 - ์คํฌ๋กค์ ๋๋ฉ์ด์ 
 - ๊ฐ์์์ด๋
 - ์๋ฐ์คํฌ๋ฆฝํธ
 - ๋ฐ๋ง์ผํ
 - ์ผ๋ฐํ
 - ๋ฐ๋๋ผjs
 - ui์ปดํฌ๋ํธ
 - ์นUI
 - UIUX
 - ์ผ์ดํ๋ฐ๋ชฌํํฐ์ค
 - ๊ณจ๋
 - ๋ทํ๋ฆญ์ค์ ๋๋ฉ์ด์ 
 - ํํธ๋ฆญ์ค
 - Golden
 - ๋ทํ๋ฆญ์คost
 - kpopdemonhunters
 - js์คํฌ๋กค์ด๋ฒคํธ
 - ์น๋์์ธ
 
- Today
 
- Total
 
UI Code Lab
๋ฐ์ํ ์น์ ์ํ table ๊ตฌ์กฐ ๊ฐ์ – ul, li๋ก ๋ฐ๊พธ๊ณ ์ ๊ทผ์ฑ๊น์ง ์ฑ๊ธฐ๊ธฐ ๋ณธ๋ฌธ
๋ฐ์ํ ์น์ ์ํ table ๊ตฌ์กฐ ๊ฐ์ – ul, li๋ก ๋ฐ๊พธ๊ณ ์ ๊ทผ์ฑ๊น์ง ์ฑ๊ธฐ๊ธฐ
๐ฏ๊ฟ์์ด๐ 2025. 6. 25. 09:53
์น์์ ๋ฐ์ดํฐ๋ฅผ ํ(table) ํํ๋ก ๋ณด์ฌ์ฃผ๋ ๊ฑด ํํ ์ผ์ด์ง๋ง,
๋ชจ๋ฐ์ผ ํ๊ฒฝ์์๋ ํ๊ฐ ์๋ ค ๋ณด์ด๊ฑฐ๋ ๊ฐ๋ ์ฑ์ด ๋จ์ด์ง๋ ๊ฒฝ์ฐ๊ฐ ๋ง์ต๋๋ค.
์ด๋ด ๋ ์ ์ฉํ ๋ฐฉ๋ฒ์ด ๋ฐ๋ก table์ ul, li ๊ตฌ์กฐ๋ก ๋ฐ๊ฟ ๋ฐ์ํ์ผ๋ก ๊ตฌํํ๋ ๊ฒ์ ๋๋ค.
์ด๋ฒ ๊ธ์์๋ ์ค์  ์์ ๋ฅผ ํตํด table์ ul/li๋ก ๋ฐ๊พธ๋ ๋ฐฉ๋ฒ๊ณผ,
์ ๊ทผ์ฑ(Accessibility)๊น์ง ๊ณ ๋ คํ ๋งํฌ์ ์ ๋ต์ ์๊ฐํฉ๋๋ค.
โ ์ table ๋์ ul, li๋ฅผ ์ฌ์ฉํ ๊น?
| ํญ๋ชฉ | table | ul, li | 
| ๋ฐ์ํ ๊ตฌํ | ์ด๋ ค์ | ์ ์ฐํจ | 
| ์คํ์ผ ์ปค์คํฐ๋ง์ด์ง | ์ ํ์  | ์์ ๋ก์ | 
| ์ ๊ทผ์ฑ | ๋ช ํํ ๊ตฌ์กฐ ์ ๊ณต | ์ถ๊ฐ ์์ฑ ํ์ | 
| ๋ชจ๋ฐ์ผ ๊ฐ๋ ์ฑ | ๋ฎ์ | ๋์ | 
table์ ์๋ฏธ๋ก ์ ์ผ๋ก๋ ์ข์ง๋ง, ์์ ํ๋ฉด์์ ์คํฌ๋กค ์์ด ๋ณด๊ธฐ ์ด๋ ต๊ณ ์คํ์ผ๋ง๋ ์ ํ์ ์ ๋๋ค. ul, li ๊ตฌ์กฐ๋ ๋ ์ ์ฐํ๊ฒ ๋ ์ด์์์ ๊ตฌ์ฑํ ์ ์์ด ๋ชจ๋ฐ์ผ ์นํ์ ์ธ UI๋ฅผ ๋ง๋ค๊ธฐ์ ์ ํฉํฉ๋๋ค.

๐งฉ ๊ธฐ๋ณธ ๊ตฌ์กฐ ์์ (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์ ์ฌ์ฉํ๋๋ฐ ๋ชจ๋ฐ์ผ ๋ฐ์ํ์ผ๋ก ๋์ํ๊ธฐ์
๊ตฌ์กฐ๊ฐ ์ ์ฐํ์ง ์์ต๋๋ค. ๊ทธ๋ด ๊ฒฝ์ฐ 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 ๋ฑ์ ์ ์ฉํ๋ฉด
๊ฐ๋ ์ฑ๊ณผ ์ ์ฐ์ฑ ๋ชจ๋๋ฅผ ์ก์ ์ ์์ด์.
'์๋ฐ์คํฌ๋ฆฝํธUI' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
| ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋ง๋๋ ์๋ฆผ(Toast) ์ปดํฌ๋ํธ (4) | 2025.07.04 | 
|---|---|
| ์ ๊ทผ์ฑ์ ๊ณ ๋ คํ ์ค์  ๋ชจ๋ฌ ๊ตฌํ๊ธฐ (Modal) (6) | 2025.06.26 | 
| ์งํ ์ํฉ์ ์๊ฐํํ๋ ํ์๋ผ์ธ UI ๋ง๋ค๊ธฐ (JavaScript ๊ธฐ๋ฐ) (4) | 2025.06.23 | 
| ์๋ฐ์คํฌ๋ฆฝํธ๋ก ํญ ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (tab) (4) | 2025.06.20 | 
| ์๋ฐ์คํฌ๋ฆฝํธ๋ก ๋๋กญ๋ค์ด ๊ธฐ๋ฅ ๋ง๋ค๊ธฐ (Dropdown) (6) | 2025.06.19 |