테이블


어떤 정보는 그 자체로 격자 형태를 띱니다. 열차 시간표, 요금제, 순위표, 영양 정보 표를 떠올려 보세요. 이런 정보는 모두 행과 열로 이루어져 있고, 그 의미는 항목들이 어떻게 줄을 맞춰 배열되는지에서 나옵니다. HTML에는 바로 이런 콘텐츠를 위한 전용 요소들이 마련되어 있으며, 이를 사용하면 화면에서도, 페이지를 음성으로 읽어주는 소프트웨어에서도 격자를 제대로 읽어낼 수 있습니다.
테이블의 기본
**테이블(table)**은 스프레드시트와 같은 모양의 행과 열로 이루어진 격자입니다. 테이블은 네 가지 요소로 만듭니다. <table>은 격자 전체를 감쌉니다. 각 <tr>은 하나의 행입니다(tr은 table row의 줄임말입니다). 행 안에서 각 <td>는 하나의 데이터 셀입니다(td는 table data입니다). 어떤 셀이 자신이 속한 열이나 행에 이름을 붙이는 역할을 한다면 <td> 대신 <th>를 사용합니다(th는 table header입니다). 브라우저는 이 셀을 굵게, 가운데 정렬로 표시해 데이터와 구분되도록 해줍니다.
<table>
<tr>
<th>Day</th>
<th>Opening hours</th>
</tr>
<tr>
<td>Monday</td>
<td>8:00 to 18:00</td>
</tr>
<tr>
<td>Saturday</td>
<td>9:00 to 14:00</td>
</tr>
</table>맨 위에 헤더 셀 두 개가 있고, 그 아래에 데이터 행 두 개가 있습니다. 브라우저는 이 격자를 그려서 각 열을 내용에 맞는 크기로 맞추고, 두 개의 <th> 셀을 굵게 렌더링합니다.
<table>, 각 행을 나타내는 <tr>, 셀을 나타내는 <td>, 제목 셀을 나타내는 <th>입니다. 제목 셀은 굵게, 가운데 정렬로 표시되어 데이터와 구분됩니다. 한 번에 한 행씩 만들면 열은 저절로 맞춰집니다. 테이블 구조화하기
행의 순서는 곧 사람들이 읽는 순서이므로, <th> 셀로 이루어진 **제목 행**을 맨 위에 둡니다. 그다음에는 모든 행의 길이를 동일하게 유지합니다. 제목 행에 셀이 세 개라면, 그 아래의 모든 <tr>도 <td> 셀 세 개를 가져야 합니다. 셀이 하나라도 빠진 행이 있으면 격자에 구멍이 생기고 열이 맞지 않게 됩니다. 여기서 새로 배울 내용은 없으며, 이미 알고 있는 행 다루는 방식을 신경 써서 지키는 것뿐입니다.
<table>
<caption>Quarterly revenue by region</caption>
<thead>
<tr>
<th>Region</th>
<th>Q1</th>
<th>Q2</th>
</tr>
</thead>
<tbody>
<tr>
<th>North</th>
<td>£12,000</td>
<td>£15,400</td>
</tr>
<tr>
<th>South</th>
<td>£9,800</td>
<td>£11,200</td>
</tr>
</tbody>
<tfoot>
<tr>
<th>Total</th>
<td>£21,800</td>
<td>£26,600</td>
</tr>
</tfoot>
</table><th> 셀로 이루어진 제목 행을 맨 앞에 둡니다. 그다음 모든 행의 길이를 똑같이 유지합니다. 제목이 세 개면 그 아래 각 행에도 <td> 셀이 세 개 있어야 합니다. 셀이 빠지면 격자에 구멍이 생기는데, 이는 초보자들이 초반에 흔히 걸려드는 부분입니다. 접근성 있는 테이블
접근성 있는 테이블이란 화면을 보는 대신 스크린 리더(페이지를 음성으로 읽어주는 소프트웨어)로 페이지를 듣는 사람들을 포함해 누구에게나 이해가 되는 테이블입니다. 여러분이 할 수 있는 가장 유용한 일은 이미 알고 있는 것입니다. 모든 제목 셀에 <td>가 아니라 <th>를 사용하는 것입니다. 그러면 스크린 리더가 어떤 셀이 레이블이고 어떤 셀이 데이터인지 청취자에게 알려줄 수 있으므로, "£15" 같은 값이 그것이 속한 열과 함께 안내됩니다. 모든 셀이 그냥 <td>인 테이블은 아무런 기준점 없이 숫자만 잔뜩 늘어놓은 것처럼 읽힙니다.
접근성은 테이블에만 국한된 이야기가 아닙니다. 나머지 전체적인 내용은 접근성 챕터에서 다룹니다.
<th>, 데이터에는 <td>를 사용하세요. 스크린 리더는 이 구분을 이용해 각 값을 그것이 속한 제목과 함께 읽어주므로, £15가 자기 열과 함께 전달됩니다. 이를 빠뜨리면 테이블 전체가 뿔뿔이 흩어진 숫자 더미로 들리게 됩니다. 테이블은 데이터를 위한 것이며, 레이아웃을 위한 것이 아닙니다
CSS가 레이아웃을 다루지 못했던 시절에는 사람들이 테이블로 페이지 전체 레이아웃을 만들곤 했습니다. 예를 들어 <table>을 이용해 왼쪽에 메뉴를, 오른쪽에 본문을 배치하는 식이었습니다. 시각적으로는 작동하기 때문에 오래된 페이지나 일부 이메일 템플릿에서 여전히 이런 모습을 볼 수 있습니다. 이 방식을 따라 하지 마세요. 테이블은 표 형태의 데이터(tabular data), 즉 행과 열의 격자 안에 속하는 정보를 위한 것입니다. 페이지의 조각들을 배치하는 일은 CSS의 역할입니다. 데이터를 담기 위해서가 아니라 요소를 배치하기 위해 테이블을 사용하면, 스크린 리더를 사용하는 사람에게는 페이지가 더 읽기 어려워지고, 나중에 수정하기도 더 어려워집니다.
<!-- Wrong: a table used to place a sidebar next to an article -->
<table>
<tr>
<td><nav>...</nav></td>
<td><article>...</article></td>
</tr>
</table>
<!-- Right: real elements, with CSS handling the columns -->
<nav>...</nav>
<article>...</article>이는 HTML이란 무엇인가에서 다룬 구조와 표현의 분리와 같은 이야기입니다. 구조는 HTML에, 배치는 CSS에 맡기세요. 의미에 따라 요소를 고르는 방법은 시맨틱 HTML을 참고하세요.

