亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 網站 > WEB開發 > 正文

CSS3 彈性盒布局模型和布局原理

2024-04-27 15:17:25
字體:
來源:轉載
供稿:網友

       在CSS 3中,CSS Flexible Box模塊為一個非常重要的模塊,該模塊用于以非常靈活的方式實現頁面布局處理。

       雖然可以使用其他CSS樣式屬性來實現頁面布局處理,但是如果使用CSS Flexible Box模塊中定義的彈性盒布局技術,可以根據屏幕尺寸或瀏覽器窗口尺寸自動調整頁面中各局部區域的顯示方式,即實現非常靈活的布局處理。

       引入彈性盒布局模型的目的是提供一種更加有效的方式來對一個容器中的條目進行排列、對齊和分配空白空間。即便容器中條目的尺寸未知或是動態變化的,彈性盒布局模型也能正常的工作。在該布局模型中,容器會根據布局的需要,調整其中包含的條目的尺寸和順序來最好地填充所有可用的空間。當容器的尺寸由于屏幕大小或窗口尺寸發生變化時,其中包含的條目也會被動態地調整。比如當容器尺寸變大時,其中包含的條目會被拉伸以占滿多余的空白空間;當容器尺寸變小時,條目會被縮小以防止超出容器的范圍。彈性盒布局是與方向無關的。在傳統的布局方式中,block 布局是把塊在垂直方向從上到下依次排列的;而 inline 布局則是在水平方向來排列。彈性盒布局并沒有這樣內在的方向限制,可以由開發人員自由操作。

      在進行詳細 解釋這個模型之前,我們先了解一下彈性盒模型的幾個屬性,稍微看一下就好,后面會解釋具體的用法。

1)box-orient:用來確定子元素的方向。是橫著排還是豎著走。

2)box-direction:用來確定子元素的排列順序,即是否反轉。

3)box-pack:用來確定子元素的左右對齊方式。

4)box-align:用來確定子元素的上下對齊方式。

5)box-flex:用來確定子元素如何分配其剩余元素。子元素的尺寸=盒子的尺寸*子元素的box-flex屬性值 / 所有子元素的box-flex屬性值的和。

5)box-lines:用來決定子元素是可以換行顯示。

6)box-flex-group:用來確定子元素的所屬組。

7)box-ordinal-group:用來確定子元素的顯示順序。

   接下來開始通過一個示例頁面開始學習彈性盒布局。該示例頁面中的body元素中的代碼如下所示。

<div id="main">    <div class="content">        <section>            <h1>section 1</h1>            <p>示例文字</p>        </section>        <section>            <h1>section 2</h1>            <p>示例文字</p>        </section>        <section>            <h1>section 3</h1>            <p>示例文字</p>        </section>        <section>            <h1>section 4</h1>            <p>示例文字</p>        </section>    </div>    <div class="content">        <section>            <h1>section 5</h1>            <p>示例文字</p>            <section>                <h1>section 6</h1>                <p>示例文字</p>            </section>            <section>                <h1>section 7</h1>                <p>示例文字</p>            </section>            <section>                <h1>section 8</h1>                <p>示例文字</p>            </section>    </div>    <div class="content">        <section>            <h1>section 9</h1>            <p>示例文字</p>        </section>        <section>            <h1>section 10</h1>            <p>示例文字</p>        </section>        <section>            <h1>section 11</h1>            <p>示例文字</p>        </section>        <section>            <h1>section 12</h1>            <p>示例文字</p>        </section>    </div></div>

      為了更清晰看清楚結構,具體的樣式代碼如下:

        #main {            border: 2px solid #382aff;            padding: 1em;        }        .content {            border: 2px solid #ff2834;            padding: 1em;        }        div {            border: 2px solid #73ff58;            padding: 1em;        }      頁面顯示結果如下:

1、使用彈性盒布局 dispaly:box

      接下來,對示例頁面使用彈性盒布局:

       彈性盒布局的指定方法為:對需要布局的元素的容器元素使用display: -moz-box;display: -webkit-box;display: box;樣式屬性,因為這個屬性需要兼容各種瀏覽器,所以需要寫前綴進行兼容性書寫。在CSS Flexible Box模塊中,該容器元素中的每一個元素均被稱為“Flex item”,將該容器元素稱為“Flex container”。

  彈性盒布局方式與使用float等樣式屬性進行的布局方式的一個主要區別為,當使用float等樣式屬性時,需要對容器中每一個元素指定樣式屬性,當使用彈性盒布局時,只需對容器元素指定樣式屬性。

  接下來,我們首先對所有樣式類名為content的div元素使用彈性盒布局,這些div元素的容器元素為id屬性值為main的div元素,修改該元素的樣式代碼如下所示:

       #main {            border: 2px solid #382aff;            padding: 1em;            display: -moz-box;            display: -webkit-box;            display: box;        }

       在瀏覽器中打開示例頁面,頁面中所有樣式類名為content的div元素的排列方式被修改為橫向排列,如下圖所示。

2、設置元素排列順序 box-direction

  可以通過box-direction樣式屬性的使用來控制容器中所有子元素的排列順序,可指定值如下所示。

normal | reverse | inherit

      其中normal是默認值,表示按照正常順序排列。所謂正常順序,就是我們看書寫文字的順序,從左往右,由上至下,先出現的元素,就上面或是左邊。而reverse表示反轉?! ?/p>

     修改id屬性值為main的div元素的樣式代碼如下所示:

        #main {            border: 2px solid #382aff;            padding: 1em;            display: -moz-box;            display: -webkit-box;            display: box;            -moz-box-direction: reverse;            -webkit-box-direction: reverse;            box-direction: reverse;        }

       在瀏覽器中打開示例頁面,頁面中所有樣式類名為content的div元素的排列方式被修改為從容器元素,即id屬性值為main的div元素的右端開始橫向反向排列,如下圖所示。

   接下來首先恢復所有樣式類名為content的div元素的排列方式為橫向正向排列,修改id屬性值為main的div元素的樣式代碼如下所示:

        #main {            border: 2px solid #382aff;            padding: 1em;            display: -moz-box;            display: -webkit-box;            display: box;        }

  然后對所有樣式類名為content的div元素指定box-direction: reverse;樣式屬性,代碼如下所示:

        .content {            border: 2px solid #ff2834;            padding: 1em;            display: -moz-box;            display: -webkit-box;            display: box;            -moz-box-direction: reverse;            -webkit-box-direction: reverse;            box-direction: reverse;        }

  在瀏覽器中打開示例頁面,頁面中所有content的div元素的所有section子元素的排列方式被修改為縱向反向排列(不包含section子元素中的section孫元素),如下圖所示。

3、設置元素排列方式 box-orient

      可以通過box-orient來確定容器中子元素的方向。是橫著排還是豎著走??蛇x的值有:

horizontal | vertical | inline-axis | block-axis | inherit

      其中,inline-axis是默認值。且horizontal與inline-axis的表現似乎一致的,讓子元素橫排;而vertical與block-axis的表現也是一致的,讓元素縱列。

     然后對所有樣式類名為content的div元素指定-moz-box-orient:vertical; -webkit-box-orient:vertical; box-orient:vertical; 樣式屬性,代碼如下顯示:

        .content {            border: 2px solid #ff2834;            padding: 1em;            display: -moz-box;            display: -webkit-box;            display: box;            -moz-box-orient:vertical;            -webkit-box-orient:vertical;            -o-box-orient:vertical;            box-orient:vertical;        }

   在瀏覽器中打開示例頁面,頁面中所有content的div元素的所有section子元素的排列方式被修改為縱向排列(不包含section子元素中的section孫元素),如下圖所示。

4、設置元素寬度 box-flex

       接下來首先介紹如何設置被橫向排列的每一個元素的寬度。

  可以通過flex屬性值的使用使所有子元素的總寬度等于容器寬度。

  接下來通過將所有樣式類名為content的div元素的flex屬性值設置為1的方法使所有樣式類名為content的div元素的總寬度等于容器元素,即id屬性值為main的div元素的寬度,代碼如下所示。當所有樣式類名為content的div元素的flex屬性值都被設置為1時,這些div元素的寬度均等。

         .content {            border: 2px solid #ff2834;            padding: 1em;            display: -moz-box;            display: -webkit-box;            display: box;            -webkit-box-flex: 1;            -moz-box-flex: 1;            box-flex: 1;            -moz-box-orient:vertical;            -webkit-box-orient:vertical;            -o-box-orient:vertical;            box-orient:vertical;        }

    在瀏覽器中打開示例頁面,所有樣式類名為content的div元素的寬度自動增長,這些元素的總寬度等于容器元素,即id屬性值為main的div元素的寬度,每一個樣式類名為content的div元素的寬度均等,如下圖所示。

       接下來,我們設置第二個樣式類名為content的div元素的box-flex屬性值為2,代碼如下所示。

        .content:nth-child(2) {            -webkit-box-flex: 2;            -moz-box-flex: 2;            box-flex: 2;        }

       在瀏覽器中打開示例頁面,所有樣式類名為content的div元素的寬度自動增長,第二個類名為content的div元素 的寬度時其他兩個div的2倍,如下圖所示。

      為了更清晰地計算元素寬度,我們取消所有元素的邊框設置及內邊距設置,修改后的完整樣式代碼如下所示。

        #main {            display: -moz-box;            display: -webkit-box;            display: box;        }        .content {            display: -moz-box;            display: -webkit-box;            display: box;            -webkit-box-flex: 1;            -moz-box-flex: 1;            box-flex: 1;            -moz-box-orient:vertical;            -webkit-box-orient:vertical;            -o-box-orient:vertical;            box-orient:vertical;        }        .content:nth-child(2) {            -webkit-box-flex: 2;            -moz-box-flex: 2;            box-flex: 2;        }

      在瀏覽器中打開示例頁面,第二個樣式類名為content的div元素寬度為其他樣式類名為content的div元素寬度的兩倍,假設這些元素的容器元素,即id屬性值為main的div元素的寬度等于600px,則第一個與第三個樣式類名為content的div元素寬度的寬度均等于150px,第二個樣式類名為content的div元素寬度的寬度等于300px。

5、設置垂直方向上的對齊方式 box-align

      box-align決定了垂直方向上的空間利用,也就是垂直方向上的對齊表現。為了便于記憶,我們可以拿來和CSS2中的vertical-align隱射記憶,兩者都有”align”,都是都是垂直方向的對齊。

     box-align的可選參數有:

start | end | center | baseline | stretch

     其中stretch為默認值,為拉伸,也就是父標簽高度過高,其孩子元素的高度就多高,start表示頂邊對齊,end為底部對齊,center為居中對齊,baseline表示基線(英文字母o,m,n等的底邊位置線)對齊。

6、設置垂直方向上的對齊方式box-pack

      box-pack決定了父標簽水平遺留空間的使用,其可選值有:

start | end | center | justify

      就大部分的行為表現來說分別對應text-align屬性的值:left | right | center | justify;但是,之所以box-pack不使用”left”, 而是”start”,是因為box-direction屬性,這玩意可以反轉原本的排列,原本的“左對齊”反轉后結果是“右對齊”了,此時”left”顯然就詞不達意了,所以使用”start”更具有概括性,就是與父標簽的起始位置對齊,從而不會產生語義與行為上的困擾。

7、box-flex-group和box-ordinal-group

      子元素除了以上說的幾個屬性外,還有兩個屬性box-flex-group和box-ordinal-group,因為這兩個屬性實用性不強,這里就不做詳細的說明。目前沒有瀏覽器支持 box-flex-group 屬性。

     box-ordinal-group用整數值來定義伸縮盒對象的子元素顯示順序。數值越小,位置就越靠前,這不難理解,第一組在最前嘛,隨后第二組,第三組… 例如:box-ordinal-group:1的組就會在box-ordinal-group:2的組前面顯示。于是,我們可以利用這個屬性改變子元素的順序。


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品久久久久免费a∨大胸| 国产成人午夜视频网址| 亚洲一区二区久久| 琪琪亚洲精品午夜在线| 国产精品久久久久久影视| 日韩精品久久久久| 久久久999成人| 国内精品久久久久影院优| 亚洲丝袜一区在线| 国产精品美女主播| 国产精品久久久久91| 国产v综合ⅴ日韩v欧美大片| 欧美成人免费小视频| 亚洲色图在线观看| 亚洲国产精品电影在线观看| 黄网动漫久久久| 97国产精品视频| 久久福利视频网| 国产精品老女人精品视频| 91情侣偷在线精品国产| 国模精品视频一区二区三区| 日韩专区在线观看| 黄色成人在线播放| 中文字幕欧美视频在线| 国产精品极品美女在线观看免费| 91久久精品国产91性色| 日韩电视剧在线观看免费网站| 国产精品福利无圣光在线一区| 亚洲精品第一国产综合精品| 国产欧美精品久久久| 精品视频久久久久久| 国产精品91在线观看| 亚洲人成电影网站色xx| 日韩在线视频线视频免费网站| 亚洲第一福利网站| 91精品国产91| 亚洲一二在线观看| 国产精品视频免费在线| 日韩精品中文字幕视频在线| 国产精品视频地址| 成人a视频在线观看| 国产精品自产拍高潮在线观看| 欧美国产日韩一区二区在线观看| 中文在线不卡视频| 亚洲精品国产福利| 亚洲国产女人aaa毛片在线| 欧美人与物videos| 不卡在线观看电视剧完整版| xxxxxxxxx欧美| 欧美激情videos| 亚洲男人av电影| 日韩av中文字幕在线| 91高潮精品免费porn| 国产精品第七影院| 久久av在线看| 精品久久久在线观看| 久久国产精品电影| 国产一区二区三区在线观看网站| 欧美视频不卡中文| 国产91在线播放| 欧美巨猛xxxx猛交黑人97人| 中文字幕视频一区二区在线有码| 日韩一区二区在线视频| 亚洲欧美日韩精品久久奇米色影视| 成人做爰www免费看视频网站| 日韩电影在线观看永久视频免费网站| 欧美伊久线香蕉线新在线| 日韩高清电影免费观看完整版| 国产精品2018| 亚洲精品福利在线观看| 91精品视频在线免费观看| 热99精品只有里视频精品| 欧美高清激情视频| 久久久久久久久爱| 欧美丰满少妇xxxxx| 亚洲一区二区三区乱码aⅴ蜜桃女| www.美女亚洲精品| 亚洲成人久久网| 中文字幕精品在线| 波霸ol色综合久久| 97超级碰碰人国产在线观看| 91免费看片在线| 日韩免费av一区二区| 夜夜嗨av色一区二区不卡| 久久伊人精品视频| 亚洲天堂av综合网| 久久久久中文字幕2018| 孩xxxx性bbbb欧美| 亚洲激情久久久| 一级做a爰片久久毛片美女图片| 亚洲自拍另类欧美丝袜| 精品久久久久久亚洲精品| 欧美成人在线免费| 色综合久久中文字幕综合网小说| 欧美亚洲另类视频| 久久视频在线视频| 日韩www在线| 欧美日韩在线视频一区二区| 97久久超碰福利国产精品…| 欧美精品videos性欧美| 懂色av中文一区二区三区天美| 国产精品精品久久久| 亚洲精品aⅴ中文字幕乱码| 久久九九有精品国产23| 精品视频久久久久久久| www.日本久久久久com.| 懂色aⅴ精品一区二区三区蜜月| 97久久久久久| 中文字幕日韩欧美精品在线观看| 亚洲自拍偷拍网址| 成人免费福利在线| 国产精品狠色婷| 久久精品中文字幕电影| 日韩少妇与小伙激情| 一区二区在线视频| 黑人巨大精品欧美一区免费视频| 91精品视频在线免费观看| 九九热99久久久国产盗摄| www.久久草.com| 91精品国产91久久久久| 日韩欧美成人网| 国外视频精品毛片| 亚洲国产精品人久久电影| 久久久亚洲网站| 欧美成人h版在线观看| 91色精品视频在线| 91视频-88av| 这里只有精品视频| 久久久免费av| 成人性生交xxxxx网站| 亚洲一区亚洲二区| 日韩欧美综合在线视频| 日韩av三级在线观看| 国产自摸综合网| 国产成人亚洲综合91| 成人精品视频99在线观看免费| 一区二区三区精品99久久| 亚洲社区在线观看| 国产激情久久久| 欧美黑人巨大精品一区二区| 久久精品91久久香蕉加勒比| 精品久久久久久久久久久| 精品偷拍各种wc美女嘘嘘| 欧美性xxxx极品hd欧美风情| 精品国产91久久久久久| 在线丨暗呦小u女国产精品| 欧美在线视频一二三| 国产精品久久久久久久久借妻| 国产亚洲精品美女久久久久| 日韩的一区二区| 色yeye香蕉凹凸一区二区av| 国产中文字幕91| 欧美另类在线观看| 欧美激情18p| 亚洲天堂免费视频| 亚洲老板91色精品久久| 国产精品久久久久av| 成人字幕网zmw| 黄色一区二区在线| 国产亚洲a∨片在线观看| 91精品在线播放| 亚洲国产美女久久久久| 国产成人一区二区在线| 亚洲小视频在线观看|