- Technology & Technique Output Blog -

【Sass】mixinでメディアクエリを管理する方法【応用編】

Web制作・プログラミング

※本サイトはアフィリエイト広告を利用しています。

【Sassのmixinを使ったメディアクエリについて知りたい人】

悩んでいる人

 
「メディアクエリのコードを毎回書くのってめちゃくちゃ面倒。。Sassのmixinを使った便利なコードの書き方があれば知りたいなぁ。」

 

こういった疑問に答えます。

この記事の内容は、
過去にWeb制作会社で
エンジニアをしていたこの僕が
当時現場で実際に学んだもの。

記事を読み終わる頃には、メディアクエリに関して、

  • コードを書く量が減って最高
  • ブレイクポイントに使っている値が一覧で分かる

こういった状態になっていますよ。

※ブレイクポイントとは…
 
ブラウザの画面幅にあわせて、Webサイトを最適なレイアウトで見れるように設定する境界値のこと。

 

ちなみに、
Sassの導入と基礎に関しては
下記の記事で解説しています。

 
≫【初心者向け】VSCodeでのSassの使い方を徹底解説【導入手順から学習方法まで】


 

では、メディアクエリを
mixinで管理する方法
を解説していきます。

メディアクエリをSassのmixinで管理する方法

メディアクエリをSassのmixinで管理する方法

今回使うSassの機能は、以下の2つ。

  • 機能その①:マップ
  • 機能その②:mixin

機能その①:マップ

実際に見た方が早いと思うので、
下記のコードをご覧ください。

 

$breakpoint: (
  s: 'screen and (max-width: 767px)',
  m: 'screen and (max-width: 1024px)',
  l: 'screen and (max-width: 1280px)'
);

こちらがマップ
ブレイクポイントを管理したコード。

このマップですが、
これだけ見ても初めての方は
訳が分からないと思うので、
コードの説明を下記にまとめました。

マップを『定義』する方法

$マップの名前: (
  キー01: キー01に対する「値」,
  キー02: キー02に対する「値」,
  キー03: キー03に対する「値」
);

まず上記のように、
$から始まる任意の名前をマップにつけます。

そしてその後ろの丸括弧()内に、
キー(key)とそれに対する値(value)
を連想配列のようなかたちで
カンマ『,』で区切って記述します。

これがマップの基本形です。

JavaScriptなどで使用する
「連想配列」に慣れていない方は
難しく感じるかもですが、
今は完璧に理解できなくても大丈夫です。

 

暗記する必要もありませんので、
使いながら徐々に慣れていきましょう。

マップから『値を取得』する方法

次に、先ほど定義した
マップから値を取得する方法
をみていきます。

マップから値を取得するには、
map-get』という関数を使います。

こちらも実際に見た方が早いと思うので
下記のコードをご覧ください。

 

$breakpoint: (
  s: 'screen and (max-width: 767px)',
  m: 'screen and (max-width: 1024px)',
  l: 'screen and (max-width: 1280px)'
);
map-get($breakpoint, s);

screen and (max-width: 767px)  //出力結果

 

上記の説明が下記の通り。

 

map-get($マップの名前, 取得したい値のキー)

 
 

このように、
『map-get()』の丸括弧()内に
第一引数としてマップの名前
第二引数に取得したい値に対応するキー
を指定します。

以上がマップの説明です。

 

このマップの機能と、
これから説明する
mixin」という機能を使って
メディアクエリを管理します。

では次に、
mixin』についてみていきます。

機能その②:mixin

このmixinの読み方ですが、
「ミックスイン」や「ミクシン」など
人によって呼び方が違うのですが、
ミックスイン」が無難そうです。

さてこのmixinですが、
CSSのスタイルを定義しておいて、
別の場所でそれを使い回せる機能
“です。
 
また、引数が使えるのも大きな特徴です。

mixinを『定義』する方法

mixinを定義するコードが以下の通り。

 

 //マップを定義
$breakpoint: (
  s: 'screen and (max-width: 767px)',
  m: 'screen and (max-width: 1024px)',
  l: 'screen and (max-width: 1280px)'
);

 //mixinを定義
@mixin mq($bp) {
  @media #{map-get($breakpoint, $bp)} {
   @content;
  }
}

 
 

上記のコードを見て、

 

目が飛び出る男性

「なんじゃこりゃー!!」

 

と思ったのが、
#{map-get($breakpoint, $bp)}
の部分ではないでしょうか。

こちらの波括弧{ }内の
『map-get($breakpoint, $bp)』は
先ほど説明したので分かると思いますが、
問題はその外の『#{ }』でしょう。

こちらは
インターポレーション』と言い、
この記述がないと
プロパティの値としてでしか
使用することができません。

しかし、この『#{ }』の
波括弧の中に記述することにより、
セレクタプロパティ名にも
使用することが出来るようになります。

mixinを『呼び出す』方法

最後に、上記で定義したmixinを
下記のコードで呼び出すだけです。

 

 //mixinの定義
@mixin mq($bp) {
  @media #{map-get($breakpoint, $bp)} {
   @content;
  }
}

 //mixinの呼び出し
@include mq(取得したい値のキー) {
 //処理したい内容
}

 
 

コンパイル後の結果が下記の通り。

 

@media screen and (max-width: 〇〇px) {
 //処理したい内容
}

今回のコードのまとめ【コピペもOK】

今回のコードのまとめ【コピペもOK】

最後に、
今回紹介したコードを
一覧にしてまとめておきます。

「正直難しかった」という方は、
こちらをコピペしていただいても構いません。

マップの定義

$breakpoint: (
  s: 'screen and (max-width: 767px)',
  m: 'screen and (max-width: 1024px)',
  l: 'screen and (max-width: 1280px)'
);

マップから値を取得

map-get($breakpoint, 取得したい値のキー)

mixinの定義

@mixin mq($bp) {
  @media #{map-get($breakpoint, $bp)} {
   @content;
  }
}

mixinの呼び出し

@include mq(取得したい値のキー) {
 //処理したい内容
}

 
 
 

これらのコードを使うことで、冒頭でも言った通り

  • コードを書く量が減って最高
  • ブレイクポイントに使っている値が一覧で分かる

上記を実感していただけると思います。

はじめのうちは
難しく感じるかもですが、
本記事を繰り返し読んで
ぜひ実務で使ってみてください。

おすすめ書籍

Tweet Facebook

関連記事

スキル学習に関する記事