Hücrelerindeki metin miktarına bakılmaksızın tablo sütun genişliği sabitini ayarla?


535

Tablomda bir sütundaki ilk hücrenin genişliğini ayarlayacağım 100px.
Ancak, bu sütundaki hücrenin birindeki metin çok uzun olduğunda, sütunun genişliği daha fazla olur 100px. Bu genişletmeyi nasıl devre dışı bırakabilirim?


5
stackoverflow.com/questions/1258416/word-wrap-in-a-html-table sizi doğru yönde göstermenize yardımcı olabilir
justinl

2
Benim durumumda genişleme olmadı, ama tam tersi: açık genişlik bildirimime rağmen istenmeyen genişlik daralması. Saçma!
Csaba Toth

Bunun tek doğru çözümü, içinde cols bulunan colgroup kullanmak ve cols genişliğini ayarlamaktır.
MightyPork

table-layout:fixed;çözüm
emfi

Yanıtlar:


607

Onunla biraz oynadım çünkü çözmekte güçlük çektim.

Sen (ya hücre genişliğini ayarlamak gerekir thya tdben hem set çalıştı) VE set table-layoutiçin fixed. Nedense, hücre genişliği sadece tablo genişliği de ayarlanmışsa sabit kalır gibi görünüyor (bence bu aptalca ama whatev).

Ayrıca, fazladan metnin tablodan çıkmasını önlemek için overflowözelliği ayarlamak yararlıdır hidden.

CSS için tüm sınır ve boyutlandırma işlemlerini de bıraktığınızdan emin olmalısınız.

Tamam işte ne var:

table {
  border: 1px solid black;
  table-layout: fixed;
  width: 200px;
}

th,
td {
  border: 1px solid black;
  width: 100px;
  overflow: hidden;
}
<table>
  <tr>
    <th>header 1</th>
    <th>header 234567895678657</th>
  </tr>
  <tr>
    <td>data asdfasdfasdfasdfasdf</td>
    <td>data 2</td>
  </tr>
</table>

İşte JSFiddle'da

Bu adamın benzer bir sorunu vardı: Tablo hücre genişlikleri - genişlik sabitleme, uzun kelimeleri sarma / kısaltma


77
Bunu fark etmek önemlidir: "Daha sonra tarayıcı, tablonun ilk satırındaki hücrelerin genişliğine göre sütun genişliklerini ayarlayacaktır", stackoverflow.com/questions/570154/…
daniloquio

12
Tabla genişliği sabit olmadığında çalışır. jsfiddle.net/lavinski/CGCFW/3 Kalan alanı kaplamak için dinamik bir sıraya ihtiyacınız var.
Daniel Little

2
@DanielLittle alternatif olarak tablo genişliğini 1 piksel olarak ayarlayabilirsiniz; ile overflow: visibledinamik boyutta tablolar için, sürece hücrelerin büyüklüğü sabit ve taşma görünür gibi önemi yok tablonun kendisi boyutu gerçek hücrelerden daha büyük veya daha küçük ise.
Mahn

TD'nizde "width =% 30;" varsa ne yapabilirsiniz?
71GA

Lütfen taşma ekleyin: hidden @ RokoC.Buljan
Alex Grande

177

Bkz. Http://www.html5-tutorials.org/tables/changing-column-width/

Tablo etiketinden sonra col öğesini kullanın. kapanış etiketine ihtiyacınız yok.

Örneğin, üç sütununuz varsa:

<table>
  <colgroup>
    <col style="width:40%">
    <col style="width:30%">
    <col style="width:30%">
  </colgroup>  
  <tbody>
    ...
  </tbody>
</table>

25
Bu! Bu HTML5 cevabı ve aptal çemberler atlamak zorunda kalmadan korkutucu çalışır. Ayrıca, genişliklerinizi CSS'de tutmak ve HTML'nizi stil bilgileriyle kirletmemek için <col class = "someClassName"> kullanabilirsiniz.
John Munsch

2
@Sam CSS, satır içi stil veya yanlış doctype vb gibi bu geçersiz kılma başka bir sorun vardı olabilir.
Sameer Alibhai

Bunun 'HTML5 yolu' olup olmadığından emin değilim. Html5 içindeki colgroup / col sadece açıklıkları işaretlemek için kullanılır gibi görünüyor. MDN, col etiketlerinde (global niteliklerden devralınması dışında) style özelliğinin kullanımından bahsetmez ve yalnızca bgcolor der ki: "... CSS özelliğini kullanın ... ilgili <td> öğelerinde." developer.mozilla.org/tr-TR/docs/Web/HTML/Element/col .
Stephen Panzer

5
Masa stili ile benim için çalıştı table-layout: fixed; width: 100%;. Teşekkürler!
nrodic

Sonu / kesin değil, ama w3schools da bunun kullanımından bahsetmiyor col. Bir <td>(veya a <th>) için uygulanan css kullanımını önerir - w3schools.com/tags/att_td_width.asp
Don Cheadle

128

Sadece <div>içine etiket ekleyin <td>veya <th>içindeki genişliği tanımlayın <div>. Bu sana yardım edecek. Başka hiçbir şey çalışmıyor.

Örneğin.

<td><div style="width: 50px" >...............</div></td>

2
Bu çözümü, aynı piksel genişliği için yalnızca güvenli tarafta olması için minimum-genişlik / maksimum genişlik belirterek birleştirdim. Sonunda çalışıyor. Neden tüm bu ekstra mermileri çalıştırmak zorundayım bilmiyorum sadece gerçekten sabit, saçma olsun ...
Csaba Toth

1
Bu daha iyi aynı css ayarı daha ne kadar emin değilim style="width: 50px"üzerinde<td>
Don Cheadle

2
@mmcrae Daha iyi çünkü çalışıyor, genişlik açık <td>değil.
Madbreaks

66

Diğer sütunların yeniden boyutlandırılması gerekirken bir veya daha fazla sabit genişlikli sütuna ihtiyacınız varsa, her ikisini de min-widthve max-widthaynı değere ayarlamayı deneyin .


Bu, genişliği açıkça ayarlarken benim için çalıştı table-layout: fixed;.
Jordan Mack

Vay be! Diğer çözümlerin hiçbiri işe yaramadı ya da çok tıknaz değildi! Bu mükemmel çalıştı! Hiçbir div gerekli!
NeilRoy

29

Bunu ilgili CSS içine yazmanız gerekir

table-layout:fixed;

div etiketleri ile daha iyi sorround tablo sonra div kullanım taşma: auto
vinoth kumar

Sütun grupları ile birleştirdiğimde benim için çalıştı: <table style = "table-layout: fixed"> <colgroup> <col style = "width: 50%"> <col style = "width: 50%"> </ COLGROUP> <tbody> ... </ tbody> </ table>.
Russ Bateman

Bu Chris Coyer makalesi bunu iyi açıklıyor: css-tricks.com/fixing-tables-long-strings
cssyphus

24

Yaptığım şey:

  1. TD genişliğini ayarlayın:

    <td width="200" height="50"><!--blaBlaBla Contents here--></td>
  2. Td genişliğini CSS ile ayarlayın:

    <td style="width:200px; height:50px;">
  3. CSS ile genişliği tekrar maks ve min olarak ayarlayın:

    <td style="max-width:200px; min-width:200px; max-height:50px; min-height:50px; width:200px; height:50px;">

Biraz tekrarlayıcı geliyor ama bana istenen sonucu veriyor. Bunu başarmak için CSS değerlerini stil sayfanızdaki bir sınıfa koymanız gerekebilir:

.td_size {    
  width:200px; 
  height:50px;
  max-width:200px;
  min-width:200px; 
  max-height:50px; 
  min-height:50px;
  **overflow:hidden;** /*(Optional)This might be useful for some overflow contents*/   
}

sonra:

<td class="td_size">

Sınıf niteliğini <td>istediğiniz herhangi bir yere yerleştirin .


Bu, her durumda ekstra, potansiyel olarak istenmeyen kısıtlamalar uygulamadan işe yarayan tek çözümdü.
Sam

3

Bunu kullandım

.app_downloads_table tr td:first-child {
    width: 75%;
}

.app_downloads_table tr td:last-child {
    text-align: center;
}

Ntch-child (2) (veya 3, 4 vb.) '

tablo td nth-child (n + 1) {...} ilk sütun
Ed Randall

2

Sabit bir düzen istemiyorsanız, sütunun uygun şekilde boyutlandırılması için bir sınıf belirtin.

CSS:

.special_column { width: 120px; }

HTML:

<td class="special_column">...</td>

2

Ayrıca, genişlik: otomatik ile son "dolgu hücresi" koymak için yardımcı olur . Bu, kalan alanı kaplayacak ve belirtilen tüm diğer boyutları bırakacaktır.


2

Sabit genişlikten küçük olduğunda kabul edilen cevabın küçük ekranlar için yanıt vermesini sağlayın.

HTML:

<table>
  <tr>
    <th>header 1</th>
    <th>header 234567895678657</th>
  </tr>
  <tr>
    <td>data asdfasdfasdfasdfasdf</td>
    <td>data 2</td>
  </tr>
</table>

CSS

table{
    border: 1px solid black;
    table-layout: fixed;
    max-width: 600px;
    width: 100%;
}

th, td {
    border: 1px solid black;
    overflow: hidden;
    max-width: 300px;
    width: 100%;
}

JS Fiddle

https://jsfiddle.net/w9s3ebzt/



1

KAsun doğru fikre sahip. İşte doğru kod ...

<style type="text/css">
  th.first-col > div, 
  td.first-col > div {
    overflow:hidden;
    white-space:nowrap;
    width:100px
  }
</style>

<table>
  <thead><tr><th class="first-col"><div>really long header</div></th></tr></thead>
  <tbody><tr><td class="first-col"><div>really long text</div></td></tr></tbody>
</table>

1

Cevabım gereğince burada , bir kullanmak da mümkündür masa başını (boş olabilir) ve her tablo kafa hücre için nispi genişlikleri geçerlidir. Tablo gövdesindeki tüm hücrelerin genişlikleri sütun başlıklarının genişliğine uyacaktır. Misal:

HTML

<table>
  <thead>
    <tr>
      <th width="5%"></th>
      <th width="70%"></th>
      <th width="15%"></th>
      <th width="10%"></th>
    </tr>
  </thead>
  <tbody>
    <tr>
      <td>1</td>
      <td>Some text...</td>
      <td>May 2018</td>
      <td>Edit</td>
    </tr>
    <tr>
      <td>2</td>
      <td>Another text...</td>
      <td>April 2018</td>
      <td>Edit</td>
    </tr>
  </tbody>
</table>

CSS

table {
  width: 600px;
  border-collapse: collapse;
}

td {
  border: 1px solid #999999;
}

Sonucu göster

Alternatif olarak, colgroupHyathin'in cevabında önerildiği gibi kullanın .


0

Ben mevcut metin ne olursa olsun, asgari genişlik ayarlamak istediğiniz hücrede bir :: after öğesi kullanın:

.cell::after {
    content: "";
    width: 20px;
    display: block;
}

Tablo üst öğesinde genişlik ayarlamam veya tablo düzeni kullanmam gerekmiyor.


-4

KAsun'un cevabının px yerine vw kullanarak daha iyi çalıştığını gördüm :

<td><div style="width: 10vw" >...............</div></td>

Sütun genişliğini ayarlamak için ihtiyacım olan tek stil buydu


-5

Ayarlamanız gerekmez "fixed"- overflow:hiddensütun genişliği ayarlandığından tek yapmanız gereken ayar yapmaktır .


3
Hangi hücre sınırlarının arkasındaki içeriği gizleyecek, iyi bir fikir değil.
mystrdat
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.