• ベストアンサー

CSSの優先順位に関して

CSSで『後で書かれたものより、より厳密な条件に一致するセレクタによる指定が優先される』という規則は確実ですか? 例えば .hoge.fuga{color:#00F} .fuga{color:#F00} という順番でスタイル指定されていたとしても、 class="huge fuga" の要素は確実に赤ではなく青になるんでしょうか?

  • HTML
  • 回答数2
  • ありがとう数1

質問者が選んだベストアンサー

  • ベストアンサー
  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.2

>その仕様を無視したようなブラウザはないと考えて大丈夫でしょうか?  質問の意味がわからないのですが、そもそもスタイルシートをサポートする時点で決まっていることです。  また、これは特別なわけではなく、ごくごく一般的な常識としても成り立つわけです。  たとえばスタイルシートを書くときには body{font-family:********************;} h1,h2,h3,h4,h5,h6,p{line-height:1.6em;margin:0;} p{text-indent:1em;} strong{color:red;} などタイプセレクタから書き始めますよね。(これらは仕様の上では詳細度0,0,0,1です。) ついで、 div.section p strong{font-size:1.1em;} div.section blockguote p strong{font-size:1em;} と、より詳しい設定に進んでいくと思います。より詳しく指定されている。  --スタイルシートではselector's specificity と称される部分ですね。直訳すると選択子の明細、特殊性です。通常は詳細度と訳します。  より詳しく、どの要素に適用させるか書かれているものがあれば、それが優先されなければ常識とずれてしまいます。  何年何組の出席番号20番までの男の子は緑の服を着てください。  何年何組の男の子は青い服を着てください。  男の子は黒い服を着てください。 だとしたらよいかと言うことです。  これをわかり易く数値で置き換えたものが詳細度です。 →5. セレクタ ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2/selector.html ) →6. 値の割り当て、カスケード処理、継承 ( http://www.swlab.it.okayama-u.ac.jp/man/rec-css2/cascade.html ) 注) この中で詳細度については、現行のCSS2.1では変更になっています。  →6.4.3 Calculating a selector's specificity ( http://www.w3.org/TR/CSS2/cascade.html#specificity )   適当な邦訳がないので、C. 変更点 ( http://www.d-toybox.com/spec/CSS2.1/appendixC/ )とあわせて読んでください。  まあ、常識で判断できる範囲内だと思います。ただ、これを知っているかいないかでHTMLやCSSがものすごく違ったものになります。まず、デザインのためにHTMLを書く必要がなくなり、いずれもとてもシンプルでわかりやすくなるでしょう。

H240S18B73
質問者

お礼

以前はIEなんかが独自仕様のスタイルシートを作ったり、 他のブラウザがほとんど対応している疑似要素に対応しなかったり 子要素セレクタ">"が使えなかったりとか、 全てのブラウザが策定通りに同じになっているとは限らないので そういうことがないのか心配になってました さすがに仕様にまとめられていることを無視して 独自仕様にするブラウザはないですよね ありがとうございます

その他の回答 (1)

  • ORUKA1951
  • ベストアンサー率45% (5062/11036)
回答No.1

.hoge.fuga と言うセレクタはclassセレクタですから、CSS2.1(現行のウェブ標準)の場合、次のように解釈されます。 基点となるセレクタが書かれていませんから、全称セレクタが省略されているとみなします。 ---CSS2.1では基点となるセレクタを書くべきです。 すなわち *.hoge.fuga という形になります。 すなわち、class属性に半角スペースで区切られたリストに hoge と fuga を持つすべての要素にマッチします。  <p class="hoge note important fuga">  <h1 class="hoge note fuga"> とかです。この場合の詳細度は 0,0,2,0,ですね。全称セレクタは詳細度0です。  これは要素セレクタのひとつですから [class~="hoge"][class~="fuga"]とまったく同じです。 .fuga{}  これは、classセレクタがひとつですから、詳細度は0,0,1,0になります。  カスケーディングや詳細度はスタイルシートを学ぶとき、単位に続いて学ぶとても重要な部分です。color:#00f"よりは先に学ぶはずです。  まず、 1) 出所と最重要宣言によるソート  ユーザーの最重要宣言>著者の最重要宣言>著者の宣言>ユーザーの宣言>ブラウザのスタイルシート 2) その要素に適用される宣言を見つけ出したら、詳細度でソートする。 3) 詳細度が同じ場合は後出のものを適用--上書きされる。 タイプセレクタ、擬似要素セレクタは、d=1 属性セレクタ(クラスセレクタ含む)は詳細度、擬似クラスは c=1 一意セレクタは、詳細度 b=1 HTMLのstyle属性での指定は a=1 他の宣言は0とされる。 基数の大きなこの4桁の数値が詳細度です。 ^^^^^^^^^^^^10進数の基数は10です。スタイルシートの場合基数は大きいです。=位上がりしないと言う意味。  ここでclassセレクタは、詳細度が1ですから な要素にマッチします。

H240S18B73
質問者

補足

ブラウザごとに判断がゆだねられているわけではなく 仕様であとがきより詳細指定が優先されるようになっているのですね ということはその仕様を無視したようなブラウザはないと考えて大丈夫でしょうか?

関連するQ&A

  • セレクタの優先度

    普通はidのほうがclassよりポイント高いと思いますが 下記のような親要素にidで指定。子要素はclassで指定した場合、classが優先されます この時、#hogeが子要素に働いているポイントは何ポイントになるのでしょうか? classは10点なのでそれ以下となると予想では1点になっていると考えています .hoge{ color: blue;} #hoge{ color: red;} <div id="hoge"> <p class="hoge">aa</p> </div>

    • ベストアンサー
    • CSS
  • CSSの優先順位

    CSSを一部適用しない部分を設定したいのですが方法が分かりません。 もしかすると、私のやりたいことはCSSの順位付けかもしれません。 ▼基本▼ a:link {color:赤;text-decoration:none;} a:visited {color:青;text-decoration:none;} a:hover {color:黄;text-decoration:none;} a:active {color:緑;text-decoration:none;} ▲基本▲ 一方、下記のテキストには上記CSSの効果はいらないです。ここのテキストはリンクを貼っても文字の色(基本色:黒)を変化させず、下線もつけたくありません。 <td style="border:1px solid gray;" onmouseover="this.style.backgroundColor=紫" onmouseout="this.style.backgroundColor=白">ホーム</td> 「基本」を記述をすると、もちろんリンクをつけたすべてのテキストに適用されてしまいます。 しかし「基本」を一部適用したくない場所に不適用とすると下線とかも勝手につきますよね。 2番目に優先させるものとして↓を記述すべきですか? a:link {color:黒;text-decoration:none;} a:visited {color:黒;text-decoration:none;} a:hover {color:黒;text-decoration:none;} a:active {color:黒;text-decoration:none;} そもそも優先順位のつけかたが分からないのですが…。 色々考えましたが、何をすべきか分かりません。よろしくお願いします。

  • cssで複数背景を別セレクタ風に制御

    大変申し訳ありません、調べ方が悪いのか望む結果が得られなかった為、質問させてください。 cssで複数backgroundを設定できると思いますが、これを別セレクタ(のように)制御可能でしょうか? 例えば、 body{background:url(hoge.png);} body.fuga1{background:url(fuga1.png);} body.fuga2{background:url(fuga2.png);} body.fuga3{background:url(fuga3.png);} とすると、勿論<body class="fuga1">には、fuga1.pngの背景だけがレンダリングされます。 これを、hoge.png+fuga1.pngの背景を設定、 つまりbackground:url(fuga1.png),url(hoge.png);の状態にしたいのです。 また、<body class="fuga1 fuga2 fuga3">の可能性もあり、 この場合は、background:url(fuga3.png),url(fuga2.png),url(fuga1.png),url(hoge.png); として出力されたいです。※各bgは位置が被らないので順番は問いません。 純粋なセレクタのみで対応しようとすると、 body{} body.fuga1{} body.fuga1.fuga2{} body.fuga1.fuga3{} body.fuga1.fuga2.fuga3{} body.fuga2{} body.fuga2.fuga3{} body.fuga3{} と、管理しづらく、また、fuga4が増えた場合にメンテナンス工数が多く発生する為、 可能であれば、上記のようにマージされた結果を出力させたいです。 グループ内画面なので、レガシー無視で問題ありません。 calc利用OK、sass利用OKです。※可能であればjsは利用無しでいきたいです。 IE、Chrome、Firefoxのそれぞれ最新verで動作するとありがたいです。 恐れ入りますが、良い方法ありましたらご教授ください。 よろしくお願いいたします。

    • 締切済み
    • CSS
  • CSSのセレクタに指定するbodyと*の違い

    CSSでhead要素にstyle要素を記述する際、セレクタにbodyを指定しても*を指定してもすべての要素に適用されますが、違いがあるのでしょうか、教えてください。

    • ベストアンサー
    • HTML
  • CSSのデクレッシェンド(>)とアスタリスク(*)

    あるスタイルシートに、以下のような記述があったのですが、 この場合の「>」と「*」はどういう役割りを果たすのでしょうか? #hoge ul li .fuga > a{ color : red; } * html #hoge ul li .fuga a{ color : green; } いろんなサイトを見てみたのですが、理解できませんでした。 ご存じの方、教えてください。 よろしくお願いいたします。

    • ベストアンサー
    • HTML
  • アメブロのCSSについて

    今、CSSを勉強中で、勉強したことを復習するために、 ブログのCSSを覗いてみてるのですが、 アメブロの編集可能CSSのところに、 /* 通常文字 */ .skinTextColor,.skinBaseTextColor,.skinBlock,body{ color:#333333; } というのがあります。 CSSは、セレクタ、プロパティ、値からなると勉強しました。 このセレクタのうち3つは、class指定されてるものだと思うのですが、 skinTextColorと、skinBaseTextColorは HTMLの中に見つけられませんでした。 (TeraPadに貼り付けて、検索機能でチェックしました) そういうことってありえますか? 例えば、CSSが外部にあるように、 そのクラス指定のタブもどこか違うページにあるのでしょうか? 素人で、よくわかってないので、 質問がおかしかったらすみません どなたかわかる方がいらっしゃいましたら、教えていただけると嬉しいです。

    • ベストアンサー
    • HTML
  • CSSのセレクタについて。

    CSSの「IDセレクタ」と「クラスセレクタ」についてなんですが、「クラスセレクタ」は先頭に要素名を指定して「要素名.クラス名」のようにすると指定された要素のみ有効になりますが、要素名が特定されていない場合には、どの要素でも指定することができる。「IDセレクタ」は 先頭に要素名を指定して「要素名#id名」のようにすると指定された要素のみ有効になりますが、要素名が特定されていない場合には、どの要素でも指定することができる。ただし、IDは唯一のものとしてとくていするものの識別子でありひとつのXHTML文章内で同じIDを複数の要素に指定することはできない。とセレクタについて調べた結果、こう解釈しているのですが、「IDセレクタ」を使用するメリットがイマイチわかりません!「ひとつのXHTML文章内で同じIDを複数の要素に指定することはできない。」以外は「IDセレクタ」と「クラスセレクタ」は同じ効果ではないんですか?それならすべて「クラスセレクタ」で統一した方がいいと思うのですが・・・長くなってすみません。

    • ベストアンサー
    • CSS
  • @font-faceを別cssで管理できますか?

    @font-faceを指定したcssと、 セレクタで上記font-familyを指定したcssを、 別にする事は可能でしょうか? 例)※細かい属性等は省いています ◆hoge.html内の記述 ----------- <link href="font.css"> <link href="style.css"> ----------- ◆font.css内の記述 ----------- @font-face{ font-family:"hoge_font"; src:url("hoge_font.woff"); } ----------- ◆style.css内の記述 ----------- .element{ font-family:"hoge_font"; } ----------- googleフォントでのStandard使用方法例が上記の例と同様なので、 使用できそうな気はするのですが、 接続のイメージだと、font.cssとstyle.cssに、 ほぼ同時にリクエストが飛ぶので、 font.cssよりもstyle.cssが先にダウンロードされると、 style.css内のfont-family:"hoge_font";指定が迷子になり、 該当fontをレンダリングできないのでは、と懸念しています。 この方法で不具合があった、等の情報を教えてください。 よろしくお願い申し上げます。

    • 締切済み
    • CSS
  • IE9でCSS3が機能しない

    CSSセレクタについてお伺いします。 あるショッピングカートサイトを使っているのですが、このサイトはhtmlは編集できずCSSしか編集できないページがあります。 このページのデザインをなんとか編集したいと奮闘しています。 そのサイトのhtmlは不親切にもidやclassがほとんど記述されていません。 そのため:nth-child(n)などを使ってなんとか要素を編集できそうでした。 しかしfirefoxやchrome、operaはこの:nth-child(n)が機能するのですが IE9では機能しません。 IE9ではhtmlの宣言を<!DOCTYPE html>と記述しないとCSS3 は使えないのでしょうか? CSS側だけでなんとかclassなどの指定がない要素を取得する方法はないでしょうか? よろしくお願いいたします。

    • ベストアンサー
    • CSS
  • CSSセレクタの子孫要素について意味を質問します

    CSSセレクタや、JQueryのセレクタで E F の意味は、 「Eの子孫要素にあたるFに、スタイルシートを適用する。」 などと、よくサイトなどで記載があります。 使い方は理解しているのですが、 これって「子要素と孫要素」だけではなく、 「下の階層にある要素全て」が正しいと思っています。 (要は、ひ孫要素以下にもスタイルシートが適用されますよね?ってことです) それとも、「子孫要素」って下の階層全部のことを意味しているんでしょうか? それはそれで、漢字の意味に疑問を持ちますが・・・ 自分が他の人に教える時に、しっくりこないので質問してみました。

    • ベストアンサー
    • HTML