Blog

Zurb Foundation 4 チートシート

Posted by admin at 8:50 日時 2013/05/08

#

CSSフレームワークとして、個人的にTwitter Bootstrapより断然注目しているZurb製のFoundation 4のまとめです。Bootstrapはウェブアプリ、ウェブサービス向けという感じがしますが、Foundationはウェブサイトに適していると思います。

今回はとりあえず使いはじめるためのガイドとして作成したもので、全ての機能を網羅したものではありません。詳細は公式ドキュメントを確認してください。また、Foundation 4にどんな要素があるのか、実際の表示で確認するには Kitchen Sink ページに全サンプルがあります。

今回記事にしてみて思ったのは、既存サイトであっても、これからFoundation 4を導入することができるように考えられているなということです。SCSSを使うことが前提になりますが。この記事でいくつかは紹介していますが、Mix-inが用意されていたりして、読みこむだけで既存のクラス名にFoundation 4の機能を付加することができるようになります。この記事で紹介していないものもほぼ全て入っています。これもそのうちやってみようと思います。

表示・非表示のコントロール

たとえば、CSSクラス .show-for-small をつければ768px以下で表示され、.hide-for-small をつければ768px以下では表示されない、といったコントロールがかんたんにできる。横置きの時のみの .show-for-landscape タッチデバイスのみの .show-for-touch など、モバイル機器を対象にしたコントロールもCSSクラスのみでできる。

CSSクラス名が乱立するとソースが汚くなるのが気になるという方は、SCSSを使ってこのクラスを継承すれば良い。

.your-class-name { @extend .hide-for-small; }

→ Visibility Classes

グリッド

.row の中に .columns を入れるのが基本セット。.row の中は12に分割される。

.small-2.columns だとブラウザ幅が狭い時は 2/12
.large-4.columns だとブラウザ幅が広い時は 4/12

<div class="row">    <div class="small-2 large-4 columns">...</div>    <div class="small-4 large-4 columns">...</div>    <div class="small-6 large-4 columns">...</div>  </div>

グリッド幅のサンプル

入れ子構造が可能

<div class="row">    <div class="small-8 columns">8      <div class="row">        <div class="small-8 columns">8 Nested          <div class="row">            <div class="small-8 columns">8 Nested Again</div>            <div class="small-4 columns">4</div>          </div>        </div>        <div class="small-4 columns">4</div>      </div>    </div>    <div class="small-4 columns">4</div>  </div>

入れ子構造のサンプル

オフセット指定が可能

.large-offset-1 や .small-offset-3 と言ったクラスで、数字で指定した広さの余白をカラムの左側に入れることができる。

カラムの中央寄せ

.large-centered または .small-centered クラスで、カラムを中央寄せにできる。広い画面でのみ中央寄せ解除したい時は .large-uncentered

順番の入れ替え

.push-2 と言ったクラスで、数字で指定した分カラムを右側にずらすことができる。左側にずらす時は .pull-2 になる。これを組み合わせることで、通常左から埋まっていくカラムの順序を入れ替えることができる。

<div class="row">    <div class="small-2 push-10 columns">幅2 右側</div>    <div class="small-10 pull-2 columns">幅10 左側</div>  </div>  <div class="row">    <div class="small-2 columns">幅2 左側</div>    <div class="small-10 columns">幅10 右側</div>  </div>

Grid

ブロックグリッド

div内の要素を横に並べたいということがありますが、それも自動でやってくれます。親になる要素に small-block-grid-2 や large-block-grid-4 と言ったクラスを指定すれば、自動的にその子要素が数字で指定した数並びます。そもそもレスポンシブ設計のため、画像サイズも親要素の幅に合わさるようになっているので可能なのでしょう。

<ul class="small-block-grid-2 large-block-grid-4">  	<li><img alt="" src="../img/demos/demo1.png" /></li>  	<li><img alt="" src="../img/demos/demo2.png" /></li>  	<li><img alt="" src="../img/demos/demo3.png" /></li>  	<li><img alt="" src="../img/demos/demo4.png" /></li>  </ul>

これもSCSSのmix-inになっているので、自作のクラスに読みこませることもできるのが特徴です。

@import "foundation/foundation-global", "foundation/components/global", "foundation/components/block-grid";    .your-class-name { @include block-grid($per-row, $spacing, $base-styles); }    $per-row: false  $spacing: $block-grid-default-spacing  $base-style: true

Block Grind

ナビゲーション

サイドナビ

サンプルはリンク先参照。

<ul class="side-nav">  	<li class="active"><a href="#">Link 1</a></li>  	<li><a href="#">Link 2</a></li>  	<li class="divider"></li>  	<li><a href="#">Link 3</a></li>  	<li><a href="#">Link 4</a></li>  </ul>

Side Nav

サブナビ

<dl class="sub-nav"><dt>Filter:</dt><dd class="active"><a href="#">All</a></dd><dd><a href="#">Active</a></dd><dd><a href="#">Pending</a></dd><dd><a href="#">Suspended</a></dd></dl>

Sub Nav

トップバー

<nav class="top-bar">    <ul class="title-area">      <!-- タイトルエリア -->      <li class="name">        <h1><a href="#">Top Bar Title </a></h1>      </li>      <!-- "menu-icon"を外すとアイコンが消える。"Menu"を消すとアイコンだけになる。 -->      <li class="toggle-topbar menu-icon"><a href="#"><span>Menu</span></a></li>    </ul>      <section class="top-bar-section">      <!-- 左寄せナビゲーション -->      <ul class="left">        <li class="divider"></li>        <li class="active"><a href="#">Main Item 1</a></li>        <li class="divider"></li>        <li><a href="#">Main Item 2</a></li>        <li class="divider"></li>        <li class="has-dropdown"><a href="#">Main Item 3</a>            <ul class="dropdown">            <li class="has-dropdown"><a href="#">Dropdown Level 1a</a>                <ul class="dropdown">                <li><label>Dropdown Level 2 Label</label></li>                <li><a href="#">Dropdown Level 2a</a></li>                <li><a href="#">Dropdown Level 2b</a></li>                <li class="has-dropdown"><a href="#">Dropdown Level 2c</a>                    <ul class="dropdown">                    <li><label>Dropdown Level 3 Label</label></li>                    <li><a href="#">Dropdown Level 3a</a></li>                    <li><a href="#">Dropdown Level 3b</a></li>                    <li class="divider"></li>                    <li><a href="#">Dropdown Level 3c</a></li>                  </ul>                </li>                <li><a href="#">Dropdown Level 2d</a></li>                <li><a href="#">Dropdown Level 2e</a></li>                <li><a href="#">Dropdown Level 2f</a></li>              </ul>            </li>            <li><a href="#">Dropdown Level 1b</a></li>            <li><a href="#">Dropdown Level 1c</a></li>            <li class="divider"></li>            <li><a href="#">Dropdown Level 1d</a></li>            <li><a href="#">Dropdown Level 1e</a></li>            <li><a href="#">Dropdown Level 1f</a></li>            <li class="divider"></li>            <li><a href="#">See all →</a></li>          </ul>        </li>        <li class="divider"></li>      </ul>        <!-- 右寄せナビゲーション -->      <ul class="right">        <li class="divider hide-for-small"></li>        <li class="has-dropdown"><a href="#">Main Item 4</a>            <ul class="dropdown">            <li><label>Dropdown Level 1 Label</label></li>            <li class="has-dropdown"><a href="#" class="">Dropdown Level 1a</a>                <ul class="dropdown">                <li><a href="#">Dropdown Level 2a</a></li>                <li><a href="#">Dropdown Level 2b</a></li>                <li class="has-dropdown"><a href="#">Dropdown Level 2c</a>                    <ul class="dropdown">                    <li><a href="#">Dropdown Level 3a</a></li>                    <li><a href="#">Dropdown Level 3b</a></li>                    <li><a href="#">Dropdown Level 3c</a></li>                  </ul>                </li>                <li><a href="#">Dropdown Level 2d</a></li>                <li><a href="#">Dropdown Level 2e</a></li>                <li><a href="#">Dropdown Level 2f</a></li>              </ul>            </li>            <li><a href="#">Dropdown Level 1b</a></li>            <li><a href="#">Dropdown Level 1c</a></li>            <li class="divider"></li>            <li><label>Dropdown Level 1 Label</label></li>            <li><a href="#">Dropdown Level 1d</a></li>            <li><a href="#">Dropdown Level 1e</a></li>            <li><a href="#">Dropdown Level 1f</a></li>            <li class="divider"></li>            <li><a href="#">See all →</a></li>          </ul>        </li>        <li class="divider"></li>        <li class="has-form">          <form>            <div class="row collapse">              <div class="small-8 columns">                <input type="text">              </div>              <div class="small-4 columns">                <a href="#" class="alert button">Search</a>              </div>            </div>          </form>        </li>        <li class="divider show-for-small"></li>        <li class="has-form">          <a class="button" href="#">Button!</a>        </li>      </ul>    </section>  </nav>

トップバーは標準でウィンドウ幅に合うようになっている。スクロール時に上部固定したい場合は div class=”fixed” グリッド幅に合わせたい場合は div class=”contain-to-grid” で囲む。併用可能。

ドロップダウンメニューの場合は .has-dropdown クラスを付けた li の中に ul.dropdown

li.divider で区切り線

ボタンを内側に含む(検索フォーム用かな)場合は .has-form

div class=”contain-to-grid sticky” で囲むことでパララックス効果を狙うデザインでよくある、上部固定のページ内リンクが作れる

Top Bar

パンくず

2パターンのマークアップに対応しているのは嬉しい。

<ul class="breadcrumbs">  	<li><a href="#">Home</a></li>  	<li><a href="#">Features</a></li>  	<li class="unavailable"><a href="#">Gene Splicing</a></li>  	<li class="current"><a href="#">Cloning</a></li>  </ul>  <!-- こちらのマークアップも使える -->  <nav class="breadcrumbs"><a href="#">Home</a>   <a href="#">Features</a>   <a class="unavailable" href="#">Gene Splicing</a>   <a class="current" href="#">Cloning</a>  </nav>

ボタン

単体の要素にクラス名を付けるだけなのでかんたん。ドキュメント参照

Buttons

フォーム

同上

Forms

見出し

<h1>h1. This is a very large header.</h1>

普通の見出し。h1〜h6まで対応

<h1 class="subheader">h1.subheader</h1>

副見出し、色が薄い。

<h1>h1. <small>Small segment header.</small></h1>

見出しの中にサブキャッチがあるパターン。これがあるのはありがたい

リスト

だいたいよくあるパターンはクラス化されている。

  • ul.disc : 黒丸
  • ul.circle : 白丸
  • ul.square : 四角
  • ul.no-bullet : 記号なし
  • Ordered Lists : 数字

印刷

印刷時のみ表示する要素には .print-only 印刷時に隠す要素には .hide-on-print

Typography

水平リスト

<ul class="inline-list">    <li><a href="#">Link 1</a></li>    <li><a href="#">Link 2</a></li>    <li><a href="#">Link 3</a></li>    <li><a href="#">Link 4</a></li>    <li><a href="#">Link 5</a></li>  </ul>

Inline Lists

アラート表示

  • div.alert-box : 通常のアラート
  • div.alert-box.success : 成功時
  • div.alert-box.alert : 警告
  • div.alert-box.secondary : 弱め

Alert Boxes

パネル

枠で囲って目立たせたい要素に。

<div class="panel">    <!-- Content here -->  </div>

.callout クラスを追加するとより目立つ

.radius クラスを追加すると角丸に

Panels

サムネイル

.th クラスをimg要素を囲むa要素に付けるだけ。.radius を追加すると角丸に

<a class="th radius" href="../img/demos/demo2.png">  <img src="../img/demos/demo2-th.png">  </a>

Thumbnails

ビデオ

YouTube等のiframe埋め込みをレスポンシブ対応するのもすぐ。

<div class="flex-video">    <iframe width="420" height="315" src="http://www.youtube.com/embed/0_EW8aNgKlA" frameborder="0" allowfullscreen></iframe>  </div>

.widescreen クラスを追加すると、動画のワイドスクリーン比率に対応。
Vimeoはちょっと特殊なので .vimeo クラスを追加する。

Flex Video

Javascriptプラグイン

ウェブサイト制作でありがちなものは揃っている印象です。しかも全てレスポンシブ対応。

  • Clearing(ライトボックス)
  • Dropdown(ドロップダウンメニュー)
  • Joyride(吹き出し)
  • Magellan(ウィンドウ上部固定)
  • Orbit(スライドショー)
  • Reveal(ブラウザ内ポップアップウィンドウ、モーダル表示)
  • Sections(タブ切り替え)
  • Tooltips(吹き出し、ツールチップ表示)

Share this entry