1. 程式人生 > 實用技巧 >前端框架—Bootstrap

前端框架—Bootstrap

目錄

一、Bootstrap簡介

1、Bootstrap頁面基本模板

<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <!--以最高的ie瀏覽器渲染-->
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <!--視口裝置 移動裝置優先 支援移動端 在多個裝置上適應 PC iphone android-->
        <meta name="viewport" content="width=device-width, initial-scale=1">
        <!-- 上述3個meta標籤必須放在最前面,任何其他內容都必須在後面! -->
        <title>Bootstrap Template</title>
        <!-- Bootstrap 必須引入Bootstrap-->
        <!--<link href="https://cdn.bootcss.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet">-->
        <link rel="stylesheet" type="text/css" href="bootstrap-3.3.7/css/bootstrap.css">
 
        <!-- HTML5 shim 和 Respond.js 是為了讓 IE8 支援 HTML5 元素和媒體查詢(media queries)功能 -->
        <!-- 警告:通過 file:// 協議(就是直接將 html 頁面拖拽到瀏覽器中)訪問頁面時 Respond.js 不起作用 -->
        <!--[if lt IE 9]>
          <script src="https://cdn.bootcss.com/html5shiv/3.7.3/html5shiv.min.js"></script>
          <script src="https://cdn.bootcss.com/respond.js/1.4.2/respond.min.js"></script>
        <[endif]-->
    </head>
    <body>
        <!-- jQuery (Bootstrap 的所有 JavaScript 外掛都依賴 jQuery,所以必須放在前邊) -->
        <!--<script src="jquery.min.js"></script>-->
        <!-- 載入 Bootstrap 的所有 JavaScript 外掛。也可以只加載單個外掛。 -->
        <!--<script src="bootstrap.min.js"></script>-->
    </body>
</html>

視口:視口就是viewport,指的是網頁中看到部分,通常與瀏覽器視窗相同,但不包括瀏覽器的 UI, 選單欄等——即指你正在瀏覽的文件的那一部分。

條件註釋:相容IE9一下的瀏覽器,讓其相容響應式。

<!--[if lt IE 9]>
      <script src="html5shiv.min.js"></script>
      <script src="respond.min.js"></script>
<![endif]-->

以下部分內容見官方文件https://v3.bootcss.com/css/#responsive-utilities

二、全域性CSS樣式

1、HTML5文件

Bootstrap 使用到的某些 HTML 元素和 CSS 屬性需要將頁面設定為 HTML5 文件型別。

2、移動裝置優先

Bootstrap是移動裝置優先的,為了確保適當的繪製和觸屏縮放,需要在 <head> 之中新增 viewport 元資料標籤

<meta name="viewport" content="width=device-width, initial-scale=1">

在移動裝置瀏覽器上,通過為視口(viewport)設定 meta 屬性為 user-scalable=no 可以禁用其縮放(zooming)功能。這樣禁用縮放功能後,使用者只能滾動螢幕,就能讓你的網站看上去更像原生應用的感覺。這種方式我們並不推薦所有網站使用,還是要看你自己的情況而定!

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no">

3、排版與連結

Bootstrap 排版、連結樣式設定了基本的全域性樣式。分別是:

  • body 元素設定 background-color: #fff;
  • 使用 @font-family-base@font-size-base@line-height-base 變數作為排版的基本引數
  • 為所有連結設定了基本顏色 @link-color ,並且當連結處於 :hover 狀態時才新增下劃線

這些樣式都能在 scaffolding.less 檔案中找到對應的原始碼。

4、Normalize.css

為了增強跨瀏覽器表現的一致性,我們使用了 Normalize.css,這是由 Nicolas GallagherJonathan Neal 維護的一個CSS 重置樣式庫。(要飯強)

三、佈局容器

Bootstrap 需要為頁面內容和柵格系統包裹一個 .container 容器。我們提供了兩個作此用處的類。注意,由於 padding 等屬性的原因,這兩種 容器類不能互相巢狀。

.container 類用於固定寬度並支援響應式佈局的容器。

<div class="container">
  ...
</div>

.container-fluid 類用於 100% 寬度,佔據全部視口(viewport)的容器。

<div class="container-fluid">
  ...
</div>

四、柵格系統

Bootstrap 提供了一套響應式、移動裝置優先的流式柵格系統,隨著螢幕或視口(viewport)尺寸的增加,系統會自動分為最多12列。它包含了易於使用的預定義類,還有強大的mixin 用於生成更具語義的佈局。

1、簡介

柵格系統用於通過一系列的行(row)與列(column)的組合來建立頁面佈局,你的內容就可以放入這些建立好的佈局中。

基本工作原理:

  • “行(row)”必須包含在 .container (固定寬度)或 .container-fluid (100% 寬度)中,以便為其賦予合適的排列(aligment)和內補(padding)。
  • 通過“行(row)”在水平方向建立一組“列(column)”。
  • 你的內容應當放置於“列(column)”內,並且,只有“列(column)”可以作為行(row)”的直接子元素。
  • 類似 .row.col-xs-4 這種預定義的類,可以用來快速建立柵格佈局。Bootstrap 原始碼中定義的 mixin 也可以用來建立語義化的佈局。
  • 通過為“列(column)”設定 padding 屬性,從而建立列與列之間的間隔(gutter)。通過為 .row 元素設定負值 margin 從而抵消掉為 .container 元素設定的 padding,也就間接為“行(row)”所包含的“列(column)”抵消掉了padding
  • 負值的 margin就是下面的示例為什麼是向外突出的原因。在柵格列中的內容排成一行。
  • 柵格系統中的列是通過指定1到12的值來表示其跨越的範圍。例如,三個等寬的列可以使用三個 .col-xs-4 來建立。
  • 如果一“行(row)”中包含了的“列(column)”大於 12,多餘的“列(column)”所在的元素將被作為一個整體另起一行排列。
  • 柵格類適用於與螢幕寬度大於或等於分界點大小的裝置 , 並且針對小螢幕裝置覆蓋柵格類。 因此,在元素上應用任何 .col-md-* 柵格類適用於與螢幕寬度大於或等於分界點大小的裝置 , 並且針對小螢幕裝置覆蓋柵格類。 因此,在元素上應用任何 .col-lg-* 不存在, 也影響大螢幕裝置。

2、媒體查詢

在柵格系統中,在less檔案中使用以下媒體查詢(media query)來建立關鍵的分界點閾值。

/* 超小螢幕(手機,小於 768px) */
/* 沒有任何媒體查詢相關的程式碼,因為這在 Bootstrap 中是預設的(還記得 Bootstrap 是移動裝置優先的嗎?) */

/* 小螢幕(平板,大於等於 768px) */
@media (min-width: @screen-sm-min) { ... }

/* 中等螢幕(桌面顯示器,大於等於 992px) */
@media (min-width: @screen-md-min) { ... }

/* 大螢幕(大桌面顯示器,大於等於 1200px) */
@media (min-width: @screen-lg-min) { ... }

偶爾也會在媒體查詢程式碼中包含 max-width 從而將 CSS 的影響限制在更小範圍的螢幕大小之內。

@media (max-width: @screen-xs-max) { ... }
@media (min-width: @screen-sm-min) and (max-width: @screen-sm-max) { ... }
@media (min-width: @screen-md-min) and (max-width: @screen-md-max) { ... }
@media (min-width: @screen-lg-min) { ... }

3、柵格引數

4、例項:從堆疊到水平排列

<div class="row">
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
  <div class="col-md-1">.col-md-1</div>
</div>
<div class="row">
  <div class="col-md-8">.col-md-8</div>
  <div class="col-md-4">.col-md-4</div>
</div>
<div class="row">
  <div class="col-md-4">.col-md-4</div>
  <div class="col-md-4">.col-md-4</div>
  <div class="col-md-4">.col-md-4</div>
</div>
<div class="row">
  <div class="col-md-6">.col-md-6</div>
  <div class="col-md-6">.col-md-6</div>
</div>

5、 例項:流式佈局容器

將最外面的佈局元素 .container 修改為 .container-fluid,就可以將固定寬度的柵格佈局轉換為 100% 寬度的佈局。

<div class="container-fluid">
  <div class="row">
    ...
  </div>
</div>

6、例項:移動裝置和桌面螢幕

是否不希望在小螢幕裝置上所有列都堆疊在一起?那就使用針對超小螢幕和中等螢幕裝置所定義的類吧,即 .col-xs-*.col-md-*

<!-- Stack the columns on mobile by making one full-width and the other half-width -->
<div class="row">
  <div class="col-xs-12 col-md-8">.col-xs-12 .col-md-8</div>
  <div class="col-xs-6 col-md-4">.col-xs-6 .col-md-4</div>
</div>

<!-- Columns start at 50% wide on mobile and bump up to 33.3% wide on desktop -->
<div class="row">
  <div class="col-xs-6 col-md-4">.col-xs-6 .col-md-4</div>
  <div class="col-xs-6 col-md-4">.col-xs-6 .col-md-4</div>
  <div class="col-xs-6 col-md-4">.col-xs-6 .col-md-4</div>
</div>

<!-- Columns are always 50% wide, on mobile and desktop -->
<div class="row">
  <div class="col-xs-6">.col-xs-6</div>
  <div class="col-xs-6">.col-xs-6</div>
</div>

7、 例項:手機、平板、桌面

<div class="row">
  <div class="col-xs-12 col-sm-6 col-md-8">.col-xs-12 .col-sm-6 .col-md-8</div>
  <div class="col-xs-6 col-md-4">.col-xs-6 .col-md-4</div>
</div>
<div class="row">
  <div class="col-xs-6 col-sm-4">.col-xs-6 .col-sm-4</div>
  <div class="col-xs-6 col-sm-4">.col-xs-6 .col-sm-4</div>
  <!-- Optional: clear the XS cols if their content doesn't match in height -->
  <div class="clearfix visible-xs-block"></div>
  <div class="col-xs-6 col-sm-4">.col-xs-6 .col-sm-4</div>
</div>

8、例項:多餘的列(column)將另起一行排列

如果在一個 .row 內包含的列(column)大於12個,包含多餘列(column)的元素將作為一個整體單元被另起一行排列。

<div class="row">
  <div class="col-xs-9">.col-xs-9</div>
  <div class="col-xs-4">.col-xs-4<br>Since 9 + 4 = 13 &gt; 12, this 4-column-wide div gets wrapped onto a new line as one contiguous unit.</div>
  <div class="col-xs-6">.col-xs-6<br>Subsequent columns continue along the new line.</div>
</div>

9、響應式列重置

即便有上面給出的四組柵格class,你也不免會碰到一些問題,例如,在某些閾值時,某些列可能會出現比別的列高的情況。為了克服這一問題,建議聯合使用 .clearfix響應式工具類

<div class="row">
  <div class="col-xs-6 col-sm-3">.col-xs-6 .col-sm-3</div>
  <div class="col-xs-6 col-sm-3">.col-xs-6 .col-sm-3</div>

  <!-- Add the extra clearfix for only the required viewport -->
  <div class="clearfix visible-xs-block"></div>

  <div class="col-xs-6 col-sm-3">.col-xs-6 .col-sm-3</div>
  <div class="col-xs-6 col-sm-3">.col-xs-6 .col-sm-3</div>
</div>

除了列在分界點清除響應, 您可能需要 重置偏移, 後推或前拉某個列。請看此柵格例項。

<div class="row">
  <div class="col-sm-5 col-md-6">.col-sm-5 .col-md-6</div>
  <div class="col-sm-5 col-sm-offset-2 col-md-6 col-md-offset-0">.col-sm-5 .col-sm-offset-2 .col-md-6 .col-md-offset-0</div>
</div>

<div class="row">
  <div class="col-sm-6 col-md-5 col-lg-6">.col-sm-6 .col-md-5 .col-lg-6</div>
  <div class="col-sm-6 col-md-5 col-md-offset-2 col-lg-6 col-lg-offset-0">.col-sm-6 .col-md-5 .col-md-offset-2 .col-lg-6 .col-lg-offset-0</div>
</div>

10、 列偏移

使用 .col-md-offset-* 類可以將列向右側偏移。這些類實際是通過使用 * 選擇器為當前元素增加了左側的邊距(margin)。例如,.col-md-offset-4 類將 .col-md-4 元素向右側偏移了4個列(column)的寬度。

<div class="row">
  <div class="col-md-4">.col-md-4</div>
  <div class="col-md-4 col-md-offset-4">.col-md-4 .col-md-offset-4</div>
</div>

11、列巢狀

為了使用內建的柵格系統將內容再次巢狀,可以通過新增一個新的 .row 元素和一系列 .col-sm-* 元素到已經存在的 .col-sm-* 元素內。被巢狀的行(row)所包含的列(column)的個數不能超過12(其實,沒有要求你必須佔滿12列)。

<div class="row">
  <div class="col-sm-9">
    Level 1: .col-sm-9
    <div class="row">
      <div class="col-xs-8 col-sm-6">
        Level 2: .col-xs-8 .col-sm-6
      </div>
      <div class="col-xs-4 col-sm-6">
        Level 2: .col-xs-4 .col-sm-6
      </div>
    </div>
  </div>
</div>

12、列排序

通過使用 .col-md-push-*.col-md-pull-* 類就可以很容易的改變列(column)的順序。

<div class="row">
  <div class="col-md-9 col-md-push-3">.col-md-9 .col-md-push-3</div>
  <div class="col-md-3 col-md-pull-9">.col-md-3 .col-md-pull-9</div>
</div>

五、排版

1、標題

<h1><h6> 均可使用。另外,還提供了 .h1.h6 類,為的是給內聯(inline)屬性的文字賦予標題的樣式。

在標題內還可以包含 <small> 標籤或賦予 .small 類的元素,可以用來標記副標題。

<h2>二級標題<small>副標題</small></h2>

2、頁面

 Bootstrap 將全域性 font-size 設定為 14pxline-height 設定為 1.428(黃金分隔比例)。這些屬性直接賦予 <body> 元素和所有段落元素。另外,<p> (段落)元素還被設定了等於 1/2 行高(即 10px)的底部外邊距(margin)。在頁面寫入p標籤,可以在控制檯看到p標籤的樣式資訊如下:

body {
    font-family: "Helvetica Neue", Helvetica, Arial, sans-serif;
    font-size: 14px;
    line-height: 1.42857143;
    color: #333;
    background-color: #fff;
} 

1、中心內容

通過新增 .lead 類可以讓段落突出顯示。

<p>我是<span class="lead">頁面</span>主題</p>

2、使用Less工具構建

variables.less 檔案中定義的兩個 Less 變數決定了排版尺寸:@font-size-base@line-height-base。第一個變數定義了全域性 font-size 基準,第二個變數是 line-height 基準。我們使用這些變數和一些簡單的公式計算出其它所有頁面元素的 margin、 padding 和 line-height。自定義這些變數即可改變 Bootstrap 的預設樣式。

3、內聯文字

1、marked text<mark>標籤高亮文字)

<p>
    <mark>高亮文字</mark>
</p>

高亮文字

2、被刪除的文字(<del>標籤)

<del>被刪除的文字</del>

被刪除的文字

3、無用文字

對於沒用的文字使用 <s> 標籤,效果同<del>相似。

4、插入文字

額外插入的文字使用 <ins> 標籤。具有下劃線效果。

插入的文字

5、下劃線文字

為文字新增下劃線,使用 <u> 標籤。利用 HTML 自帶的表示強調意味的標籤來為文字增添少量樣式。

6、小號文字

對於不需要強調的inline或block型別的文字,使用 <small> 標籤包裹,其內的文字將被設定為父容器字型大小的 85%。標題元素中巢狀的 <small> 元素被設定不同的 font-size

還可以為行內元素賦予 .small 類以代替任何 <small> 元素。

7、著重

通過增加 font-weight 值強調一段文字。 <strong></strong>

8、斜體

用斜體強調一段文字<em></em>

強調文字

在 HTML5 中可以放心使用 <b><i> 標籤。<b> 用於高亮單詞或短語,不帶有任何著重的意味;而 <i> 標籤主要用於發言、技術詞彙等。

4、對齊

<div class="col-md-4">
    <!--左對齊、中心對齊、右對齊-->
    <p class="text-left">Left aligned text.</p>
    <p class="text-center">Center aligned text.</p>
    <p class="text-right">Right aligned text.</p>
    <!--調整過得文字-->
    <p class="text-justify">Justified text.</p>
    <!--不對齊-->
    <p class="text-nowrap">No wrap text.</p>
</div>

同時還可以發現,div盒子都有15px內白間隔:padding-right: 15px; padding-left: 15px;

5、改變大小

<!--小寫-->
<p class="text-lowercase">Lowercased text.</p>
<!--大寫-->
<p class="text-uppercase">Uppercased text.</p>
<!--大寫字母開頭-->
<p class="text-capitalize">Capitalized text.</p>

6、引用

使用<blockquote></blockquote>

引用的內容

命名來源

新增<footer></footer>用於表名引用來源,來源的名稱可以包裹進<cite>標籤中。

<blockquote>
    <footer><cite title="Source Title">Source Title</cite></footer>
</blockquote>

使用者輸入

通過<kbd>標籤標記使用者通過鍵盤輸入的內容。

shift

程式碼

<code>標籤

print('hello')

程式碼塊

多行程式碼可以使用 <pre> 標籤。為了正確的展示程式碼,注意將尖括號做轉義處理。

<pre>&lt;p&gt;Sample text here...&lt;/p&gt;</pre>
<p>Sample text here...</p>

還可以使用 .pre-scrollable 類,其作用是設定 max-height 為 350px ,並在垂直方向展示滾動條。

變數

<var>標籤有傾斜效果

<var>z=x+y</var>

z=x+y

六、表格

1、基本表格

為任意 <table> 標籤新增 .table 類可以為其賦予基本的樣式 — 少量的內補(padding)和水平方向的分隔線。

<div class="col-md-4">
    <table class="table">
        <thead>
            <tr>
                <th>編號</th>
                <th>姓名</th>
                <th>年齡</th>
                <th>身高</th>
            </tr>
        </thead>
        <tbody>
            <tr>
                <td>1</td>
                <td>小馬哥</td>
                <td>18</td>
                <td>180</td>
            </tr>
            <tr>
                <td>2</td>
                <td>小馬哥</td>
                <td>18</td>
                <td>180</td>
            </tr>
            <tr>
                <td>3</td>
                <td>小馬哥</td>
                <td>18</td>
                <td>180</td>
            </tr>
            <tr>
                <td>4</td>
                <td>小馬哥</td>
                <td>18</td>
                <td>180</td>
            </tr>
        </tbody>
    </table>
</div>

2、條紋狀表格

通過 .table-striped 類可以給 <tbody> 之內的每一行增加斑馬條紋樣式。

  注意(跨瀏覽器相容性):條紋狀表格是依賴 :nth-child CSS 選擇器實現的,而這一功能不被 Internet Explorer 8 支援。

<table class="table table-striped">
  ...
</table>

3、帶邊框的表格

新增 .table-bordered 類為表格和其中的每個單元格增加邊框。

<table class="table table-bordered">
  ...
</table>

4、滑鼠懸停

通過新增 .table-hover 類可以讓 <tbody> 中的每一行對滑鼠懸停狀態作出響應。

<table class="table table-hover">
  ...
</table>

5、緊縮表格

通過新增 .table-condensed 類可以讓表格更加緊湊,單元格中的內補(padding)均會減半。

<table class="table table-condensed">
  ...
</table>

6、 狀態類

通過這些狀態類可以為行或單元格設定顏色。

Class 描述
.active 滑鼠懸停在行或單元格上時所設定的顏色
.success 標識成功或積極的動作
.info 標識普通的提示資訊或動作
.warning 標識警告或需要使用者注意
.danger 標識危險或潛在的帶來負面影響的動作
<!-- On rows -->
<tr class="active">...</tr>
<tr class="success">...</tr>
<tr class="warning">...</tr>
<tr class="danger">...</tr>
<tr class="info">...</tr>

<!-- On cells (`td` or `th`) -->
<tr>
  <td class="active">...</td>
  <td class="success">...</td>
  <td class="warning">...</td>
  <td class="danger">...</td>
  <td class="info">...</td>
</tr>

七、表單

1、基本表單

單獨的表單控制元件會被自動賦予一些全域性樣式。所有設定了 .form-control 類的 <input><textarea><select> 元素都將被預設設定寬度屬性為 width: 100%;。 將 label 元素和前面提到的控制元件包裹在 .form-group 中可以獲得最好的排列。

<form>
  <div class="form-group">
    <label for="exampleInputEmail1">Email address</label>
    <input type="email" class="form-control" id="exampleInputEmail1" placeholder="Email">
  </div>
  <div class="form-group">
    <label for="exampleInputPassword1">Password</label>
    <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
  </div>
  <div class="form-group">
    <label for="exampleInputFile">File input</label>
    <input type="file" id="exampleInputFile">
    <p class="help-block">Example block-level help text here.</p>
  </div>
  <div class="checkbox">
    <label>
      <input type="checkbox"> Check me out
    </label>
  </div>
  <button type="submit" class="btn btn-default">Submit</button>
</form>