Bootstrap(v3.0.0) には以下のようなボタンなどにあらかじめ用意されたオプション(クラス)がある。
これらを独自のクラス名で使ったり、色を変更するなどのカスタマイズをする際のメモ。LESS のコンパイルには「Prepros」を使用。
Bootstrap の「Getting started」ページの「Additional downloads」の下の「Download latest source code」をクリックして「bootstrap-3.0.0.zip」をダウンロードして解凍するとフォルダ「bootstrap-3.0.0」は以下のような構成になっていてる。
LESS ファイルは、「less」フォルダに入っている。
「less」フォルダを適当な位置に配置し、編集用の LESS ファイル(ここでは、import_mixins.less)を作成。コンパイルされた CSS は「import_mixins.css」に出力されるように「Prepros」で指定しておく。
Bootstrap のミックスインは「less」フォルダ内の「mixins.less」にあるので、まずはそれをインポート。また変数が宣言されている「variables.less」もインポートしておく。
//import_mixins.less @import "less/variables.less"; @import "less/mixins.less";
ボタンオプションの記述は「buttons.less」に以下のように記述されている(抜粋)。
// buttons.less ・・・省略・・・ // Alternate buttons .btn-default { .button-variant(@btn-default-color; @btn-default-bg; @btn-default-border); } .btn-primary { .button-variant(@btn-primary-color; @btn-primary-bg; @btn-primary-border); } // Warning appears as orange .btn-warning { .button-variant(@btn-warning-color; @btn-warning-bg; @btn-warning-border); } // Danger and error appear as red .btn-danger { .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border); } // Success appears as green .btn-success { .button-variant(@btn-success-color; @btn-success-bg; @btn-success-border); } // Info appears as blue-green .btn-info { .button-variant(@btn-info-color; @btn-info-bg; @btn-info-border); } ・・・省略・・・
「.button-variant()」というミックスインを使用し、パラメータには色を指定するための変数が使われている。
「mixins.less」を見ると以下のように「.button-variant()」のミックスインの記述がある。
// mixins.less 抜粋 ・・・省略・・・ // Button variants // Easily pump out default styles, as well as :hover, :focus, :active, // and disabled options for all buttons .button-variant(@color; @background; @border) { color: @color; background-color: @background; border-color: @border; &:hover, &:focus, &:active, &.active, .open .dropdown-toggle& { color: @color; background-color: darken(@background, 8%); border-color: darken(@border, 12%); } &:active, &.active, .open .dropdown-toggle& { background-image: none; } &.disabled, &[disabled], fieldset[disabled] & { &, &:hover, &:focus, &:active, &.active { background-color: @background; border-color: @border } } } ・・・省略・・・
ミックスインのパラメータは「variables.less」に記述がある。
//variables.less 抜粋 ・・・省略・・・ // Brand colors @brand-primary: #428bca; @brand-success: #5cb85c; @brand-warning: #f0ad4e; @brand-danger: #d9534f; @brand-info: #5bc0de; ・・・省略・・・ // Buttons @btn-font-weight: normal; @btn-default-color: #333; @btn-default-bg: #fff; @btn-default-border: #ccc; @btn-primary-color: #fff; @btn-primary-bg: @brand-primary; @btn-primary-border: darken(@btn-primary-bg, 5%); @btn-success-color: #fff; @btn-success-bg: @brand-success; @btn-success-border: darken(@btn-success-bg, 5%); @btn-warning-color: #fff; @btn-warning-bg: @brand-warning; @btn-warning-border: darken(@btn-warning-bg, 5%); @btn-danger-color: #fff; @btn-danger-bg: @brand-danger; @btn-danger-border: darken(@btn-danger-bg, 5%); @btn-info-color: #fff; @btn-info-bg: @brand-info; @btn-info-border: darken(@btn-info-bg, 5%); @btn-link-disabled-color: @gray-light; ・・・省略・・・
以下は既存の「btn-danger」というクラスを独自の「btn-hot」というクラス名で使用する例。
編集用の LESS ファイル(import_mixins.less)に「btn-hot」というクラスを作成し、そこに「btn-danger」のミックスインを読み込む。
//import_mixins.less @import "less/variables.less"; @import "less/mixins.less"; .btn-hot { .button-variant(@btn-danger-color; @btn-danger-bg; @btn-danger-border); }
「import_mixins.less」がコンパイルされると、「import_mixins.css」にはボタン用の独自のクラス「btn-hot」の記述が出力される。
//import_mixins.css .btn-hot { color: #ffffff; background-color: #d9534f; border-color: #d43f3a; } .btn-hot:hover, .btn-hot:focus, .btn-hot:active, .btn-hot.active, .open .dropdown-toggle.btn-hot { color: #ffffff; background-color: #d2322d; border-color: #ac2925; } .btn-hot:active, .btn-hot.active, .open .dropdown-toggle.btn-hot { background-image: none; } .btn-hot.disabled, .btn-hot[disabled], fieldset[disabled] .btn-hot, .btn-hot.disabled:hover, .btn-hot[disabled]:hover, fieldset[disabled] .btn-hot:hover, .btn-hot.disabled:focus, .btn-hot[disabled]:focus, fieldset[disabled] .btn-hot:focus, .btn-hot.disabled:active, .btn-hot[disabled]:active, fieldset[disabled] .btn-hot:active, .btn-hot.disabled.active, .btn-hot[disabled].active, fieldset[disabled] .btn-hot.active { background-color: #d9534f; border-color: #d43f3a; }
この部分をスタイルを調整する CSS にコピーして、HTML ファイルでクラス「btn-hot」を指定すると、「btn-danger」と同じスタイルになる。
<a href="#" class="btn btn-hot">Hot</a>
ミックスイン .button-variant(@color; @background; @border) のパラメータは、以下のようになっているので、これらを自分の好きな色に指定すれば、簡単に独自のボタンが作成できる。
以下は紫色(#DF78F1)のボタンを「btn-new」というクラスで指定する例。
//import_mixins.less @import "less/variables.less"; @import "less/mixins.less"; @btn-new-color: #fff; //文字色を白に @btn-new-bg: #DF78F1; //ボタンの背景色を紫に @btn-new-border: darken(@btn-new-bg, 5%); //ボーダーは背景色より 5% 暗くする .btn-new { .button-variant(@btn-new-color; @btn-new-bg; @btn-new-border); }
コンパイルすると出力される CSS は以下のようになる。
.btn-new { color: #ffffff; background-color: #df78f1; border-color: #da61ef; } .btn-new:hover, .btn-new:focus, .btn-new:active, .btn-new.active, .open .dropdown-toggle.btn-new { color: #ffffff; background-color: #d653ed; border-color: #cc29e9; } .btn-new:active, .btn-new.active, .open .dropdown-toggle.btn-new { background-image: none; } .btn-new.disabled, .btn-new[disabled], fieldset[disabled] .btn-new, .btn-new.disabled:hover, .btn-new[disabled]:hover, fieldset[disabled] .btn-new:hover, .btn-new.disabled:focus, .btn-new[disabled]:focus, fieldset[disabled] .btn-new:focus, .btn-new.disabled:active, .btn-new[disabled]:active, fieldset[disabled] .btn-new:active, .btn-new.disabled.active, .btn-new[disabled].active, fieldset[disabled] .btn-new.active { background-color: #df78f1; border-color: #da61ef; }
使用例
<a href="#" class="btn btn-new">New</a>
ボタン同様にラベルのオプションも簡単に作成できる。それぞれの LESS ファイルの内容を確認すると以下のようになっている。
labels.less
//labels.less の色の定義 ・・・省略・・・ // Colors // Contextual variations (linked labels get darker on :hover) .label-default { .label-variant(@label-default-bg); } .label-primary { .label-variant(@label-primary-bg); } ・・・省略・・・
mixins.less
// mixins.less 抜粋 ・・・省略・・・ // Labels .label-variant(@color) { background-color: @color; &[href] { &:hover, &:focus { background-color: darken(@color, 10%); } } } ・・・省略・・・
variables.less
//variables.less 抜粋 ・・・省略・・・ // Labels @label-default-bg: @gray-light; @label-primary-bg: @brand-primary; @label-success-bg: @brand-success; @label-info-bg: @brand-info; @label-warning-bg: @brand-warning; @label-danger-bg: @brand-danger; ・・・省略・・・
編集用の LESS ファイル(import_mixins.less)に「label-new 」というクラスを作成し、そこに「.label-variant()」ミックスインを読み込む。
//import_mixins.less @import "less/variables.less"; @import "less/mixins.less"; @label-new-bg: #DF78F1; //ラベルの色を指定 .label-new { .label-variant(@label-new-bg); }
import_mixins.less をコンパイルすると出力される CSS
.label-new { background-color: #df78f1; } .label-new[href]:hover, .label-new[href]:focus { background-color: #d44aec; }
使用例
<a href="#" class="label label-new">New</a>