今日はBootstrapをおさらいしながら、「boilerplate」テーマのカスタマイズを行っていた。 どのようにカスタマイズするのかをもう少し具体的に言うと
- boilerplate.lessの@import部分をすべてリマークする。
- 代わりにbootstrap.lessを@importする。
- boilerplate.less中の変数をbootstrap中の類似の変数に置き換える。
- 同じ定義(例えば.btnクラス定義)を削除する。
- mix-inを置き換える。
- クラス定義を追加することでスタイルをBootstrapのものに置き換える。
6.であるが、LESSはある定義されているクラスの内容を別のクラスにも適用したい場合、単純にクラスを適用したいクラス中に書くだけで適用することができる。
.btn-small {
.btn;
.btn-sm;
}
.btn-smallというのはもともと単独でスタイル定義されているものであったが、Bootstrapで定義されている.btn,.btn-smクラスにスタイルを合わせたかったので中身を書き換えた。 これをコンパイルするとクラス定義の中身がうまい具合に展開され、下記のCSSコードとなる。
.btn-small {
display: inline-block;
margin-bottom: 0;
font-weight: normal;
text-align: center;
vertical-align: middle;
cursor: pointer;
background-image: none;
border: 1px solid transparent;
white-space: nowrap;
padding: 6px 12px;
font-size: 14px;
line-height: 1.42857143;
border-radius: 4px;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
padding: 5px 10px;
font-size: 12px;
line-height: 1.5;
border-radius: 3px;
}
.btn-small:focus,
.btn-small:active:focus,
.btn-small.active:focus {
outline: thin dotted;
outline: 5px auto -webkit-focus-ring-color;
outline-offset: -2px;
}
.btn-small:hover,
.btn-small:focus {
color: #333333;
text-decoration: none;
}
.btn-small:active,
.btn-small.active {
outline: 0;
background-image: none;
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, 0.125);
}
.btn-small.disabled,
.btn-small[disabled],
fieldset[disabled] .btn-small {
cursor: not-allowed;
pointer-events: none;
opacity: 0.65;
filter: alpha(opacity=65);
-webkit-box-shadow: none;
box-shadow: none;
}
いやコンパイルするとこんなに大量に展開されるとは思ってもみなかったな。。Bootstrap恐るべし。。ひょっとして&:extend()
した方が良いのかも。明日試してみよう。。
ここまでやりかけたところで、ちょっとBootstrapベースではてなブログをカスタマイズしている人を探してみたところやっぱりいた。
これはsassでカスタマイズする方法であるが、ほぼ同じ考え方である。参考になったのはbootstrap.sassをimportすると全部のCSSコードが展開されるので、CSSファイルが100kb程度になってしまうのと、その回避方法の部分。はてなブログでは64Kを超えると超えた部分がカットされてしまうとのことで、その部分をこの方はuncssでけずり64kb以内に収めたそうだ。LESSで試すとやはり100Kbを超えてしまう。私はいらない機能をカットする(@importしない)ことで64kb以内に収められそうなので、それで行こうかなと思っている。