2013-10-24 2 views
39

테이블의 머리글을 고정하려고합니다. 테이블이 스크롤 가능한 div 안에 있습니다. 제 코드는 여기 http://jsfiddle.net/w7Mm8/114/ 제게 제안 해주세요.CSS를 사용하여 고정 된 머리글로 스크롤 가능한 테이블을 만드는 방법

감사

내 코드 :

<div style="position: absolute; height: 200px; overflow: auto; "> 
 
    <div style="height: 250px;"> 
 
     <table border="1"> 
 
      <th>head1</th> 
 
      <th>head2</th> 
 
      <th>head3</th> 
 
      <th>head4</th> 
 
      <tr> 
 
       <td>row 1, cell 1</td> 
 
       <td>row 1, cell 2</td> 
 
       <td>row 1, cell 2</td> 
 
       <td>row 1, cell 2</td> 
 
      </tr> 
 
      <tr> 
 
       <td>row 2, cell 1</td> 
 
       <td>row 2, cell 2</td> 
 
       <td>row 1, cell 2</td> 
 
       <td>row 1, cell 2</td> 
 
      </tr> 
 
     </table> 
 
    </div> 
 
</div>

+2

나는이 잘못된 질문의 중복으로 표시되어 있다고 생각합니다. 이것은 실제로 http://stackoverflow.com/questions/11891065/css-only-scrollable-table-with-fixed-headers의 사본입니다. – dbn

답변

4
내가 할 수있는 건방진 방법을 생각할 수

, 나는이 최선의 선택이 될 것이라고 생각하지 않지만 그것은 효과가있을 것이다.

헤더를 별도의 테이블로 만든 다음 다른 하나를 div에 배치하고 최대 크기를 설정 한 다음 overflow을 사용하여 스크롤을 허용하십시오.

HTML :

<table border="1"> 
    <tr> 
    <th>head1</th> 
    <th>head2</th> 
    <th>head3</th> 
    <th>head4</th> 
    </tr> 
</table> 
<div class="scroll"> 
    <table> 
     <tr><td>Text Text</td><td>Text Text</td><td>Text Text</td><td>Text Text</td></tr> 
     <tr><td>Text Text</td><td>Text Text</td><td>Text Text</td><td>Text Text</td></tr> 
     <tr><td>Text Text</td><td>Text Text</td><td>Text Text</td><td>Text Text</td></tr> 
     <tr><td>Text Text</td><td>Text Text</td><td>Text Text</td><td>Text Text</td></tr> 
     <tr><td>Text Text</td><td>Text Text</td><td>Text Text</td><td>Text Text</td></tr> 
     <tr><td>Text Text</td><td>Text Text</td><td>Text Text</td><td>Text Text</td></tr> 
     <tr><td>More Text</td><td>More Text</td><td>More Text</td><td>More Text</td></tr> 
     <tr><td>Text Text</td><td>Text Text</td><td>Text Text</td><td>Text Text</td></tr> 
     <tr><td>Even More Text Text</td><td>Even More Text Text</td><td>Even More Text Text</td><td>Even More Text Text</td></tr> 
    </table> 
</div> 

CSS :

table { 
    width: 500px; 
} 

.scroll { 
    max-height: 60px; 
    overflow: auto; 
} 

DEMO HERE

+24

테이블의 너비가 고정되어 있고 고정 된 열 크기 인 경우에만 작동합니다. 이 경우에 헤더를 테이블 열에 올바르게 정렬하려면 어떻게해야합니까? – Massimo

+0

할 수 없습니다. 자바 스크립트를 사용하여 열 너비를 설정하더라도 계산이 1 픽셀 밖에되지 않는 경우가 있습니다. – nsimeonov

42

싶은 것은 테이블의 헤더에서 테이블의 내용 별개입니다. <th> 요소 만 스크롤 할 수 있습니다. <tbody><thead> 요소를 사용하여 HTML에서이 구분을 쉽게 정의 할 수 있습니다.
이제 표의 머리글과 본문이 서로 계속 연결되어 있지만 여전히 동일한 너비 (동일한 스크롤 속성)를 갖습니다. 이제는 더 이상 테이블로 '작동하지'않게하려면 display: block을 설정할 수 있습니다. 이렇게하면 <thead><tbody>이 분리됩니다. <thead> 더 이상 몸과 동일한 폭을 공유하지 않기 때문에 정적을 설정해야합니다,

table tbody 
{ 
    overflow: auto; 
    height: 100px; 
} 

그리고 마지막 :

table tbody, table thead 
{ 
    display: block; 
} 

이제 테이블의 본체에 스크롤을 설정할 수 있습니다 테이블의 헤더에 폭 : 또한 <td>에 대한 고정 폭을 설정해야합니다

th 
{ 
    width: 72px; 
} 

. 이렇게하면 정렬되지 않은 열의 문제가 해결됩니다. 당신은 또한 일부 HTML 요소를 누락

td 
{ 
    width: 72px; 
} 


참고. 모든 행 머리글 행을 포함하는 <tr> 요소에 있어야합니다 :
<tr> 
    <th>head1</th> 
    <th>head2</th> 
    <th>head3</th> 
    <th>head4</th> 
</tr> 

나는 이것이 당신이 무엇을 의미하는지 바랍니다.

jsFiddle

+45

헤더와 본문 셀의 너비가이 솔루션과 맞지 않게됩니다. – dezman

+5

데모에서도 작동하지 않습니다 ... 추가 행을 추가 할 때 테이블 내용이 전혀 스크롤되지 않습니다. 그리고 예, 헤더가 본문과 정렬되지 않았습니다. – Massimo

+3

나에게 쓸모 없지만 쓸모 없어. 머리글과 열에 대한 수정 너비를 정의해야하는 경우이 솔루션은 내 필요에 유용하지 않습니다. 나는 테이블이 브라우저 윈도우의 내용과 너비에 동적으로 적응하기를 원한다. 브라우저 개발자가이 문제에 대해보다 지적인 해결책을 고안하지 않았습니까? 나에게는 TH가 다른 TD가 아닌 해당 TD 위에 표시되어야한다는 것이 분명합니다. 이것은 테이블 헤더의 센스입니다! – Elmue

관련 문제