【SCSS】メディアクエリをmixinと変数でまとめて管理する
やりたいこと
.hoge {
@media screen and (min-width: 769px) {
...
}
@media screen and (max-width: 768px) {
...
}
}
- このようにセレクターごとに毎回メディアクエリをネストして書くのが非効率なので、mixinとして定義して使い回したい
- ブレイクポイントを変数で管理したい
解決法
mixin
$breakpoint: 768px;
$breakpoint-map: (
pc: "screen and (min-width: #{$breakpoint + 1px})",
sp: "screen and (max-width: #{$breakpoint})",
);
@mixin mq($device) {
@media #{map-get($breakpoint-map, $device)} {
@content;
}
}
sass:map
を使ってデバイスとメディアクエリを管理する。もしブレイクポイントを増やしたい場合はmapを拡張してあげればOK。
加えて@content
でコンテンツブロックを渡すことで、mixinで囲んだスタイルを指定したデバイスのみで適用させる。
使用例
@use "xxx" as mixin;
.hoge {
@include mixin.mq(pc) {
background-color: red;
}
@include mixin.mq(sp) {
background-color: blue;
}
}
コンパイル結果
@media screen and (min-width: 769px) {
.hoge {
background-color: red;
}
}
@media screen and (max-width: 768px) {
.hoge {
background-color: blue;
}
}