2011-01-17 15 views
0

私のようなCSSファイルがあります:私は、TDにクラスのショーを追加するとIE6/7 CSSクラスのオーバーライド

#SomeTable.hideAll td { display: none; } 
#SomeTable.showXYZ .show { display: block } 

を、ディスプレイには、クロム、FF、およびIE8にブロックすることが優先されます。しかし、IE6/7では、オーバーライドされていないような表示は残っていません。このようなCSSのオーバーライドを行うために古いIEで行う必要がある何か奇妙なことはありますか?私はそれが可能ではないか、それとも何かと関係があると思っています。あるいは、オーバーライドを決定するためのルールを理解できません。

EDIT:CSSルールは、CSSがまだ更新されません

.hide { display: none; } 
#SomeTable.showXYZ td { display: block } 

のように見える場合でも。これは特別なことではありませんが、IE6/7のバグでなければなりません。

+0

これは 'td'固有のものです。しかし、2日前によく似た質問をしませんでしたか? –

+0

td特定のことを精緻化する。先日、私はcssに関する質問をしましたが、それがどう関係しているのかわかりません。 –

+0

http://htmldog.com/guides/cssadvanced/specificity/ CSSの特異性はちょっと混乱することがあります。クラスが単純な要素よりも具体的であるため、.showはtdをオーバーライドする必要があるため、IE6/IE7のCSSの特殊性のバグのように聞こえます。うまくいけば、polarblauの答えがそこに来るでしょう。 –

答えて

1

まだ試しましたか? -

#SomeTable.hideAll td { display: none; } 
#SomeTable.showXYZ td.show { display: block; } 
+0

私は質問を修正しました。 –

+0

私の答えは同じで、Pekkaのコメントと同じです: "td"はクラス名よりも高い特異性を持っています。ユーザー "td.show"。あなたのクラス名に合わせて答えを更新します。 – polarblau

+0

こんにちは、いくつかのテストの後でもう一度質問を編集しました –

1

<td>要素と他のテーブル関連要素はdisplay:blockまたはdisplay:inlineに設定されるべきではありません。それらには独自のテーブル関連の表示タイプがあり、代わりに使用する必要があります。

例:一部のブラウザで

table.mytable {dislpay:table;} 
td.mycell {display:table-cell;} 

display:block;も動作するかもしれませんが、これは正しくない、と間違いなく他のブラウザで問題が発生します。上記の表示タイプは正しいものです。

ただし、これらの表示タイプのサポートには、さまざまなブラウザ、特にIEの古いバージョンの間にいくつかの矛盾があります。

すべてのブラウザのために互換性があります最良のオプションは、あなたがそれを示すことにしたい何もしないことを指定するために、単純です - あなたは、showとしてそれをクラスを指定これを行うすなわち

#SomeTable.hideAll .hide { display: none; } 
#SomeTable.showXYZ .show { } /* nothing here */ 

、エレメントタイプのデフォルトの表示タイプが選択されます。これは、hideshowの間で切り替えて再び有効にしても機能します。

関連する問題