이 글은 코딩 자율학습 HTML+CSS+JS(저자 : 김기수)의 책 내용과 유튜브 영상을 개인적으로 정리하는 글입니다.
표는 웹 페이지에서 흔하게 볼 수 있는 2차원 격자 형태로 구성된 데이터를 의미한다.
표는 행(row), 열(column) 그리고 행과 열이 만나는 셀(cell)로 구성된다.
table 태그
HTML에서 표를 생성할 때는 table 태그를 사용한다.
폼과 마찬가지로 표 관련 태그는 table 태그 안에서 사용한다.
summary 속성은 더 이상 사용하지 않는다.
HTML5에서 공식적으로 summary 속성을 지원하지 않아 더 이상 사용하지 않는다.
caption 태그
웹 접근성을 향상하는 방법의 하나로 표 제목을 지정한다.
표 제목은 caption 태그로 지정하므로 표를 만들 때는 반드시 caption 태그를 사용해야 한다.
caption 태그는 table 태그 안에 첫 번째로 작성해야 하는 태그이다.
<table>
<caption>표 제목</caption>
</table>
tr 태그
tr(table row) 태그는 표에서 행을 생성한다.
tr태그 하나는 행 하나를 생성하므로 행을 여러 개 만들고 싶다면 tr 태그를 여러 번 사용하면 된다.
<table>
<tr></tr>
</table>
th, td 태그
th(table header) 태그와 td(table data) 태그는 표에서 열을 생성할 때 사용한다.
th 태그는 표에서 제목을 나타내는 열을 생성할 때, td 태그는 표에서 일반적인 데이터를 나타내는 열을 생성할 때 사용한다.
<table>
<th>제목</th>
<td>내용</td>
</table>
아래의 그림에서 번호, 상품명, 수량, 가격과 같은 열은 제목을 의미하는 데이터이므로 th 태그로 생성하고, 나머지 데이터를 나타내는 열은 td 태그로 생성한다.
위와 같이 4 x 4 표를 만들려면 아래와 같이 코드를 작성한다.
<table border="1">
<tr>
<th>번호</th>
<th>상품명</th>
<th>수량</th>
<th>가격</th>
</tr>
<tr>
<td>1</td>
<td>콜라</td>
<td>1개</td>
<td>1,500원</td>
</tr>
<tr>
<td>2</td>
<td>사이다</td>
<td>2개</td>
<td>1,000원</td>
</tr>
<tr>
<td>3</td>
<td>탄산수</td>
<td>3개</td>
<td>1,000원</td>
</tr>
</table>
rowspan과 colspan 속성
셀은 병합할 수 있는데, 행과 행을 병합할 때는 rowspan 속성을, 열과 열을 병합할 때는 colspan 속성을 사용한다.
아래와 같은 형태로 표를 만든다고 할 때, rowspan과 colspan의 속성값으로 병합하고 싶은 셀의 개수를 적는다.
단, 병합한 셀의 개수만큼 다음 행 또는 열은 비워야 한다.
<!-- 테이블의 시작을 의미 -->
<table border="1">
<tr>
<th>번호</th>
<th>상품명</th>
<th>수량</th>
<th>가격</th>
</tr>
<tr>
<td>1</td>
<td>콜라</td>
<td>1개</td>
<td>1,500원</td>
</tr>
<tr>
<td>2</td>
<td>사이다</td>
<td>2개</td>
<td rowspan="2">1,000원</td> <!-- 행 병합-->
</tr>
<tr>
<td>3</td>
<td>탄산수</td>
<td>3개</td>
<!-- 4행 4열은 3행 4열과 병합했으므로 생성하지 않습니다. -->
</tr>
<tr>
<td>총 금액</td>
<td colspan="3">6,500원</td> <!-- 열 병합-->
<!-- 5행 2열부터 열 3개를 병합했으므로 나머지 열은 생성하지 않습니다. -->
</tr>
</table>
thead, tfoot, tbody 태그
표에서도 행을 묶어 그룹화 할 수 있는데, thead, tfoot, tbody 태그를 사용하면 된다.
thead 태그는 헤더 영역에 해당하는 행을, tfoot 태그는 푸터 영역에 해당하는 행을, tbody 태그는 본문 영역에 해당하는 행을 그룹 짓는다.
thead, tfoot, tbody 태그는 표에서 표현하려는 데이터 형식에 따라 사용하지 않을 수도 있다.
하지만 사용한다면 반드시 thead, tfoot, tbody 순서여야 한다.
thead와 tfoot 태그는 한 번만 사용할 수 있고, tbody 태그로 그룹화한 행은 th 태그로 열을 생성해야 한다.
<!-- 테이블의 시작을 의미 -->
<table>
<thead>
<tr>
<th>번호</th>
<th>상품명</th>
<th>수량</th>
<th>가격</th>
</tr>
</thead>
<tfoot>
<tr>
<td>총 금액</td>
<td colspan="3">6,500원</td>
</tr>
</tfoot>
<tbody>
<tr>
<td>1</td>
<td>콜라</td>
<td>1개</td>
<td>1,500원</td>
</tr>
<tr>
<td>2</td>
<td>사이다</td>
<td>2개</td>
<td rowspan="2">1,000원</td>
</tr>
<tr>
<td>3</td>
<td>탄산수</td>
<td>3개</td>
</tr>
</tbody>
</table>
thead, tfoot, tbody 태그는 왜 사용하나?
col과 colgroup 태그
표에서 열을 그룹화할 때는 col 태그와 colgroup 태그를 사용한다.
col 태그는 하나의 열을 그룹화하고, colgroup 태그는 span 속성과 함께 사용해 2개 이상의 열을 그룹화한다.
col 태그나 colgroup 태그는 보통 열 전체를 그룹화해서 통일된 스타일을 적용하는 목적으로 많이 사용한다.
caption 태그 다음에 사용해야 하고 tr 태그보다는 먼저 작성해야 한다.
또한 col 태그나 colgroup 태그를 사용하면 반드시 두 태그의 개수와 사용한 열 개수가 일치해야 한다.
아래의 코드는 열을 그룹 지어서 1열의 너비를 80px, 2열과 3열의 너비를 150px, 4열의 너비를 100px로 지정한다.
<table border="1">
<col style="width:80px;">
<colgroup span="2" style="width:150px"></colgroup>
<col style="width:100px">
<tr>
<th>번호</th>
<th>상품명</th>
<th>수량</th>
<th>가격</th>
</tr>
<tr>
<td>1</td>
<td>콜라</td>
<td>1개</td>
<td>1,500원</td>
</tr>
<tr>
<td>2</td>
<td>사이다</td>
<td>2개</td>
<td rowspan="2">1,000원</td> <!--행 병합-->
</tr>
<tr>
<td>3</td>
<td>탄산수</td>
<td>3개</td>
<!-- 4행 4열은 3행 4열과 병합했으므로 생성하지 않습니다. -->
</tr>
<tr>
<td>총 금액</td>
<td colspan="3">6,500원</td>
<!-- 5행 2열부터 열 3개를 병합했으므로 나머지 열은 생성하지 않습니다. -->
</tr>
</table>
scope 속성
표를 생성할 때 사용할 수 있는 속성 중에서 순전히 웹 접근 성 향상을 목적으로 사용하는 scope 속성이 있다.
scope 속성은 제목을 나타내는 셀의 범위를 지정한다.
그래서 표에서 제목을 나타내는 th 태그에서만 사용할 수 있다.
예를 들어, 아래의 표는 구분, 중간고사, 기말고사, 전공, 교양이 전부 th 태그로 작성되는 제목이어서 제목의 범위가 명확하지 않다.
실제로 표의 제목 범위는 아래의 그림처럼 인식되어야 한다.
이럴 때 scope 속성으로 각 th 태그의 범위를 지정하면 웹 접근성이 향상된다.
scope 속성은 col, colgroup, row를 값으로 넣을 수 있는데, col은 열을, row는 행을 뜻하므로 속성값에 col이 들어가면 세로 방향, row가 들어가면 가로 방향이라고 생각하면 된다.
제목이 colspan이나 rowspan으로 병합된 셀이라면 col이나 row 대신에 colgroup, rowgroup을 사용하면 된다.
<table border="1">
<tr>
<th scope="col">구분</th>
<th scope="col">중간고사</th>
<th scope="col">기말고사</th>
</tr>
<tr>
<th scope="row">전공</th>
<td>A+</td>
<td>B+</td>
</tr>
<tr>
<th scope="row">교양</th>
<td>C-</td>
<td>B</td>
</tr>
</table>
'HTML & CSS > HTML' 카테고리의 다른 글
[HTML] 시맨틱 태그(sementic tag) (0) | 2023.10.30 |
---|---|
[HTML] 멀티미디어(오디오, 비디오) 삽입하기 (0) | 2023.10.29 |
[HTML] 폼 태그(form tag) (0) | 2023.10.28 |
[HTML] 웹 문서에 다양한 내용 입력하기 (0) | 2023.03.03 |
[HTML] HTML문서의 기본 구조 (0) | 2023.03.02 |