0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

CSSの値【inherit】って知ってる?

Last updated at Posted at 2020-11-23

inheritとは

英語で言う継承っていう意味です。
つまり親のスタイルを参照するよってこと :bulb:

例えば

<h1 class="main-headline">タイトル</h1>

↑にリンクつけたいな〜ってなった時。

<h1 class="main-headline"><a href="/">タイトル</a></h1>

こう書くと、文言「タイトル」に適用されるスタイルは
.main-headlineではなく、aタグのスタイルが優先になりますよね
(親のクラス属性よりも自身のセレクタのほうが(クラス指定じゃなくても)実は強いんです :bulb: )

でも、ベースのCSSとかでaタグにデフォルトのスタイルが指定されている時 :scream:
(本当はこの時点でCSSの設計を見直すべきなんですが、そうも行かない時)
.main-headlineのスタイルが「タイトル」に適用されないからって……

以下のような実装してませんか?

前提条件(こんなCSSの運用例)

index.html
<!-- ※見出しの中にaタグが必ずしも入るとは限らない -->
<h1 class="main-headline"><a class="main-headline__link" href="/">タイトル</a></h1>
base.css
a {
  font-weight: normal;
  color: #000;
  text-decoration: underline;
}

これでは.main-headlineにcolorを指定しても
aタグについているcolorが勝ってしまいます:frowning2:
(リンクの汎用性、柔軟性が落ちているので役割でスタイルつけるの良くないです:no_good_tone1:)

自分で新しくつけるCSS(ここからが本題)

aタグにCSSがついているので上書きするしか無いじゃん!
といって下記のように指定してみます。

style.css
.main-headline {
  font-size: 24px;
  font-weight: bold;
  color: deeppink;
}
/* 上記分のCSSで事足りるのが理想 */
.main-headline__link {
  font-size: 24px;
  font-weight: bold;
  color: deeppink;
  text-decoration: none;
}

もしくはスッキリさせるのであれば↓こう
(CSSは基本的に差分のみ書きましょう〜
無駄なスタイル付けはトラブルの原因になります:skull_crossbones::skull_crossbones::skull_crossbones: )

style.css
.main-headline, .main-headline__link {
  font-size: 24px;
  font-weight: bold;
  color: deeppink;
}

.main-headline__link {
  text-decoration: none;
}

とはいえ、↑のように書くと2重定義って感じでなんだかなぁと思うときもあったり…
(差分をまとめて書いてはいるけど…)

そんなときはinheritを使ってみてはどうでしょう?

ベースにかけられているCSSを把握している事が前提になります:bulb:

style.css
/* 親にだけ指定 */
.main-headline {
  font-size: 24px;
  font-weight: bold;
  color: deeppink;
}
/* 親のスタイルを継承します */
.main-headline__link {
  font: inherit;
  color: inherit;
  text-decoration: inherit;
}

こう書くと(ソースの見た目若干キモいけど:flushed:)
ひと目で親継承っていうのが伝わるかなという一例です:bulb:
(2重定義には変わりはないです、笑)

ちなみにinheritを使用する他のメリットとして、
font-sizeなどのPC,スマホで別々の指定をするプロパティでも
inheritを使えば1行で済むのも良いですね:relaxed:

style.css
/* 親にだけ指定 */
.main-headline {
  font-size: 24px;
}
/* PCの時 */
@media screen and (min-width: 767px) {
  .main-headline {
    font-size: 36px;
  }
}

.main-headline__link{
  /* 1行でPC, スマホ共に捌ける */
  font-size: inherit;
}

とはいえ......
本来であれば、こんなにinherit指定せずとも
親からスタイルが自然に落ちてくる状態がベストなので、

〜余力がある人はCSS設計を見直しましょう〜

親のスタイルが子に効かないゾと思った方は、
inheritを使ってみてはいかがでしょうか :heartpulse:

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?