【CSS】レッスン2-07:継承とカスケードの仕組みと実践テクニック

ながみえ
HTML/CSSレッスン2-7『継承とカスケードを理解しよう』記事用アイキャッチ画像

一つ前の章ではボックススタイルについて学習しました。

今回は継承とカスケードについて見ていきましょう。

Lesson1:HTML入門編
Lesson2:CSS入門編
 ・Lesson2-1:CSS学習の入り口|文字に色を付けよう
 ・Lesson2-2:CSSを読み込む3つの方法
 ・Lesson2-3:テキストスタイルを変更しよう
 ・Lesson2-4:4種類のセレクタを使いこなそう
 ・Lesson2-5:ボックスモデルを理解しよう
 ・Lesson2-6:ボックススタイルを変更しよう
 ・Lesson2-7:継承とカスケードを理解しよう ◁今回はココ
 ・Lesson2-☆1:セレクタの階層構造と優先順位を理解しよう
 ・Lesson2-☆2:Webサイトの配色をマスターしよう
Lesson3:CSS応用編

CSS(Cascading Style Sheets)はウェブページの見た目を整えるために欠かせない技術です。

しかし複数のスタイルが競合したり、親要素のスタイルが子要素に影響を与えたりする場面がよくあります。

このようなCSSの動作を理解するために、「継承」と「カスケード」という2つの重要な概念を学ぶ必要があります。

本記事では、実際の例を交えながらCSSの継承とカスケードの基本をわかりやすく解説します。

正しく活用する方法を学んでいきましょう。

<<前のページ

HTML/CSSレッスン2-6『ボックススタイルを変更しよう』記事用アイキャッチ画像

HTML/CSSの記事一覧

HTML/CSS学習カテゴリの親ページ用アイキャッチ画像(Webサイト制作入門)、記事一覧へのリンク案内

次のページ>>

HTML/CSSレッスン2-☆1『セレクタの完全ガイド|優先順位と階層構造 を理解しよう』記事用アイキャッチ画像

継承とは?|親要素のスタイルを子要素に適用しよう

CSSにおける継承(Inheritance)とは、親要素に指定したスタイルが子要素へと自動的に受け継がれる仕組みです。

これにより同じスタイルを何度も指定する手間を省き、スタイルの管理を簡単にすることができます。

【CSS】勉強猫がノートパソコンを前にして学習を始める様子。記事内の学習スタート用イラスト

例えば以下のHTMLコードの場合、<div>要素に何かのスタイルを指定すると、その子要素である<h2>要素や<p>要素にもそのスタイルが適用されます。

<!-- 例えばdivの文字色を赤にすると、h2もpも赤になる -->
<div>
  <h2>CSSの継承について</h2>
  <p>divのスタイルを継承します。</p> 
</div>

継承されるプロパティと継承されないプロパティの違いを解説

すべてのCSSプロパティが継承されるわけではありません。

基本的に、継承されるのはテキストに関するプロパティのみです。例えば、以下のプロパティは継承されます:

  • color(文字色)
  • font(フォント全体の設定)
  • font-family(フォントの種類)
  • visibility(要素の表示/非表示)
  • cursor(マウスカーソルのスタイル)

一方で、ボックスモデル関連のプロパティは継承されません。例えば:

  • margin(外側の余白)
  • padding(内側の余白)
  • border(境界線)
  • widthheight(要素の幅・高さ)

継承されないプロパティを子要素にも適用したい場合は、後述の inheritキーワード を使用して、明示的に継承を指定できます。

継承の具体例とコードサンプル

以下の例を見てみましょう:

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSSの継承</title>
    <style>
        body {
            font-family: Arial, sans-serif;
            color: blue;
        }
        p {
            font-size: 18px;
        }
    </style>
</head>
<body>
    <h1>CSSの継承について</h1>
    <p>このテキストは青色になっています。</p>
</body>
</html>
  • body要素に対して font-familycolor が設定されています。
  • これにより、h1p タグなどの子要素にもフォントと文字色が継承されます。
  • pタグに指定された font-size: 18px; は直接適用されるので、その他の要素に影響はありません。

継承を制御する方法|inherit, initial, unsetを使いこなそう

継承を制御するために、以下のキーワードが使用できます:

  • inherit:親要素のスタイルを強制的に継承
  • initial:プロパティをデフォルト値にリセット
  • unset:プロパティを継承可能な場合は継承し、そうでない場合はデフォルト値に戻す
<style>
  div {
    color: red;
  }
  p {
    color: initial;  /* ブラウザのデフォルトの色に戻る */
  }
</style>
<div>
  <p>このテキストは通常の黒色に戻ります。</p>
</div>

ここでは、p 要素の color プロパティが、ブラウザの初期設定(通常は黒)に戻ります。

まとめ

CSSの継承はウェブページ全体の一貫性を保つために非常に便利な機能です。

ただしすべてのプロパティが継承されるわけではないため、適切に制御することが重要です。

次のセクションでは、スタイルの競合を解決するカスケードについて学びます。

コードを書いてみよう

以下のコードで、親要素のスタイルが子要素に適用されるかどうかを試してみましょう。

  • 段落(p)タグのフォントサイズはどうなりますか?
  • 段落(p)タグの余白(padding)はどうなりますか?
  • フォントサイズと余白のどちらが継承されますか?
<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>継承の確認</title>
    <style>
        div {
            padding: 20px;
            font-size: 18px;
        }
    </style>
</head>
<body>
    <div>
        <p>このテキストのフォントサイズと余白はどうなりますか?</p>
    </div>
</body>
</html>

カスケードとは?|スタイルの優先順位を理解しよう

カスケード(Cascade)とは、複数のCSSルールが同じ要素に適用される場合にどのスタイルが最終的に適用されるかを決定する仕組みです。

CSSの「C」は「Cascading(カスケーディング)」の略であり、この概念はCSSの最も基本的かつ重要な特徴の一つです。

カスケードのルールを正しく理解することで、意図しないスタイルの上書きを防ぎ、スタイルの管理をしやすくなります。

カスケードの適用順序|スタイルが決まる仕組みを理解しよう

CSSのカスケードに影響を与える主な要素は次の3つです:

  1. スタイルの起源(Origin)
    • ユーザーエージェントスタイル(ブラウザのデフォルトスタイル)
    • ユーザースタイル(ユーザーが設定したスタイル)
    • 作成者スタイル(開発者が指定したCSS)
  2. セレクタの優先順位(Specificity)
    • セレクタの種類
    • 詳細度(より具体的なスタイルが優先される)
    • 計算式:(要素セレクタ: 0,0,1、クラスセレクタ: 0,1,0、IDセレクタ: 1,0,0、インラインスタイル: 1,0,0,0
  3. 適用順序(Order of Appearance)
    • 同じ詳細度のスタイルが競合した場合、後から記述されたスタイルが優先されます。

カスケードの優先順位|詳細度・起点・重要度

以下のコードを見てみましょう。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSSのカスケード</title>
    <style>
        /* 要素セレクタ */
        p {
            color: blue;
        }

        /* クラスセレクタ(要素セレクタより優先) */
        .text {
            color: green;
        }

        /* IDセレクタ(クラスセレクタより優先) */
        #unique {
            color: red;
        }

        /* インラインスタイル(すべてより優先) */
    </style>
</head>
<body>
    <p class="text" id="unique" style="color: purple;">このテキストの色は紫色になります。</p>
</body>
</html>
  1. p タグに複数のスタイルが適用されています:
    • p { color: blue; } → 要素セレクタ(優先度低)
    • .text { color: green; } → クラスセレクタ(優先度中)
    • #unique { color: red; } → IDセレクタ(優先度高)
    • style="color: purple;" → インラインスタイル(最も優先される)
  2. 最終的にインラインスタイルの color: purple; が適用され、紫色になります。

!importantの使い方と注意点|使いどころと使いすぎのリスク

CSSには特定のスタイルを強制的に適用するための !important ルールがあります。

通常のルールや優先順位に関係なく、!important を付けたスタイルが最も優先されます。

p {
    color: blue !important;
}

.text {
    color: red;
}

この場合、.text クラスを持つ要素に対しても、 !important を指定した青色が適用されます。

注意点

 !important を多用するとスタイルの管理が難しくなるため、使用は最小限に抑えましょう。

カスケードを活用するコツ|競合するスタイルをうまく調整する方法

  1. セレクタの優先度を意識する:
    クラスやIDの使い分けを適切に行い、過剰なセレクタのネストを避ける。
  2. スタイルの適用順序を管理する:
    同じ要素に異なるスタイルを適用するときは、CSSファイルの記述順を確認する。
  3. !important の使用を避ける:
    不必要な強制適用はコードの可読性と保守性を低下させる。
コードを書いてみよう

以下のHTMLとCSSコードでは、pタグの文字色は最終的に何色になるでしょうか?

また、なぜその色が選ばれたのか、カスケードの優先順位を考えて説明してみましょう。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>カスケードの確認</title>
    <style>
        p {
            color: blue;
        }
        .highlight {
            color: green;
        }
        #special {
            color: red;
        }
    </style>
</head>
<body>
    <p id="special" class="highlight">このテキストの色は何色になりますか?</p>
</body>
</html>
【CSS】勉強猫がノートパソコンを見ながら考え込む様子。記事内の休憩用イラスト

継承とカスケードの組み合わせ|スタイル競合時の優先ルールを理解しよう

CSSのスタイルを適切に管理するためには、継承とカスケードの両方の仕組みを理解し、組み合わせて活用することが重要です。

継承によって親要素から子要素へスタイルを受け継ぎ、カスケードによって競合するスタイルの優先順位を適切に制御します。

継承とカスケードが競合する時の優先ルール

継承とカスケードは異なる概念ですが、以下のような場面で互いに影響を与えます。

  1. 継承とカスケードの競合
    継承されるプロパティと、後から適用されたスタイルが競合した場合、カスケードルールが優先されます。
  2. inherit!important の併用
    親要素のスタイルを強制的に継承する inherit を使うことで、特定の要素をスタイル統一できますが、!important が指定されたスタイルには影響されません。
  3. スタイルの再利用性の向上
    継承を活用して基本的なデザインを設定し、カスケードによってページの特定部分を調整することで、効率的なスタイル設計が可能です。

継承とカスケードを活用する3つの実践テクニック

継承とカスケードをうまく組み合わせることで、以下のようなメリットが得られます。

  1. 共通スタイルの設定:
    サイト全体の基本フォントやカラーを親要素に設定し、全体の一貫性を確保。
  2. 特定要素のスタイル調整:
    カスケードを利用して、必要な部分のみスタイルを上書き。
  3. メンテナンスの容易化:
    継承を適切に活用することで、冗長なスタイル指定を減らし、保守性を向上。
コードを書いてみよう

次のコードでは、pタグに適用される文字の色は何色になるでしょうか?

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>継承とカスケードの組み合わせ</title>
    <style>
        body {
            color: gray;
        }
        p {
            color: red;
        }
        .highlight {
            color: blue;
        }
    </style>
</head>
<body>
    <p class="highlight">このテキストの色は何色になりますか?</p>
</body>
</html>
【CSS】勉強猫がコーヒーを片手にリラックスしている様子。記事内の休憩用イラスト

まとめ

お疲れさまでした!これまでのレッスンを通して、CSSの基本的なスタイリングについて学習しました。

文字に色をつけるところから始まり、レイアウトの基礎となるボックスモデル、さらには継承とカスケードといった重要な概念まで、CSSの基本を幅広く習得できたと思います。

これらの知識を活用することで、ウェブページの見た目を整え、より魅力的なデザインを作ることができるようになりました。

最初は難しく感じることもあったかもしれませんが、実際に手を動かして試していくことで、少しずつ理解が深まっていくでしょう。

次の「Lesson3:CSSの応用スタイリング編」では、より高度なデザインテクニックに挑戦します。

これまで学んだ基本を応用しながら、さらに魅力的なデザインを作る準備を進めていきましょう!

練習問題2-7:CSSの継承とカスケードを活用しよう!

Q
練習問題に挑戦する人はここをクリック!
【CSS】勉強猫がノートパソコンに向かい、練習問題に挑戦する様子。記事内の休憩用イラスト

VSCで「training2-7.html」と「training2-7.css」のふたつのファイルを作って保存してください。

training2-7.htmlには以下のコードをコピーして貼り付けましょう。

training2-7.cssには指定された条件に基づいて、親要素からの継承と、カスケードのルールを適切に活用してください。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>CSSの復習問題</title>
    <link rel="stylesheet" href="lesson2-7.css">
</head>
<body>
    <div class="content">
        <h1>継承とカスケードの復習</h1>
        <p>
            このテキストは適切なスタイルで表示されていますか?
            <span>この部分の色は青にしてください。</span>
        </p>
    </div>
</body>
</html>
  • ページ全体のフォントは「Arial」で、すべての要素に継承されるようにすること。
  • 見出し(h1)の文字色は親要素から継承しつつ、フォントサイズを 32px に指定すること。
  • 段落(p)の文字色は親要素から継承しつつ、フォントサイズを 18px にすること。
  • pタグの中の span タグは、親要素のフォントサイズを継承しながら、文字色を 青色(blue) に設定すること。
  • p タグの背景色を グレー(#f0f0f0) に指定し、カスケードのルールを利用して、!important を使わずにスタイルを適用すること。
もっと分かりやすい学習サイトにするために

この記事を読んで「ここが分かりにくかった」「ここが難しかった」等の意見を募集しています。

世界一わかりやすいHTML/CSS学習サイトにするため、ぜひ 問い合わせフォーム からご意見下さい。

<<前のページ

HTML/CSSレッスン2-6『ボックススタイルを変更しよう』記事用アイキャッチ画像

HTML/CSSの記事一覧

HTML/CSS学習カテゴリの親ページ用アイキャッチ画像(Webサイト制作入門)、記事一覧へのリンク案内

次のページ>>

HTML/CSSレッスン2-☆1『セレクタの完全ガイド|優先順位と階層構造 を理解しよう』記事用アイキャッチ画像

初めてのWebサイトを作ろう2-7

このサイトの Lesson1-1(HTML学習の入り口)  かLesson2-1(CSS学習の入り口)から順番に学習していくことで、HTMLとCSSの基本情報をまとめたあなたのWebサイトを作成できます。

サイトのタイトルは「自分で作る!HTML&CSSの学習サイト

この「初心者のためのプログラミングテキスト&問題集」で紹介しているHTMLやCSSの情報・知識、覚えるべきタグなど簡潔にまとめ、後から辞書のように使えることを目標としています。

Q
Webサイト制作に挑戦する人はここをクリック!

自分だけのWebサイト制作にはベースとなる基本セットが必要になります。

まだ入手していない人はLesson1-1Lesson2-1のページ下部からダウンロードして下さい。

Lesson2-7のまとめノートと練習問題を追加しよう

このLessonのまとめノートと練習問題の解答を、MyWebsiteフォルダに追加しましょう。

1.練習問題の解答を保存

練習問題2-7で作成した2つのファイルを学習フォルダの中に保存しましょう。

  • training2-7.html ⇒ Lesson2フォルダに保存
  • training2-7.css ⇒ Lesson2フォルダの中のstyleフォルダに保存

トップページからリンクで飛べるようになりますので確認しましょう。

2.まとめノートを作成・保存

下記のHTMLコードは、このLesson2-7で紹介した内容を端的にまとめてブラウザ表示するためのコードです。

これをコピーして「MyWebsite2-7.html」という名前で保存し、「lesson2(学習フォルダ)」の中に保存してください。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Lesson2-7</title>
    <link rel="stylesheet" href="style/styles-lesson2.css">
</head>
<body>

    <h1>Lesson2-7:継承とカスケードを理解しよう</h1>

    <div class="container">
        <h2>目的・要点</h2>
        <p>
            CSSの「継承」と「カスケード」は、スタイルの適用方法を理解し、適切に管理するための重要な概念です。
            本レッスンでは、これらの仕組みを学び、スタイルの競合を適切に解決できるようになることを目指します。
        </p>

        <h2>本レッスンの到達目標</h2>
        <ul>
            <li>継承によるスタイルの適用ルールを理解し、親要素から子要素への影響を適切に管理する。</li>
            <li>カスケードの優先順位のルールを学び、競合するスタイルの制御方法を習得する。</li>
        </ul>

        <h2>このレッスンで学習した内容</h2>

        <h3>継承(Inheritance)</h3>
        <ul>
            <li><strong>継承とは</strong>: 親要素のスタイルが子要素に適用される仕組み。</li>
            <li><strong>継承されるプロパティ</strong>: <code>color</code>(文字色)、<code>font-family</code>(フォントの種類)、<code>visibility</code>(表示/非表示)など。</li>
            <li><strong>継承されないプロパティ</strong>: <code>margin</code>(外側の余白)、<code>padding</code>(内側の余白)、<code>border</code>(境界線)など。</li>
            <li><strong>継承を制御するプロパティ</strong>:
                <ul>
                    <li><code>inherit</code>: 親要素のスタイルを強制的に継承</li>
                    <li><code>initial</code>: プロパティを初期値に戻す</li>
                    <li><code>unset</code>: 継承可能な場合は継承し、そうでない場合は初期値に戻す</li>
                </ul>
            </li>
        </ul>

        <h3>カスケード(Cascade)</h3>
        <ul>
            <li><strong>カスケードとは</strong>: 複数のスタイルが競合したときに、どのスタイルが適用されるかを決定する仕組み。</li>
            <li><strong>カスケードの影響要素</strong>:
                <ul>
                    <li><strong>スタイルの起源(Origin)</strong>: 
                        <ul>
                            <li>ブラウザのデフォルトスタイル</li>
                            <li>ユーザーが設定したスタイル</li>
                            <li>開発者が記述したスタイル(最優先)</li>
                        </ul>
                    </li>
                    <li><strong>セレクタの詳細度(Specificity)</strong>: 
                        <ul>
                            <li>要素セレクタ <code>p</code>(優先度: 低)</li>
                            <li>クラスセレクタ <code>.class</code>(優先度: 中)</li>
                            <li>IDセレクタ <code>#id</code>(優先度: 高)</li>
                            <li>インラインスタイル <code>style="color: red;"</code>(最優先)</li>
                        </ul>
                    </li>
                    <li><strong>適用順序(Order of Appearance)</strong>: 同じ詳細度のスタイルが競合した場合、後に記述されたスタイルが適用される。</li>
                    <li><strong><code>!important</code> の使用</strong>: すべてのルールより優先されるが、多用すると管理が困難になる。</li>
                </ul>
            </li>
        </ul>

        <h2>トピック・豆知識</h2>
        <ul>
            <li>共通スタイルは親要素で指定し、子要素で個別調整</li>
            <li>詳細度を考慮してクラスやIDを適切に使い分ける</li>
            <li>カスケードを活用し、不要な<code>!important</code> の使用を控える</li>
        </ul>

        <h2>まとめ</h2>
        <p>
            本レッスンでは、CSSの継承とカスケードについて学び、スタイルの適用方法や優先順位のルールを理解しました。
        </p>
        <ul>
            <li>継承を利用して基本的なデザインの統一を図る。</li>
            <li>カスケードのルールを把握し、競合するスタイルを適切に解決する。</li>
            <li><code>!important</code> を必要な場面でのみ使用し、適切なスタイル管理を行う。</li>
        </ul>
        <p>
            これらの知識を活用し、効率的なCSS設計を行っていきましょう!
        </p>
        <p><a href="../MyWebsite.html">トップページへ戻る</a></p>
    </div>

    <footer>
        <p>&copy; 初心者のためのプログラミングテキスト&問題集</p>
    </footer>

</body>
</html>

これでLesson2-7の作業は完了です。

継続は力なり。次のLessonも、引き続き頑張ってください^^

FAQ|継承とカスケードに関するよくある質問

今回の記事に関する「よくある質問」とその解答について、以下の内容を参考にしてください。

Q
Q1. 継承とカスケードの違いは何ですか?

継承は親要素のCSSプロパティが子要素に自動的に引き継がれる仕組みで、例えばcolorfont-familyなどが対象です。カスケードは複数のCSSルールが適用される場合、どれを最終的に反映するか決める「優先順位ルール」です。

Q
Q2. どのプロパティが継承され、どのプロパティが継承されませんか?

一般にテキストやフォント関連のプロパティ(colorfont-sizeなど)は継承されますが、ボックスモデル関連(marginpaddingなど)は継承されません。プロパティによって仕様が異なるため、公式ドキュメントを確認するのが確実です。

Q
Q3. !importantはカスケードのどのタイミングで優先されますか?

!importantが付いたスタイルは、通常の優先順位(セレクタの詳細度や記述位置)よりも強く適用されます。同じプロパティに複数の!importantがある場合は、セレクタの詳細度や記述位置で最終決定されます。

よくあるトラブルと解決法|継承とカスケード編

今回の記事に関する「よくあるトラブル」とその原因、解決法について、以下の内容を参考にしてください。

CSSが一部の要素にだけ反映されない

Q
トラブルの原因と対処法を見る

トラブルの原因例

カスケードやセレクタの優先順位によって、意図しないスタイルが上書きされている可能性があります。特に、他のCSSファイルや同じセレクタ名を使ったルールの競合、!importantの有無などが影響していることがあります。

トラブルの解決法

まず、ブラウザの開発者ツールを使い、スタイルがどこで上書きされているかを確認してください。セレクタの優先順位や!importantの使用箇所、外部CSSや別ファイルとの競合がないかを一つずつチェックしましょう。原因となっているスタイルを見つけたら、必要に応じてセレクタやスタイルの指定方法を調整してください。

子要素に親要素のフォントや色が適用されていない

Q
トラブルの原因と対処法を見る

トラブルの原因例

継承されるプロパティとされないプロパティの違い、または子要素で明示的に別のスタイルが指定されている場合があります。特にinitialunsetなどの値が使われていると、意図した継承が妨げられることがあります。

トラブルの解決法

親要素と子要素それぞれのCSSを見直し、どのプロパティが明示的に指定されているかを調べましょう。子要素にinitialunsetが指定されていないか、また継承されるはずのプロパティが正しいかどうかを確認してください。必要に応じて、継承したいプロパティにinheritを指定することで意図通りのスタイルを反映できます。

!importantを使ってもスタイルが変わらない

Q
トラブルの原因と対処法を見る

トラブルの原因例

同じプロパティに複数の!importantが使われている場合、セレクタの詳細度や記述の順序によっては、期待通りのスタイルが適用されないことがあります。

トラブルの解決法

影響している全てのCSSルールを洗い出し、どのセレクタが実際に適用されているかを確認してください。同じプロパティへの!important指定が複数ある場合は、どちらが優先されるか(セレクタの詳細度やファイル内の記述順序)を比べてみましょう。必要に応じてセレクタの詳細度を上げたり、スタイルの記述位置を調整して、意図通りのスタイルになるかどうか確認してください。

<<前のページ

HTML/CSSレッスン2-6『ボックススタイルを変更しよう』記事用アイキャッチ画像

HTML/CSSの記事一覧

HTML/CSS学習カテゴリの親ページ用アイキャッチ画像(Webサイト制作入門)、記事一覧へのリンク案内

次のページ>>

HTML/CSSレッスン2-☆1『セレクタの完全ガイド|優先順位と階層構造 を理解しよう』記事用アイキャッチ画像
記事URLをコピーしました