설정된 크기를 유지하기 위해 HTML 테이블이 필요한 페이지를 작성 중입니다. 나는 항상 거기에 머 무르려면 테이블 상단에 헤더가 필요하지만 테이블에 추가 된 행 수에 관계없이 스크롤하려면 테이블 본문이 필요합니다. 엑셀의 미니 버전을 생각하십시오. 이것은 간단한 작업처럼 보이지만 웹에서 찾은 거의 모든 솔루션에는 몇 가지 단점이 있습니다. 이 문제를 어떻게 해결할 수 있습니까?
답변
나는 같은 대답을 찾아야했다. 내가 찾은 가장 좋은 예는 http://www.cssplay.co.uk/menu/tablescroll.html 입니다 . 예 2는 저에게 효과적이었습니다. 자바 스크립트를 사용하여 내부 테이블의 높이를 설정해야하며 나머지는 CSS입니다.
답변
DataTables 가 매우 유연 하다는 것을 알았습니다 . 기본 버전은 jquery를 기반으로하지만 AngularJs 플러그인도 있습니다.
답변
나는 비슷한 질문에 대한 Sean Haddy의 훌륭한 솔루션을 보았고 약간의 편집을 자유롭게했습니다 .
- 하나의 jQuery 스크립트를 한 페이지의 여러 테이블에 재사용 할 수 있도록 ID 대신 클래스를 사용하십시오.
- 캡션, thead, tfoot 및 tbody와 같은 시맨틱 HTML 테이블 요소에 대한 지원 추가
- 스크롤바를 옵션으로 만들었으므로 스크롤 가능한 높이보다 “짧은”테이블에는 나타나지 않습니다
- 스크롤 막대를 테이블의 오른쪽 가장자리로 가져 오도록 조정 된 div 너비
- 접근 가능한 컨셉
- 삽입 된 정적 테이블 헤더에서 aria-hidden = “true”사용
- jQuery로 숨기고 원래 thead를 그대로두고 설정하십시오.
aria-hidden="false"
- 크기가 다른 여러 테이블의 예 표시
하지만 Sean은 힘든 일을했습니다. tft를 지원해야한다는 지적을 해준 Matt Burland에게도 감사드립니다.
http://jsfiddle.net/jhfrench/eNP2N/ 에서 직접 확인하십시오.
답변
overflow : scroll을 사용하여 thead와 tbody를 사용하고 tbody에 고정 높이를 설정해 보셨습니까?
대상 브라우저는 무엇입니까?
편집 : 파이어 폭스 (거의)에서 잘 작동했습니다-세로 스크롤 막대를 추가하면 가로 스크롤 막대가 필요했습니다. IE는 각 td의 높이를 내가 tbody의 높이를 지정한 것으로 설정했습니다. 내가 얻을 수있는 최선의 방법은 다음과 같습니다.
<html>
<head>
<title>Blah</title>
<style type="text/css">
table { width:300px; }
tbody { height:10em; overflow:scroll;}
td { height:auto; }
</style>
</head>
<body>
<table>
<thead>
<tr>
<th>One</th><th>Two</th>
</td>
</tr>
</thead>
<tbody>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
<tr><td>Data</td><td>Data</td></tr>
</tbody>
</table>
</body>
</html>
답변
필요한 것은 :
1) 내용이 스크롤 창보다 큰 경우에만 스크롤이 발생하므로 높이가 제한된 테이블 본문을 갖습니다 . 그러나 tbody
크기를 조정할 수 없으므로 다음과 같이 표시해야합니다 block
.
tbody {
overflow-y: auto;
display: block;
max-height: 10em; // For example
}
2) 테이블 헤더와 테이블 본문 열의 너비 를 다시 동기화block
하여 관련이없는 요소로 만듭니다. 그렇게하는 유일한 방법 은 동일한 열 너비를 둘 다 에 적용하여 동기화를 시뮬레이션 하는 것 입니다.
그러나 tbody
그 자체가block
지금이므로 더 이상처럼 동작 할 수 없습니다 table
. table
열을 올바르게 표시 하는 동작 이 여전히 필요하므로 솔루션은 각 행을 개별 table
s 로 표시하도록 요청하는 것입니다 .
thead {
display: table;
width: 100%; // Fill the containing table
}
tbody tr {
display: table;
width: 100%; // Fill the containing table
}
이 기술을 사용하면 더 이상 행을 가로 질러 확장 할 수 없습니다.
이 작업이 완료되면 열 너비가 모두 같은 너비를 갖도록 할 수 있습니다 thead
와 tbody
. 당신은 할 수 없었습니다 :
- 각 열에 대해 개별적으로 (특정 CSS 클래스 또는 인라인 스타일링을 통해) 각 테이블 인스턴스에 대해 매우 지루한 작업입니다.
- 모든 열에 대해 균일하게
th, td { width: 20%; }
예를 들어 5 개의 열이있는 경우를 ),보다 실용적이지만 (각 테이블 인스턴스에 너비를 설정할 필요는 없지만) 열 수에 대해 작동하지 않습니다 - 고정 된 테이블 레이아웃을 통해 모든 열에 대해 균일하게 계산됩니다.
마지막 옵션을 선호하며 추가해야합니다.
thead {
table-layout: fixed; // Same layout for all cells
}
tbody tr {
table-layout: fixed; // Same layout for all cells
}
th, td {
width: auto; // Same width for all cells, if table has fixed layout
}
답변
편집 : 이것은 매우 오래된 대답이며 2000 년대에 한 번 지원되었지만 2010 년의 브라우저 전략이 일부 기능이 제거 된 경우에도 W3C 사양을 준수해야했기 때문에 번영을 보였습니다. 고정 헤더가있는 스크롤 가능한 테이블 / footer는 HTML5 이전에 서투르게 지정되었습니다.
나쁜 소식
불행히도 HTML / CSS 사양이 그 기능에 대해 명확하지
않기 때문에 고정 thead
/로 스크롤 가능한 테이블을 처리하는 우아한 방법 은 없습니다tfoot
.
설명
하지만 HTML 4.01 사양은 말한다 thead
/ tfoot
/이 tbody
(? 소개) 스크롤 테이블 본체에 사용된다 :
THEAD, TFOOT 및 TBODY 요소 […]를 사용하여 테이블 행을 그룹화 할 수 있습니다. 이 분할을 통해 사용자 에이전트는 테이블 헤드 및 풋과 독립적으로 테이블 바디 스크롤을 지원할 수 있습니다.
그러나 FF 3.6에서 작동하는 스크롤 가능 테이블 기능은 HTML / CSS 사양을 준수하지 않기 때문에 버그로 간주되므로 FF 3.7에서 제거되었습니다. 참조 이 와 있음을 FF 버그에 대한 의견을.
Mozilla 개발자 네트워크 팁
아래는 스크롤 가능 테이블에 대한 MDN 유용한 팁 의 단순화 된 버전입니다.
이 아카이브 된 페이지 또는 현재 프랑스어 버전을 참조하십시오.
<style type="text/css">
table {
border-spacing: 0; /* workaround */
}
tbody {
height: 4em; /* define the height */
overflow-x: hidden; /* esthetics */
overflow-y: auto; /* allow scrolling cells */
}
td {
border-left: 1px solid blue; /* workaround */
border-bottom: 1px solid blue; /* workaround */
}
</style>
<table>
<thead><tr><th>Header
<tfoot><tr><th>Footer
<tbody>
<tr><td>Cell 1 <tr><td>Cell 2
<tr><td>Cell 3 <tr><td>Cell 4
<tr><td>Cell 5 <tr><td>Cell 6
<tr><td>Cell 7 <tr><td>Cell 8
<tr><td>Cell 9 <tr><td>Cell 10
<tr><td>Cell 11 <tr><td>Cell 12
<tr><td>Cell 13 <tr><td>Cell 14
</tbody>
</table>
그러나 MDN은 이것이 FF에서 더 이상 작동하지 않는다고 말합니다 🙁
IE8에서도 테스트했습니다 => 테이블도 스크롤 할 수 없습니다 :-((
답변
누구든지 여전히 이것을보고 있는지 확실하지 않지만 이전에 내가 한 방법은 두 개의 테이블을 사용하여 단일 원본 테이블을 표시하는 것입니다. 첫 번째는 원래 테이블 제목 줄과 테이블 본문 행 (또는 빈 본문 행)입니다. 확인).
두 번째는 별도의 div에 있으며 제목이 없으며 원래 테이블 본문 행만 있습니다. 그런 다음 별도의 div를 스크롤 가능하게 만듭니다.
div의 두 번째 테이블은 HTML의 첫 번째 테이블 바로 아래에 있으며 고정 헤더와 스크롤 가능한 하단 섹션이있는 단일 테이블처럼 보입니다. Safari, Firefox 및 IE (Spring 2010의 최신 버전)에서만 이것을 테스트했지만 모두 작동했습니다.
유일한 문제는 첫 번째 테이블이 본문 (W3.org 유효성 검사기-XHTML 1.0 엄격)없이 유효성을 검사하지 않으며 내용이없는 테이블을 추가하면 빈 행이 발생한다는 것입니다. CSS를 사용하여 이것을 보이지 않게 할 수 있지만 여전히 페이지의 공간을 차지합니다.