CSS3彈性盒模型開發(fā)筆記(二)

本文為大家繼續(xù)分享CSS3彈性盒模型開發(fā)筆記第二篇,之前一篇以及為大家引入了CSS3彈性盒模型的相關(guān)介紹,點(diǎn)擊查看:CSS3彈性盒模型開發(fā)筆記(一)
box-flex屬性
box-flex屬性能夠靈活地控制子元素在盒子中的顯示空間。注意,顯示空間包括子元素的寬度和高度,而不只是子元素所在欄目的寬度,也可以說(shuō)是子元素在盒子中所占的面積。該屬性在彈性布局中非常重要,它解決了傳統(tǒng)設(shè)計(jì)中習(xí)慣使用百分比定義彈性布局的弊端。box-flex屬性的基本語(yǔ)法:
box-flex:<number>
取值說(shuō)明:
<number>屬性值是一個(gè)整數(shù)或者小數(shù)。當(dāng)盒子中包含多個(gè)定義了box-flex屬性的子元素時(shí),瀏覽器將會(huì)把這些子元素的box-flex屬性值相加,然后根據(jù)他們各自的值占總值的比例來(lái)分配盒子剩余的空間。注意,box-flex屬性只有在盒子擁有的確定的空間大小之后才能正確解析。在設(shè)計(jì)中,較穩(wěn)妥的做法是為了盒子定義具體的width或height屬性值。
實(shí)戰(zhàn)體驗(yàn):自適應(yīng)欄目寬度設(shè)計(jì)
在傳統(tǒng)的網(wǎng)頁(yè)設(shè)計(jì)中,如果要把一個(gè)欄目分成三欄,比較簡(jiǎn)單的做法是把三個(gè)子元素的寬度都設(shè)置為33.3%。這種做法無(wú)法把父元素的寬度完全填充,當(dāng)父元素的寬度足夠大的時(shí)候,用戶會(huì)看到未填充的空白區(qū)域。但是,如果為子元素設(shè)置了固定寬度值,彈性布局會(huì)變得更為復(fù)雜。如果使用box-flex屬性,這個(gè)問題就會(huì)迎刃而解。
html代碼:
- <body>
- <h1><img src="images/web3_13.gif" /></h1>
- <div id="box">
- <!--左側(cè)欄目-->
- <div id="box1"><img src="images/web3_01.gif" /></div>
- <!--中間欄目-->
- <div id="box2">
- <h2><img src="images/web3_02.gif" /></h2>
- <div><img src="images/web3_04.gif" /></div>
- <div><img src="images/web3_05.gif" /></div>
- <div><img src="images/web3_06.gif" /></div>
- <div><img src="images/web3_07.gif" /></div>
- </div>
- <!--右側(cè)欄目-->
- <div id="box3">
- <h2><img src="images/web3_12.gif" /></h2>
- <div><img src="images/web3_08.gif" /></div>
- <div><img src="images/web3_09.gif" /></div>
- <div><img src="images/web3_10.gif" /></div>
- <div><img src="images/web3_11.gif" /></div>
- </div>
- </div>
- </body>
CSS3代碼:
- /*這是一個(gè)三欄布局的頁(yè)面,其中左側(cè)欄目的寬度是固定的,而中間和右側(cè)欄目的寬度是彈性的*/
- <style>
- body{
- margin:0;
- padding:0;
- text-align:center;
- }
- h1,h2{margin:2px;}
- #box{
- margin:auto;
- text-align:left;
- width:1002px;
- overflow:hidden;
- }
- /*定義box元素盒形顯示,并設(shè)置子元素水平布置*/
- #box{
- display:box;
- display:-moz-box;
- display:-webkit-box;
- box-orient:horizontal;
- -moz-box-orient:horizontal;
- -webkit-box-orient:horizontal;
- }
- /*定義盒子左側(cè)欄目的寬度為固定顯示*/
- #box1{width:201px;}
- #box2,#box3{
- border:1px solid #CCC;
- margin:2px;
- }
- /*定義盒子內(nèi)中間欄目的寬度為盒子剩余空間的2/3*/
- #box2{
- box-flex: 4;
- -moz-box-flex: 4;
- -webkit-box-flex: 4;
- }
- /*定義盒子內(nèi)中間欄目的寬度為盒子剩余空間的1/3*/
- #box3{
- box-flex:2;
- -moz-box-flex:2;
- -webkit-box-flex:2;
- }
- #box2 div,#box3 div{
- display:inline;
- }
- </style>
演示效果:
彈性空間的實(shí)現(xiàn)和分配
在默認(rèn)情況下,子元素并不具有彈性,它會(huì)竟可能的寬,以便使其所包含的內(nèi)容可見,并且不會(huì)有任何溢出。如果要改變它的尺寸,則可以使用width和height屬性來(lái)實(shí)現(xiàn),當(dāng)然也可以使用min-height,min-width,max-height,max-width等屬性來(lái)限制尺寸。
當(dāng)box-flex屬性至少大于0時(shí),它會(huì)變得富有彈性。當(dāng)子元素具有彈性時(shí),可以通過下面的方式來(lái)改變它的尺寸:
1、使用width,height,min-height,min-width,max-height,max-width等屬性來(lái)定義尺寸。
2、使用盒子的尺寸來(lái)限制子元素的彈性尺寸。
3、借助盒子富余所有空間來(lái)限制元素的彈性尺寸。
如果子元素沒有聲明大小,那么其尺寸將完全取決于盒子的大小,即子元素的大小等于盒子的大小乘以它的box-flex屬性值在所有子元素的box-flex屬性值總和中的百分比。使用公式表示如下:
子元素的尺寸=盒子的尺寸*子元素的box-flex屬性值/所有子元素的box-flex屬性值的和
如果一個(gè)或多個(gè)子元素聲明了具體的尺寸,那么其大小將計(jì)入其中,余下的彈性盒子將按照上面的原則分享剩余的可利用空間。
由于受內(nèi)部圖片大小的支撐,導(dǎo)致子元素的空間總是大于盒子的 富余空間,這時(shí)將出現(xiàn)解析異常。
box-flex屬性對(duì)子元素的布局影響
HTML代碼:
- <body>
- <h1><img src="images/web3_13.gif" /></h1>
- <div id="box">
- <!--左側(cè)欄目-->
- <div id="box1"><img src="images/web3_01.gif" /></div>
- <!--中間欄目-->
- <div id="box2"></div>
- <!--右側(cè)欄目-->
- <div id="box3"></div>
- </div>
- </body>
中間和右側(cè)各占一半剩余的空間
CSS3代碼:
- #box2{
- box-flex: 2;
- -moz-box-flex: 2;
- -webkit-box-flex: 2;
- background:#CCF;
- }
- #box3{
- box-flex: 2;
- -moz-box-flex: 2;
- -webkit-box-flex: 2;
- background:#FC0;
- }
演示效果:
中欄占1/5的空余空間,右欄占4/5空余的空間
CSS3代碼:
- #box2{
- box-flex: 0.5;
- -moz-box-flex: 0.5;
- -webkit-box-flex: 0.5;
- background:#CCF;
- }
- #box3{
- box-flex: 2;
- -moz-box-flex: 2;
- -webkit-box-flex: 2;
- background:#FC0;
- }
演示效果:
中間彈性顯示,占據(jù)所有空余空間,右欄固定大
CSS3代碼:
- #box2{
- box-flex: 0.5;
- -moz-box-flex: 0.5;
- -webkit-box-flex: 0.5;
- background:#CCF;
- }
- #box3{
- width:196px;
- background:url(images/web3_03.gif) no-repeat;
- }
演示效果:
中欄失去彈性(當(dāng)設(shè)置為0或者復(fù)制時(shí)),收縮顯示為一條線,右欄自動(dòng)左移
CSS代碼:
- #box2{
- box-flex: 0;
- -moz-box-flex: 0;
- -webkit-box-flex: 0;
- background:#CCF;
- }
- #box3{
- width:196px;
- background:url(images/web3_03.gif) no-repeat;
- }
演示效果:
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家學(xué)習(xí)CSS3彈性盒模型有所幫助。
相關(guān)文章
CSS盒模型制定網(wǎng)頁(yè)的寬度和高度的原理-CSS教程-網(wǎng)頁(yè)制作-網(wǎng)頁(yè)教學(xué)網(wǎng)
當(dāng)我們布局一個(gè)網(wǎng)頁(yè)的時(shí)候,經(jīng)常會(huì)遇到這樣的一種情況,那就是最終網(wǎng)頁(yè)成型的寬度或是高度會(huì)超出我們預(yù)先的計(jì)算,其實(shí)就就是所謂的CSS的盒模型造成的。 #test{margin:102008-10-17CSS教程:盒模型(BOX Model)-CSS教程-網(wǎng)頁(yè)制作-網(wǎng)頁(yè)教學(xué)網(wǎng)
如果想熟練掌握DIV和CSS的布局方法,首先要對(duì)盒模型有足夠的了解。每個(gè)HTML元素都可以看作一個(gè)裝了東西的盒子,盒子里面的內(nèi)容到盒子的邊框之間的距離即填充(padding2008-10-17CSS入門教程:計(jì)算CSS盒模型寬和高-CSS教程-網(wǎng)頁(yè)制作-網(wǎng)頁(yè)教學(xué)網(wǎng)
出處:當(dāng)我們布局一個(gè)網(wǎng)頁(yè)的時(shí)候,經(jīng)常會(huì)遇到這樣的一種情況,那就是最終網(wǎng)頁(yè)成型的寬度或是高度會(huì)超出我們預(yù)先的計(jì)算,其實(shí)就就是所謂的CSS的盒模型造成的。 #test{m2008-10-17- 網(wǎng)頁(yè)制作Webjx文章簡(jiǎn)介:如果想熟練掌握DIV和CSS的布局方法,首先要對(duì)盒模型有足夠的了解。每個(gè)HTML元素都可以看作一個(gè)裝了東西的盒子,盒子里面的內(nèi)容到盒子的邊框之間的2009-04-02
CSS教程:通過實(shí)例學(xué)習(xí)和理解CSS盒模型
網(wǎng)頁(yè)制作Webjx文章簡(jiǎn)介:盒模型主要定義四個(gè)區(qū)域:內(nèi)容(content)、內(nèi)邊框距(padding)、邊框(border)和外邊距(margin)。 自從1996年CSS1的推出,W32009-04-02- CSS 盒模型 網(wǎng)頁(yè)設(shè)計(jì)中的每個(gè)元素都是長(zhǎng)方形的盒子。盒子的尺寸是怎樣精確計(jì)算的,請(qǐng)看下圖: 如果是 Firebug 用戶的話(基本和前端有關(guān)的都會(huì)用到 Firebug 吧 –2009-06-06
網(wǎng)頁(yè)設(shè)計(jì)學(xué)習(xí)教程 CSS盒模型
Margin 比較特別,它不會(huì)影響盒子本身的大小,但是它會(huì)影響和盒子有關(guān)的其他內(nèi)容,因此 margin 是盒模型的一個(gè)重要的組成部分。2009-07-19- 盒模型是CSS的核心知識(shí)點(diǎn)之一,它指定元素如何顯示以及如何相互交互。頁(yè)面上的每個(gè)元素都被看成一個(gè)矩形框,這個(gè)框由元素的內(nèi)容、內(nèi)邊距、邊框和外邊距組成,需要了解的朋友2012-12-24
- Css3引入了新的盒模型——彈性盒模型決定一個(gè)盒子在其他盒子中的分布方式以及如何處理可用的空間,使用該模型,可以很輕松的創(chuàng)建自適應(yīng)瀏覽器窗口的流動(dòng)布局或自適應(yīng)字體大2013-05-27
- 今天剛學(xué)了css3的彈性盒模型,這是一個(gè)可以讓你告別浮動(dòng)、完美實(shí)現(xiàn)垂直水平居中的新特性。本文主要是總結(jié)一下今天所學(xué),有需要的朋友可以參考下2014-10-08