Mutlak CSS td genişliğini kullanma, konum


103

Lütfen bu JSFIDDLE'ye bakın

td.rhead { width: 300px; }

CSS genişliği neden çalışmıyor?

<table>
<thead>
<tr>
<td class="rhead">need 300px</td>
<td colspan="7">Week #0</td>
<td colspan="7">Week #1</td>
<!-- etc..-->
</tr>
<tr>
<td class="rhead"></td>
<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>
<td>S</td><td>M</td><td>T</td><td>W</td><td>T</td><td>F</td><td>S</td>
<!-- etc... -->
</tr>
<thead>
</table>

Ayrıca, konumun etkileri nelerdir: sabit, mutlak vb. Varsa td genişlikleri üzerinde var mı? Düzeltmeden daha çok bir sebep arıyorum. Nasıl çalıştığını anlamayı umuyorum.

td genişliği istendiği gibi 300 piksel değil


display: table-cellsaygı duymaz width(işe yaramayacağı şekilde display: inline). Ne sorduğunuzu anlamıyorumposition fixed|absolute
Explosion Pills

@ExplosionPills çünkü gerçek kodumda, tabloyu sabit olarak ayarladım. Tahmin edebileceğiniz gibi, sayfanın üst kısmında bir zaman çizelgesi oluşturmaya çalışıyorum. Bu yüzden, konum özniteliğinin genişlikleri etkilemesi durumunda söylüyorum.
Jake

Yanıtlar:


144

Bu duymak istediğiniz şey olmayabilir, ancak display: table-cellgenişliğe saygı göstermez ve tüm tablonun genişliğine bağlı olarak daraltılacaktır. display: blockTablo hücresinin içinde genişliğini belirttiğiniz bir öğeye sahip olarak bunu kolayca aşabilirsiniz.

<td><div style="width: 300px;">wide</div></td>

Hücrelerin konumlarının tümü tabloya göre statik olduğundan, <table>kendisinin position: fixedveya mutlak olması durumunda, bu pek bir fark yaratmamalıdır.

http://jsfiddle.net/ExplosionPIlls/Mkq8L/4/

DÜZENLEME: Kredi alamıyorum, ancak yorumların dediği gibi, min-widthbunun yerine widthmasa hücresi yerine sadece kullanabilirsiniz .


31
+1 - Bu geçici çözümü daha önce kullandım. , Garip min-widthüzerinde TD: Chrome ve FF iş gibi görünüyor jsfiddle.net/Mkq8L/7
Tim Medora

2
Aslında, her zaman olduğu gibi, soruyu gönderdikten sonra, bunun min-width: 300pxişe yaradığını keşfettim ! (@TimMedora birkaç saniye daha hızlıydınız!)
Jake

Bence en iyi yanıt, ekran: masa-hücre davranışından bahsetmektir. Teşekkürler!
Jake

Bu davranış bana mantıklı geliyor: Aynı sütundaki iki hücre için iki farklı genişlik ayarlarsanız ne olur? İle min-widtholsa sorun yoktur, büyük alır.
Ciro Santilli 郝海东 冠状 病 六四 事件 法轮功

3
Bu bir hack, tavsiye etmiyorum. Birleşik td genişliği, tablo genişliğini aşıyor. Sorun bu. Daha fazla HTML yapısı ekleyerek bunu düzeltmemelisiniz.
David

28

Kullanman daha iyi table-layout: fixed

Otomatik varsayılan değerdir ve büyük tablolarda, tarayıcı tüm boyutları sığdırmak için yinelediğinde istemci tarafında biraz gecikmeye neden olabilir.

Sabit çok daha iyidir ve sayfaya daha hızlı işlenir. Tablonun yapısı, tablonun toplam genişliğine ve sütunların her birinin genişliğine bağlıdır.

Burada orijinal örneğe uygulanır: JSFIDDLE , Kalan sütunların ezildiğini ve içerikleriyle örtüştüğünü fark edeceksiniz. Bunu biraz daha CSS ile düzeltebiliriz (tek yapmam gereken ilk TR'ye bir sınıf eklemektir):

    table {
        width: 100%;
        table-layout: fixed;
    }

    .header-row > td {
        width: 100px;
    }

    td.rhead {
        width: 300px
    }

Burada eylemde görülüyor : JSFIDDLE


11

Sağladığınız bağlantıda çalışmamasının nedeni, 300 piksellik bir sütun PLUS 52 sütununu her biri 7 sütunluk bir aralıkta görüntülemeye çalışmanızdır. Sütun sayısını küçültün ve işe yarıyor. Bu kadarını ekrana sığdıramazsınız.

Sütunları sığmaya zorlamak istiyorsanız, ayarı deneyin:

body {min-width:4150px;}

jsfiddle'ıma bakın: http://jsfiddle.net/Mkq8L/6/ @mike Henüz yorum yapamıyorum.


2
Tablo genişliği eşiğinin gövde genişliğiyle arttığını keşfetmek için +1.
Jake

8

Bunun nedeni, tablonun genişliğini belirtmemiş olmanız ve tüm td gruplarınızın taşmasıdır.

Örneğin bu , tabloya gereksinimlerinize uyacağını düşündüğüm 5000 piksellik bir genişlik verdim.

table{
    width:5000px;
}

Sağladığınız kodun aynısı, sadece tablo genişliğine ekledim.

Olanlara inanıyorum, çünkü TD'leriniz varsayılan masa genişliğini çok aşıyor. Gördüğünüz gibi, her tr'de td'lerinizden yaklaşık 45'ini çıkarırsanız (yani, jsfiddle değil, sorunuzda verdiğiniz kod) tam olarak iyi çalışıyor


2
Bir tablo genişliği eşiği olduğunu belirten +1. Sorun, bazen genel genişliği önceden bilmiyor olmamızdır. Varsayılan tablo genişliği nedir?
Jake

Aslında bilmiyorum. Tek bildiğim, eğer çok fazla sütununuz varsa, tablo ezilecek ve tüm alt düğüm genişliklerini işe yaramaz hale getirecektir. Bununla daha önce karşılaştım, ancak henüz varsayılan değeri bulamadım. Belki bunu bir soru olarak sormalıyım.
He Hui

Bu sorunu çözdüğüme inanıyorum stackoverflow.com/questions/14767459/…
He Hui

Bu, yüksek puan alan cevap yerine gerçek cevaptır. Genişlik, yalnızca içerik tüm tablo genişliğini aşmıyorsa ayarlanabilir.
David

5

Bunu deneyin.

<table>
<thead>
<tr>
<td width="300">need 300px</td>

1
VAOV! Teşekkür ederim ♥
ivahidmontazer

Lütfen bu kodun OP'ye neden / nasıl yardımcı olduğuna dair bazı açıklamalar ekleyin. Bu, gelecekteki izleyicilerin öğrenebileceği bir yanıt sağlamaya yardımcı olacaktır. Daha fazla bilgi için bu Meta sorusuna ve yanıtlarına bakın.
Heretic Maymun

1
Genişlik özniteliğinin HTML5'te kullanımdan kaldırıldığını unutmayın.
simhumileco

5

Kullanmaya çalışmak

table {
  table-layout: auto;
}

Eğer Bootstrap kullanırsanız, sınıf tablevardır table-layout: fixed;varsayılan olarak.


4

Tablonuzda tablo düzeni özelliğini ve "sabit" değeri kullanın.

table {
   table-layout: fixed;
   width: 300px; /* your desired width */
}

Tablonun tüm genişliğini ayarladıktan sonra, artık genişliği td'lerin% 'si olarak ayarlayabilirsiniz.

td:nth-child(1), td:nth-child(2) {
   width: 15%;  
}

Bu bağlantıdan daha fazla bilgi edinebilirsiniz: http://www.w3schools.com/cssref/pr_tab_table-layout.asp


3

Çılgın çözümüm.)

$(document).ready(function() {
    $("td").each(function(index) { 
    var htmlText = "<div style='width:300px;'>" + $(this).text() +"</div>";
    $(this).html(htmlText);
  });
});

2

Tablo genişliği örneğin% 100 ise, td'de% 20 gibi bir yüzde genişliği kullanmayı deneyin.


2

Div'deki ilk hücreden içeriği şu şekilde sarın:

HTML:

<td><div class="rhead">a little space</div></td>

CSS:

.rhead {
  width: 300px;
}

İşte bir jsfiddle .


1

Ayrıca kullanabilirsiniz:

.rhead {
    width:300px;
}

ancak bu sadece bazı tarayıcılarda olacaktır, eğer doğru hatırlıyorsam IE8 buna izin vermiyor. Her şeyden önce, width=""özelliği <td>kendi içine koymak daha güvenlidir .

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.