私はLESSを使ってBootstrap 2.0.3を使っています。私はそれを大規模にカスタマイズしたいのですが、ライブラリーへの変更は頻繁に行われるので可能な限りソースに変更を加えないようにしたいです。私はLESSが初めてなので、そのコンパイルが完全にどのように機能するのかわかりません。 LESSまたはLESSベースのフレームワークを扱うためのベストプラクティスは何ですか?
私の解決策はjstamと似ていますが、可能な限りソースファイルに変更を加えることは避けます。ブートストラップへの変更が頻繁に起こることを考えると、私は最新のソースをプルダウンして、私の変更を別々のファイルに保存することによって最小限の変更を加えることができるようにしたいです。もちろん、それは完全に防弾ではありません。
Bootstrap.lessとvariables.lessを親ディレクトリにコピーします。 bootstrap.lessをtheme.lessまたはあなたが望むものに変更してください。ディレクトリのディレクトリ構造は次のようになります。
/Website
theme.less
variables.less
/Bootstrap
...
ブートストラップサブディレクトリを指すようにtheme.less内のすべての参照を更新します。 variables.lessが、次のようにブートストラップディレクトリではなく、親から参照されていることを確認します。
...
// CSS Reset
@import "bootstrap/reset.less";
// Core variables and mixins
@import "variables.less"; // Modify this for custom colors, font-sizes, etc
@import "bootstrap/mixins.less";
// Grid system and page structure
@import "bootstrap/scaffolding.less";
@import "bootstrap/grid.less";
@import "bootstrap/layouts.less";
...
CSSのオーバーライドを、それらが含まれている場所の直後にtheme.lessファイルに追加します。
...
// Components: Nav
@import "bootstrap/navs.less";
@import "bootstrap/navbar.less";
// overrides
.navbar-fixed-top .navbar-inner, .navbar-fixed-bottom .navbar-inner {
border-radius: 0 0 0 0;
padding: 10px;
}
.nav-tabs, .nav-pills {
text-transform: uppercase;
}
.navbar .nav > li > a {
text-shadow: none;
}
...
HTMLページでbootstrap.lessではなくtheme.lessにリンクします。
新しいバージョンが出るたびに、あなたの変更は安全であるべきです。新しいバージョンが出たときはいつでもあなたのカスタムブートストラップファイル間の差分をとるべきです。変数とインポートは変更される可能性があります。
これも私が苦労したことです。一方では、私は自分の色と設定でvariables.lessファイルを高度にカスタマイズしたいです。一方、アップグレードプロセスを容易にするために、ブートストラップファイルをできるだけ変更したいと思います。
私の解決策は(今のところ)アドオンLESSファイルを作成し、変数とミックスインがインポートされた後にそれをbootstrap.less
ファイルに挿入することです。だからこのようなもの:
...
// CSS Reset
@import "reset.less";
// Core variables and mixins
@import "variables.less"; // Modify this for custom colors, font-sizes, etc
@import "mixins.less";
// Custom Addons
@import "addon-file.less"; // <--- My custom LESS addon
// Grid system and page structure
@import "scaffolding.less";
...
この方法で、ブートストラップの色、フォントをリセットしたり、追加のミックスインを追加したりすることができます。私のコードは別ですが、残りのBootstrapインポート内でコンパイルされます。それは完璧ではありません、しかしそれは私のためにうまくいった一時停止です。
私の側からは、theme.less
のインポートを含むboostrap.less
という名前のファイルがあり、そのすぐ下にオーバーライドしています(LESSを使用するのが悪いように見えても、維持するほうが簡単です)。更新する。
これはvariables.less
内の変数にカスタム値を持たせるのに適しています。
その後、theme.less
を使わずにbootstrap.less
ファイルをコンパイルします。
例theme.less
:
@import "path/to/my/bootstrap.less";
@linkColor: #MyAwesomeColor;
もっと良い(私見)アプローチは Bootswatch githubプロジェクト swatchmaker から手がかりを得ることです。このプロジェクトは、Webサイト上の多数のBootstrapテーマの構築と管理に特化しています。
プロジェクトの Makefile
はswatchmaker.less
を構築します(customizations.less
のような名前に変更できます)。このファイルにはたくさんのインポートが含まれています。
@import "bootstrap/less/bootstrap.less";
@import "swatch/variables.less";
@import "swatch/bootswatch.less";
@import "bootstrap/less/utilities.less";
swatch
フォルダとbootswatch.less
ファイルの名前は、必要に応じて変更できます。
自分のファイルに影響を与えずにBootstrapをアップグレードできるので、これは理にかなっています。実際、Makefile
には、最新バージョンのBootstrapを取得するためのコマンドも含まれています。詳しくはプロジェクトページのREADMEをご覧ください。
おまけとして、READMEは.less
ファイルが変更されたときに自動的にプロジェクトをビルドするwatchr
gemをインストールすることをお勧めします。
私はJoelと同じ解決策を見つけました:
カスタム簡易ファイル
上で説明したのと同じように:私はカスタマイズしているすべてのLessファイルのためにローカルコピーを作成します。だから私はいくつかの標準を使用して私自身の追加をすることができます。欠点は次のとおりです。ブートストラップがアップデートされるとき、それは本当に移行するのが難しいです。
しかし、他にもあります。
スタイルの上書き
ワークフローを見回すとき、私は人々が単にスタイルを上書きすることを提案しているのをしばしば見る。ですから、まず標準のLessファイルをインポートしてから、一番下にカスタム宣言を追加します。その利点は次のとおりです。新しいバージョンにアップデートする方が簡単です。欠点は次のとおりです。コンパイル済みCSSファイルにすべての上書きが含まれています。一部のCSSセレクターは2回定義されています。それで、ブラウザは実際に何を適用するべきかを見つけるためにいくらかのリフティングをする必要があります。それは本当にきれいではありません。
私はなぜプリプロセッサがそのような二重宣言を解決するのに十分賢くないのか疑問に思いますか?私がここで欠けているより良いワークフローはありますか?
私がそうであるように(そしてあなただけが)あなたにはあなたがそれをすることができる時間があるならば。私は自分の修正したバージョンのフレームワークを保持しており、フレームワークが更新されるたびにドキュメントを読んでソースをチェックしています。
この解決策は一見するとあまり理想的ではないように思えるかもしれませんが、私はそうする理由があります。私は1つだけでは動作しませんが、多くのフレームワーク、ベストプラクティス、リセット/正規化スタイルシートなどを組み合わせたもので、更新によって既存のプロジェクトが変更されることは決してありません。
私は以下の理由で私自身のカスタムフレームワークで作業しています。
一番下のbootstrap.lessに@import "../../styles.less";
(またはあなたのスタイルシートがあるところはどこでも)を追加するだけです。これにより、.gradient
や.border-radius
のようなBootstrapミックスインをあなた自身のstyles.lessの中で使うことができます。