XY Gridとは V6.4から導入されたXYグリッドを使いこなす方法
Foundation V6.4から導入された「XY Grid」。従来の、「Float Grid」、「Flex Grid」をLegacyとして脇へ追いやるほどの高機能な上、多機能のグリッドシステムのようです。
しかし、その詳細はWebセミナーに勧誘されるばかりで、全くわかりません。ページを見てみるものの、様々な機能が英語で羅列されているだけで、読んでいてもだんだんクラクラしてきます。
とりあえず全体を俯瞰したいと思い、XY GridのページをGoogle翻訳に日本語化してもらいました。ほとんど直さずに、訳したままペーストしています。
生成されるグリッドの図は省略していますので、本家のページと見比べてください。
XY Grid
マージングリッド、パディンググリッド、フレームグリッド、ブロックグリッド、垂直グリッドを含む複数のグリッドタイプのすべての種類を組み込んだv6.4の完全に再加工された新しいグリッドシステム。
XYグリッドは、グリッドの大きな進歩です。 最新のWebセミナートレーニングで、Foundation 6.4の新機能をすべてご利用ください。 複雑なレイアウトをより速く、少ないコードで作成するために、XYグリッドの機能を知ることができます。 すべての便利なUIコンポーネントとFoundation JavaScriptを学ぶことはもちろんです。 あなたは同僚を嫉妬させるでしょう。
今後のFoundationのトレーニングを逃してはいけません→
XY Grid Basics
XYグリッドは、標準の'Float Grid'と非常によく似ていますが、水平と垂直の配置、自動サイジング、完全な垂直グリッドなど、Flexboxでのみ可能な多くの便利な機能が含まれています。
Browser support
XYグリッドはChrome、Firefox、Safari 6+、IE10 +、iOS 7+、Android 4.4+でサポートされています。 FlexboxはAndroid 2ではサポートされていますが、このグリッドでの使用には信頼性がありません。 (Flexboxのブラウザーサポートを参照してください)純粋に最先端のブラウザーをサポートしているプロジェクトでは、XYグリッドのみを使用することをお勧めします。
Importing
CSSバージョンのFoundationを使用している場合は、Flexboxモードを有効にしてFoundationのカスタムダウンロードを生成できます。
@import 'foundation'; @include foundation-xy-grid-classes;
メモfoundation-xy-grid-classes
は、個々のグリッドコンポーネントを有効または無効にする引数を受け入れます。これらのクラスの出力を無効にするには、単に引数をfalse
に設定します。これらは:
@include foundation-xy-grid-classes( $base-grid: true, $margin-grid: true, $padding-grid: true, $block-grid: true, $collapse: true, $offset: true, $vertical-grid: true );
Basics
XYグリッドの構造は、.grid-x
、.grid-y
、および.cell
をベースとして使用します。ガーターのタイプを定義しないと、セルはガーターがなくてもスペースを分割します。
<div class="grid-x"> <div class="cell">full width cell</div> <div class="cell">full width cell</div> </div> <div class="grid-x"> <div class="small-6 cell">6 cells</div> <div class="small-6 cell">6 cells</div> </div> <div class="grid-x"> <div class="medium-6 large-4 cell">12/6/4 cells</div> <div class="medium-6 large-8 cell">12/6/8 cells</div> </div>
Gutters
XYグリッドの特徴は、marginとpaddingグリッドを調和させることです。グリッドタイプを定義するには、単にグリッド上に.grid-margin-x
または.grid-padding-x
を設定します。
<div class="grid-x grid-margin-x"> <div class="medium-6 large-4 cell">12/6/4 cells</div> <div class="medium-6 large-8 cell">12/6/8 cells</div> </div> <div class="grid-x grid-padding-x"> <div class="medium-6 large-4 cell">12/6/4 cells</div> <div class="medium-6 large-8 cell">12/6/8 cells</div> </div>
Grid Container
グリッドのデフォルトは、使用可能なスペースの全幅です。それを含めるには、grid-container
クラスを使用します。コンテナは中央に配置され、$grid-container-padding
設定の半分に等しい左右のパディングと共に、$grid-container
設定(デフォルトでは1200px)に等しい最大幅を持ちます。
Grid Container Fluid
利用可能なスペースの全幅にコンテンツをストレッチするには、fluid
をgrid-container
に追加するだけです。
<div class="grid-container fluid"> <div class="grid-x grid-margin-x"> <div class="cell small-4">cell</div> <div class="cell small-4">cell</div> <div class="cell small-4">cell</div> </div> </div>
Grid Container Full
利用可能なスペースの全幅にコンテンツをストレッチし、グリッドコンテナのパディングを削除するには、grid-container
にクラスfull
を追加するだけです。このバリエーションは主にgrid-margin-x
での使用のためのものです。grid-padding-x
でも動作しますが、.grid-container.fluid
と同じように動作します。
full
クラスのgrid-container
でgrid-margin-x
を使用している場合は、コンテンツがビューポートの側面に触れる場合に正しく動作するように、水平オーバーフローを非表示にする必要があります。
これを行う最善の方法は次のとおりです。body {overflow-x:hidden;}
<div class="grid-container full"> <div class="grid-x grid-margin-x"> <div class="cell small-4">cell</div> <div class="cell small-4">cell</div> <div class="cell small-4">cell</div> </div> </div>
Auto Sizing
.auto
または.[size]-auto
クラスがセルに追加されると、残りの領域が占有されます。
<div class="grid-x grid-margin-x"> <div class="small-4 cell">4 cells</div> <div class="auto cell">Whatever's left!</div> </div>
複数の拡張セルは、残りのスペースを均等に共有します。
<div class="grid-x grid-margin-x"> <div class="small-4 cell">4 cells</div> <div class="auto cell">Whatever's left!</div> <div class="auto cell">Whatever's left!</div> </div>
.shrink
または.[size]-shrink
クラスを追加することで、セルを縮小することもできます。つまり、コンテンツに必要な領域だけを占有します。
<div class="grid-x grid-margin-x"> <div class="shrink cell">Shrink!</div> <div class="auto cell">Expand!</div> </div>
Responsive Adjustments
パーセンテージまたはシュリンクの動作から自動的な動作に戻るには、.[size]-auto
または.[size]-shrink
というクラスを使用します。下の例では、セルは小さな画面に積み重なり、大きな画面では均一な幅になります。
<div class="grid-x"> <div class="large-auto cell">One</div> <div class="large-auto cell">Two</div> <div class="large-auto cell">Three</div> <div class="large-auto cell">Four</div> <div class="large-auto cell">Five</div> <div class="large-auto cell">Six</div> </div>
Collapse Cells
.[size]-[gutter-type]-collapse
クラスを使うと、セルのガーターを削除できます。
各メディアクエリーを崩壊させたくない場合があります。この場合、必要なメディアクエリサイズを使用して折り畳んで、グリッド要素に追加します。例は、smallではガーターを表示し、medium以上ではガーターを表示しない。
<div class="grid-x grid-margin-x medium-margin-collapse"> <div class="small-6 cell"> Gutters at small no gutters at medium. </div> <div class="small-6 cell"> Gutters at small no gutters at medium. </div> </div>
Offsets
オフセットは、margin-left
(または垂直グリッドのmargin-top
)をグリッドに適用することによって機能します。
<div class="grid-x grid-margin-x"> <div class="small-4 large-offset-2 cell">Offset 2 on large</div> <div class="small-4 cell">4 cells</div> </div>
Block Grids
個々のセルレベルではなく、direction-level内のセル幅を定義するには、.[size]-up-[n]
をgrid-x
またはgrid-y
に追加します。ここで[n]
は方向ごとに表示するセルの数、[size]
はエフェクトを適用するブレークポイントです。
<div class="grid-x grid-padding-x small-up-2 medium-up-4 large-up-6"> <div class="cell">cell</div> <div class="cell">cell</div> <div class="cell">cell</div> <div class="cell">cell</div> <div class="cell">cell</div> <div class="cell">cell</div> </div>
Source Ordering AKA (Push and Pull)
プッシュ&プルはハックの解決策であり、フロートベースのグリッドにのみ必要でした。しかし、フレックスボックスの場合、ソースの順序付けはこれを簡単に行うので、このハックは必要ありません。
Vertical Grids
XYグリッドは垂直グリッドもサポートしています。単に.grid-x
の代わりに.grid-y
を適用するだけです。内部セルは自動的にシフトして水平方向ではなく垂直方向に間隔を空けます。
マージンやパディングを.grid-margin-y
と.grid-padding-y
で適用して、セルの上下にスペーシングを適用することもできます。
<div class="grid-y" style="height: 500px;"> <div class="cell small-6 medium-8 large-2"> 6/8/2 </div> <div class="cell small-6 medium-4 large-10"> 6/4/10 </div> </div>
Grid Frame
XYグリッドにはFoundation for Appsのグリッドフレームと他の多くの便利な機能が組み込まれています。まず、グリッドに.grid-frameを追加します。グリッドを100vh(ブラウザウィンドウの高さ)に設定します。
.grid-margin-x
または.grid-margin-y
を.grid-frame
で使用する場合は、bodyのオーバーフローを:body {overflow:hidden;}
のように隠す必要があります。<div class="grid-y medium-grid-frame"> <div class="cell shrink header medium-cell-block-container"> <h1>Grid Frame Header</h1> <div class="grid-x grid-padding-x"> <div class="cell medium-4"> A medium 4 cell </div> <div class="cell medium-4 medium-cell-block"> <p style="width:80vw;">A medium 4 cell block... on medium this content should overflow and let you horizontally scroll across... one might use this for an array of options</p> </div> <div class="cell medium-4"> A medium 4 cell </div> </div> </div> <div class="cell medium-auto medium-cell-block-container"> <div class="grid-x grid-padding-x"> <div class="cell medium-4 medium-cell-block-y"> <h2>Independent scrolling sidebar</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer lacus odio, accumsan id ullamcorper eget, varius nec erat. Nulla facilisi. Donec dui felis, euismod nec finibus vitae, dapibus quis arcu. Maecenas tempor et ipsum quis venenatis. Ut posuere sed augue sit amet efficitur. Sed imperdiet, justo id tempus rhoncus, est est viverra turpis, non vulputate magna lectus et nisl. Pellentesque ultrices porttitor vehicula. Ut aliquet efficitur ligula, a consectetur felis. Proin tristique ut augue nec luctus. Curabitur a sapien pretium, auctor elit a, efficitur erat. Donec tincidunt dui vel velit bibendum euismod. Cras vitae nibh dui. Aliquam erat volutpat. Etiam sit amet arcu a erat efficitur facilisis. Ut viverra dapibus turpis, et ornare justo. Integer in dui cursus, dignissim tortor a, hendrerit risus.</p> <p>Suspendisse pulvinar, massa iaculis feugiat lobortis, dolor sapien vestibulum nulla, vel cursus tellus leo in lorem. Aliquam eu placerat urna. Suspendisse sed viverra orci, ut mattis neque. Fusce non ultrices nisi. In sagittis varius mollis. Quisque dolor quam, consectetur eu lacinia ac, ullamcorper vel arcu. Nullam mattis imperdiet nulla sed ornare. Praesent tristique, est id eleifend vestibulum, neque nibh condimentum ex, nec lobortis purus justo a libero. Phasellus id ex ac nunc hendrerit hendrerit. Nullam urna ipsum, rutrum at fringilla vel, venenatis non purus. Maecenas egestas ex vitae venenatis molestie. Ut et odio egestas, accumsan neque et, viverra nisl. Sed faucibus nec nulla sed imperdiet. Fusce quis sem ac urna semper tempor a id elit. Nulla fringilla vitae sapien a vehicula.</p> </div> <div class="cell medium-8 medium-cell-block-y"> <h2>Independent scrolling body</h2> <p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer lacus odio, accumsan id ullamcorper eget, varius nec erat. Nulla facilisi. Donec dui felis, euismod nec finibus vitae, dapibus quis arcu. Maecenas tempor et ipsum quis venenatis. Ut posuere sed augue sit amet efficitur. Sed imperdiet, justo id tempus rhoncus, est est viverra turpis, non vulputate magna lectus et nisl. Pellentesque ultrices porttitor vehicula. Ut aliquet efficitur ligula, a consectetur felis. Proin tristique ut augue nec luctus. Curabitur a sapien pretium, auctor elit a, efficitur erat. Donec tincidunt dui vel velit bibendum euismod. Cras vitae nibh dui. Aliquam erat volutpat. Etiam sit amet arcu a erat efficitur facilisis. Ut viverra dapibus turpis, et ornare justo. Integer in dui cursus, dignissim tortor a, hendrerit risus.</p> <p>Suspendisse pulvinar, massa iaculis feugiat lobortis, dolor sapien vestibulum nulla, vel cursus tellus leo in lorem. Aliquam eu placerat urna. Suspendisse sed viverra orci, ut mattis neque. Fusce non ultrices nisi. In sagittis varius mollis. Quisque dolor quam, consectetur eu lacinia ac, ullamcorper vel arcu. Nullam mattis imperdiet nulla sed ornare. Praesent tristique, est id eleifend vestibulum, neque nibh condimentum ex, nec lobortis purus justo a libero. Phasellus id ex ac nunc hendrerit hendrerit. Nullam urna ipsum, rutrum at fringilla vel, venenatis non purus. Maecenas egestas ex vitae venenatis molestie. Ut et odio egestas, accumsan neque et, viverra nisl. Sed faucibus nec nulla sed imperdiet. Fusce quis sem ac urna semper tempor a id elit. Nulla fringilla vitae sapien a vehicula.</p> <p>Nullam vestibulum lorem nec lectus egestas, nec ullamcorper diam maximus. Maecenas condimentum, nibh at blandit semper, ex erat tempus magna, id maximus neque velit accumsan nibh. Aenean dignissim lorem eu nisl laoreet vestibulum. Vivamus efficitur et augue vitae tincidunt. Etiam et magna felis. Integer mattis, nisi aliquet scelerisque blandit, ex mi sodales ante, eget accumsan quam magna et ligula. Curabitur id tristique leo. Proin rutrum mi vitae enim rhoncus, at cursus neque eleifend. Integer ultrices volutpat tellus ac porta. Fusce sollicitudin venenatis lacinia. Fusce ante lorem, gravida semper varius non, pharetra non erat. Sed dapibus arcu turpis, ac sollicitudin nibh lacinia vel. Nullam at enim porta, luctus metus sit amet, rutrum odio. Cras tempor enim vel pellentesque sollicitudin. Maecenas ullamcorper, sem non accumsan volutpat, neque tortor pulvinar orci, ut ultrices ligula lorem ut risus.</p> <p>Aliquam facilisis, nibh eget posuere suscipit, arcu sapien iaculis odio, in molestie dolor lectus vitae sem. Cras id nunc mollis mi rutrum dapibus. Quisque rutrum a augue at scelerisque. Praesent faucibus ac enim vitae gravida. Sed et sodales elit. Duis magna lectus, interdum sit amet metus a, sagittis varius magna. Proin nibh lectus, egestas a luctus ut, dapibus et enim. Curabitur fringilla ipsum vitae nunc imperdiet consectetur eget non neque. Suspendisse ultricies odio quis lorem vulputate, ac vulputate turpis feugiat. Maecenas posuere rhoncus orci, in ornare velit suscipit tempor. Curabitur pretium nisl id lorem placerat consequat. In quis quam eros. Nam mattis elit eu quam sagittis, in varius erat tempor.</p> <p>Fusce felis magna, pellentesque eget mollis a, rutrum id eros. Curabitur auctor varius arcu a consequat. Phasellus quis pulvinar enim, eu ultricies justo. Pellentesque risus libero, dapibus at erat ultricies, gravida varius erat. Vestibulum ante ipsum primis in faucibus orci luctus et ultrices posuere cubilia Curae; Nulla tempus, justo ut laoreet mollis, nunc tellus convallis urna, vel pretium dui velit eget ligula. Aliquam semper sed nulla a molestie. Maecenas at egestas massa, vitae aliquam mi. Fusce nec sem egestas, pretium lacus non, tincidunt sapien. Sed tristique odio at ultricies vulputate. Integer et convallis augue, eu aliquam enim. Mauris ut faucibus diam. Donec vulputate nunc sed congue accumsan. Etiam lobortis nisi quis lacinia pharetra.</p> </div> </div> </div> <div class="cell shrink footer"> <h3>Here's my footer</h3> </div> </div>
Building Semantically
XYグリッドCSSは強力なSassミックスインセットで生成され、独自のコードでセマンティックグリッドを構築できます。
Grid Container
グリッドコンテナを作成するには、xy-grid-container()
mixinを使用します。 これは$grid-container
で指定された幅のグリッドを含んでいます。
.container { @include xy-grid-container; }
Grids
グリッドを作成するには、xy-grid()ミックスインを使用します。
.my-grid { @include xy-grid; }
Gutters
アイテムにガーターを追加するには、xy-gutters()
mixinを使用します。xy-cell
mixinはガーターを出力するために使いましたが、これを使って好きなものにレスポンシブなガーターを追加することができます。 これは、ガーターをどこに配置するかを指定できるので、特に強力です:
.gallery-item { @include xy-gutters($gutter-position: left right bottom); }
Cells
xy-cell()
mixinを使用してセルを作成します。セルのサイズを定義するにはいくつかの方法があります。xy-cell
は、full
(全幅)、auto
(自動幅)、shrink
(必要なスペースのみを占有)など、いくつかの異なるキーワードと特定のサイズを受け入れます。
.main-content { // Use the full column count (100%) @include xy-cell(); // Use a column count (33%); @include xy-cell(4); // Use a percentage (15%) @include xy-cell(15%); // Use a custom fraction (20%) @include xy-cell(1 of 5); }
セルサイズ計算機には、関数としてアクセスすることもできます。これにより、グリッドセルCSSなしでパーセンテージ値が得られます。
.main-content { width: xy-cell-size(1 of 7); }
Responsive Grids
breakpoint()mixinとxy-cell
を組み合わせて、グリッドをレスポンシブにします。それぞれのmixinがどのように動作するか、そして利用可能な引数については、以下のSassのドキュメントを参照してください。
.main-content { @include xy-cell(); @include breakpoint(medium) { @include xy-cell(8); } }
同じCSSを出力する上記のための簡略オプションもあります:
.main-content { @include xy-cell-breakpoints((small: full, medium: 8)); }
Custom Block Grid
独自のブロックグリッドを作成するには、xy-grid-layout()
mixinを使用します。デフォルトでは、mixinは2つのパラメータをとります:
- 列数
- 子セレクタ
引数の完全なリストについては、以下のSassのドキュメントを参照してください。
例えば:
.gallery { @include xy-grid-layout(3, '.gallery-item'); }
以下のCSSを出力します:
.gallery > .gallery-item { width: calc(33.33333% - 1.25rem); margin-right: 0.625rem; margin-left: 0.625rem; }
Sass Reference
Variables
このコンポーネントのデフォルトのスタイルは、プロジェクトの設定ファイルでこれらのSass変数を使用してカスタマイズできます。