Tank Avcısı içindeki bir DIV kötü bir fikir midir?


143

Ben duydum gibi / a okumuştum görünüyor <div>bir iç <td>no-hayır oldu. Bu işe yaramaz, sadece ekran türlerine göre gerçekten uyumlu olmamaları hakkında bir şey. Yığımı destekleyecek hiçbir kanıt bulamıyorum, bu yüzden tamamen yanlış olabilirim.

Yanıtlar:


144

Bir divinstide a tdkullanmak, tabloları mizanpaj için kullanmanın diğer bir yolundan daha kötü değildir. (Bazı insanlar düzen için tabloları asla kullanmazlar ve ben de onlardan biri olurum.)

Eğer bir kullanırsanız divbir de tdsen ancak unsurlar büyüklükte nasıl tahmin etmek zor olabilir bir durumda olacaktır. Bir div için varsayılan, üst öğesinden genişliğini belirlemektir ve bir tablo hücresi için varsayılan, içeriğinin boyutuna bağlı olarak boyutunu belirlemektir.

A'nın nasıl divboyutlandırılacağına ilişkin kurallar standartlarda iyi tanımlanmıştır, ancak a'nın nasıl tdboyutlandırılacağına ilişkin kurallar iyi tanımlanmamıştır, bu nedenle farklı tarayıcılar biraz farklı algoritmalar kullanır.


Sanırım önsezim buradan geldi. Temizlediğiniz için teşekkürler.
jcollum

9
Sütunlarınız önceden belirlenmiş bir genişliğe sahipse, sorun olmamalıdır. Tablo düzenini ayarlamayı unutmayın: masaya sabitlenmiş, böylece tarayıcılar genişliklerinizi geçersiz kılmaz (potansiyel olarak soruna yol açar)
Jens Roland

6
Asla mizanpaj için masa kullandığını söylemedi.
texelate

@texelate table-layout:fixedCSS sandığınız gibi değil. Tarayıcıların tabloları oluştururken yalnızca ilk satırın boyutunu hesaplayarak yaptığı hesaplama miktarını azaltır.
SteveB

73

XHTML DTD'yi kontrol ettikten sonra, <TD> öğesinin başlık, liste ve ayrıca <DIV> öğesi gibi blok öğeleri içermesine izin verildiğini keşfettim. Bu nedenle, <TD> öğesinin içinde bir <DIV> öğesinin kullanılması XHTML standardını ihlal etmez. Diğer modern HTML varyasyonlarının <TD> öğesi için eşdeğer bir içerik modeline sahip olduğundan eminim.

İlgili DTD kuralları şunlardır:

<!ELEMENT td %Flow;>
<!-- %Flow; mixes block and inline and is used for list items etc. -->
<!ENTITY %Flow "(#PCDATA | %block; | form | %inline; | %misc;>
<!ENTITY %block "p | %heading; | div | %lists; | %blocktext; | fieldset | table">

1
Aradığım özel cevap bu. Nazikçe teşekkür ederim. Bu gece biraz daha iyi uyuyacağımı hayal ediyorum.
3Dom

PEC tarafından desteklenen tek cevap.
peterchaula

Lütfen DTD'de bunu açıkladığı yeri bizimle paylaşın. Okuması kolay bir belge değil. Teşekkürler!
redolent

1
@ redolent: Cevabımla ilgili DTD kurallarını ekledim.
Martin Liversage

XHTML olmayan HTML5 spesifikasyonları ne olacak?
ezmek

38

Hayır.

TD içine bir DIV yerleştirmeniz gerekirse, TD'yi doğru kullandığınızdan emin olun. Sekmeli veriler ve anlambilim ile ilgilenmiyorsanız, sonuçta TD'lerde DIV'leri umursamazsınız. Eğer - Bir sorun olsa var sanmıyorum var size, bunu yapmak için sen öyle giyin.

HTML Spesifikasyonuna Göre

A <div>, akış içeriği beklendiği yere yerleştirilebilir 1 , yani <td>içerik modeli 2 .


2
Ben her zaman bir evet ya da hayır ile bir soruya cevap vermek istedim;)
Jani Hartikainen

+1 - gerçekten zekice bir şeyle cevap vermek istedi, ancak başarısız oldu.
karim79

Bu daha fazla oy alsa da, Guffa'nın burada ele alınmayan bir noktayı getirdiğini düşünüyorum (ve benim
önsezimin

14

Bir tablo hücresi meşru bir şekilde blok düzeyinde öğeler içerebilir, bu yüzden doğal olarak bir sahte-pas değildir. Tarayıcı implentasyonu, elbette, bunu spekülatif-teorik bir pozisyon bırakır. Düzen sorunlarına ve hatalara neden olabilir.

Tablolar mizanpaj için kullanıldıkça -ve bazen de hala- çoğu tarayıcının içeriği düzgün bir şekilde oluşturacağını hayal ediyorum. IE bile.


Ben tarayıcı uygulaması benim "beklemek, bu kötü bir fikir" nereden şüpheli.
jcollum

13

Pozisyon kullanmak istiyorsanız: mutlak; div ile position: relative;td üzerinde sorunları karşılaşacaksınız. FF, safari ve krom (mac değil, PC değil) div'i td'ye göre konumlandırmayacak (beklediğiniz gibi) bu da div'ler için geçerlidir, display: table-whatever;eğer bunu yapmak istiyorsanız iki div'e ihtiyacınız vardır, biri için kap width: 100%; height: 100%;ve sınır yok, böylece td'yi herhangi bir görsel etki olmadan doldurur. ve sonra mutlak olanı.

bunun dışında neden sadece hücreyi bölmüyorsunuz?


6
Tek pratik,
kutsal

2

<div>İçine yerleştirerek sorunla karşılaştım <td>.

document.getElementById()Eğer td içine yerleştirirseniz div tanımlayamadı . Ama dışarıda, iyi çalışıyordu.


1

Herkesin de belirttiği gibi, yerleşim amaçları için iyi bir fikir olmayabilir. Ben bu soruyu geldi çünkü aynı merak ediyorum ve sadece geçerli kod olup olmadığını bilmek istedim.

Geçerli olduğundan, başka amaçlar için kullanabilirsiniz. Örneğin, bunun için kullanacağım, tablo satırlarının içine bazı "CSSed" div'ler koymak ve daha sonra kullanıcının bilgileri fiyat, isim vb. sadece düzen tablo bana verecek "dikey sipariş", ama ben CSS tarafından div genişliği, yüksekliği, arka plan, vb kontrol edeceğim.



-4

Bu kırar semantiğini hepsi bu. İyi çalışıyor, ancak "anlambilimi bozarsanız" ekran okuyucular veya HTML'nizi işlemekten zevk almayacak bir şey olabilir.


13
@Greg, neden anlambilimi bozuyor? Div, sayfa içeriğinin blok düzeyinde bir bölümü veya alt bölümüdür. Bu nedenle, onları bir tablo hücresine yerleştirmek esasen ve geri dönülmez bir şekilde semantik değildir.
David, Monica'nın

2
Sana cevabımı haklı çıkaran birkaç cevap yazmaya çalıştım, ama kişisel görüşe gelmeye devam ettim. : / Sanırım en iyi cevabım, hücrenizde ne varsa muhtemelen başka bir HTML etiketi ile daha iyi temsil edilebilir olurdu. Hücrelerinizi gerçekten bileşenlere bölüyorsanız, muhtemelen başlangıç ​​için bir tablo kullanmamalısınız, düzeniniz için bir dizi DIV oluşturmalısınız. Sanırım bunu neden daha iyi kelimelere dökemiyorum ... IMHO'ya tebeşirle yazıyorum.
Greg

Hmm, bir TD'nin anlamsal olarak bir DIV ile aynı şey olduğunu mu kastediyorsunuz?
jcollum

2
@jcollum: Hayır, anlamsal olarak aynı olduklarını söyleyemem. TD kesinlikle bir tablodaki bir hücredir; bilinen bir yapının bir parçasıdır: bir tablonun satırları vardır, bir satırın hücreleri vardır, hücreler veri içerir. DIV sadece bir kaptır ... belgenin herhangi bir yerinde herhangi bir zamanda herhangi bir şeyi temsil edebilir - işaretlemede amaç açısından herhangi bir anlambilim elde etmek için ona stil uygulamanız gerekir.
Greg

7
Bir DIV anlamsal olarak anlamsızdır, bu yüzden nasıl yanlış olabileceğini anlamıyorum.
Rex M
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.