• 締切済み

CSSについて質問です (IDセレクタ)

CSS初心者です。困っております。 <dl id="info"> <dt>文章1</dt> <dd> <p>文章2</p> </dd> <dt>文章3</dt> <dd> <p>文章4</p> </dd> </dl> 上記のCSSで文章1と3の色を変えたい場合、 下記はどれが正しいのでしょうか? このIDセレクタがどうも、いまいちよくわかりません。 なぜ、#の前に置いたり置かなかったりするのでしょうか? dl#infoData dt{ color:#663300; } #infoData dt{ color:#663300; } わかる方よろしくお願い致します。

みんなの回答

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

≫カスケードにおいて差が出る場合とありますが、どういう事なんでしょうか? この例で言うと、 1) dl#infoData dt というセレクタの詳細度は、100×1 + 1×2 = 102 2) #infoData dt だと、100×1 + 1=101 になります。  この場合、 dl#infoData dt というセレクタが、これより前にあると、 (1)と同じ詳細度ですから、後出の(1)で上書きされますが、(2)の宣言では上書きできないということ。  決して他のページでとかではなく。詳細度が関わるからです。  カスケードとはこの継承の仕組みが、ある意味、最も重要なのでプロパティを覚えるより先に学んでおくべきかと・・。  なお、 <dl id="info"> <dt>文章1</dt> <dd> <p>文章2</p> </dd> <dt>文章3</dt> <dd> <p>文章4</p> </dd> </dl> にて、文章3の色を変えたいときは、 dl%infoData > dt{ 色1} ですべてのdtの色が変わる。 ついで、 dl#infoData > dt + dt{ 色2}で、文章2以降が色2に dl#infoData > dt + dt + dt{色3}で、文章3以降が色3に dl#infoData < dt + dt + dt + dt{色4}で文章4が色4に ・・・詳細度は、上から 102,103,104,105になります。ですから記述順は関係ないということです。 CSSを勉強するなら、 1) 参照方法 2) 基本構造 セレクタ{プロパティ} 3) カスケード 重要度/出所/詳細度 4) プロパティ  としないと効率が悪いです。(3)を抜かすと、指定がうまく行かないと悩むことになります。

kokoro697
質問者

お礼

そういう事っだたんですね。ありがとうございます。とても理解できました。

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

質問の意味が分からない部分があるので補足してください。 ≫上記のCSSで文章1と3の色を変えたい場合、 は、「上記のCSSで文章1と【、文章】3の色を変えたい場合、」という質問ですか?  隣接セレクタを使用します。 ≫dl#infoData dt{ と #infoData dt{ ★タイプ セレクタ + 一意セレクタ ★一意セレクタ  の差ですから、そのページだけに関しては、普通は差が出ませんが、カスケードに置いて差が出る場合があります。   CSS2では、前者が詳細度2になりますから、より優先されます。詳細度を考慮してCSSを書きますから、他の設定で上書きされることを避けるために、あるいより詳細度の高いもので上書きされるかを考慮して、いずれの書き方をするかを決めてください。 Q:質問が二つあります。  整理して補足してください。

kokoro697
質問者

補足

ご回答ありがとうございます。丁寧にありがとうございます。 「上記のCSSで文章1と【、文章】3の色を変えたい場合、」というのは、例えばの話です。知りたいのは、なぜ#の前に付けたりしないといけないのかが、知りたっかったのです。カスケードにおいて差が出る場合とありますが、どういう事なんでしょうか?あと、「常にタイプ セレクタ + 一意セレクタ」にして表示してもいいような気もしたのですが、どうなんでしょうか?質問ばかりですいません。

noname#83877
noname#83877
回答No.1

#の前に置くのは複数のページに同じcssを指定するときに便利だからです。 例えば、2つのページの#infoDataのマークアップした要素がそれぞれ違い、デザインをそれぞれ別に与えたいとすると dl#infoData dt { color:#663300; } ul#infoData dt { color:#003366; } とするわけです。 idの持つ意味が重複するが、別の要素なので別のデザインで使いたい、だけどcssは共通にしたいというニーズに応えるためのテクニックです。

kokoro697
質問者

お礼

とても分かりやすいです。そういう事っだったんですね。 ありがとうございました。