バナー

この教材は「ギャクサン」というWeb制作学習カリキュラムの一部です。

はじめての方はこちらからご覧ください👉

更新日

#11  class属性とid属性について理解しよう

web兄さん

ここまでCSSの講座が続きましたが、今回の講座はHTMLとCSSどちらにも関連する内容です!

初学者がつまずきやすい「class属性とid属性」について学習していきます。

属性のおさらい

属性の書き方
属性の概要

開始タグの中〇〇="内容"で書かれたものを属性と呼ぶのでしたね。

属性はそのタグに対して情報を追加する時に使用され、imgでいえば画像のパスを書くsrc属性、aでいえば、リンク先を書くhref属性がありましたね!

web兄さん
今回紹介する「class属性」「id属性」も属性の1種類です!
タグに対してどんな情報を追加するものなのかを学習していきましょう!

まずは結論|idとclassは特定の要素にCSSを適用させるために使う

結論から述べるとidとclassは「特定の要素にだけCSSを適用したい時」に使用します。

以下の例をもとにまずは前提を理解しましょう。

<div>
    <p>黒色</p>
    <p>赤色</p> <!-- これだけ赤色にしたい -->
    <p>黒色</p>
</div>

左のHTMLのコードの中で2番目のp要素だけテキストを赤色にしたいとします。

その時のCSSのコードはどうなるでしょうか?

不正解の手法】divをセレクタにした場合は?…

div{ 
  color : red; 
}

divをセレクタにした場合は子要素に影響してしまうので全てのpが赤色に変わってしまいます。

黒色

赤色

黒色

不正解の手法】pをセレクタにした場合は?…

p{ 
  color : red; 
}

ではpをセレクタにするのが正解でしょうか?こちらも同様に全てのpが赤色に変わってしまうので不正解です。

黒色

赤色

黒色

web兄さん
pとした場合は全てのpに対してcolor : redが適用されてしまうし、divをセレクタにした場合でも、子要素のpにもcolor : redが適用されてしまうからという理由だったよね

正解の手法】id属性やclass属性を使うことで特定の要素をセレクタにできる

こんな時にid属性とclass属性を使用します。(※今回の例はclass属性を使用

赤色にしたいpに対して「class="red"」という属性をつけています。

<div>
    <p>黒色</p>
    <p class="red">赤色</p>
    <p>黒色</p>
</div>
/*セレクタをclass名にする*/
.red{
  color : red;
}

黒色

赤色

黒色

そして.redをセレクタに指定することで「red」というclass名のついたp要素だけテキストを赤色にできるというわけです。

このように、「特定の要素だけ(例では2番目のp要素)に対してCSSを適用させたい」場合にclassやidで名前をつけセレクタとして扱います。

つまりidとclassは

特定の要素をセレクタとして使用するためにつける名前

という役割になります。

本講座で学習すること

役割は理解できたと思うので、書き方・使い分け・実際の利用例を以下の流れで学習していきましょう。

  1. id属性の書き方とルール
  2. class属性の書き方とルール
  3. idとclassの違い
  4. idとclassどう使い分ける?
  5. id名とclass名の決め方
  6. divやspanにclass属性やid属性が頻繁に使われる理由
  7. 【小テスト】idとclassのおさらい

id属性の書き方

❶HTML側でのid属性の書き方

id属性の書き方
id属性の書き方

他の属性と同じようにid属性も

<タグ名 id="id名">と書きます。

名前の付け方にもルールがあり、

  • 半角英数字を使う(大文字OK)
  • -(ハイフン)と_(アンダーバー)の記号はOK
  • 先頭が数字から始まるのはNG

となっています。

<!-- 正しい例 -->
<div id="contain">〜</div>
<div id="f-50">〜</div>

<!-- 間違っている例(先頭が数字と記号になっている) -->
<div id="50-mgn">〜</div>
<div id="_box">〜</div>

左に正しい例と間違っている例を紹介しています。

id名のルールに反していると上手くCSSが機能しないので注意しましょう。

❷CSS側でのid属性の書き方

id属性のCSSでの書き方
id属性のCSSでの書き方

id名をつけた要素をCSSのセレクタにする時は

#(半角シャープ記号)+ id名

というようにセレクタに記述します。

プロパティや値の書き方に影響はありません。

id属性のルール|同じページに1つだけ

同じid名は同じWEBページの中で1つまでと決まっています。

id属性は同じ名前を使えない
id属性は同じ名前を使えない

「1つのページに」とは「同じHTMLファイルに」という意味です。たとえばトップページを表示しているindex.htmlid="red"というidが複数存在しているのはNGです。

しかし、トップページのindex.htmlid="red"が1つ、サービス紹介のページを表示するservice.htmlid="red"が1つと同じサイトでも違うページならOKです。

class属性の書き方

❶HTMLでのclass属性の書き方

class属性の書き方
class属性の書き方

id属性と同じ形式です。

<タグ名 class="class名">

というように書きます。

名前の付け方のルールもid属性と同じで

  • 半角英数字
  • -(ハイフン)と_(アンダーバー)の記号はOK
  • 先頭が数字から始まるのはNG

となっています。

❷CSSでのclass属性の書き方

class属性のCSSでの書き方
class属性のCSSでの書き方


CSSでclass名をセレクタに指定する場合は

.(ドット記号)+ class名

というように書きます。

こちらもプロパティや値の書き方に変化はありません。

class属性のルール

❸同じclass名を複数書いてもOK

class属性は同じものが複数あってもOK

class属性とid属性の大きな違いの1つがこれです。

idは同じページに同じid名の要素が複数存在するのはNGでしたよね。

class属性はその制限がありません。

かと言って複数ないとダメということはなく、class属性は1つでも複数でもどちらでもOKです。

❹class属性の中に複数の名前を書ける

1つの要素に複数の名前をつける
1つの要素に複数の名前をつける

1つの属性の中で半角スペースで区切ることで、複数のid名やclass名を付与することができます。

画像の例での<p>

.bigというclass名の要素であり、さらに.largeというclass名の要素でもあるということになります。

<p class="big large">これは大文字</p>
/* どちらも同じセレクタ */

.big{
  font-size: 80px;
}

.large{
  font-size: 80px;
}

つまり、次のように書いた場合どちらも同じ要素を指すことになります。

同じ要素にセレクタを複数つけられるメリットをつづけて解説します。


複数の名前を書くことによるメリット

<p class="red">これは赤色</p>

<p class="red border">これは赤色かつ線</p>

例えばどちらのpもほぼ同じ見た目にしたいけど、2つ目のpだけ変化を加えたいというケースがあります。

そんな場合は左のコードのように2つ目のpにのみ、追加でclass名を付与します。

/*共通のスタイル*/
.red{
  color : red;
  font-weight:bold;
  font-size: 20px;
  padding: 10px;
}

/*線をつける*/
.border{
  border : solid 1px;
}

.redは共通のclass名なのでpはどちらも同じ見た目になっていますが、追加で.borderがついた2つ目のpのみ線がついていますよね。

web兄さん
このように共通のスタイルが多い場合は、同じ記述が増えてしまうのを防ぐため、共通のclass名をつけた上で、追加で2つ目、3つ目のclass名をつけてなるべく少量でコードをかけるようにします!

id名やclass名という呼び方について

ちなみにid属性やclass属性によって指定した名前のことを「class名」や「id名」というような呼び方をします。

<p class="sentence">これは文章です</p>

例えば上記のようなコードがあった場合「pタグのclass名は”sentence”だね」のような使い方をします。

idとclassの共通の書き方のルール

コードの3番目のpに注目してください。

<div>
  <p class="txt">idは1つ</p>
  <p class="txt">classは複数</p>
  <p id="both" class="txt">両方つけてもOK</p>
</div>

<p id="both" class="txt">と同じ要素にidとclass両方の属性が付いていますよね。

このように1つのタグに対してclass属性とid属性を両方付与するのはOKです。

<img src="~~" alt=""~~">のようにimgの場合もsrc属性とalt属性の2つの属性がついていますが、それと同じで複数の属性がついているだけなので問題ありません。

idとclassの違い

先ほど説明した「idは1つまで、classは複数OK」という点が最も大きな違いではありますが、実はもう2つ覚えておいて欲しい違いがあります。

違い01|CSSの詳細度の違い

CSSには詳細度という概念があります。

これは「同じ要素に対して別々のCSSが適用された時どちらを優先して反映させるか?」という順位づけの概念です。実際の例を見てみます。

<div>
  <p class="red">これは赤色</p>
  <p id="blue" class="red">これは青色</p>
</div>

左のコードのpにはそれぞれ
class="redがついていますが、2つ目のpにはid="blue"もついています。


.red{
  color : red;
}

#blue{
  color : blue;
}

そしてCSSには.redは赤文字、#blueが青文字になるコードが書かれていますね。

それでは.red#blueどちらもついている2つ目のpは「赤」と「青」どちらの文字色になるでしょうか?


正解は青色です。

idがセレクタの場合、classよも優先度が高く「id > class」となるため、color : blue;が優先して適用されています。

このようにidとclassではCSSのidの方が優先度が高いということを覚えておきましょう。

違い❷idはページ内リンクを作成するときに使用する

百聞は一見にしかずということで「ここをクリックして見てください

「class属性のルール」という見出しまで移動しましたよね?

このようにリンクをクリックした際に同じページ内の別の場所に移動することを「ページ内リンク」と呼びます。

これは<a>とid属性を組み合わせることにより再現しています。


<div id="top">...<div>

<a href="#top">トップへ戻る</a>

たとえば左のようにaのhref属性にhref="#top"と記載することでa要素をページ上でクリックした場合、id="top"と付いているdivの位置まで移動させることができます。

web兄さん
ページ内リンクはclass属性では実装できないのでidとclassの大きな違いの1つということを覚えておきましょう!

idとclass結局どう使い分ける?

基本はclass属性を使い、id属性はページ内リンクの時に使う

と考えておきましょう!classを使う理由は主に2つあります。

理由❶| idは優先度の高さが邪魔をする

さきほどidはclassよりCSSの優先度が高いことを説明しましたよね。

そのため、idばかり使用してしまうとidをつけた要素に対してCSSを適用する時に反映しにくくなってしまいます。

理由❷|共通のCSSを適用する時にclassの方が便利

<p id="text01">迷ったらclassを使う</p>

<p id="text02">迷ったらclassを使う</p>

例えば複数の要素に対して、同じCSSを適用したい時にidで名前とつけていると不便になります。

id名は同じ名前を使えないので、別のid名をつけた上でCSSの同じコードを書かないといけません。

/*
id名を別にしないといけないので
全く同じCSSのコードを書く必要があり非効率
*/

#text01{
  background-color:#5fa3d6;
  color:white;
  padding: 20px;
}

#text02{
  background-color:#5fa3d6;
  color:white;
  padding: 20px;
}

class名を使えば…

<p class="text">迷ったらclassを使う</p>

<p class="text">迷ったらclassを使う</p>

classなら同じclass名を使ってもOKでしたね。

なので、共通のCSSをつけたい要素に対して共通のclass名をつければ同じコードを書く必要はありません。

/*共通のclass名ならCSSの記述が1度で済む*/
.text{
  background-color:#5fa3d6;
  color:white;
  padding: 20px;
}

左のコードのように共通のclassセレクタを指定し、1度のコード記述で共通の見た目にすることができました。

web兄さん
最初のうちは「classで名前をつけてid属性はページ内リンクを使う時だけ使用する」という認識でOKです!

id名とclass名どうやって決めたらいい?

class名とid名は「半角と記号で自由につけられる」と言っても実際の現場ではどのようにclass名を決めているか気になりますよね。

例えば、以下のようなデザインがあった場合、HTMLでは次のようなclass名をつけることが多いです。

<div class="firstview">
    <img src="bg.jpg">
    <h1>絶景冒険プラン</h1>
</div>
<div class="content">
    <h2 class="headline">
      <span>point</span>このプランのポイント
    </h2>
    <ul class="list">
        <li>雨天の場合、100%返金</li>
        <li>20年のベテランガイドが着くから安心</li>
        <li>野生動物と触れ合える!</li>
    </ul>
    <a class="button" href="./reserved">予約する</a>
</div>

<div>に対してfirstviewcontentといったclass名がついていたり、ulalistbuttonというclass名がついていますよね。


では、どのようにHTMLのclass名を決めたかと言うと、

デザインデータを見て、それにふさわしい英語を自分で考えてclass名を付けただけです。

class名はHTMLごとにふさわしい英語を命名する

上記の例にある通り、命名(class名をつけること)は必ず守らなければならないというルールは存在せず、「デザインデータに沿って自分がふさわしいと思った名前をつける」というイメージを持っておいてもらえればOKです。

よくあるclass名の例を紹介しておくと、

  • ボックスであれば.box
  • 写真であれば.photo
  • 線であれば.line.border
  • メニューであれば.nav.menu

などなど、単語でシンプルに表現することが業界では一般的です。

web兄さん
複数人でコーディングする時は命名にルールを設けていることもあるよ!(命名規則と呼ぶ)

divにclass名がよく使用されている理由

divがレイアウトの変更によく利用されることは前回の講座で学習しましたよね。

divにclass名が付くことが多いのは、それぞれのdivのグループを識別することでCSSを適切に書き分けたいからです。

ちょっと難しいと思うので以下の例で確認していきましょう。

説明01

例えば以下のようなコードがあった場合、画像と文章は当然縦に並びます。

<img src="img/photo.jpg">
<p>イヌはヒトと同じく社会性を持つ生き物です。意思疎通をするための感情や表情も豊かです</p>
<p>褒める、認める、命令するなどの概念を持っています。ヒトに飼われているイヌは、
<br>人間の家族と自身を1つの群れの構成員と見なしていると考えられています。</p>

説明02

右の例のように横並びにした上で、文章の方に装飾を加えたいとします。

【Before】縦並びから→

【After】横並び+装飾を加えたい

説明03

<div>
    <div>
        <img src="img/photo.jpg">
    </div>
    <div>
        <p>イヌはヒトと同じく社会性を持つ生き物です。意思疎通をするための感情や表情も豊かです</p>
        <p>褒める、認める、命令するなどの概念を持っています。ヒトに飼われているイヌは、
        <br>人間の家族と自身を1つの群れの構成員と見なしていると考えられています。</p>
    </div>
</div>

その場合、divでそれぞれの要素をグルーピングするところまでは良いですが、

このままでは<div>が複数あるため、セレクタをdivとしてdiv{ ~~ }というCSSを書いては全てのdivに対して同じCSSが適用されてしまいますよね。

説明04

<div class="box">
    <div class="photo">
        <img src="img/photo.jpg">
    </div>
    <div class="description">
        <p>イヌはヒトと同じく社会性を持つ生き物です。意思疎通をするための感情や表情も豊かです</p>
        <p>褒める、認める、命令するなどの概念を持っています。ヒトに飼われているイヌは、
        <br>人間の家族と自身を1つの群れの構成員と見なしていると考えられています。</p>
    </div>
</div>

そこで、それぞれの<div>に対して

  • <div class="box">
  • <div class="photo">
  • <div class="description">

という名前をつけてあげることで、CSSを適切に振り分けることができるようになります。

説明05

.box{
    display: flex;
}

.photo{
    flex-basis: 40%;
}

.description{
    border: solid 1px;
    box-shadow: 6px 6px 0px;
    flex-basis: 60%;
    padding: 15px;
    margin-left: 15px;
}

最終的なCSSはこのようになります。

divをセレクタにするのではなく、class名をセレクタにすることで適切にCSSを適用させることができていますね。

display: flexはレイアウトをコントロールするプロパティです。

#16_display : flexを使って横並び・中央揃えのレイアウトの基礎を身につけよう」で学習します。

【小テスト】idとclassのおさらい

【告知】次回の講座でclassの理解度の課題にチャンレジします

以下のおさらいできた人は「#13_divとclass属性を使った課題に挑戦しよう」へ進んで今回の講座の理解度をチェックしてみてください。

【Before】このHTMLを→

【After】classを使ってこのように装飾

classの課題

id属性とclass属性についての小テストをしよう!

Q.idとclassの主な役割は?
要素ごとに識別できる名前をつけて、特定の要素にのみCSSを適用するため
Q.idとclassのセレクタの書き方は?書いていい文字のルールは?
idは#id名、classは.class名
ルールは半角英数字と「_」と「-」の記号が使用可能。
記号や数字から始まるのはNG(NG例:_text01titleなど)
Q.idとclassのうち同じ名前を複数つけることができるのはどっち?
class、idは同じページに1つまで
Q.同じ要素に対して<p id="text" class="title">とidとclassの両方が指定されており、
#text{ color : black }.title{ color : white }とCSSが重複していた場合、優先されるのはどちら?
#text{ color : black }、同じ要素のidとclassでプロパティが重複している時はidが優先される
Q.ページ内リンクを作成する時に使用するのはどっち?またhrefには何と書く?
id、href属性には<a href="#id名">と書くことでid名が書かれた要素まで移動する
Q.idとclass頻繁に使用されるのはどっち?その理由は?
class、共通の要素に同じCSSを割り当てたい時にidは同じ名前をつけることができない。
classであれば複数同じ名前を使えるので共通のCSSを適用したい時に利便性が高い
Q.class名はどのように決める?
デザインデータから適切な英単語を自由に決めることができる