반응형 웹에서 테이블 처리는 어떻게 해야 할까?

By Sera on

반응형에서 table을 쓰지 않고, ul li 또는 div로 만드는 경우가 많다. 그러나 table이 반드시 필요한 예도 있다. 그럴 때 사용할 수 있는 두 가지 방법을 소개한다. 여러 가지로 응용이 가능하니 나만의 표를 만들어 보길 바란다 :)

no scroll

스크롤 없이 깔끔하게 표를 만들고 싶을 때, 또는 게시판에서 사용하는 방법이다.

국내현황 코로나 확진
위치 누적확진 신규확진 인구 10만명당
경기 3,120,770 87,667 23,005
서울 2,393,995 66,915 25,175
부산 803,861 16,682 23,993
인천 706,346 21,770 23,957
경남 660,619 21,662 19,933
대구 442,857 14,005 18,565
경북 405,151 15,058 15,425
충남 396,078 13,817 18,689
전북 325,155 12,820 18,197
충북 302,786 11,555 18,955
광주 302,079 10,259 20,954
전남 293,285 12,668 16,002
대전 285,834 8,258 19,682
강원 273,633 10,542 17,786
울산 225,881 7,430 20,139
제주 138,052 4,789 20,399
세종 75,297 3,486 20,247
검역 10,553 13 -
<table class="basic_table ctable">
	<caption>국내현황 코로나 확진</caption>
	<thead>
		<tr>
			<th scope="col">위치</th>
			<th scope="col">누적확진</th>
			<th scope="col">신규확진</th>
			<th scope="col">인구 10만명당</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<th scope="row" data-label="위치">경기</th> <!--data-label로 테이블의 제목 표출-->
			<td data-label="누적확진">3,120,770</td>
			<td data-label="신규확진">87,667</td>
			<td data-label="인구 10만명당">23,005</td>
		</tr>
		<tr>
			<th scope="row" data-label="위치">서울</th>
			<td data-label="누적확진">2,393,995</td>
			<td data-label="신규확진">66,915</td>
			<td data-label="인구 10만명당">25,175</td>
		</tr>
		.
		.
		.
		<tr>
			<th scope="row" data-label="위치">세종</th>
			<td data-label="누적확진">75,297</td>
			<td data-label="신규확진">3,486</td>
			<td data-label="인구 10만명당">20,247</td>
		</tr>
		<tr>
			<th scope="row">검역</th>
			<td>10,553</td>
			<td>13</td>
			<td>-</td>
		</tr>
	</tbody>
</table> 
@media all and (max-width: 800px) {
	.mTable caption {
		font-size: 1.3em;
	}

	.mTable {
		border: 0;
	}

	.mTable thead {
		border: none;
		clip: rect(0 0 0 0);
		height: 1px;
		margin: -1px;
		overflow: hidden;
		padding: 0;
		position: absolute;
		width: 1px;
	}

	.mTable th {
		display: block;
	}

	.mTable tr {
		border-top: 3px solid gray;
		border-bottom: 3px solid #ddd;
		display: block;
		margin-bottom: .625em;
	}

	.mTable td {
		border-bottom: 1px solid #ddd;
		display: block;
		font-size: .8em;
		text-align: right;
	}

	.mTable td::before {
		content: attr(data-label); /*data-label을 가상요소 표출*/
		float: left;
		font-weight: bold;
		text-transform: uppercase;
	}

	.mTable td:last-child {
		border-bottom: 0;
	}
}

scroll

정보가 많아서 스크롤이 있어야 하는 표에서 사용하는 방법이다.

국내현황 코로나 확진
위치 누적확진 신규확진 인구 10만명당
경기 3,120,770 87,667 23,005
서울 2,393,995 66,915 25,175
부산 803,861 16,682 23,993
인천 706,346 21,770 23,957
경남 660,619 21,662 19,933
대구 442,857 14,005 18,565
경북 405,151 15,058 15,425
충남 396,078 13,817 18,689
전북 325,155 12,820 18,197
충북 302,786 11,555 18,955
광주 302,079 10,259 20,954
전남 293,285 12,668 16,002
대전 285,834 8,258 19,682
강원 273,633 10,542 17,786
울산 225,881 7,430 20,139
제주 138,052 4,789 20,399
세종 75,297 3,486 20,247
검역 10,553 13 -
<div class="flip-scroll"> <!--div로 table을 감싸준다-->
    <table class="basic_table">
		<caption>국내현황 코로나 확진</caption>
        	<thead>
			<tr>
				<th scope="col">위치</th>
				<th scope="col">누적확진</th>
				<th scope="col">신규확진</th>
				<th scope="col">인구 10만명당</th>
			</tr>
		</thead>
		<tbody>
			<tr>
				<th scope="row">경기</th>
				<td>3,120,770</td>
				<td>87,667</td>
				<td>23,005</td>
			</tr>
			<tr>
				<th scope="row">서울</th>
				<td>2,393,995</td>
				<td>66,915</td>
				<td>25,175</td>
			</tr>
			.
			.
			.
			<tr>
				<th scope="row">세종</th>
				<td>75,297</td>
				<td>3,486</td>
				<td>20,247</td>
			</tr>
			<tr>
				<th scope="row">검역</th>
				<td>10,553</td>
				<td>13</td>
				<td>-</td>
			</tr>
		</tbody>
	</table> 
</div>
@media all and (max-width: 800px) {
	.fsMtable table {
		width: 100%;
		border-right: 1px solid #dfdfdf;
		display: block;
	}

	.fsMtable thead { /*가로로 만들어진 셀을 세로로 변경*/
		display: block;
		float: left;
	}

	.fsMtable tbody {
		display: block;
		width: auto;
		position: relative;
		overflow-x: auto;
		white-space: nowrap;
	}

	.fsMtable thead tr {
		display: block;
	}

	.fsMtable th {
		display: block;
		text-align: right;
	}

	.fsMtable tbody tr {
		display: inline-block;
		vertical-align: top;
	}

	.fsMtable td {
		display: block;
		min-height: 1.25em;
		text-align: left;
	}

	.fsMtable th {
		border-bottom: 0;
		border-left: 0;
	}

	.fsMtable td {
		border-left: 0;
		border-right: 0;
		border-bottom: 0;
	}

	.fsMtable tbody tr {
		border-left: 1px solid #babcbf;
		margin-left: -5px
	}

	.fsMtable th:last-child,
	.fsMtable td:last-child {
		border-bottom: 1px solid #dfdfdf;
	}
}