Documentation CSS

概要

inheritは、CSSのグローバルキーワードの一つで、要素が親要素からプロパティの値を強制的に継承するように指定します。CSSでは一部のプロパティは自動的に継承されますが、inheritを使用することで、通常は継承されないプロパティも親要素の値を引き継ぐことができます。

CSSの継承とは

CSSには「継承(Inheritance)」という仕組みがあり、親要素に設定されたスタイルが子要素に自動的に引き継がれるプロパティがあります。例えば、colorfont-familyなどのテキスト関連のプロパティは自動的に継承されますが、bordermarginなどのボックスモデル関連のプロパティは継承されません。

継承されるプロパティと継承されないプロパティ

自動的に継承されるプロパティ

以下のプロパティは、親要素から子要素へ自動的に継承されます:

  • テキスト関連: color, font-family, font-size, font-weight, font-style, line-height
  • テキスト整形: text-align, text-indent, text-transform, letter-spacing, word-spacing
  • リスト: list-style, list-style-type, list-style-position, list-style-image
  • その他: visibility, cursor, direction

継承されないプロパティ

以下のプロパティは、デフォルトでは継承されません:

  • ボックスモデル: width, height, margin, padding, border
  • 配置: position, top, right, bottom, left
  • 背景: background, background-color, background-image
  • レイアウト: display, float, flex, grid

inheritキーワードの基本的な使い方

.child {
    property: inherit;
}

inheritを指定すると、そのプロパティは親要素の計算済みの値を継承します。

基本的な使用例

.parent {
    color: blue;
    border: 2px solid red;
}

.child {
    /* colorは自動的に継承される */
    /* borderは通常継承されないが、inheritで強制的に継承 */
    border: inherit;
}
<div class="parent">
    親要素(青い文字、赤い枠線)
    <div class="child">
        子要素(青い文字を継承、赤い枠線も継承)
    </div>
</div>

実践的な使用例

1. ボタンのスタイルを統一する

親要素のスタイルを複数の子要素に適用する例:

.button-group {
    border: 2px solid #007bff;
    border-radius: 5px;
    padding: 10px;
}

.button {
    /* 通常は継承されないborderを親から継承 */
    border: inherit;
    border-radius: inherit;
    background: white;
    padding: 8px 16px;
    margin: 5px;
}
<div class="button-group">
    <button class="button">ボタン1</button>
    <button class="button">ボタン2</button>
    <button class="button">ボタン3</button>
</div>

2. テーマカラーの一括管理

.theme-dark {
    color: #ffffff;
    background-color: #333333;
    border-color: #555555;
}

.card {
    background-color: inherit; /* 親のテーマ色を継承 */
    border: 1px solid;
    border-color: inherit; /* 親のボーダー色を継承 */
    padding: 20px;
    margin: 10px;
}
<div class="theme-dark">
    <div class="card">
        このカードは親のテーマカラーを継承します
    </div>
</div>

3. リンクの色を親から継承

デフォルトでは、リンク(<a>タグ)は青色で表示されますが、親要素の色を継承させることができます:

.custom-text {
    color: #ff6600;
}

.custom-text a {
    color: inherit; /* 親の色(オレンジ)を継承 */
    text-decoration: inherit;
}
<p class="custom-text">
    このテキストはオレンジ色です。
    <a href="#">このリンクも親の色を継承してオレンジ色</a>
</p>

4. ナビゲーションメニューの統一

nav {
    font-family: 'Arial', sans-serif;
    font-size: 16px;
    color: #333;
}

nav ul {
    list-style: none;
    padding: 0;
}

nav li {
    font-family: inherit; /* navのフォントを継承 */
    font-size: inherit; /* navのフォントサイズを継承 */
    color: inherit; /* navの色を継承 */
    display: inline-block;
    margin: 0 10px;
}

Before/After比較

Before: 個別に指定

.parent {
    color: #2c3e50;
    font-family: 'Helvetica', sans-serif;
    font-size: 16px;
}

.child-1 {
    color: #2c3e50; /* 親と同じ値を手動で設定 */
    font-family: 'Helvetica', sans-serif;
    font-size: 16px;
}

.child-2 {
    color: #2c3e50; /* 親と同じ値を手動で設定 */
    font-family: 'Helvetica', sans-serif;
    font-size: 16px;
}

After: inheritを使用

.parent {
    color: #2c3e50;
    font-family: 'Helvetica', sans-serif;
    font-size: 16px;
}

.child-1,
.child-2 {
    color: inherit; /* 親から継承 */
    font-family: inherit;
    font-size: inherit;
}

親要素の値を変更すれば、子要素も自動的に更新されます。

inheritと他のグローバルキーワード

CSSには、inherit以外にも以下のグローバルキーワードがあります:

initial

プロパティを初期値(ブラウザのデフォルト値)にリセットします。

.element {
    color: initial; /* ブラウザのデフォルト色に戻す */
}

unset

継承されるプロパティにはinherit、継承されないプロパティにはinitialと同じ動作をします。

.element {
    color: unset; /* colorは継承されるので inherit と同じ */
    margin: unset; /* marginは継承されないので initial と同じ */
}

revert

ユーザーエージェントスタイルシートの値に戻します。

.element {
    display: revert;
}

よくある使用パターン

1. カードコンポーネントの一貫性

.card-container {
    border: 1px solid #ddd;
    border-radius: 8px;
    box-shadow: 0 2px 4px rgba(0,0,0,0.1);
}

.card {
    border: inherit;
    border-radius: inherit;
    margin: 10px;
    padding: 15px;
}

2. フォーム要素のスタイル統一

.form-group {
    font-family: 'Roboto', sans-serif;
    font-size: 14px;
    color: #333;
}

.form-group input,
.form-group select,
.form-group textarea {
    font-family: inherit;
    font-size: inherit;
    color: inherit;
}

3. アイコンとテキストの色の統一

.info-text {
    color: #007bff;
}

.info-text .icon {
    color: inherit; /* テキストと同じ色 */
    margin-right: 5px;
}

注意点と制限事項

1. 意図しない継承に注意

inheritを使用すると、意図しないスタイルが適用される可能性があります:

.parent {
    width: 500px;
    border: 5px solid red;
}

.child {
    /* widthを継承すると、親と同じ500pxになってしまう */
    width: inherit; /* 注意が必要 */
}

2. パフォーマンスへの影響

過度にinheritを使用すると、スタイル計算のパフォーマンスに若干の影響を与える可能性があります。必要な場所にのみ使用しましょう。

3. ブラウザサポート

inheritキーワードは、すべてのモダンブラウザでサポートされています:

  • Chrome: すべてのバージョン
  • Firefox: すべてのバージョン
  • Safari: すべてのバージョン
  • Edge: すべてのバージョン

デバッグとトラブルシューティング

開発者ツールでの確認

ブラウザの開発者ツールを使用すると、inheritによって継承された値を確認できます:

  1. 要素を右クリック→「検証」
  2. Computedタブで計算済みの値を確認
  3. 継承元をたどることができる

よくある問題

問題: inheritを設定したが、期待した値が適用されない

解決策:

  • 親要素に該当するプロパティが設定されているか確認
  • より具体的なセレクタで上書きされていないか確認
  • ブラウザの開発者ツールで継承チェーンを確認

まとめ

inheritキーワードは、CSSのスタイル継承を制御するための強力なツールです。

使用時のポイント

  • コードの一貫性: 親要素で一度設定すれば、子要素が自動的に同じスタイルを適用
  • 保守性の向上: 親要素の値を変更するだけで、すべての子要素が更新される
  • 適切な使用: 通常継承されないプロパティに対して効果的
  • デバッグ: 開発者ツールで継承チェーンを確認できる

テーマの管理、コンポーネントの一貫性、フォームのスタイリングなど、様々な場面で活用できます。

参考文献

円