CSS

2013-10-24 28 views
39

kullanarak sabit üstbilgileri olan Kaydırılabilir Tablo nasıl Yapılır tablosumun üstbilgisini düzeltmek istiyorum.Tablo kaydırılabilir div içinde kullanılabilir. Lütfen buradaki koduma bakın: http://jsfiddle.net/w7Mm8/114/ bana bunun çözümünü öneririm.CSS

Teşekkür

Benim Kod:

<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

bu yanlış soru aynısı olarak işaretlenmiş olduğunu düşünüyorum. Bu aslında bir http://stackoverflow.com/questions/11891065/css-only-scrollable-table-with-fixed-headers kopyasıdır. – dbn

cevap

4
bunu yapmak için bir arsız yol düşünebiliriz

, bu en iyi seçenek olacaktır sanmıyorum ama Çalışacak.

Başlığı ayrı bir tablo olarak oluşturun, sonra diğerini div'e yerleştirin ve maksimum boyutu ayarlayın, sonra kaydırmanın overflow kullanarak girmesine izin verin.

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

Bu, yalnızca tablonun sabit genişlik ve sabit sütun boyutlarına sahip olması durumunda çalışır; Durum böyle değilse, üstbilgiyi tablo sütunlarına doğru şekilde nasıl hizalayabilirim? – Massimo

+0

Yapamazsınız. Sütun genişliklerini ayarlamak için javascript kullanmak bile bazen hesaplama bazen 1 piksel olabilir. – nsimeonov

42

Ne yapmak istediğiniz tablonun başlığından tablonun içeriği ayrıdır. Sadece <th> öğelerinin kaydırılmasını istiyorsunuz. Bu ayırmayı HTML'de <tbody> ve <thead> öğeleriyle kolayca tanımlayabilirsiniz.
Artık tablonun başlığı ve gövdesi birbirine bağlı, hala aynı genişliğe (ve aynı kaydırma özelliklerine) sahip olacaklar. Artık artık bir tablo olarak 'çalışma' yapmalarına izin vermek için display: block'u ayarlayabilirsiniz. Bu şekilde <thead> ve <tbody> ayrılır. <thead> artık organ olarak aynı genişliğe çünkü statik belirlesin,

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

Ve son:

table tbody, table thead 
{ 
    display: block; 
} 

Şimdi tablonun vücuda kaydırma ayarlayabilirsiniz tablonun başlığına genişliği: Ayrıca <td> için statik bir genişlik belirlesin

th 
{ 
    width: 72px; 
} 

. Bu, hizalanmamış sütunların konusunu çözer. ayrıca bazı HTML öğelerini eksik

td 
{ 
    width: 72px; 
} 


Not. Her satır başlık satırını içeren bir <tr> elemanı, olmalıdır:
<tr> 
    <th>head1</th> 
    <th>head2</th> 
    <th>head3</th> 
    <th>head4</th> 
</tr> 

Bu ne anlama geldiğini bir umut.

jsFiddle

+45

Bu çözümle başlıkların ve gövde hücrelerinin genişliği yanlış hizalanmış. – dezman

+5

Bu, demoda bile çalışmıyor ... ek satır eklerken bile tablo içeriği hiç kaydırma yapmıyor. Ve evet, başlık bedenle uyumlu değil. – Massimo

+3

Güzel ama benim için işe yaramaz. Üstbilgi ve sütunlar için bir sabit genişlik tanımlamanız gerekirse, bu çözüm ihtiyaçlar için kullanışlı değildir. Tablonun, içeriğine ve tarayıcı penceresinin genişliğine dinamik olarak uyum sağlamasını istiyorum. Tarayıcı geliştiricileri bu sorun için daha akıllı bir çözüm bulmadı mı? Benim için bir TH'nin ilgili TD üzerinde gösterilmesi ve başka bir yerde olmaması gerektiği açıktır. Bu bir masa üstbilgisinin SENSE'sidir! – Elmue