どこかで<div>
の中の<td>
がノーであると聞いた/読んだようです。機能しないわけではなく、ディスプレイの種類に基づいて実際に互換性がないということだけです。私の考えを裏付ける証拠が見つからないので、私はまったく間違っているかもしれません。
div
instide a td
を使用することは、レイアウトにテーブルを使用する他の方法より悪くありません。 (ただし、レイアウトにテーブルを使用しない人もいます。私はたまたまその1つです。)
ただし、div
でtd
を使用すると、要素のサイズを予測するのが困難になる可能性があります。 divのデフォルトは、その親からの幅を決定することであり、テーブルセルのデフォルトは、コンテンツのサイズに応じてサイズを決定することです。
div
のサイズ設定の規則は標準で適切に定義されていますが、td
のサイズ設定の規則はあまり定義されていないため、ブラウザによってわずかに異なるアルゴリズムが使用されます。
XHTML DTD を確認した後、<TD>要素には、見出し、リスト、および<DIV>要素などのブロック要素を含めることができることがわかりました。したがって、<TD>要素内で<DIV>要素を使用しても、XHTML標準に違反しません。 HTMLの他の最新のバリエーションには、<TD>要素と同等のコンテンツモデルがあると確信しています。
関連するDTDルールは次のとおりです。
<!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">
テーブルセルにはブロックレベルの要素を合法的に含めることができるため、本質的に偽物ではありません。もちろん、ブラウザ実装は、これを投機的で理論的な立場のままにします。レイアウトの問題やバグを引き起こす可能性があります。
テーブルはレイアウトに使用されていましたが、それでも使用されている場合がありますが、ほとんどのブラウザはコンテンツを適切にレンダリングすると思います。 IEでも。
位置を使用する場合:絶対; divでposition: relative;
をtdで使用すると、問題が発生します。 FF、サファリ、およびchrome(Macではなく、Mac)はdivをtdに相対的に配置しません(予想どおり)。これはdisplay: table-whatever;
のdivにも当てはまります。これを行うには、コンテナwidth: 100%;
height: 100%;
用の2つのdivが必要で、視覚的な影響なしにtdを埋めるために境界線がありません。そして絶対的なもの。
それ以外はなぜセルを分割しないのですか?
<div>
を<td>
内に配置することで問題に直面しました。
Td内に配置すると、document.getElementById()
を使用してdivを識別できませんでした。しかし、外では、うまく機能していました。
誰もが言ったように、レイアウトの目的にはお勧めできません。私は同じ疑問に思っていて、それが有効なコードであるかどうかだけを知りたいので、この質問に到着しました。
有効であるため、他の目的に使用できます。たとえば、私が使用するのは、テーブル行内にいくつかの派手な「CSSed」divを配置し、クイックjQuery関数を使用して、ユーザーが情報を価格、名前などでソートできるようにすることです。レイアウトテーブルのみが「垂直の順序」を提供しますが、CSSによってdivの幅、高さ、背景などを制御します。
それに対処する2つの方法
div
タグ内にtbody
を配置div
タグ内にtr
を配置Feferenceが表示される場合、両方のアプローチが有効です: https://stackoverflow.com/a/23440419/230524