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; }
グリッド
.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
ナビゲーション
サイドナビ
サンプルはリンク先参照。
<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 &rarr;</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 &rarr;</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
水平リスト
<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>
アラート表示
- div.alert-box : 通常のアラート
- div.alert-box.success : 成功時
- div.alert-box.alert : 警告
- div.alert-box.secondary : 弱め
パネル
枠で囲って目立たせたい要素に。
<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>
ビデオ
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 クラスを追加する。
Javascriptプラグイン
ウェブサイト制作でありがちなものは揃っている印象です。しかも全てレスポンシブ対応。
- Clearing(ライトボックス)
- Dropdown(ドロップダウンメニュー)
- Joyride(吹き出し)
- Magellan(ウィンドウ上部固定)
- Orbit(スライドショー)
- Reveal(ブラウザ内ポップアップウィンドウ、モーダル表示)
- Sections(タブ切り替え)
- Tooltips(吹き出し、ツールチップ表示)