アプリ版:「スタンプのみでお礼する」機能のリリースについて

次のようなHTMLとCssを作成し、見出しを表示しようとしています。
1つ目の見出しと2つ目の見出しは全く違うものにしたいので、2つ目の見出しにはh2にクラス名を指定しています。
しかし2つ目の見出しは1つ目の見出しの属性を引き継いでいるようで、 border-left: 5px solid #0086b9;などは有効になり2つ目の見出しでも左側に線が表示されてしまいます。
1つ目のcssの情報を完全に消した後、2つ目の見出しを表示する方法をご教授下さい。

▼HTML
<h2>見出し2</h2>
<h2 class="sample1">見出し2</h2>
■Css
h2 {
font-size: 145%;
margin-top: 10px;
margin-bottom: 10px;
padding-left: 10px;
border-left: 5px solid #0086b9;
border-right: 1px solid #0086b9;
border-top: 1px solid #0086b9;
border-bottom: 1px solid #0086b9;
line-height: 1.4;
background-color:#F7F7EF;
}
h2.sample1{
border-right:solid 2px #808080;
border-bottom:solid 2px #808080;
background-color:#c0c0c0;
padding-top:3px;padding-left:3px;
width:300px;
}

A 回答 (4件)

1つ目の見出しにクラス名を指定する。



<h2 class="sample">見出し2</h2>
h2.sample {
...
    • good
    • 0

<h2 class="sample">要素は「h2でありh2 class="sample1"」です。

<h2>との区別はされていません。つまりこのcssでは、h2のプロパティを受けた上でさらにh2 class="sample1"のプロパティを受けるのは普通の挙動となります。
主な対策は以下の通り。


1:上の<h2>にもclassを設定する
2:どちらかの<h2>を変更する
3:cssのセレクタを「h2.sampla1」ではなく「.sample1」にする

下に行くほど簡単かつ後の汎用性や互換性の高い方法となります。
    • good
    • 0
この回答へのお礼

hiro_gtさん返信ありがとうございます。
cssでは、h2のプロパティを受けた上でさらにh2 class="sample1"のプロパティを受けるということはよく分かりました。
また対応策も良く分かりました。ありがとうございます。

もし良ろしければ、後学のために教えていただきたいのですが、h2のプロパティを消去するということはできないのでしょうか?
h2 {
font-size: 100%;
margin-top: 0px;
margin-bottom: 0px;


}
みたいな感じで上書きしていくしか方法はないのでしょうか?

お礼日時:2008/02/05 20:04

#2です



消去や上書きというのが何を指すのかつかめなかったのですが、上書きについてたとえばh2をセレクタとしたスタイルの記述が2つあると

h2 {
text-align:center
background:#0000ff;
font-size:200%;
}

h2{
background:#ffffff;
font-size:50%;
border:solid 2px #000000;
}

すべてのh2について「テキスト中央寄せで背景は白、solidボーダー文字サイズ50%」となります。
一方にしかないプロパティはそのまま引き継がれ同じプロパティがあった場合より下にあるほうが優先されてしまうわけです。%は掛け算されたりもしません。
katana0514さんのやろうとしたようにcssを記述した場合、それが「すべての<h2>」に作用してしまいそこまでのスタイルが全て無意味となります。
要するにこれを回避するためにIDやクラスを設定するのだと思ってください。

強引にまとめると「不安だったらタグではなくクラスやIDでスタイルをかけましょう」ということですね。
    • good
    • 0

>h2のプロパティを消去するということはできないのでしょうか?


「消去したいプロパティ」を上書きする。
h2 {
border-left: 5px solid #0086b9;
}
h2.sample1{ ←こちらでもleftを指定する
border-left: none;
}
class名などを付けたほうがより優先して反映されます。
class="sample1"が付いている<h2>は「<h2>」だから「h2 {~で指定されたborder-left」が反映されているわけです。

>上書きしていくしか方法はないのでしょうか?
「すべてのセレクタに指定したいもの」を要素名だけのセレクタに指定し、
「一部のセレクタにのみ指定したいもの」をidやclass名をつけて指定しましょう。
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!