【CSS】セレクタの基本的な記述方法まとめ

Text editors HTML+CSS

CSSの仕組みは大まかには理解していますが、基礎的な概念をきちんと整理していなかったので、メモもかねて記します。

#はid属性を指すのに使い、.はclass属性を指すのに使う

例えば、以下のようなHTMLがあるとします。

<div class="exapmle1">
  <div id="exapmle2">
    本文
    . . .
  </div>
</div>

CSSは以下のように記述します。

/* これはdiv class="example1"に対して適用される */
.example1 {
  属性: 属性値;
}

/* これはdiv class="example2にたいして適用される */
#example2 {
  属性:属性値;
}

example1やexapmle2のことをセレクタ(selector)と呼びます。

属性と属性値の部分は、”color: red;”などと記述。
属性(attribute)と値(value)の間はコロン(:)で区切り、これらを複数記述する場合は間にセミコロン(;)を入れます。

要するに、
color: red;
border-color: blue;
と記述。

セレクタの範囲は{ }で囲む。

#も.も無いものはHTMLタグを指す

セレクタの前に#も.(ドット)もない場合、HTMLのタグを指します。

例えば、

/* これはasideタグを指す */
aside {
 padding-right: 10px;
}
/* これはmainタグを指す */
main {
 padding-right: 0px;
}

asideタグは、コンテンツの横にあるメニュー領域を指すもの。
mainタグはbodyタグ内のメインとなるコンテンツの部分を表すタグ。

HTMLタグをセレクタとすることも可能。

複数のセレクタを指定する場合はカンマ(,)で区切る

言葉のまま。

複数のセレクタを一度に指定する場合は、カンマ(,)で区切る。

h2, h3 {
  color: red;
}

セレクタの間の半角スペースは子要素への適用という意味

ある要素の中の子要素について指定する場合、半角スペースで区切りる。

この例の場合、asideタグの中のexampleクラスだけに対して適用される。

aside .exapmle1 {
 padding-right: 10px;
}

継承(Inheritance)

入れ子構造になっている親要素のCSS属性が子要素にも引き継がれる、というのが「継承」(Inheritance)。

継承される属性と、されない属性があるので、注意が要ります。

具体的には、以下のHTMLに対し、

<div class="example1">
 color(文字色)は継承される
 <p class="example2">この段落にborderは継承されない</p>
</div>

CSSが以下の通りだとすると、

.example1{
   color: red;
   border: 2px solid black;
 }

ブラウザには以下のように表示されます。

color(文字色)は継承される

この段落にborderは継承されない

divのcolor(文字色)を赤に指定し、子要素のp(段落)でも同じ文字色で表示されています。
これが、継承。

継承されない属性もある

属性によっては、子要素に継承されないものがあります。

例えば、上の例ですが、border属性は子要素(p)に継承されていません。

もしborder属性も継承されているならp(段落)も枠線で囲まれるので、2重の枠ができるはずです。
が、されていないので、border属性は継承されていないということになります。

継承されない属性値の一覧は以下の記事でまとめています。

継承を強制する方法

標準では継承しない属性値の継承を強制させることも可能。
その場合、CSSの子要素のの属性値に、明示的に継承を明記する。

具体的には、継承する子要素の属性値としてinheritを記述する。

具体的には、以下。
HTMLは以下のとおり。

<div class="example1">
 <p class="example2">この段落にborderは継承されない</p>
 <p class="example3">この段落にborderは継承される</p>
</div>

CSSは以下のようにします。

.example1{
   color: red;
   border: 2px solid black;
 }
 .example3{
   border: inherit;
 }

以下のように表示される。

この段落にborderはされない

この段落にborderはされる

以上です。

おわり。