私はCSS3がかなり初めてなので、次のことができるようにしたいと思います。
クラスを要素に追加すると、この特定の要素で使用されている別のクラスのプロパティがオーバーライドされます。
私が持っているとしましょう
<a class="left carousel-control" href="#carousel" data-slide="prev">
私は、クラスleft
のデフォルトの背景を上書きしてしまうbakground-none
というクラスを追加できるようにしたいと思います。
ありがとうございます。
プロパティをオーバーライドする方法はいくつかあります。あなたが持っていると仮定
.left { background: blue }
例えば次のいずれかで上書きされます。
a.background-none { background: none; }
body .background-none { background: none; }
.background-none { background: none !important; }
最初の2つはセレクターの特定性によって「勝ち」ます。 3番目のものは鈍い楽器である!important
によって勝ちます。
スタイルシートを整理して次のようにすることもできます。ルール
.background-none { background: none; }
単純に順番で勝ちます。つまり、の後にであること以外は同じくらい強力な規則です。しかしこれは制限を課し、スタイルシートの再編成には注意を払う必要があります。
これらはすべて、重大な、しかし広く誤解されている概念である CSS Cascade の例です。これはスタイルシートルール間の衝突を解決するための正確なルールを定義します。
P.S私はleft
とbackground-none
を質問で使われていたので使いました。これらは、notを使用する必要があるクラス名の例です。これらは特定のレンダリングを反映するものであり、構造的または意味的な役割を示すものではないためです。
important
キーワードの代わりに、セレクタをより具体的にすることができます。次に例を示します。
.left.background-none { background:none; }
(注:クラス名の間にスペースは入れないでください)。
この場合、.left
と.background-none
の両方がclass属性にリストされているときに規則が適用されます(順序や近接度に関係なく)。
あなたはあなたのスタイルの特異度を増やすことによって上書きするべきです。特異度を上げるにはさまざまな方法があります。特定性に影響する!important
の使用はスタイルシートの自然なカスケードを壊すので悪い習慣です。
css-tricks.com から抜粋した次の図は、ポイント構造に基づいて、要素に適切な具体性を生み出すのに役立ちます。どちらの特異性がより高いポイントを持っていても、勝つでしょう。ゲームみたいですね。
サンプル計算はこちら css-tricks.com で確認してください。これは概念を非常によく理解するのを助け、それは2分だけかかる。
もしあなたが自分自身で異なる特異性を作り出したり比較したりしたいのなら、このSpecificity Calculatorを試してみてください。 https://specificity.keegan.st/ またはあなただけの伝統的な紙/鉛筆を使うことができます。
さらに読みたい場合は、 MDN Web Docs を試してください。
!important
を使用しないためのすべての最善策。
他のクラスの後にbakground-none
クラスをリストすると、そのプロパティはすでに設定されているものをオーバーライドします。ここで!important
を使う必要はありません。
例えば:
.red { background-color: red; }
.background-none { background: none; }
そして
<a class="red background-none" href="#carousel">...</a>
リンクの背景は赤になりません。これは、それほど特異的ではない、または同等に特定的なセレクターを持つプロパティーのみをオーバーライドすることに注意してください。
LIFOは、ブラウザがCSSプロパティを解析する方法です。Sassを使用している場合は、次のように呼ばれる変数を宣言します。
"$ header-background:red;"
赤や青などの値を直接代入する代わりに使用してください。上書きしたい場合は、単に値をに再割り当てします。
"$ header-background:blue"
それから
background-color:$ header-background;
スムーズに上書きされるはずです。 「!important」を使用することは必ずしも正しい選択ではありません。単なるホットフィックスです。