備忘録

気になったこと、調べたこと、わからなかったことなど..

【CSS】継承

cssにおける継承について。

継承 @extend

定義したクラスを他のクラスで受け継ぐことができます。 例えば、appleというクラスから、色を設定したgreen_appleというクラスを作りたいとします。

.apple {
  width: 50%;
  height: 50%;
}

.green_apple {
  width: 50%;
  height: 50%;
  color: green;
}

appleクラスを複製し、色を設定すると作成することができます。 ただし、この場合widthやheightが変わったとき、appleとgreen_appleの2箇所変更しなければならず保守性がいまいちです。

そこで継承を使用します。

SCSS

.apple {
  width: 50%;
  height: 50%;
}

.green_apple {
  @extend .apple;    //appleクラスを継承
  color: green;
}

appleクラスを継承して色のみ指定してあげることで、appleクラスを適用させたgreen_appleクラスが作成できます。 ただし、@extendを使う場合は1つ注意が必要です。

CSS(出力)

.apple, .green_apple {
    width: 50%;
    height: 50%
}

.green_apple {
    color: green
}

これは先程の継承を使ったscssから作成したcssです。 green_apple クラスが継承元のセレクタ(apple)にグループ化されています。

ここで、appleクラスをcssに出したくない、グループ化しないでほしい!という場合はプレースホルダー(%)を使います。 使い方は、.appleの「.(ドット)」を%に変えます。

%apple {
  width: 50%;
  height: 50%;
}

.green_apple {
  @extend %apple;    //appleクラスを継承
  color: green;
}
.green_apple {
    width: 50%;
    height: 50%
}

.green_apple {
    color: green
}

appleクラスが出力されなくなりました。 共通部品など色々なところで使用するクラスは、一つ定義してそれを継承して使い回すと 統一できていいですね。

[参考サイト]

https://designsupply-web.com/media/knowledgeside/6353/

https://kaminarimagazine.com/web/2016/09/30/sass-%E3%83%97%E3%83%AC%E3%83%BC%E3%82%B9%E3%83%9B%E3%83%AB%E3%83%80%E3%83%BC%E3%82%92%E4%BD%BF%E3%81%8A%E3%81%86%EF%BC%81/