乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      CSS Grid構(gòu)建圣杯布局

       quasiceo 2016-08-03

      小編推薦:掘金是一個(gè)高質(zhì)量的技術(shù)社區(qū),從 ECMAScript 6 到 Vue.js,性能優(yōu)化到開源類庫,讓你不錯(cuò)過前端開發(fā)的每一個(gè)技術(shù)干貨。各大應(yīng)用市場搜索「掘金」即可下載APP,技術(shù)干貨盡在掌握中。

      CSS 網(wǎng)格布局模塊,雖然現(xiàn)在仍處于編譯者的草案之中但是即將定稿。我們現(xiàn)在可以在一些瀏覽器中進(jìn)行測試并可以檢測其潛在的bug。

      有關(guān)于CSS Grid布局模塊更多的教程,可以點(diǎn)擊這里閱讀。

      CSS 網(wǎng)格布局是真的很復(fù)雜,相較于 Flexbox 更是如此。它具有17個(gè)新屬性并且在如何使用CSS書寫方面介紹了很多新概念。為了嘗試如何使用縈繞在我腦海中的這些新規(guī)范,我決定創(chuàng)建一個(gè)圣杯布局嘗試新規(guī)范工作原理。

      什么是圣杯布局?

      圣杯布局是一種包括頁眉、頁腳和一個(gè)包含兩個(gè)左右邊欄的主內(nèi)容區(qū)的網(wǎng)頁布局。其布局遵循以下規(guī)則:

      • 固定寬度側(cè)邊欄自適應(yīng)主內(nèi)容區(qū)域
      • 中間一列應(yīng)該在標(biāo)記中最先出現(xiàn),早于兩個(gè)側(cè)邊欄(但在頁眉后)
      • 不管三列中包含的是什么,都應(yīng)該具有相同的高度
      • 頁腳應(yīng)該總是處于瀏覽器視窗的底部,即使內(nèi)容不能填滿視區(qū)高度
      • 布局應(yīng)該是響應(yīng)的,在小視窗中所有的部分應(yīng)該在一列中顯示

      大家都知道如果不使用hacks這是很難用CSS來實(shí)現(xiàn)的。

      CSS Grid解決方案

      下面是我用 CSS 網(wǎng)格布局想出的的解決方案。第一,標(biāo)記--

      <body class="hg">  
          <header class="hg__header">Title</header>
          <main class="hg__main">Content</main>
          <aside class="hg__left">Menu</aside>
          <aside class="hg__right">Ads</aside>
          <footer class="hg__footer">Footer</footer>
      </body>  
      

      CSS樣式的代碼只有 31 行:

      .hg__header {
          grid-area: header;
      }
      .hg__footer {
          grid-area: footer;
      }
      .hg__main {
          grid-area: main;
      }
      .hg__left {
          grid-area: navigation;
      }
      .hg__right {
          grid-area: ads;
      }
      .hg {
          display: grid;
          grid-template-areas: "header header header"
                               "navigation main ads"
                               "footer footer footer";
          grid-template-columns: 150px 1fr 150px;
          grid-template-rows: 100px 
                              1fr
                              30px;
          min-height: 100vh;
      }
      @media screen and (max-width: 600px) {
          .hg {
              grid-template-areas: "header"
                                   "navigation"
                                   "main"
                                   "ads"
                                   "footer";
              grid-template-columns: 100%;
              grid-template-rows: 100px 
                                  50px 
                                  1fr
                                  50px 
                                  30px;
          }
      }
      

      Grid構(gòu)建圣杯布局

      把它分解

      如前所述,CSS 網(wǎng)格布局可能非常復(fù)雜。然而,創(chuàng)建此布局我只用 17 個(gè)新屬性中的4個(gè):

      • grid-area
      • grid-template-areas
      • grid-template-columns
      • grid-template-rows

      使用這些 CSS 網(wǎng)格屬性創(chuàng)建圣杯布局可以分解成五個(gè)步驟。

      定義網(wǎng)格

      我們想要做的第一件事是定義網(wǎng)格區(qū)域,創(chuàng)建網(wǎng)格時(shí)我們可以引用它們的別名。這里用到的是grid-area屬性。

      .hg__header {
          grid-area: header;
      }
      .hg__footer {
          grid-area: footer;
      }
      .hg__main {
          grid-area: main;
      }
      .hg__left {
          grid-area: navigation;
      }
      .hg__right {
          grid-area: ads;
      }
      

      然后,使用grid-template-areas屬性,我們可以真正直觀的指定網(wǎng)格的布局。grid-template-areas屬性接受一個(gè)以空格分隔的字符串。每個(gè)字符串表示一行,利用每個(gè)字符串,我們就可以獲取以一個(gè)空格分隔的網(wǎng)格區(qū)域列表值,每一個(gè)值均定義網(wǎng)格區(qū)域的一列。所以如果我們要跨越兩列區(qū)域,我們需要定義兩次。

      在我們圣杯布局中有 33 行。頁眉和頁腳行跨越 3 列,其他跨越 1 列。

      .hg {
          display: grid;
          grid-template-areas: "header header header"
                               "navigation main ads"
                               "footer footer footer";
      }
      

      利用此標(biāo)記我們可以得到以下結(jié)果。

      Grid構(gòu)建圣杯布局

      定義列寬

      接下來,我們想要定義列的寬度。這里我們利用grid-template-columns屬性定義列的寬度。此屬性接受一個(gè)空格分隔的寬度列表,每一個(gè)值均表示網(wǎng)格中的一列。因?yàn)樵谖覀兊牟季种杏?code>3列,我們可以指定3個(gè)寬度:

      grid-template-columns: [column 1 width]  [column 2 width]  [column 3 width];  
      

      對于圣杯布局,我們想要將2個(gè)側(cè)欄的寬度設(shè)置為150px。

      .hg {
          grid-template-columns: 150px  [column 2 width] 150px;
      }
      

      對于中間列,我們想要其占據(jù)其余的全部空間。這里我們可以使用新單位fr。這個(gè)單位表示網(wǎng)格中剩余的全部空間。在我們的例子表示網(wǎng)格減去300px(兩個(gè)側(cè)邊欄的寬度)后的寬度。

      .hg {
          grid-template-columns: 150px 1fr 150px;
      }
      

      設(shè)置完網(wǎng)格列之后, 布局看起來如下所示-

      Grid構(gòu)建圣杯布局

      定義行高

      接下來,我們就要定義行的高度了。類似于我們用grid-template-columns屬性定義列的寬度,我們使用grid-template-rows屬性定義行高。此屬性也是接受以空格分隔的一行高度列表。雖然我們可以把它寫在同一行中,但是我認(rèn)為為了使其更加清晰直觀將一值寫一行。

      .hg {
          grid-template-rows: 100px
                              1fr
                              30px;
      }
      

      所以布局中的頁眉高度為100px,頁腳高度為30px,中間一行(主要內(nèi)容和兩個(gè)側(cè)邊欄)占據(jù).hg元素中其余的可用空間。

      Grid構(gòu)建圣杯布局

      定位頁腳

      在圣杯布局中,即使頁面內(nèi)容十分稀疏,我們也想要頁腳總是處于視窗的底部。要實(shí)現(xiàn)這一目標(biāo),我們可以在.hg元素中設(shè)置一個(gè)最小的視窗高度。

      .hg {
          min-height: 100vh;
      }
      

      因?yàn)槲覀儗⒅虚g一列的寬度和高度設(shè)置為占據(jù).hg元素的剩余空間,所以它就會(huì)適應(yīng)于整個(gè)屏幕。

      Grid構(gòu)建圣杯布局

      響應(yīng)式

      最后,我們想要布局具有響應(yīng)性。在較小的設(shè)備上所有網(wǎng)格項(xiàng)應(yīng)該一個(gè)接一個(gè)的以單列顯示。為此,我們需要重新定義之前的-grid-template-areas、grid-template-columnsgrid-template-rows3個(gè)屬性.

      首先,我們想要所有的網(wǎng)格項(xiàng)按照特定順序在一列中顯示:

      @media screen and (max-width: 600px) {
          .hg {
              grid-template-areas: "header"
                                   "navigation"
                                   "main"
                                   "ads"
                                   "footer";
          }
      }
      

      接下來,我們想要所有的網(wǎng)格項(xiàng)跨越整個(gè)寬度:

      @media screen and (max-width: 600px) {
          .hg {
              grid-template-columns: 100%;
          }
      }
      

      最后,我們需要重置每個(gè)行的高度。除了main之外的所有行都有一個(gè)已定義的高度:

      @media screen and (max-width: 600px) {
          .hg {
              grid-template-rows: 100px /* Header */
                                  50px /* Navigation */
                                  1fr /* Main Content */
                                  50px /* Ads */
                                  30px; /* Footer */
          }
      }
      

      Grid構(gòu)建圣杯布局

      就是這樣!你可以看看這里的演示以及源碼(nb:你可能需要在瀏覽器中啟用網(wǎng)絡(luò)功能才可以看到)。

      瀏覽器支持

      本文根據(jù)@Ire Aderinokun的《The Holy Grail Layout with CSS Grid》所譯,整個(gè)譯文帶有我們自己的理解與思想,如果譯得不好或有不對之處還請同行朋友指點(diǎn)。如需轉(zhuǎn)載此譯文,需注明英文出處:http:///holy-grail-layout-css-grid/

      靜子

      在校學(xué)生,本科計(jì)算機(jī)專業(yè)。一個(gè)積極進(jìn)取、愛笑的女生,熱愛前端,喜歡與人交流分享。想要通過自己的努力做到心中的那個(gè)自己。微博:@靜-如秋葉

      如需轉(zhuǎn)載,煩請注明出處:http://www./css3/holy-grail-layout-css-grid.html

        本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲(chǔ)空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
        轉(zhuǎn)藏 分享 獻(xiàn)花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多