์ผ | ์ | ํ | ์ | ๋ชฉ | ๊ธ | ํ |
---|---|---|---|---|---|---|
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 | 31 |
- ์ธํฐ๋ ํฐ๋ธui
- ๋ฐ์ํ์น
- ์คํฌ๋ฆฐ๋ฆฌ๋์ง์
- ๋ฐ๋๋ผ์คํฌ๋ฆฝํธ
- ํ ๋ง์๋์ ํ
- ์คํฌ๋กค์ ๋๋ฉ์ด์
- UIUX
- ์น์ ๊ทผ์ฑ
- preferscolorscheme
- ์นui๋์์ธ
- css์ ๋๋ฉ์ด์
- ๋คํฌ๋ชจ๋ํ ๊ธ
- ๋คํฌ๋ชจ๋
- ๋ก์ปฌ์คํ ๋ฆฌ์ง
- ์นUI
- ์ฝ๋ฉ์์
- uiux๋์์ธ
- ์น๋์์ธ
- ์น๊ฐ๋ฐ
- JavaScript
- css๋ณ์
- ui์ปดํฌ๋ํธ
- ์๋ฐ์คํฌ๋ฆฝํธui
- ์๋ฐ์คํฌ๋ฆฝํธ
- ๋ฐ๋๋ผjs
- UX๋์์ธ
- 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 |