Tüm sütunları Colspan


385

Bir tdetiketin tüm sütunlara yayılması gerektiğini nasıl belirleyebilirim (tablodaki sütunların tam miktarı HTML'nin ne zaman oluşturulduğunu belirlemek için değişken / zor olduğunda)? w3schools kullanabileceğinizden bahsediyor colspan="0", ancak tam olarak hangi tarayıcıların bu değeri desteklediğini söylemiyor (IE 6 destek için listemizde).

Görünüşe colspangöre, teorik sütun sayısından daha büyük bir değere ayarlamanız işe yarayacaktır, ancak table-layoutayarladıysanız çalışmaz fixed. Çok sayıda otomatik düzen kullanmanın dezavantajları var colspanmı? Bunu yapmanın daha doğru bir yolu var mı?


Kabul edilen cevap, bunun nasıl YAPILMAMASI ile ilgilidir ve ciddi performans / tutarlılığın olumsuz yanları olduğu görülmektedir. Sanırım cevap şudur: hardcode sütun sayısı. Geçerli bir alternatif göremiyorum.
Andrew Koster

Yanıtlar:


268

IE 7.0, Firefox 3.0 ve Chrome 1.0'ım var

Colspan = bir TD "0" özelliği olan kapsayan DEĞİL tüm TD'leri genelinde yukarıdaki tarayıcılardan herhangi .

Belki uygun biçimlendirme uygulaması olarak tavsiye edilmez, ancak mümkün olan toplamdan daha yüksek bir colspan değeri verirseniz . diğer satırlardaki sütunlardan sonra TD tüm sütunlara yayılır.

Tablo düzeni CSS özelliği sabit olarak ayarlandığında bu çalışmaz.

Bir kez daha, bu mükemmel bir çözüm değil, ancak masa düzeni CSS özelliği otomatik olduğunda yukarıda belirtilen 3 tarayıcı sürümlerinde çalışıyor gibi görünüyor . Bu yardımcı olur umarım.


Html Firefox 3'ün başlangıcında katı bir doküman türü belirtirseniz, html 4.01 teknik özelliklerinin gerektirdiği şekilde colspan'ı oluşturun.
Eineki

253
Ben colspan="42"tüm yelpazeyi yaymak hayranıyım . Açıkçası bu, 42'den fazla sütun için bir sorundur, ancak onayladığım birkaç sihirli sayıdan biridir.
Martin Carney

40
Kesinlikle colspan = <tam doğru sayı> koymanızı tavsiye ederim. Firefox'ta beni anlaması için bütün gün süren kocaman bir böcek gördüm. Rastgele büyük bir colspan, FF'yi sınır-daraltma ile geniş bir tabloda boğacaktır: daralt. 800 satır ve 8 sütunlu masamın oluşturulması 5 saniye sürüyordu. Doğru colspan ile makul bir 1 saniyeye geri döndü. bugzilla.mozilla.org/show_bug.cgi?id=675417
InfinitiesLoop

2
Bu yöntemi kullanmamanızı tavsiye ederim. OSX'te Chrome'dan çok garip bir sonuç aldım (sütunlar birbiriyle çakışıyor).
Tzach

Chrome'da, "büyük boy" TD'yi içeren TR öğesine bir kenarlık vermeye çalışırsanız, sağ kenarlık görünmez.
Massimo

272

Sadece şunu kullanın:

colspan="100%"

Firefox 3.6, IE 7 ve Opera 11 üzerinde çalışıyor! (ve sanırım başkaları üzerinde deneyemedim)


Uyarı: aşağıdaki yorumlarda belirtildiği gibi bu aslında aynıdır colspan="100". Bu nedenle, bu çözüm css table-layout: fixedveya 100'den fazla sütun içeren tablolar için kırılacaktır .


16
IE6 - IE8, Chrome [PC ve Mac'te], Firefox 4.0 [PC ve Mac], Safari 5 [PC ve Mac]
hndcrftd

11
Bu hala nasıl bu kadar belirsiz? Bu her sokak köşesinde bağırılmalıdır !!!
Uzun zamandır

30
Chrome ve firefox'ta, colspan = "% 3", colspan = "3" ile aynı şekilde ele alınır.
zpmorgan

98
@zpmorgan ve @Sprog, haklısın! colspan="100%"anlamına gelir colspan="100".
NemoStein

37
Lol, nihayet bu sorunun tutarlı bir çapraz tarayıcı çözümünü görmekten çok mutlu oldum, sadece yorumlarla bunun gerçekten beklendiği gibi aldatıcı bir çalışma olmadığını bulmak için :( Bence daha fazla oy hak etmiyor kabul edilen cevaptan daha = =
Francisco

64

Tablonuzun başlığı olarak tüm sütunlara yayılan bir 'başlık' hücresi oluşturmak istiyorsanız, başlık etiketini ( http://www.w3schools.com/tags/tag_caption.asp / https: // kullanmak isteyebilirsiniz. developer.mozilla.org/en-US/docs/Web/HTML/Element/caption) Bu unsur bu amaç içindir. Bir div gibi davranır, ancak tablonun üst öğesinin tüm genişliğini kapsamaz (bir div aynı konumda yapacağı gibi (bunu evde denemeyin!)), Bunun yerine tablo. Sınırlar ve benzeri bazı tarayıcılar ile ilgili sorunlar var (benim için kabul edilebilirdi). Her neyse, tüm sütunları kapsayan bir hücre olarak görünmesini sağlayabilirsiniz. İçinde div öğeleri ekleyerek satırlar oluşturabilirsiniz. Tr-elements arasına yerleştirip yerleştiremeyeceğinizden emin değilim, ama bu bir hack olurdu sanırım (bu yüzden önerilmez). Başka bir seçenek yüzen div ile uğraşmak olurdu, ama bu yuck!

Yapmak

<table>
    <caption style="gimme some style!"><!-- Title of table --></caption>
    <thead><!-- ... --></thead>
    <tbody><!-- ... --></tbody>
</table>

Yapma

<div>
    <div style="float: left;/* extra styling /*"><!-- Title of table --></div>
    <table>
        <thead><!-- ... --></thead>
        <tbody><!-- ... --></tbody>
    </table>
    <div style="clear: both"></div>
</div>

1
Tam olarak ne bir datatable altındaki sayfalama denetimleri koymak için aradığını. Mükemmel çalışıyor. Çok teşekkür ederim.
Comencau

5
Bir tablonun ortasındaki tüm sütunları yaymak istiyorsanız bu çalışmaz. İlgili satır grupları arasında ayırıcı ile grup olarak. (Krom)
David Hempy

17

Kısmi bir cevap olarak, burada colspan="0"soruda belirtilen birkaç nokta var .

tl; dr sürümü:

colspan="0"hiçbir tarayıcıda çalışmaz. W3Schools yanlış (her zamanki gibi). HTML 4, colspan="0"bir sütunun tüm tabloyu kapsamasına neden olması gerektiğini söyledi , ancak kimse bunu uygulamadı ve HTML 4'ten sonra spesifikasyondan kaldırıldı.

Biraz daha ayrıntı ve kanıt:

  • Tüm büyük tarayıcılar buna eşit olarak davranır colspan="1".

    İşte bunu gösteren bir demo; istediğiniz herhangi bir tarayıcıda deneyin.

    td {
      border: 1px solid black;
    }
    <table>
      <tr>
        <td>ay</td>
        <td>bee</td>
        <td>see</td>
      </tr>
      <tr>
        <td colspan="0">colspan="0"</td>
      </tr>
      <tr>
        <td colspan="1">colspan="1"</td>
      </tr>
      <tr>
        <td colspan="3">colspan="3"</td>
      </tr>
      <tr>
        <td colspan="1000">colspan="1000"</td>
      </tr>
    </table>

  • (Bu soru sorulduğunda artık eski ve modası geçmiş, ancak mevcut geri) HTML 4 Spec vermedi gerçekten söylemek o colspan="0"tüm sütunu kapsayan olarak ele alınmalıdır:

    Sıfır değeri ("0"), hücrenin, geçerli sütundan tüm sütunları hücrenin tanımlandığı sütun grubunun (COLGROUP) son sütununa yaydığı anlamına gelir.

    Ancak, çoğu tarayıcı bunu hiç uygulamadı.

  • HTML 5.0 (2012'de bir aday önerisi yaptı), WhatWG HTML yaşam standardı (bugün baskın standart) ve en son W3 HTML 5 spesifikasyonlarının tümü yukarıdaki HTML 4'ten alıntılanan ifadeleri içermiyor ve oybirliğiyle colspan0 üç özellikte de görünen bu ifadeyle izin verilmez:

    tdVe thunsurlar olabilir colspan, değeri sıfırdan geçerli bir negatif olmayan tamsayı olmalıdır content özelliğini belirtilen ...

    Kaynaklar:

  • W3Schools sayfasındaki soru ile bağlantılı aşağıdaki iddialar - en azından bugünlerde - tamamen yanlış:

    Sadece Firefox özel bir anlamı olan colspan = "0" 'ı destekler ... [It] tarayıcıya hücreyi sütun grubunun son sütununa (colgroup) yaymasını söyler

    ve

    HTML 4.01 ve HTML5 Arasındaki Farklar

    YOK.

    W3Schools'un web geliştiricileri tarafından sık sık yapılan yanlışlıklar nedeniyle genellikle hor görüldüğünün farkında değilseniz, bunun nedeninde bir ders olduğunu düşünün.


4
Haha Kimse bunları uygulamak için etrafta olduğunda API özelliklerinin tamamen nasıl kaldırıldığını seviyorum. İnanılmaz bir süreç.
Andrew Koster

14

IE 6 için, tablonuzdaki sütun sayısına colspan eşittir. Eğer 5 sütun varsa, o zaman isteyeceksiniz: colspan="5".

Nedeni IE colspans'leri farklı şekilde ele alması , HTML 3.2 spesifikasyonunu kullanmasıdır:

IE 3.2 tanımı, bu ayarlar HTML uygulayan colspan=0olarak colspan=1.

Hata iyi belgelenmiştir .


1
Sütun miktarı değişken olabilir, sorumu bu açıklamayı içerecek şekilde güncelleyeceğim.
Bob

Üst paragraftaki tavsiye mantıklı görünse de, buradaki ayrıntıların çoğunun tam olarak doğru olmadığını düşünüyorum. HTML 3.2 Spec söylüyor colspanler olmalıdır pozitif yapar tamsayılar, colspan=0yasadışı; hiçbir yerde açıkça colspan=0ele alınması gerektiği gibi dikte etmez colspan=1(her ne kadar aslında IE 6 ne yaptığından eminim). Ayrıca, teklif (artık?) Bağlantı verdiğiniz forum sayfasında hiçbir yerde değil ve Google arama sonuçlarının çoğu (şimdi?) Tamamen farklı IE 6 colspan ile ilgili hatalar hakkında.
Mark Amery

11

JQuery kullanıyorsanız (veya eklemeyi umursamıyorsanız), bu işi bu hack'lerin herhangi birinden daha iyi yapar.

function getMaxColCount($table) {
    var maxCol = 0;

    $table.find('tr').each(function(i,o) {
        var colCount = 0;
        $(o).find('td:not(.maxcols),th:not(.maxcols)').each(function(i,oo) {
            var cc = Number($(oo).attr('colspan'));
            if (cc) {
                colCount += cc;
            } else {
                colCount += 1;
            }
        });
        if(colCount > maxCol) { maxCol = colCount };
    });

    return maxCol;

}

Uygulamayı kolaylaştırmak için, "maxCol" gibi bir sınıfla ayarlanması gereken herhangi bir td / th süsleyin, sonra aşağıdakileri yapabilirim:

$('td.maxcols, th.maxcols').each(function(i,o) {
    $t = $($(o).parents('table')[0]); $(o).attr('colspan',  getMaxColCount($t));
});

Bunun işe yaramayacağı bir uygulama bulursanız, yanıtı çarpmayın, yorumlarda açıklayın ve kapsam dahilinde olup olmadığını güncelleyeceğim.


1
Bir vanilya JS sürümü olsaydı harika olurdu
jpaugh

$ (Selector) desteği olmayan veya sadece kullanmak istemeyen yaygın bir kullanım durumunuz var mı?
rainabba

1
Ne. JQuery'nin burada herhangi bir fayda sağlayıp sağlamadığını merak ediyorum; oldukça ağır bir önkoşuldur ve burada çok az kullanılmış gibi görünüyor.
jpaugh

Yeterince adil. JQuery ve Angular arasında, bu araçlara sahip olmamam nadirdir, bu yüzden onları varsayılan olarak kullanıyorum. Şimdilik vanilya versiyonunu bulmak için başka birine bırakacağım.
rainabba

1
JQuery biraz modası geçmiş olduğundan bir es6 sürümü / yanıtı ekledim (bu yanıtı tamamen farklı bir kodla güncellemek istemedim).
Sjeiti

5

Başka bir çalışan ama çirkin çözüm: colspan="100"burada 100, ihtiyacınız olan toplam sütunlardan daha büyük bir değerdir colspan.

W3C'ye göre, colspan="0"seçenek sadece COLGROUPetiketi ile geçerlidir .


colspan = "100" (örn. sınırın ötesinde) bazı durumlarda çok garip bir tablo oluşturmaya neden olabilir (bazı test senaryolarını bulup URL'leri yayınlamaya çalışacağım)
scunliffe

-1 çünkü nihai paragraftaki iddiayı belirleyebildiğim kadarıyla yanlıştır. HTML 4, <td>s'nin sahip olmasına izin verir colspan="0"(bkz. W3.org/TR/REC-html40/struct/tables.html#adef-colspan ), HTML 5.0 ise span="0"bir izin vermez colgroup(bkz. W3.org/TR/html50/tabular- data.html # attr-colgroup-span "bir span content attribute ['s] değerinin sıfırdan büyük, geçerli, negatif olmayan bir tam sayı olması gerektiğini belirtir " ).
Mark Amery

2

Aşağıda (benzer bir özlü ES6 çözümdür Rainbabba cevabı ancak jQuery olmadan).

Array.from(document.querySelectorAll('[data-colspan-max]')).forEach(td => {
    let table = td;
    while (table && table.nodeName !== 'TABLE') table = table.parentNode;
    td.colSpan = Array.from(table.querySelector('tr').children).reduce((acc, child) => acc + child.colSpan, 0);
});
html {
  font-family: Verdana;
}
tr > * {
  padding: 1rem;
  box-shadow: 0 0 8px gray inset;
}
<table>
<thead>
  <tr>
    <th>Header 1</th>
    <th>Header 2</th>
    <th>Header 3</th>
    <th>Header 4</th>
    <th>Header 5</th>
    <th>Header 6</th>
  </tr>
</thead>
<tbod><tr>
  <td data-colspan-max>td will be set to full width</td>
</tr></tbod>
</table>


-1

Sadece deneyimimi eklemek ve buna cevap vermek istiyorum.
Not: Sahip olduğunuz önceden tanımlanmış zaman çalışır tableve trbirlikte th(AJAX yoluyla örneğin) sıralar halinde yükleme s, ama vardır dinamik.

Bu durumda th, ilk başlık satırınızda bulunanların sayısını sayabilir ve bunu tüm sütunu yaymak için kullanabilirsiniz.

Herhangi bir sonuç bulunamadığında bir mesajı iletmek istediğinizde bu gerekli olabilir.

tableGiriş tablonuz nerede jQuery böyle bir şey :

var trs = $(table).find("tr");
var numberColumns = 999;
if (trs.length === 1) {
    //Assume having one row means that there is a header
    var headerColumns = $(trs).find("th").length;
    if (headerColumns > 0) {
        numberColumns = headerColumns;
    }
}

Bundan önce yayınlanan JavaScript çözümü gibi , bu iyi bir genelleme değildir; ths sayısı mutlaka sütun sayısı değildir, çünkü bazılarında bir colspanküme olabilir ve bu nedenle herkes için yazıldığı gibi çalışmaz.
Mark Amery

-2

Belki düz düşünürüm ama biraz şaşkınım, tablonuzun sütun numarasını bilmiyor musunuz?

Bu arada IE6, tanımlanmış bir colgroup olsun veya olmasın colspan = "0" değerini kabul etmez. Ayrıca sütun grupları oluşturmak için thead ve th kullanmaya çalıştım ama tarayıcı form colspan = "0" tanımıyor.

Windows ve linux üzerinde Firefox 3.0 ile denedim ve sadece katı bir doktrin ile çalışıyor.

Bir testi birkaç bowser'da şu adresten kontrol edebilirsiniz:

http://browsershots.org/http://hsivonen.iki.fi/test/wa10/tables/colspan-0.html

Test sayfasını burada buldum http://hsivonen.iki.fi/test/wa10/tables/colspan-0.html

Düzenleme: Lütfen bağlantıyı kopyalayıp yapıştırın, biçimlendirme bağlantıdaki çift protokol parçalarını kabul etmeyecektir (veya doğru şekilde biçimlendirmek için çok akıllı değilim).


İlk kısmı kabul ediyorum: satırda kaç tane hücreniz olacağını kesin olarak anlayabilirsiniz? Başka nasıl yaratırsınız?
nickf

13
Herhalde, AJAX dinamik olarak oluşturulmuş bir tabloya sahip bir uygulamam var ve sütun sayısı geri aramadan geri aramaya değişebilir. Ayrıca, geliştirirken sütun sayısını "bilebilirsiniz", ancak bu değişebilir ve bunlardan birini kaçıracağınızı bilirsiniz
Mad Halfling

11
Ayrıca, sütunları daha sonra eklerseniz, colspan'ı değiştirmeyi unutabilirsiniz, bunun her zaman maks.
Adam

-2

Şartnameye göre colspan="0"bir tabla genişliği td ile sonuçlanmalıdır.

Ancak, bu yalnızca tablonuzun bir genişliği varsa doğrudur! Bir tablo, farklı genişliklerde satırlar içerebilir. Bu nedenle, bir colgroup tanımlarsanız , oluşturucunun tablonun genişliğini bildiği tek durumdur ! Aksi takdirde, colspan = "0" sonucu belirlenemez ...

http://www.w3.org/TR/REC-html40/struct/tables.html#adef-colspan

Eski tarayıcılarda test edemiyorum, ancak bu 4.0'dan beri belirtimin bir parçası ...


"Bu 4.0 beri şartname bir parçasıdır" - Hayır, tam olarak değil. O was şartname parçası, ancak bu HTML 5 ile çıkartıldı ve bir colspan0 yasadışı yapıldı. Hem w3.org/TR/html50/… (HTML 5.0 spesifikasyonu) hem de html.spec.whatwg.org/multipage/… (en son WhatWG HTML Living Standard) durumu colspansıfırdan büyük olmalıdır. Ve buradaki diğer yanıtlarda belirtildiği gibi, tarayıcılar aslında alıntıladığınız eski HTML 4 davranışını asla uygulamamıştır.
Mark Amery

-6

"colspan" yerine "colSpan" kullanmayı deneyin. IE camelBack sürümünü seviyor ...


4
yalnızca IE kullanılırken ve JavaScript ve .setAttribute ('colSpan', int) aracılığıyla ayar yapılırken; Bu IE8'de düzeltildi (sadece stds modunda)
scunliffe

1
+1 - Bunu bilmiyordum ve çok yardımcı oldu! ColSpan'ın IE6'da bile çalıştığını düşünmüyordum.
mwilcox
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.