定制自己的Bootstrap樣式

bootsrap

本文主要針對對Bootstrap有所了解,或者使用過Bootstrap的讀者提供參考。
官方提供了個性化定制功能 ,可以選擇自己需要的組件,插件,自己設置不同模塊的less變量,最后從官網下載到一份編譯后的個性化bootsrap。

如果是比較復雜的項目,雖然官網開放的變量上百個,但還是不能滿足業務需求,這時候就需要下載源碼修改less文件,bootstrap是通過less預編譯的。

less介紹

less是一種動態樣式語言。LESS 將 CSS 賦予了動態語言的特性,如 變量, 繼承, 運算, 函數.
使用less可以這樣寫css:

@base: #f938ab;

.box-shadow(@style, @c) when (iscolor(@c)) {
  box-shadow:         @style @c;
  -webkit-box-shadow: @style @c;
  -moz-box-shadow:    @style @c;
}
.box-shadow(@style, @alpha: 50%) when (isnumber(@alpha)) {
  .box-shadow(@style, rgba(0, 0, 0, @alpha));
}
.box { 
  color: saturate(@base, 5%);
  border-color: lighten(@base, 30%);
  div { .box-shadow(0 0 5px, 30%) }
}

less文件需要編譯器才能轉化為css文件。體驗less編譯可以在在線less編譯器中編寫less語句,然后編譯成css文件。gulp使用gulp-less實現編譯。

變量

變量允許我們單獨定義一系列通用的樣式,然后在需要的時候去調用。所以在做全局樣式調整的時候我們可能只需要修改幾行代碼就可以了。例如:

 // LESS

@color: #4D926F;

#header {
  color: @color;
}
h2 {
  color: @color;
}

編譯之后的css文件:

/* 生成的 CSS */

#header {
  color: #4D926F;
}
h2 {
  color: #4D926F;
}

混合

混合可以將一個定義好的class A輕松的引入到另一個class B中,從而簡單實現class B繼承class A中的所有屬性。我們還可以帶參數地調用,就像使用函數一樣。

// LESS

.rounded-corners (@radius: 5px) {
  border-radius: @radius;
  -webkit-border-radius: @radius;
  -moz-border-radius: @radius;
}

#header {
  .rounded-corners;
}
#footer {
  .rounded-corners(10px);
}

編譯后的css文件

* 生成的 CSS */

#header {
  border-radius: 5px;
  -webkit-border-radius: 5px;
  -moz-border-radius: 5px;
}
#footer {
  border-radius: 10px;
  -webkit-border-radius: 10px;
  -moz-border-radius: 10px;
}

嵌套規則

我們可以在一個選擇器中嵌套另一個選擇器來實現繼承,這樣很大程度減少了代碼量,并且代碼看起來更加的清晰。

// LESS

#header {
  h1 {
    font-size: 26px;
    font-weight: bold;
  }
  p { font-size: 12px;
    a { text-decoration: none;
      &:hover { border-width: 1px }
    }
  }
}

編譯后的css文件:

/* 生成的 CSS */

#header h1 {
  font-size: 26px;
  font-weight: bold;
}
#header p {
  font-size: 12px;
}
#header p a {
  text-decoration: none;
}
#header p a:hover {
  border-width: 1px;
}

函數 & 運算

運算提供了加,減,乘,除操作;我們可以做屬性值和顏色的運算,這樣就可以實現屬性值之間的復雜關系。LESS中的函數一一映射了JavaScript代碼,如果你愿意的話可以操作屬性值。

// LESS

@the-border: 1px;
@base-color: #111;
@red:        #842210;

#header {
  color: @base-color * 3;
  border-left: @the-border;
  border-right: @the-border * 2;
}
#footer { 
  color: @base-color + #003300;
  border-color: desaturate(@red, 10%);
}

編譯后的css文件:

/* 生成的 CSS */

#header {
  color: #333;
  border-left: 1px;
  border-right: 2px;
}
#footer { 
  color: #114411;
  border-color: #7d2717;
}

bootstrap源碼

Bootstrap 插件全部依賴 jQuery
請注意,Bootstrap 的所有 JavaScript 插件都依賴 jQuery,因此 jQuery 必須在 Bootstrap 之前引入,就像在基本模版中所展示的一樣。在 bower.json 文件中 列出了 Bootstrap 所支持的 jQuery 版本。

下載源碼

bootsrap源碼托管于github,可以通過git命令克隆倉庫:

git clone https://github.com/twbs/bootstrap.git

還可以通過包管理工具bower安裝:

bower install bootsrap

運行次命令后,bower會下載最新版的bootsrap源碼包到項目中。

源碼解讀

Bootstrap 源碼包含了預先編譯的 CSS、JavaScript 和圖標字體文件,并且還有 LESS、JavaScript 和文檔的源碼。具體來說,主要文件組織結構如下

bootstrap/
├── less/
├── js/
├── fonts/
├── dist/
│   ├── css/
│   ├── js/
│   └── fonts/
└── docs/
    └── examples/

less/、js/ 和 fonts/ 目錄分別包含了 CSS、JS 和字體圖標的源碼。dist/ 目錄包含了編譯后的bootsrap的css文件。docs/ 包含了所有文檔的源碼文件,examples/ 目錄是 Bootstrap 官方提供的實例工程。除了這些,其他文件還包含 Bootstrap 安裝包的定義文件、許可證文件和編譯腳本等。

bootstrap/less目錄下的文件均為.less文件,是bootsrap樣式的主要代碼,不同的文件根據功能及性質命名。

  • bootstrap.less:
    這個是核心文件。它用來引入其他文件,最終由你來編譯它。

  • reset.less:
    初始化文件,始終是最先引入的文件。

  • utilities.less
    這個文件總是最后引入,你可以把想要覆蓋的類寫到這里。

模塊化修改

為了讓修改的內容和原始文件分離開,需要引進模塊的方式,這樣的好處是如果bootstrap升級的時候,也不影響自定義后的樣式文件。由于less文件可以相互引入,因此很容易實現了模塊化
在bootsrap文件外邊平級創建一個custom文件夾,并創建以下文件

  • custom-variables.less:
    我從Bootstrap源碼中復制了一份variables.less并在這份拷貝中修改變量。

  • custom-other.less:
    這個文件中包含了那些無法定義成變量的自定義內容。

  • custom-bootstrap.less
    這是新的「核心」文件。我們將把它編譯成CSS。與原始的 LESS文件一樣,它使用下面的命令來引入上面那兩個自定義文件:

@import "../bootstrap/less/bootstrap.less";
@import "custom-variables.less";
@import "custom-other.less";
@import "../bootstrap/less/utilities.less";

這樣等bootsrap版本升級的時候也能輕松實現升級。

可視化修改

最后提供兩個可視化修改bootsrap變量的網站
bootswatchr 通過修改變量值實現。
stylebootstrap 通過組件化組織內容。

參考資料:

http://www.bootcss.com/p/lesscss/#docs
http://www.w3cplus.com/css/customizing-bootstrap.html
Thomas Park 《Customizing Bootstrap》

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,431評論 6 544
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,637評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,555評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,900評論 1 318
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,629評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,976評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,976評論 3 448
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,139評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,686評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,411評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,641評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,129評論 5 364
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,820評論 3 350
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,233評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,567評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,362評論 3 400
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,604評論 2 380

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,761評論 25 708
  • bootstrap已經作為前端開發必不可少的框架之一,應用bootstrap使得我們對布局、樣式的設定變得非常簡單...
    lovelydong閱讀 1,800評論 0 6
  • [目錄] Less為什么會出現? 學習Less的網站 Less的安裝環境離線的安裝方式在線的安裝方式 less轉化...
    頑皮的雪狐七七閱讀 15,426評論 5 42
  • 先安利我最近看的一部電視劇吧:《雞毛飛上天》,講浙江義烏小商品市場怎么發展起來的故事,以小積大呀,所以我們的基礎一...
    Iris_mao閱讀 611評論 0 6
  • 這幾天這座浙南小城因為下雪的消息沸騰了,從最初的強冷空氣到史上最強寒潮,從大雪紛飛到雨淅淅瀝瀝,憧憬著看到一場大雪...
    逸媽媽閱讀 227評論 0 0