CSS tablo sütunu otomatik genişliği


100

Aşağıdaki göz önüne alındığında, son sütunumu içeriğine göre otomatik olarak nasıl boyutlandırabilirim? (Son sütun, içeriğin genişliğini otomatik boyutlandırmalıdır. Yalnızca 1 li öğeye sahip olduğumu, 3 li öğelerine sahip olduğunu vb. Varsayalım):

            <table cellspacing="0" cellpadding="0" border="0">
            <thead><!-- universal table heading -->
                <tr>
                    <td class="tc first"><input type="checkbox" value="true" name="data-1-check-all" id="data-1-check-all"></td>
                    <td class="tc">Type</td>
                    <th>File</th>
                    <th>Sample</th>
                    <th>Action</th>
                </tr>
            </thead>
            <tbody>
                <tr>
                    <td>Division 1</td>
                    <td>Division 2</td>
                    <td>Division 3</td>
                    <td>Division 4</td>
                    <td>Division 5</td>
                </tr>
                <tr>
                    <td>Division 1</td>
                    <td>Division 2</td>
                    <td>Division 3</td>
                    <td>Division 4</td>
                    <td class="last">
                        <ul class="actions">
                            <li><a class="iconStats" href="#">Statystyki</a></li>
                            <li><a class="iconEdit" href="#">Edytuj</a></li>
                            <li><a class="iconDelete" href="#">Usuń</a></li>

                        </ul>
                    </td>
                </tr>
            </tbody>
        </table>

Css:

table { table-layout: fixed; width: 100%; }
table tr { border-bottom:1px solid #e9e9e9; }
table thead td, th {border-left: 1px solid #f2f2f2; border-right: 1px solid #d5d5d5; background: #ddd url("../images/sprites4.png") repeat-x scroll 0 100% ; font-weight: bold; text-align:left;}
table tr td, th { border:1px solid #D5D5D5; padding:15px;}
table tr:hover { background:#fcfcfc;}
table tr ul.actions {margin: 0;}
table tr ul.actions li {display: inline; margin-right: 5px;}

Yanıtlar:


218

Aşağıdakiler sorununuzu çözecektir:

td.last {
    width: 1px;
    white-space: nowrap;
}

Esnek, Sınıf Tabanlı Çözüm

Ve daha esnek bir çözüm, bir .fitwidthsınıf oluşturmak ve bunu, içeriklerinin bir satıra sığmasını sağlamak istediğiniz tüm sütunlara uygulamaktır:

td.fitwidth {
    width: 1px;
    white-space: nowrap;
}

Ve sonra HTML'nizde:

<tr>
    <td class="fitwidth">ID</td>
    <td>Description</td>
    <td class="fitwidth">Status</td>
    <td>Notes</td>
</tr>

3
Mükemmel çalışıyor! (Tablo genişliği% 100 olan ve başka hiçbir sütunun genişliği olmayan durumum. Bunu bir sütuna uyguladım). IE7 /
8/9

vay, bunun html tablolarıyla mümkün olduğunu hiç düşünmemiştim. Teşekkür ederim!
kulpae

14
'.Last' sınıfını manuel olarak eklemek yerine, seçici olarak 'td: last-child' yapabilirsiniz.
T.Ho

3
Bu çözüm table-layout: fixed, jsfiddle.net/hCkch/1
David Sherret

1
Harika, dostum! "Açıklama" veya "Notlar" gibi büyük "metin" sütunlarıyla birden çok satıra sıkıştırılmamalarını sağlamak için belirli sütunlara "öncelik vermek" için gerçekten akıllıca bir numara. Güzel bir! Daha da kullanışlı hale getirmek için, sınıfı çağırırdım .fitwidthve sonra sınıfı birden çok satıra gitmesini istemediğiniz sütunlara koyardım. Bunu eklemek için cevabınızı düzenleyeceğim.
Joshua Pinter

25

Son satırın kaydırılmadığından ve böylece istediğiniz şekilde boyutlandırılmadığından emin olmak istiyorsanız, bir göz atın.

td {
 white-space: nowrap;
}

1

Son tablo hücreleri hariç tümünün genişliğini belirtebilir ve tabloya bir tablo düzeni ekleyebilirsiniz: sabit ve bir genişlik.

Sen ayarlayabilirsin

table tr ul.actions {margin: 0; white-space:nowrap;}

(veya Sander'ın önerdiği gibi bunu son tank avcısı için ayarlayın).

Bu, satır içi-LI'leri kırılmamaya zorlar. Ne yazık ki bu, içeren UL'de (ve bu ana TD'de) yeni bir genişlik hesaplamasına yol açmaz ve bu nedenle son TD'yi otomatik olarak boyutlandırmaz.

Bunun anlamı: eğer bir satır içi elemanın belirli bir genişliği yoksa, bir TD'nin genişliği her zaman önce otomatik olarak hesaplanır (belirtilmemişse). Daha sonra , bu hesaplanan genişliğe sahip satır içi içeriği oluşturulur ve white-space-özelliği uygulanır, içeriği hesaplanan sınırların ötesine uzatılır.

Dolayısıyla , son tank avcısında belirli bir genişliğe sahip bir eleman olmadan bunun mümkün olmadığını tahmin ediyorum .


iyi değil. Kaçmaya çalıştığım şey de bu. sütun genişliklerini belirtmek istemiyorum. sütunlar otomatik boyutlandırılmalı ve son sütun içindeki içeriğe göre boyutlandırılmalıdır.
ShaneKm

Kullandığınız sınıflar için CSS tanımlarını sağlayabilir misiniz?
acme

-2

otomatik ve minimum veya maksimum genişliği şu şekilde kullanın:

td {
max-width:50px;
width:auto;
min-width:10px;
}

1
Bu gerektiği gibi çalışmıyor, daha küçük içeriğe sahip olduğumda hala maksimum genişliği kullanıyor.
marcovtwout

min-genişlik tablo hücresine uygulanmaz.
Nick
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.