Mixins

grids

oulu grid

oulu は、twitter bootstrap と同じルールの grid システムを持っています。

.row

.row という class を持つブロック内で grid システムが有効になります。 .row という class 名は グローバルな変数 $row-class-name で指定されています。他の名前にする場合は、 $row-class-name を上書きしてください。

class 名変更の例

.row.grids-wrapper に変更する場合。

1
$row-class-name: '.grids-wrapper'

.col-

.row 内に .col- というプレフィクスを持った class を持つブロックが grid システムの一つの grid のカラムになります。記法は以下になります。

.col というプレフィクスは、グローバルな変数 $column-namespace で指定されています。他の名前にする場合は、 $column-namespace を上書きしてください。

プレフィクス変更の例

.col-.grid- に変更する場合。

1
$column-namespace: '.grid-'

記法のルール

1
.col-{デバイスのサイズ}-{ブロックの幅}

1
2
3
4
.col-xs-12
.col-sm-6
.col-md-4
.col-lg-2

デバイスのサイズ

デフォルトでは、デバイスのサイズは以下のように設定されています。

  • xs -> 0 〜 480px
  • sm -> 481px 〜 768px
  • md -> 769px 〜 992px
  • lg -> 993px 〜 1200px

サイズの設定は以下のグローバルな変数を上書きすることで変更ができます。

デバイスサイズの基本設定

1
2
3
4
$screen-xs: 480px !default
$screen-sm: 768px !default
$screen-md: 992px !default
$screen-lg: 1200px !default

デバイスサイズ を grid 用の変数に代入

1
2
3
4
5
6
7
$screen-xs-min: $screen-xs !default
$screen-sm-min: $screen-sm !default
$screen-md-min: $screen-md !default
$screen-lg-min: $screen-lg !default
$screen-xs-max: ($screen-sm-min - 1) !default
$screen-sm-max: ($screen-md-min - 1) !default
$screen-md-max: ($screen-lg-min - 1) !default

grid の mixin

1
2
3
4
5
6
7
8
9
10
11
12
=screen-xs
  @media only screen and (max-width: $screen-xs)
    @content
=screen-sm
  @media only screen and (max-width: $screen-sm)
    @content
=screen-md
  @media only screen and (max-width: $screen-md)
    @content
=screen-lg
  @media only screen and (max-width: $screen-lg)
    @content

カラムの幅

.row の中の .col プレフィクスが付いた class の幅の数字はグリッドの設定された分割数のうちのいくつ分の幅であるか、を示します。

1
2
3
4
5
.row
  .col-xs-6
    p Lorem ipsum dolor sit amet
  .col-xs-6
    p Lorem ipsum dolor sit amet

デフォルトでは、グリッドは 12 分割されていますので、上記の例、 .col-xs-6 の場合、66/12 ということになります。 6/12 はつまり、 1/2 ということなので、全体の半分の幅になります。上記の例では、 xs のデバイスサイズの場合(デフォルトだと 0 〜 480px)、幅が半分で分割されたレイアウトになります。

デバイスサイズでの分岐を複数クラスで設定

デバイスのサイズによってブロックの幅を変更する場合は、複数クラスで対応します。ブロックの幅は上記の grid の mixin を使い、 media-query で実装されます。

1
2
3
4
5
.row
  .col-lg-2.col-md-4.col-sm-6.col-xs-12
    p Lorem ipsum dolor sit amet
  .col-lg-2.col-xs-12
    p Lorem ipsum dolor sit amet

上記の場合、

  • xs のデバイスサイズの場合、幅は 12/12 つまり横幅いっぱいになる
  • sm のデバイスサイズの場合、幅は 6/12 つまり半分の横幅になる
  • md のデバイスサイズの場合、幅は 4/12 つまり 1/3 の横幅になる
  • lg のデバイスサイズの場合、幅は 2/12 つまり 1/6 の横幅になる

このように、デバイスごとでレイアウトが異なる場合、複数クラスで対応します。

オフセットカラム

空白のカラムを作ることもできます。その場合、通常のカラムと同じく .row 内に .col というプレフィクスを持った class を付け、さらに .col-md-offset-3 のように、デバイスサイズの後に offset というプレフィクスを付けます。その class を持ったブロックの左側に設定したサイズの空白のカラムができます。

記法のルール

1
.col-{デバイスのサイズ}-offset-{ブロックの幅}

1
2
3
4
.col-xs-offset-6
.col-sm-offset-5
.col-md-offset-4
.col-lg-offset-2

上記の場合、

  • .col-xs-offset-6 の class を持ったブロックの左側に 6/12 サイズの空白のカラムができます。サイズ sm 以上のときに適用されます。
  • .col-sm-offset-5 の class を持ったブロックの左側に 5/12 サイズの空白のカラムができます。サイズ sm 以上のときに適用されます。
  • .col-md-offset-4 の class を持ったブロックの左側に 4/12 サイズの空白のカラムができます。サイズ md 以上のときに適用されます。
  • .col-lg-offset-2 の class を持ったブロックの左側に 2/12 サイズの空白のカラムができます。サイズ lg 以上のときに適用されます。
1
2
.row
  .col-xs-8.col-xs-offset-4.col-sm-8.col-sm-offset-4

上記のように、通常のカラムとオフセットカラムを組み合わせてカラムのレイアウトを設定します。

+grid-columns( )

任意の gutter サイズ(カラムとカラムの左右の隙間)を指定したグリッドシステムのカラムを作るための mixin です。

  • 第一引数に gutter サイズ、カラムの分割数、どのサイズの media-query 作るか、 カラムの親ブロックのクラス名を .row ではないものに変更した場合の class 名、オフセットカラムを作るか否か、の値をスペース区切りで渡します。それらの値は順番関係なく渡すことができます。
    • gutter サイズは、0 もしくは、単位 px を持つ数字を渡します。この値がカラムとカラムの間のスペースの幅になります。
    • カラムの分割数は、デフォルトは 12 が指定されています。カラムの分割数を変更する場合は、0以外の単位なしの数字を渡します。その数字が分割数になります。
    • どのサイズの media-query 作るかは、xssmmdlgxl という文字をリストで渡します。 xs を渡した場合は .col-xs- のカラムが作られます。lg を渡した場合は .col-lg- のカラムが作られます。
    • カラムの親ブロックのクラス名を .row ではないものに変更した場合の class 名は .{class 名} を渡します。値に css class 名の . (ドット)が含まれるので ' ' (シングルクオート)で囲います。
    • オフセットカラムを作るか否かは、 offsets という文字列を渡しているか否かで判定をします。デフォルトではオフセットカラムを作らない設定になっています。オフセットカラムが必要な場合は、offsets という文字列を渡してください。

1
2
div
  +grid-columns(12px 6 (xs, sm) '.grid-columns' offsets)    
1
2
3
4
5
6
div
  .row
    .col-sm-2.col-xs-6
      p Lorem ipsum dolor sit amet,
    .col-sm-4.col-xs-6
      p Lorem ipsum dolor sit amet,