2 つのテスト ファイルを次に示します。
これら 2 つのページのマークアップはすべてほぼ同じです。2 つの列を持つテーブルがあります。1 つの列 (2 番目の列) の要素と要素には、すべて「ジャンク」クラスが与えられます<th>
。<td>
「良い」ページをロードすると、上部のチェックボックスがオフになっていることがわかります。チェックボックスをオンにすると、2 列目が非表示になります。チェックを外すと、2 番目の列が戻ります。「悪い」ページでは、チェックボックスがオンになっています。チェックを外しても IE7 では効果がありませんが、基本的な悪に取り憑かれていない他のブラウザーでは機能します。
<table>
チェックボックスは、タグからクラス「コンパクト」を追加または削除するだけの小さな Javascript ルーチンにフックされています。これを含むスタイルシートがあります:
table.compact th.junk, table.compact td.junk {
display: none;
}
したがって、何が起こるべきかは、「良い」ページで何が起こるかです。ただし、IE7(おそらく6も)では、最初にレンダリングされたときに非表示になるようにスタイル設定されているようにテーブル要素が開始された場合、新しいスタイルルールをもたらすDOMへのその後の変更に関係なく、表示されることはありません有効にし、それらを表示したままにします。(これは特にパーツの問題のようです。私は他の要素で同じメカニズムを使用しており、それらはすべて正常に動作します。)<table>
では、問題は、このばかげた動作を回避するために使用できるハックを知っている人はいますか? 明らかに、テーブル セルが表示されるように、関連するトグル コントロール セットを使用して IE7 のビューを開始するように調整することもできますが、私の場合、これは AJAX 応答として生成されたテーブルの周りで発生するため、大きな問題になります。混乱は避けたいです。(テーブルも実際にはテーブルです。レイアウト ハックではなく、表形式の情報の表示です。)
「IE7 レイアウト バグ」検索から得られるヒット数を考えれば、驚くべきことではありません。