CSS3.0盒模型display:-webkit-box;的使用

box-flex是css3新添加的盒子模型属性,它的出现可以解决我们通过N多结构、css实现的布局方式。经典的一个布局应用就是布局的垂直等高、水平均分、按比例划分。
目前box-flex属性还没有得到firefox、Opera、chrome浏览器的完全支持,但可以使用它们的私有属性定义firefox(-
moz)、opera(-0)、chrome/safari(-webkit)。
一、box-flex属性
box-flex主要让子容器针对父容器的宽度按一定规则进行划分
HTML代码:

<article class="wrap">
    <section class="sectionOne">01</section>
    <section class="sectionTwo">02</section>
    <section class="sectionThree">03</section>
</article>

CSS代码:

.wrap{
    width:600px;
    height:200px;
    display:-moz-box;
    display:-webkit-box;
    display:box;
}
.sectionOne{
    background:orange;
    -moz-box-flex:3;
    -webkit-box-flex:3;
    box-flex:3;
}
.sectionTwo{
    background:purple;
    -moz-box-flex:2;
    -webkit-box-flex:2;
    box-flex:2;
}
.sectionThree{
    -moz-box-flex:1;
    -webkit-box-flex:1;
    box-flex:1;
    background:green;
}

展示效果:

1.jpg

说明:必须给父容器wrap定义css属性display:box其子容器才可以进行划分(如果定了display:box则该容器则定义为了内联元素,使用margin:0px auto让其居中是无效的,要想使其居中只能通过它的父容器的text-align:center);
分别给sectionOne、sectionTwo、sectionThree的box-flex设置了3、2、1,也就是说这三个子容器将父容器wrap的宽度
600px分为6份,sectionOne占居父结构宽度的3/6即300px,sectionOne占居父结构宽度的2/6即200px,sectionThree占居
父结构宽度的1/6即100px。
以上是按比例数进行划分分配的,如果其中一个子容器或多个子容器设置了固定宽度又会怎样划分那?
如果其中一个子容器或多个子容器设置了固定宽度,其它子容器没有设置,其计算方式是这样的:子容器如果设置了固定
宽度值,该子容器则直接应用设置的宽度值,其它没有设置的则再父容器的宽度基础上减去子容器设置的固定宽度,在剩
下的宽度基础上按一定比例进行划分分配。请看下面代码
HTML代码:

<article class="wrap">
    <section class="sectionOne">01</section>
    <section class="sectionTwo">02</section>
    <section class="sectionThree">03</section>
</article>

CSS代码:

.wrap{
    width:600px;
    height:200px;
    display:-moz-box;
    display:-webkit-box;
    display:box;
}
.sectionOne{
    background:orange;
    -moz-box-flex:3;
    -webkit-box-flex:3;
    box-flex:3;
}
.sectionTwo{
    background:purple;
    -moz-box-flex:1;
    -webkit-box-flex:1;
    box-flex:1;
}
.sectionThree{
    width:200px;//设置固定宽度
    background:green;
}

展示效果

1.jpg

说明:
sectionThree设置了固定宽度为200px,父容器的宽度600px减去改子容器的200px还剩下400px,这400px宽度值则按box-
flex设置的值进行划分,sectionOne占居3/4即300px,sectionTwo占居1/4即100px。
在以上代码的基础上给sectionTwo子容器添加margin:0px 50px使子容器之间产生一定的间隔其宽度又如何进行分配划分的那?接着看
CSS代码:

.wrap{
    width:600px;
    height:200px;
    display:-moz-box;
    display:-webkit-box;
    display:box;
![1.jpg](http://upload-images.jianshu.io/upload_images/3869620-14e4ce994203776e.jpg?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

}
.sectionOne{
    background:orange;
    -moz-box-flex:3;
    -webkit-box-flex:3;
    box-flex:3;
}
.sectionTwo{
    background:purple;
    -moz-box-flex:1;
    -webkit-box-flex:1;
    box-flex:1;
        margin:0px 50px;//添加margin属性
}
.sectionThree{
    width:200px;
    background:green;
}

展示效果

1.jpg

说明:
父容器的宽度600px减去设置了子容器的200px基础上再减去100px(2×50)剩下300px,这300px宽度值则按box-flex设置的
值进行划分,sectionOne占居3/4即225px,sectionTwo占居1/4即75px。待续内容
二、box属性
以上将box-flex如何对父容器的宽度进行划分分配讲解完毕,下面在看一下父容器里面的box属性包括哪些。box属性如下
所示1 box-orient, box-direction, box-align, box-pack, box-lines
二、box属性
上篇文章”css3弹性盒子模型之box-flex“将box-flex如何对父容器的宽度进行划分分配讲解完毕,下面在看一下父容器
里面的box属性包括哪些box属性,具体属性如下代码所示:
box-orient | box-direction | box-align | box-pack | box-lines
1、box-orient
box-orient(orient译为排列更准确)用来确定父容器里子容器的排列方式,是水平还是垂直。可选属性如下所示:
horizontal | vertical | inline-axis | block-axis | inherit
horizontal、inline-axis说明:
给box设置horizontal或inline-axis属性其效果似乎表现一致,都可将子容器水平排列,具体两者有什么实质差别暂时还
没有搞清楚。
如果父容器选择horizontal或inline-axis属性对子容器进行水平排列,其是对父容器的宽度进行分配划分。此时如果父
容器定义了高度值,其子容器的高度值设置则无效状态,所有子容器的高度等于父容器的高度值;如果父容器不设置高度
值,其子容器的高度值才有效并且取最大高度值的子容器的高度。
HTML代码:

<article class="wrap">
    <section class="sectionOne">01</section>
    <section class="sectionTwo">02</section>
    <section class="sectionThree">03</section>
</article>

CSS代码:

.wrap{
 width:600px;
 height:200px;
 display:-moz-box;
 display:-webkit-box;
 display:box;
 -moz-box-orient:horizontal;
 -webkit-box-orient:horizontal;
 box-orient:horizontal;//水平排列
}
.sectionOne{
 background:orange;
 -moz-box-flex:1;
 -webkit-box-flex:1;
 box-flex:1;
}
.sectionTwo{
 background:purple;
 -moz-box-flex:2;
 -webkit-box-flex:2;
 box-flex:2;
}
.sectionThree{
 width:100px;
 background:green;
}

展示效果:

1.jpg

vertical、block-axis说明:
给box设置vertical或block-axis属性(此属性是默认值)其效果似乎表现一致,都可将子容器垂直排列,具体两者有什么
实质差别暂时还没有搞清楚。
如果父容器选择vertical或block-axis属性对子容器进行垂直排列,其是对父容器的高度进行分配划分。此时如果父容器
定义了宽度值,其子容器的宽度值设置则无效状态;如果父容器不设置宽度值,其子容器的宽度值才有效并且取最大宽度
值的子容器的宽度。
HTML代码:

<article class="wrap">
    <section class="sectionOne">01</section>
    <section class="sectionTwo">02</section>
    <section class="sectionThree">03</section>
</article>

CSS代码:

.wrap{
 width:600px;
 height:200px;
 display:-moz-box;
 display:-webkit-box;
 display:box;
 -moz-box-orient:vertical;
 -webkit-box-orient:vertical;
 box-orient:vertical;//垂直排列
}
.sectionOne{
 background:orange;
 -moz-box-flex:1;
 -webkit-box-flex:1;
 box-flex:1;
}
.sectionTwo{
 background:purple;
 -moz-box-flex:2;
 -webkit-box-flex:2;
 box-flex:2;
}
.sectionThree{
 height:100px;
 background:green;
}

展示效果:

1.jpg

inherit说明:
inherit属性则是让子容器继承父容器的相关属性。
2、box-direction
box-direction用来确定父容器里的子容器排列顺序,具体属性如下代码所示:
normal | reverse | inherit
normal是默认值
按照HTML文档里结构的先后顺序依次展示。如下代码,如果box-direction设置为normal,则结构依次展示sectionOne、
sectionTwo、sectionThree
HTML代码:

<article class="wrap">
    <section class="sectionOne">01</section>
    <section class="sectionTwo">02</section>
    <section class="sectionThree">03</section>
</article>

CSS代码:

.wrap{
 width:600px;
 height:200px;
 display:-moz-box;
 display:-webkit-box;
 display:box;
 -moz-box-direction:normal;//设置mormal默认值
 -webkit-box-direction:normal;//设置mormal默认值
 box-direction:normal;//设置mormal默认值
}
.sectionOne{
 background:orange;
 -moz-box-flex:1;
 -webkit-box-flex:1;
 box-flex:1;
}
.sectionTwo{
 background:purple;
 -moz-box-flex:2;
 -webkit-box-flex:2;
 box-flex:2;
}
.sectionThree{
 width:100px;
 background:green;
}

展示效果:

1.jpg

reverse表示反转
如上面所示设置nomal其结构的排列顺序为sectionOne、sectionTwo、sectionThree;如果设置reverse反转,其结构的排
列顺序为sectionThree、sectionTwo、sectionOne
HTML代码:

<article class="wrap">
    <section class="sectionOne">01</section>
    <section class="sectionTwo">02</section>
    <section class="sectionThree">03</section>
</article>

CSS代码:

.wrap{
 width:600px;
 height:200px;
 display:-moz-box;
 display:-webkit-box;
 display:box;
 -moz-box-direction:reverse;//设置为反转
 -webkit-box-direction:reverse;//设置为反转
 box-direction:reverse;//设置为反转
}
.sectionOne{
 background:orange;
 -moz-box-flex:1;
 -webkit-box-flex:1;
 box-flex:1;
}
.sectionTwo{
 background:purple;
 -moz-box-flex:2;
 -webkit-box-flex:2;
 box-flex:2;
}
.sectionThree{
 width:100px;
 background:green;
}

展示效果:

1.jpg

3、box-align
box-align表示父容器里面子容器的垂直对齐方式,可选参数如下所示:
start | end | center | baseline | stretch
HTML代码:

<article class="wrap">
 <section class="sectionOne">01</section>
    <section class="sectionTwo">02</section>
    <section class="sectionThree">03</section>
</article>

CSS代码:

.wrap{
 width:600px;
 height:108px;
 display:-moz-box;
 display:-webkit-box;
 display:box;
 -moz-box-align:stretch;
 -webkit-box-align:stretch;
 -o-box-align:stretch;
 box-align:stretch;
}
.wrap section{
 height:80px;
}
.wrap .sectionOne{
 background:orange;
 -moz-box-flex:1;
 -webkit-box-flex:1;
 box-flex:1;
}
.wrap .sectionTwo{
 background:purple;
 -moz-box-flex:2;
 -webkit-box-flex:2;
 box-flex:2;
 height:108px;
}
.wrap .sectionThree{
 width:100px;
 background:green;
}

start
在box-align表示居顶对齐,如下图所示

1.jpg

end
在box-align表示居底对齐,如下图所示

1.jpg

center
在box-align表示居中对齐,如下图所示

1.jpg

stretch
在box-align表示拉伸,拉伸到与父容器等高

1.jpg

3、box-pack
box-pack表示父容器里面子容器的水平对齐方式,可选参数如下所示:
start | end | center | justify
HTML代码:

<article class="wrap">
    <section class="sectionOne">01</section>
    <section class="sectionTwo">02</section>
    <section class="sectionThree">03</section>
</article>

CSS代码:

.wrap{
 width:600px;
 height:108px;
 border:1px solid red;
 display:-moz-box;
 display:-webkit-box;
 display:box;
 -moz-box-pack:end;
 -webkit-box-pack:end;
 -o-box-pack:end;
 box-pack:end;
}
.wrap section{
 width:100px;
}
.wrap .sectionOne{
 background:orange;
}
.wrap .sectionTwo{
 background:purple;
}
.wrap .sectionThree{
 background:green;
}

start
在box-pack表示水平居左对齐,如下图所示

1.jpg

end
在box-pack表示水平居右对齐,如下图所示

1.jpg

center
在box-pack表示水平居中对齐,如下图所示

1.jpg

justify
在box-pack表示水平等分父容器宽度(唯一遗憾的是,firefox与opera暂时不支持,只有safari、chrome支持)

1.jpg
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 160,108评论 4 364
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 67,699评论 1 296
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 109,812评论 0 244
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 44,236评论 0 213
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 52,583评论 3 288
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 40,739评论 1 222
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 31,957评论 2 315
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 30,704评论 0 204
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 34,447评论 1 246
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 30,643评论 2 249
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 32,133评论 1 261
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 28,486评论 3 256
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 33,151评论 3 238
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 26,108评论 0 8
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 26,889评论 0 197
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 35,782评论 2 277
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 35,681评论 2 272

推荐阅读更多精彩内容