Foundation の使い方: Media Queries 編

Foundation 割と好きめのハマチです。
多機能過ぎて取っ付きにくい印象の Foundation でしたが、その全てを使いきらなくても十分便利でしたので数回に分けてかじっていこうと思います。

Foundation の準備

Foundation があればなんでもいいですが、今回は私がいつも開発用に使っている gulp-web-starter を使ったサンプルで紹介します。このサンプルは

  • Shell Script が動く環境
  • sass > 3.4
  • sass-globbing
  • node.js > 0.12.0
  • npm > 2.7.3
  • bower > 1.3.12

があれば上手く行くと思います。また、この記事が書かれた時点での Foundation のバージョンは5.5.1です。
Foundation の利用方法はいくつかありますが、この例では Bower を使った方法になります。

まずは gulp-web-starter を $ git clone して、セットアップします。

$ git clone https://github.com/vwxyutarooo/gulp-web-starter
$ cd gulp-web-starter
$ npm install
$ npm run gulp -- init

これで Foundation がいい感じに使えます。
BrowserSync のサーバとか Gulp の watch は

$ npm run gulp-server

で立ち上がるので以降この操作だけです。

Foundation の設定ファイル

上記の手順で設定した場合、Foundation のコンポーネントファイルは bower_components/foundaion/scss/foundation/components/ の中です。基本的にこれらのコンポーネントファイルは編集しません。
設定ファイルは前項の $ npm run gulp --init にて

bower_components/foundaion/scss/foundation/foudation.scss
↓
src/scss/core/_foudation.scss

bower_components/foundaion/scss/foundation/_settings.scss
↓
src/scss/core/_settings.scss

へと移動してあります。これで何かの拍子に $ bower install した時にも、設定ファイルが上書きされることはありませんので、この2つの設定ファイルを安心して編集できます。

今回使用するサンプルでは src/scss/app.scss

7: // @import 'core/default';
8: @import 'core/settings';
9: @import 'core/foundation';

の様に書き直して foundation ファイルを読み込みます。core/settings を先に読み込まないと、デフォルトの値をオーバーライドすることが出来ないので注意して下さい。これで Foundation を使う準備ができました。

補足

Foundation の GitHub などで scss/ ファイルを見れば分かりますが、初期の状態では _settings.scss に書いてあるパスと _functions.scss の関係はずれています。_settings.scss 内の

58: @import "foundation/functions";

の記述に対して、初期の構成は

foundation.scss
foundation/_functions.scss
foundation/_settings.scss

です。Questions about project structure and SASS によれば、_seggings.scss は “Bower とかで上書きされないようにずらしてあるから自分で1個上の階層にコピーして使ってね” とのこと。私は自分の SASS ファイルからfoundation.scss を読み込みたいので上記の様な方法をとっています。

Foundation の不要な機能を無効化する

Foundation は多機能過ぎてコンパイルが遅いですし、出来上がる CSS も重たくなるので、必要な機能だけを有効化して使いたいです。
機能の有効/無効は src/scss/core/_foundation.scss の @import ファイルをコメントアウトすることでコントロールします。
今回は Media Queries だけ使いたいので、下記の通り全てコメントアウトです。

@charset "UTF-8";
// Foundation by ZURB
// foundation.zurb.com
// Licensed under MIT Open Source

// Make sure the charset is set appropriately

// Behold, here are all the Foundation components.
  // @import "foundation/components/grid";
  // @import "foundation/components/accordion";
  // @import "foundation/components/alert-boxes";
  // @import "foundation/components/block-grid";
  // @import "foundation/components/breadcrumbs";
  // @import "foundation/components/button-groups";
  // @import "foundation/components/buttons";
  // @import "foundation/components/clearing";
  // @import "foundation/components/dropdown";
  // @import "foundation/components/dropdown-buttons";
  // @import "foundation/components/flex-video";
  // @import "foundation/components/forms";
  // @import "foundation/components/icon-bar";
  // @import "foundation/components/inline-lists";
  // @import "foundation/components/joyride";
  // @import "foundation/components/keystrokes";
  // @import "foundation/components/labels";
  // @import "foundation/components/magellan";
  // @import "foundation/components/orbit";
  // @import "foundation/components/pagination";
  // @import "foundation/components/panels";
  // @import "foundation/components/pricing-tables";
  // @import "foundation/components/progress-bars";
  // @import "foundation/components/range-slider";
  // @import "foundation/components/reveal";
  // @import "foundation/components/side-nav";
  // @import "foundation/components/split-buttons";
  // @import "foundation/components/sub-nav";
  // @import "foundation/components/switches";
  // @import "foundation/components/tables";
  // @import "foundation/components/tabs";
  // @import "foundation/components/thumbs";
  // @import "foundation/components/tooltips";
  // @import "foundation/components/top-bar";
  // @import "foundation/components/type";
  // @import "foundation/components/offcanvas";
  // @import "foundation/components/visibility";

風船をつければ飛んで行きそうな軽さになりました。

Foundation の Media Queries を使う

流石の Foundation もコンポーネントを全て無効にされることは想定しておらず、残念ながらこのままでは使えません。Media Queries を使うためには _global.scss が必要になります。これは各コンポーネントファイルから読まれているのですが、先程全てのコンポーネントファイルを読み込まないようにしてしまった為、これを別途記述します。_foundation.scss の適当な場所に

@import "foundation/components/global";

を書きましょう。これで上記の様にコンポーネントを全て除外しても Media Queries の機能だけを使うことができます。

使い方

使い方は簡単、公式ドキュメント Media Queries – Foundation に書いてある通りですが

@media #{$small-up} { }
@media #{$small-only} { }

@media #{$medium-up} { }
@media #{$medium-only} { }

@media #{$large-up} { }
@media #{$large-only} { }

@media #{$xlarge-up} { }
@media #{$xlarge-only} { }

@media #{$xxlarge-up} { }
@media #{$xxlarge-only} { }

こんな感じの10パターンが使えます。モバイルファーストの考え方ですね。
ブレイクポイントは

  • 641px
  • 1025px
  • 1441px
  • 1921px

となっています。

例えば

h1 {
  font-size: 10px;
  @media #{$medium-up} {
    font-size: 20px;
  }
  @media #{$large-up} {
    font-size: 40px;
  }
}

と書くと

  • SP サイズの h1 が10px
  • タブレットサイズの h1 が 20px
  • PC サイズの h1 が 40px

と指定できます。ブレイクポイントが散らからず、書きやすくて見やすいです。大変便利。

ブレイクポイントの値を変更する

初期値のブレイクポイントは大変よく出来ていますが、好きな値に変更することも可能です。

src/scss/core/_settings.scss の記述を変更します。

153: // d. Media Query Ranges
154: // - - - - - - - - - - - - - - - - - - - - - - - - -
155:
156: // $small-range: (0em, 40em);
157: // $medium-range: (40.063em, 64em);
158: // $large-range: (64.063em, 90em);
159: // $xlarge-range: (90.063em, 120em);
160: // $xxlarge-range: (120.063em, 99999999em);
161:
162: // $screen: "only screen";

の値を変えれば好きなブレイクポイントを設定することができます。

Visibility Classes

Media Queries を使えるようになったので、ついでにサイズに対してコンテンツの出し分けもしてみましょう。CSS によるコンテンツの切替を多様するのはいかがなものかという声もあるかも分かりませんが、補助的に使う分にはこれも便利かなと思います。

src/scss/core/_foundation.scss

@import "foundation/components/visibility";

の行をコメントアウトします。ということは前項で _foundation.scss に書いた

@import "foundation/components/global";

は不要になります。
例えば src/jade/index.jade

17: #main.l-main
18:   h1.show-for-small-only Hello Small World.
19:   h1.show-for-medium-up Hello World.

にすると結果 HTML は

<div id="main" class="l-main">
  <h1 class="show-for-small-only">Hello Small World</h1>
  <h1 class="show-for-medium-up">Hello World.</h1>
</div>

となり、small と medium 以上で要素の出し分けができます。Jade はインデントで結果が変わるので注意して下さい。コンパイル時に上書きされる可能性はありますが src/html/index.html を直接編集しても OK です。
紹介しきれない程のパターンがあるので、後は公式のドキュメントを見ながら活用して下さい。

Visibility Classes – Foundation

以上、かじる Foundation の Media Queries 編でした。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください