See the Pen Table with Sticky Header and Sticky First Column by Chris Coyier (@chriscoyier) on CodePen.
위와 같이 header나 일부 column이 고정된 테이블을 만들고 싶을 때,
CSS를 이용해야한다.
<div>
<table>
<thead>
<tr>
<th></th>
<th></th>
</tr>
</thead>
<tbody>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
<tr>
<td></td>
<td></td>
</tr>
</tbody>
</table>
</div>
header 고정
div {
width: 100%;
height: 300px;
overflow: auto;
table {
border-collapse: separate;
thead th {
position: sticky;
top: 0;
}
}
}
- overflow 속성을 통해 설정해놓은 300px height를 넘길 때 스크롤이 생기도록 한다.
※ overflow : 내부 컨텐츠가 주어진 공간을 넘어갈 때 어떻게 할지 결정
※ overflow auto : 주어진 공간을 넘어갔을 때만 스크롤바 생성 - position sticky 설정을 통해 상단에(top: 0) header를 고정시킨다.
※ position sticky : 설정한 위치(top, bottom, left, right)에 도달하면 고정된다. - 가끔, 스크롤을 내릴 때 고정된 header 위에 살짝씩 데이터가 보이는 경우가 있다.
이 때는 border-collapse 설정을 통해 안 보이도록 만들어 준다.
※ border-collapse : 테이블이나 셀의 테두리선 표시방법 설정 (테두리가 겹칠 때 한 줄? 두줄?)
※ border-collapse separate : 서로 이웃하는 테이블이나 셀의 테두리선을 분리시켜 표현 (=한 줄)
column 고정 (1개일 경우)
div {
width: 100%;
height: 300px;
overflow: auto;
table {
border-collapse: separate;
thead th:first-child,
tr td:first-child {
position: sticky;
left: 0;
background-color: white
}
}
}
- position sticky 설정을 통해 좌측이(left: 0) header를 고정시킨다.
- background-color를 통해서 좌우 스크롤할 때 고정된 column과 그 외 column이 겹쳐보이지 않도록 한다.
column 고정 (2개 이상일 경우)
scss
div {
width: 100%;
height: 300px;
overflow: auto;
table {
border-collapse: separate;
@for $i from 1 through (고정할 column 개수) {
thead th:nth-child(#{$i}),
tr td:nth-child(#{$i}) {
position: sticky;
left: 100px * ($i - 1);
background-color: white;
}
}
}
}
- 고정될 column별로 고정되어야하는 위치가 달라서 column별로 left위치를 설정해준다. (100px는 cell 너비)
header와 column 여러개 고정할 경우
- z-index로 고정되는 column의 header는 고정되는 column cell보다 높은 값을 주면 된다.
반응형
'💻 개발IT > 기타' 카테고리의 다른 글
[Gensim] The vocab attribute was removed from KeyedVector in Gensim 4.0.0. (0) | 2023.01.29 |
---|---|
[selenium] ElementClickInterceptedException: Message: element click intercepted: (0) | 2022.09.26 |
네이버 지도 API에서 지도 겹침 문제 (0) | 2022.09.22 |
[HTML] Shadow DOM 이란? (feat. 크롤링 실패) (1) | 2022.09.17 |
[nvm] Error: Permission denied @ apply2files - /usr/local/lib/node_modules/expo-cli/node_modules/.bin/detect-libc (0) | 2022.09.13 |
OpenAPI Generator 사용법 (0) | 2022.09.08 |
[CSS] content 속성 (0) | 2022.09.07 |
Javascript ES2022 정리 (0) | 2022.08.20 |