Sabit Tabla Hücre Genişliği


175

Bir çok insan hala kontrolleri, verileri vb. Düzenlemek için tabloları kullanıyor - bunun bir örneği popüler jqGrid. Ancak, kulağa gelemediğim bir sihir oluyor (yüksek sesle ağlamak için tabloları, ne kadar büyü olabilir?)

Bir tablonun sütun genişliğini ayarlamak ve jqGrid'in yaptığı gibi itaat etmek nasıl mümkün olabilir? Bunu çoğaltmaya çalışırsam, her <td style='width: 20px'>birini ayarlasam bile , bu hücrelerden birinin içeriği 20 pikselden büyük olur olmaz, hücre genişler!

Herhangi bir fikir veya öneriniz var mı?

Yanıtlar:


249

<col>Tüm satırlar için tabloyu yönetme etiketini kullanmayı deneyebilirsiniz, ancak table-layout:fixedstili <table>veya css sınıfındaki tabloları ayarlamanız overflowve hücreler için stili ayarlamanız gerekir.

https://developer.mozilla.org/en-US/docs/Web/HTML/Element/col

<table class="fixed">
    <col width="20px" />
    <col width="30px" />
    <col width="40px" />
    <tr>
        <td>text</td>
        <td>text</td>
        <td>text</td>
    </tr>
</table>

ve bu sizin CSS'niz

table.fixed { table-layout:fixed; }
table.fixed td { overflow: hidden; }

15
col html5 ile çalışmaz, satır içi css veya css sınıfları yerine bireysel td genişliğini ayarlar
Pankaj Phartiyal

10
İstenen tablo için açıkça bir genişlik uygulamadığınız sürece kabul edilen cevap çalışmaz. İster birim ister yüzde kullanın, mükemmel çalışır. @ Totymedli'nin cevabı herhangi bir oy almadığından ve kullanıcıların bunu görmezden gelmesini istemediğim için bunu işaret edeceğimi düşündüm. Bununla birlikte, amaçladığınız şey olmadığı sürece kelime sonu önerisi gerekli değildir.
thebdawk05

Birden çok sütuna yayılan yalnızca 1 TD öğesine sahip satırlarınız olduğunda ne olur? Örnek kodunuzu kullanarak, <TD colspan="3">tek başına bir satırda olsaydı 90px olurdu?
sab669

Teşekkürler yardımcı oldu. Çakışan veriler için bunu ekleyin table.fixed td { word-wrap: break-word; }.
Parag Tyagi

Sözcük sonu önerisi gerekli değildir, ancak geri kalan SO kullanıcıları için yararlıdır ve sabit genişlik tablolarındaki taşan içeriğin çoğu senaryoda meydana gelmesi neredeyse kesin olduğundan, soru ile ilgilidir.
Amy Pellegrini

101

Şimdi HTML5 / CSS3'te sorun için daha iyi bir çözümümüz var. Bence bu tamamen CSS çözümü öneriliyor:

table.fixed {table-layout:fixed; width:90px;}/*Setting the table width is important!*/
table.fixed td {overflow:hidden;}/*Hide text outside the cell.*/
table.fixed td:nth-of-type(1) {width:20px;}/*Setting the width of column 1.*/
table.fixed td:nth-of-type(2) {width:30px;}/*Setting the width of column 2.*/
table.fixed td:nth-of-type(3) {width:40px;}/*Setting the width of column 3.*/
<table class="fixed">
    <tr>
        <td>Veryverylongtext</td>
        <td>Actuallythistextismuchlongeeeeeer</td>
        <td>We should use spaces tooooooooooooo</td>
    </tr>
</table>

Masanın avcının çözümündewidth bile ayarlanması gerekir . Aksi takdirde çalışmaz. Ayrıca bu yeni CSS3 özelliği vsync önerdi geçerli: . Bu, içinde boşluk olmayan sözcükleri birden çok satıra da böler. Sadece kodu şu şekilde değiştirin:
word-break:break-all;

table.fixed { table-layout:fixed; width:90px; word-break:break-all;}

Son sonuç

İşlenmiş tablo


A ile bir satır atarsanız colspan, bu çözüm kırılıyor gibi görünüyor. Bu çözümü colspan> 1 içeren bir tabloyla nasıl kullanacağınıza dair herhangi bir öneriniz var mı?
Eric K

@QuantumDynamix Bunu ilk satır, colspans içermeyen bir satır, yalnızca genişlikli tüm sütunlar olarak ekleyerek çözdüm. Daha sonra bu satırı 0 yükseklik, sınır: yok, görünürlük: gizli, dolgu: 0px vb. İle sakladım, sonra ikinci satır colspans'lerin olduğu yerde görmek istediğim ilk satır. Sabit genişlikli hücreler içeren ilk sıra, genişlikleri belirler.
AaronLS

@totymedli Tüm sütun genişliklerimin toplamını almak için masamı nasıl edinebilirim? Benim tablo dinamik olarak biraz oluşturulur ve bu yüzden önceden tablo genişliği hesaplamak olamaz, ancak bazı öğeleri uzatır çünkü% 100 kullanmak istemiyorum.
14:14, AaronLS

14
table td 
{
  table-layout:fixed;
  width:20px;
  overflow:hidden;
  word-wrap:break-word;
}

9
table-layoutTD öğesinde kullanabileceğinizden emin misiniz ?
Nick

@Nick - iyi çalışıyor. Hovewer ayrıca min-genişlik ve max-genişlik özelliği de eklemek zorunda (genişlikle aynı değer) ve daha sonra gerçekten sabit genişlik oldu.
Denis Khay

11

Bir uzun masa td hücresi vardı, bu tabloyu tarayıcının kenarlarına zorladı ve çirkin görünüyordu. Sadece bu sütunun sadece sabit boyutta olmasını ve belirtilen genişliğe ulaştığında kelimeleri kırmasını istedim. Bu benim için iyi çalıştı:

<td><div style='width: 150px;'>Text to break here</div></td>

Tablo, tr öğeleri için herhangi bir stil belirtmenize gerek yoktur. Ayrıca taşma da kullanabilirsiniz: gizli; diğer cevaplar tarafından önerildiği gibi fazla metnin kaybolmasına neden olur.


2
Veya gerektiğinde genişlik yerine maksimum genişlik kullanabilirsiniz. Bu, genişlik sınırınıza ulaşmadıkça metni kırmamanıza izin verecektir. Metniniz belirtilen genişlikten küçükse tablo hücresinde boş alan olmaz. <td> <div style = 'max-width: 150px;'> Buradan kırılacak metin </div> </td>
Tarık

1
table { 
    table-layout:fixed; width:200px;
}
table tr {
    height: 20px;
}

10x10


0

FULLSCREEN genişlik tablosu için:

  • tablo genişliği% 100 OLMALIDIR

  • N colunms gerekiyorsa, THs N + 1 OLMALIDIR

3 sütun için örnek:

table.fixed {
      table-layout: fixed;
      width: 100%;
    }
    table.fixed td {
      overflow: hidden;
    }
  <table class="fixed">
      <col width=20 />
      <col width=20 />
      <col width=20 />
    <tr>
      <th>1</th>
      <th>2</th>
      <th>3</th>
      <th>FREE</th>
    </tr>
    <tr>
      <td>text111111111</td>
      <td>text222222222</td>
      <td>text3333333</td>
    </tr>
  </table>


-2
table
{
  table-layout:fixed;
}
td,th
{
  width:20px; 
  word-wrap:break-word;
}

: ilk çocuk ...: n. çocuk (1) veya ...

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.