表示プロパティをデフォルト値で上書きすることは可能ですか? たとえば、あるスタイルで none に設定し、別のスタイルでそれをデフォルト値で上書きしたい場合などです。
それとも、その要素のデフォルトを調べてそれに設定するしか方法がないのでしょうか? 要素が通常ブロックなのか、インラインなのか、それとも他のものなのかを知らなくても済むようにしたいのですが...
ベストアンサー1
ブラウザのデフォルトのスタイルはユーザーエージェントスタイルシートで定義されており、そのソースは次の通りです。ここ残念ながら、カスケードと継承レベル 3 仕様スタイルプロパティをブラウザのデフォルトにリセットする方法は提案されていないようです。ただし、このためのキーワードを再導入する予定があります。カスケードと継承レベル 4— ワーキンググループはまだこのキーワードの名前を決めていません(リンクには現在 とありますrevert
が、最終版ではありません)。 のブラウザサポートに関する情報はrevert
、ホームページ。
レベル3の仕様では、initial
キーワード、プロパティをその初期値デフォルト値にリセットしますCSSで定義されている、ブラウザの定義どおりではないの初期値display
は です。inline
これは指定されますここキーワードinitial
はブラウザのデフォルトではなく、その値を参照します。仕様自体は、all
財産:
たとえば、作成者が
all: initial
要素に を指定すると、カスケードの作成者、ユーザー、またはユーザー エージェント レベルにルールが指定されていないかのように、すべての継承がブロックされ、すべてのプロパティがリセットされます。これは、外部ページのスタイルを継承したくないページに含まれる「ウィジェット」のルート要素に役立ちます。ただし、その要素に適用された「デフォルト」スタイル (たとえば、
display: block
などのブロック要素の UA スタイル シートからのもの<div>
) もすべて破棄されることに注意してください。
したがって、現時点で純粋な CSS を使用する唯一の方法は、ブラウザのデフォルト値を調べて、それを手動で設定することだと思います。
div.foo { display: inline-block; }
div.foo.bar { display: block; }
(上記の代替案としては がありますdiv.foo:not(.bar) { display: inline-block; }
が、オーバーライドではなく元のセレクターの変更が必要になります。)