2019. 10. 20. 20:56
반응형
table 태그에서 스크롤을 해도 제목줄은 고정되고 바디 부분만 스크롤이 되는 방법에 대해 생각해봤다.
그래서 나름 고안한 방법은 일단 테이블을 div에 넣고 div에 height값을 주고 overflow:auto를 적용해준다.
그리고나서 thead 안에 있는 th or td에 position:sticky;top:0; 스타일을 주면 된다.
이게 가장 바람직한 방법인지 아닌지는 잘 모르겠지만 일단 생각나는건 이 방법 밖에 없어서 이런걸 구현해야할 일이 만약에 생긴다면 이 방법을 이용할 것 같다.
Col 1 | Col 2 | Col 3 | Col 4 | Col 5 | Col 6 | Col 7 | Col 8 |
---|---|---|---|---|---|---|---|
Data 1,1 | Data 1,2 | Data 1,3 | Data 1,4 | Data 1,5 | Data 1,6 | Data 1,7 | Data 1,8 |
Data 2,1 | Data 2,2 | Data 2,3 | Data 2,4 | Data 2,5 | Data 2,6 | Data 2,7 | Data 2,8 |
Data 3,1 | Data 3,2 | Data 3,3 | Data 3,4 | Data 3,5 | Data 3,6 | Data 3,7 | Data 3,8 |
Data 4,1 | Data 4,2 | Data 4,3 | Data 4,4 | Data 4,5 | Data 4,6 | Data 4,7 | Data 4,8 |
Data 5,1 | Data 5,2 | Data 5,3 | Data 5,4 | Data 5,5 | Data 5,6 | Data 5,7 | Data 5,8 |
Data 6,1 | Data 6,2 | Data 6,3 | Data 6,4 | Data 6,5 | Data 6,6 | Data 6,7 | Data 6,8 |
참고로 MS 인터넷 익스플로러에서는 css position:sticky가 안되는 것 같다.
이제 인터넷 익스플로러 쓰는 사람이 사라지면 좋겠다.
약간 응용하면 헤더 말고 첫번째 열만 고정하는 방법도 있다.
첫번째 th, td에 position:sticky;left:0; 스타일을 주면 된다.
<style>
.test-table { border:1px solid; border-collapse: collapse; white-space: nowrap; }
.test-table td, .test-table th { border: 1px solid;width: 80px; }
.test-table thead th { position:sticky; top: 0; background-color: lightcoral; }
.table-container { width: 400px; height: 150px; overflow: auto; }
</style>
<div class='table-container'>
<table class='test-table'>
<thead>
<tr>
<th >Col 1</th>
<th >Col 2</th>
<th >Col 3</th>
<th >Col 4</th>
<th >Col 5</th>
<th >Col 6</th>
<th >Col 7</th>
<th >Col 8</th>
</tr>
</thead>
<tbody>
<tr>
<td>Data 1,1</td>
<td>Data 1,2</td>
<td>Data 1,3</td>
<td>Data 1,4</td>
<td>Data 1,5</td>
<td>Data 1,6</td>
<td>Data 1,7</td>
<td>Data 1,8</td>
</tr>
<tr>
<td>Data 2,1</td>
<td>Data 2,2</td>
<td>Data 2,3</td>
<td>Data 2,4</td>
<td>Data 2,5</td>
<td>Data 2,6</td>
<td>Data 2,7</td>
<td>Data 2,8</td>
</tr>
<tr>
<td>Data 3,1</td>
<td>Data 3,2</td>
<td>Data 3,3</td>
<td>Data 3,4</td>
<td>Data 3,5</td>
<td>Data 3,6</td>
<td>Data 3,7</td>
<td>Data 3,8</td>
</tr>
<tr>
<td>Data 4,1</td>
<td>Data 4,2</td>
<td>Data 4,3</td>
<td>Data 4,4</td>
<td>Data 4,5</td>
<td>Data 4,6</td>
<td>Data 4,7</td>
<td>Data 4,8</td>
</tr>
<tr>
<td>Data 5,1</td>
<td>Data 5,2</td>
<td>Data 5,3</td>
<td>Data 5,4</td>
<td>Data 5,5</td>
<td>Data 5,6</td>
<td>Data 5,7</td>
<td>Data 5,8</td>
</tr>
<tr>
<td>Data 6,1</td>
<td>Data 6,2</td>
<td>Data 6,3</td>
<td>Data 6,4</td>
<td>Data 6,5</td>
<td>Data 6,6</td>
<td>Data 6,7</td>
<td>Data 6,8</td>
</tr>
</tbody>
</table>
</div>
반응형
'dev' 카테고리의 다른 글
[JavaScript] ResizeSensor: HTML 엘리먼트 크기 변화 감지 (0) | 2020.02.13 |
---|---|
[JavaScript] moment.js를 이용한 일수 계산 (0) | 2020.01.29 |
[Python] Tkinter를 이용한 간단한 타이머 프로그램 (0) | 2020.01.27 |
[HTML] contenteditable 이용, div 편집 가능하도록 하기 (0) | 2019.11.13 |
[MSSQL] inserted 이용 입력한 Identity 얻기 (0) | 2019.10.18 |
[JavaScript] 랜덤 전화번호 생성 (csv파일 출력) (0) | 2019.10.02 |
[MSSQL] insert identity (0) | 2019.08.27 |
[Python] 텍스트 파일의 랜덤줄 출력 (0) | 2019.08.19 |