1. 程式人生 > >Bootstrap響應式佈局原理

Bootstrap響應式佈局原理

       網格系統的實現原理,是通過定義容器大小,平分12份(也有平分成24份或32份,但12份是最常見的),再調整內外邊距,最後結合媒體查詢,就製作出了強大的響應式網格系統

        網格系統的實現原理,是通過定義容器大小,平分12份(也有平分成24份或32份,但12份是最常見的),再調整內外邊距,最後結合媒體查詢,就製作出了強大的響應式網格系統。Bootstrap框架中的網格系統就是將容器平分成12份。

bootstrap優缺點:

1.bootstap最近釋出了bootstrap4,擁有了box-flex佈局等更新,緊跟最新的web技術的發展

2.比較成熟,在大量的專案中充分的使用和測試

3.擁有完善的文件,使用起來更方便

4.有大量的元件樣式,接受定製

缺點:

1.如果有自己特殊的需求,就需要重新定製樣式,如果一個網站中有大量的非bootstrap“風格”的樣式存在,那麼你就需要做大量的css重寫,因此也就失去了使用框架的意義。

2.會有相容問題,雖然網上存在很多相容IE的辦法,但需要引入其他檔案,有些還不小,勢必導致載入速度變慢,影響使用者體驗。

  Bootstrap響應式佈局是利用其柵格系統,對於不同的螢幕採用不同的類屬性。在開發中可以只寫一套程式碼在手機平板,PC端都能使用,而不用考慮使用媒體查詢(針對不同的裝置分別寫不同的程式碼)。Bootstrap的官方解釋:Bootstrap提供了一套響應式、移動裝置優先的流式柵格系統,隨著螢幕或視口(viewport)尺寸的增加,系統會自動分為做多12列。 柵格系統用於通過一系列的行(row)與列(column)的組合來建立頁面佈局。

柵格系統的工作原理:

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

使用Bootstrap響應式佈局,

       首先需要在head中引入meta標籤,新增viewpirt屬性,content中寬度等於裝置寬度, initial-scale:頁面首次被顯示可見區域的縮放級別,取值1則頁面按實際尺寸顯示,無任何縮放;maximum-scale:允許使用者縮放到的最小比例;user-scalable:使用者是否可以手動縮放。程式碼如下:

<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no"> 
<link rel="stylesheet" type="text/css" href="/stylesheets/bootstrap.min.css">

      下面為使用bootstrap佈局的頁面(登入表單介面),針對的是手機超小螢幕(iphone5s)和PC螢幕(>=1200px)。col-xs-12:小螢幕佔12列大小,col-lg-5:大螢幕佔5列大小,col-lg-offset-3:大螢幕縮排3列大小。這是一個比較簡單的例項,想要適應其他螢幕如平板可新增col-md-* 屬性,大屏手機可新增col-sm-*屬性。具體的螢幕使用哪個屬性,可參考上面圖上的針對不同螢幕Bootstrap柵格系統的不同使用。

<div class="container-fluid login">
  <div class="row">
    <div class="col-xs-12 col-sm-12 col-md-8 col-lg-5 col-lg-offset-3">
      <form class="form-horizontal loginForm">
        <h3 class="form-signin-heading">使用者登入</h3>
        <div class="form-group">
          <label for="email" class="col-sm-2 col-xs-3 control-label">郵箱</label>
          <div class="col-sm-8 col-xs-8">
            <input type="text" class="form-control" name="email" placeholder="請輸入郵箱">
              <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>
            </div>
        </div>
        <div class="form-group">
          <label for="password" class="col-sm-2 col-xs-3 control-label">密碼</label>
          <div class="col-sm-8 col-xs-8">
            <input type="password" class="form-control" name="password" placeholder="請輸入密碼">
              <span class="glyphicon glyphicon-ok form-control-feedback" aria-hidden="true"></span>
            </div>
        </div>
        <div class="form-group">
          <div class="col-sm-offset-2 col-sm-4 col-xs-4 ">
            <div class="checkbox">
              <label>
                <input type="checkbox">記住我 </label>
            </div>
          </div>
          <div class="col-sm-4 col-xs-4 control-label" >
            <a href="resetPwd.html" id="forget">忘記密碼?</a>
          </div>
        </div>
        <div class="form-group">
          <div class="col-sm-12 col-lg-12">
            <button type="button" class="btn btn-primary btn-block" id="submit">登入</button>
          </div>
        </div>
      </form>
    </div>
  </div>
  

程式碼效果圖: PC端:

手機端: