2つのクラスが1つのdivに割り当てられると、クラスが無効になります


85

サムネイルギャラリーとなるタグに<div>2つのクラスを適用したいタグを作成していました<div>。その位置のための1つのクラスとそのスタイルのためのもう1つのクラス。このように私はスタイルを適用することができました、私は私に質問をもたらしたいくつかの奇妙な結果を持っていました。

<div>タグに2つのクラスを割り当てることはできますか?もしそうなら、どちらがもう一方を無効にしますか、それともどちらが優先されますか?

回答:


155

複数のクラスをdivに割り当てることができます。これらをクラス名で次のようにスペースで区切ってください。

<div class="rule1 rule2 rule3">Content</div>

このdiv要素は、三つの異なるクラスセレクタのための任意のスタイルルールにマッチします:.rule1.rule2.rule3

CSSルールは、スタイルシートで検出された順序でセレクターに一致するページ内のオブジェクトに適用され、2つのルール間に競合がある場合(複数のルールが同じ属性を設定しようとしている場合)、CSSの特異性によってどちらが決定されます。ルールが優先されます。

競合するルールのCSSの特異性が同じである場合は、後のルール(スタイルシートまたは後のスタイルシートで後で定義されたもの)が優先されます。オブジェクト自体のクラス名の順序は重要ではありません。CSSの特異性が同じである場合に重要なのは、スタイルシート内のスタイルルールの順序です。

したがって、このようなスタイルがある場合:

.rule1 {
    background-color: green;
}

.rule2 {
    background-color: red;
}

次に、両方のルールがdivに一致し、CSSの特異性がまったく同じであるため、2番目のルールが後で来るため、優先され、背景が赤になります。


1つのルールのCSS特異性が高い(div.rule1スコアが高い.rule2)場合:

div.rule1 {
    background-color: green;
}

.rule2 {
    background-color: red;
}

次に、それが優先され、ここの背景色は緑になります。


2つのルールが競合しない場合:

.rule1 {
    background-color: green;
}

.rule2 {
    margin-top: 50px;
}

次に、両方のルールが適用されます。


+1 CSSの特異性を説明するもう1つのすばらしいリンク:maxdesign.com.au/articles/css-cascade
Fabian Barney

以下の答えは、私が間違っていなければもっと正しいと思いますか?
2015年

@ nagates-どちらの答えがより正しいと思いますか、そしてその理由は何ですか?「下」にはたくさんの答えがあるので、あなたがどの答えを参照していたのか、なぜそれが「より正しい」と思うのかわかりません。あなたの考えを説明していただければ、私の答えを改善または明確にさせていただきます。
jfriend00 2015年

jfriend00:以下の@ erez-sasonによる答えは、彼が言及しているものです。あなたが概説したように機能したと思ったので、これは奇妙ですが、彼の例は明らかに彼の説明どおりに機能します。埋め込みスタイルとリンクスタイルには違いがあるのでしょうか。
Adam McCormick

1
@ AdamMcCormick-私の回答には、私が提供する例の1つとして、その回答からの情報がすでに含まれています。次に、両方のルールがdivに一致し、CSSの特異性がまったく同じであるため、2番目のルールが後で来るので、優先順位と背景があります。赤になります。。考えられるいくつかのシナリオを示し、1つのシナリオだけでなく、それらすべてを説明します。OPはコードに固有ではなかったので、複数のオプションをカバーし、最も単純なオプションを含む一般的な説明に行きました。
jfriend00 2016

28

実際には、cssで最後に定義されたクラス-がdivに適用されます。

見てみな:

cssの最後の赤

.blue{ color: blue; }
.red { color: red;  }
<div class="blue red">blue red</div>
<div class="red blue">red blue</div>

vs

cssの最後の青

.red { color: red;  }
.blue{ color: blue; }
<div class="blue red">blue red</div>
<div class="red blue">red blue</div>


4
これははるかに良い答えです。受け入れられた答えは誤解を招くものです。
SD

4

それらが同じプロパティを持っているかどうかを尋ねる場合は、CSSルールに従って最後のステートメントを取ります。

<div class="red green"></div>

CSS

.red{
 color:red;
}
.green{
 color:green;
}

上記の例のように、.greenであるcssツリーの最後のステートメントを取ります。


3

他に何も適用されない場合は、CSSで最後に定義されたクラスが優先されます。

CSSの優先度読んで、それがどのように機能するかを確認してください。


実際のCSS自体の最後の物理的な意味ですか、それともリストの最後のクラス名ですか?
Brain20 0019年

彼は、属性リストの順序ではなく、あらゆる場所で定義されているすべてのCSSルールのリストの最後にあることを意味します。残念ながら、JavaScript classListメソッドを使用している人にとっては、この設計上の決定は驚くべきものであり、役に立たないと思います。
デビッドスペクター

3

多くのクラスを要素に割り当てることができます。スペースで区切るだけです。

<div class="myClass aSecondClass keepOnClassing stayClassySanDiego"></div>

CSSのカスケードにより、ドキュメントの最下部最も近い上書きルールが要素に適用されます。

だからあなたが持っているなら

.myClass
{
    background: white;
    color: blue;
}

.keepOnClassing
{
    color: red;
}

赤い色が使用されますが、上書きされなかったため、背景色は使用されません。

CSSの特異性も考慮する必要があります。より具体的なセレクターがある場合は、次のセレクターが使用されます。

.myClass
{
    background: white;
    color: blue;
}

div.myClass.keepOnClassing
{
    background: purple;
    color: red;
}

.stayClassySanDiego
{
    background: black;
}

ここでの2番目のセレクターは、より具体的であるため使用されます。

ここですべてを見ることができます


史上最高のクラス名に賛成(完全かつ正確であるだけでなく)
オリバーターナー
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.