CSS tablo hücresi eşit genişliği


148

Bir tablo kabı içinde belirsiz sayıda tablo hücre öğeleri var.

<div style="display:table;">
  <div style="display:table-cell;"></div>
  <div style="display:table-cell;"></div>
</div>

İçerisinde farklı boyutlarda içerik olsa bile, tablo hücrelerinin eşit genişlikte olmasını sağlamanın saf bir CSS yolu var mı?

Teşekkürler.

Düzenleme: Bir maksimum genişlik olması kaç hücre olduğunu düşünüyorum bilmek gerektirir?


Sütun sayısı nasıl belirlenir: istemci veya sunucu tarafı?
iambriansreed

Bazı yöntemleri denedikten sonra, birden çok satıra sahip olmak ve eşit genişlikte olmasını istiyorsanız, tablo yerine flexbox kullanın
Eric

Yanıtlar:


299

İşte belirsiz sayıda hücre ile çalışan bir keman: http://jsfiddle.net/r9yrM/1/

Her bir ebeveyne div( tablo ) bir genişlik düzeltebilirsiniz , aksi takdirde her zamanki gibi% 100 olur.

Hile kullanmak table-layout: fixed;ve her hücre üzerinde bazı genişlik, burada% 2 kullanmaktır. Bu, tarayıcıların belirtilen boyutlara uymak için çok uğraştığı diğer tablo algoritmasını tetikleyecektir .
Lütfen Chrome ile test edin (ve gerekirse IE8-). Yeni bir Safari ile sorun yok ama bu hile onlarla uyumluluk hatırlayamıyorum.

CSS (ilgili talimatlar):

div {
    display: table;
    width: 250px;
    table-layout: fixed;
}

div > div {
    display: table-cell;
    width: 2%; /* or 100% according to OP comment. See edit about Safari 6 below */
}

EDIT (2013): OS X'te Safari 6'ya dikkat edin, table-layout: fixed; yanlış (veya belki de sadece farklı, diğer tarayıcılardan çok farklı. CSS2.1 REC tablo düzenini kanıtlamamıştım;)). Farklı sonuçlara hazırlıklı olun.


1
Teşekkürler, cevap gibi görünüyor. Neden bilmiyorum ama genişliği% 2 olarak ayarlarsam, aslında her sütunu% 2 içine kayar. Ancak% 100 harika çalışıyor gibi görünüyor. Orada neler olduğu hakkında bir fikrin var mı?
Harry

3
Tablo hücrelerinde% 100 genişlik kullanmaya ihtiyaç duyduğum aynı sorunla karşılaştım. Bu, display: table içeren üst öğeye uygulanan bir düzeltme nedeniyle oluyordu. IE8'de% 100 genişlik hücreleri çalışmadığından, düzeltmeyi kaldırmaktı. Umarım bu birine yardımcı olur.
Alex Barrett

Bunun üzerine genişletmek için, basit düzenleri (1x1, 2x2, 3x3, vb) ama karmaşık düzenleri (1x3x1, 1x2x3x4, vs) için bu çalışmalar ek gerektirir divile s display:tableonlar değil, satırlar sanki kullanılmak üzere display:tabl-rowbazı tahmin edebileceğiniz gibi. Burada örnek .
filoxo

2
% 100 genişlik IE8'de (sürpriz) çalışmadı, ancak% 2 için ilk öneri doğru sonuçları veriyor.

1
IE10'da% 100 genişlik de çalışmadı. Bu yaptığımız IE11 iş. Ve% 1 genişliğinde Mobil Safari süper dar sütunlar gösteriyor. Bu yüzden IE9 ve IE10'u hedefleyen bir CSS kesmek kullandım: .my-cell { width: 100%; }; @media screen and (min-width:0\0) { .my-cell { width: 1%; } }CSS kesmek buradan: stackoverflow.com/a/24321386/6962
Henrik N

29

HTML

<div class="table">
    <div class="table_cell">Cell-1</div>
    <div class="table_cell">Cell-2 Cell-2 Cell-2 Cell-2Cell-2 Cell-2</div>
    <div class="table_cell">Cell-3Cell-3 Cell-3Cell-3 Cell-3Cell-3</div>
    <div class="table_cell">Cell-4Cell-4Cell-4 Cell-4Cell-4Cell-4 Cell-4Cell-4Cell-4Cell-4</div>
</div>

CSS

.table{
    display:table;
    width:100%;
    table-layout:fixed;
}
.table_cell{
    display:table-cell;
    width:100px;
    border:solid black 1px;
}

DEMO.


Keman burada çalışmıyor. Hücreler her zaman% 25'tir.
netAction

Bu çözüm, istemci tarafından kontrol edilen site gezintisi gibi dinamik bir şey için çok ölçeklenebilir değildir.
Eric K

Muhtemelen haklı ve btw, yaklaşık iki yaşında anser @QuantumDynamix. Aklınızda daha iyi bir şey var mı? Neden sadece fikrinizi paylaşmak değil, dünyanın daha iyi şeyler bilmesini sağlayın :-)
Alpha

15

Sadece kullanarak max-width: 0yılında display: table-cellbenim için çalıştı elemanı:

.table {
  display: table;
  width: 100%;
}

.table-cell {
  display: table-cell;
  max-width: 0px;
  border: 1px solid gray;
}
<div class="table">
  <div class="table-cell">short</div>
  <div class="table-cell">loooooong</div>
  <div class="table-cell">Veeeeeeery loooooong</div>
</div>


1
Buraya apaçık ama 0pxgeçerli bir birim değil. Sadece olmalı 0.
Gavin

Bu benim için çalıştı, ama bunun nasıl çalıştığını açıklayabilir misiniz?
Emmanual

6

değiştirmek

  <div style="display:table;">
    <div style="display:table-cell;"></div>
    <div style="display:table-cell;"></div>
  </div>

ile

  <table>
    <tr><td>content cell1</td></tr>
    <tr><td>content cell1</td></tr>
  </table>

Div'lerin tablo gibi çalışmasını sağlamaya çalışan tüm konulara bakın. Tablo düzenlerini taklit etmek için table-xxx eklemek zorunda kaldılar

Tablolar desteklenir ve tüm tarayıcılarda çok iyi çalışır. Onları neden terk ettiniz? onları taklit etmek zorunda olmaları, işlerini iyi yaptığını kanıtlar.

Bence iş için en iyi aracı kullanın ve çizelgeli veri veya çizelgeli veri tablolarına benzeyen bir şey istiyorsanız sadece çalışır.

Çok geç cevap biliyorum ama dile getirmeye değer.


2
+1, çünkü çalışıyor ve hala CSS , 2014'te bunu tüm tarayıcılarda doğru şekilde yapmıyor.
Yuck

6
Bazen tablolanmış veri olmayan şeyler için tablo benzeri bir düzen istersiniz. kullanmalıdır örneğin navigasyon elemanları <nav>, <ul>vb
Ben

1
Duyarlı olmak için div tabanlı bir düzene sahip olmak idealdir. Mobil cihazlarda tabloların görüntülenmesi kıçta bir acıdır.
Pablo Rincon

Bir tabloyu taklit etmeye çalışmak duyarlı tasarımı engeller. Duyarlı tasarım istiyorsanız, masaların seçim olmadığını kabul ediyorum.
DeveloperChris

2
Tablolar, sekmeli verileri görüntülemek için oluşturuldu: öyleydi, ve sekmeli verileri görüntülemek için kullanılacak HTML öğeleri olacak, neden kimse onları (bu amaçla) terk edecek? Tablo düzeni taklit edilmemiştir : bir süredir CSS2 önerisinin bir parçası olmuştur ve HTML tablolarının varsayılan düzeninin display: table-etc(oldukça doğal) olduğu görülmektedir. Günlerimi div'leri veya div'ları taklit eden linkleri, açıklıkları veya girdileri taklit ederek bağlantılar kurmuyorum: Stil için sadece CSS kullanıyorum. Son olarak, displaytablo, tr, td öğelerine özellik başka bir değer uygulamak için IE9 ile iyi şanslar .
FelipeAls

1

bu herkes için işe yarayacak

<table border="your val" cellspacing="your val" cellpadding="your val" role="grid" style="width=100%; table-layout=fixed">
<!-- set the table td element roll attr to gridcell -->
<tr>
<td roll="gridcell"></td>
</tr>
</table>

Bu, yineleme ile oluşturulan tablo verileri için de çalışır


0

Hadi bakalım:

http://jsfiddle.net/damsarabi/gwAdA/

Genişlik: 100 piksel kullanamazsınız, çünkü ekran tablo hücresidir. Ancak Maks. Genişlik: 100 piksel kullanabilirsiniz. kutunuz asla 100 pikselden daha büyük olmaz. ancak taşma eklemeniz gerekir: contect'in diğer hücrelere kanamadığından emin olmak için gizli. beyaz boşluk da ekleyebilirsiniz: yüksekliği artırmak istemiyorsanız nowrap.


0

Bu, tablo hücresi stilini width: autove içeriği boş olarak ayarlayarak yapılabilir . Sütunlar artık eşit genişlikte ancak içerik barındırmıyor.

Hücreye içerik eklemek için divcss ile bir ekleyin :

position: absolute;
left: 0;
top: 0;
right: 0;
bottom: 0;

Ayrıca position: relativehücrelere eklemeniz gerekir .

Şimdi gerçek içeriği yukarıda bahsi geçen div'e koyabilirsiniz.

https://jsfiddle.net/vensdvvb/

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.