CSS3 盒子模型

2018-11-22  本文已影响0人  踏浪free

@(HTML5)[CSS3盒子模型]

[TOC]

六 、CSS3盒子模型

盒子阴影 box-shadow

弹性盒子模型

display:flex

给父级设置一个display:flex属性,子元素设置flex相关属性才可以自动分配宽高。

flex -- 给需要设置弹性布局的子元素设置该属性

<ul class="flex">
    <li>a</li>
    <li>b</li>
    <li>c</li>
</ul>

.flex{display:flex;width:600px;margin:0;padding:0;list-style:none;}
.flex li:nth-child(1){width:200px;}
.flex li:nth-child(2){flex-grow:1;width:50px;}
.flex li:nth-child(3){flex-grow:3;width:50px;}
flex-grow的默认值为0,如果没有显示定义该属性,是不会拥有分配剩余空间权利的。
本例中b,c两项都设置的定义了flex-grow,flex容器的剩余空间分成了4份,其中b占1份,c占3分,即1:3
flex容器的剩余空间长度为:600-200-50-50=300px,所以最终a,b,c的长度分别为:
a: 50+(300/4)=200px
b: 50+(300/4*1)=125px
a: 50+(300/4*3)=275px
<ul class="flex">
    <li>a</li>
    <li>b</li>
    <li>c</li>
</ul>

.flex{display:flex;width:400px;margin:0;padding:0;list-style:none;}
.flex li{width:200px;}
.flex li:nth-child(3){flex-shrink:3;}
flex-shrink的默认值为1,如果没有显示定义该属性,将会自动按照默认值1在所有因子相加之后计算比率来进行空间收缩。
本例中c显式的定义了flex-shrink,a,b没有显式定义,但将根据默认值1来计算,可以看到总共将剩余空间分成了5份,其中a占1份,b占1份,c占3分,即1:1:3
我们可以看到父容器定义为400px,子项被定义为200px,相加之后即为600px,超出父容器200px。那么这么超出的200px需要被a,b,c消化
通过收缩因子,所以加权综合可得200*1+200*1+200*3=1000px;
于是我们可以计算a,b,c将被移除的溢出量是多少:
a被移除溢出量:(200*1/1000)*200,即约等于40px
b被移除溢出量:(200*1/1000)*200,即约等于40px
c被移除溢出量:(200*3/1000)*200,即约等于120px
最后a,b,c的实际宽度分别为:200-40=160px, 200-40=160px, 200-120=80px

总结:

如果父级的空间足够:flex-grow有效,flex-shrink无效。

如果父级的空间不够:flex-shrink 有效,flex-grow无效。

flex属性是以上三者的集合,一般设置为flex:1

其他属性,设置给父级元素





其他属性,设置给子元素


允许调整大小

reisze:

both
none
horizontal
vertical

倒影

box-reflect:a b c;

a:left/right/above/below
b:距离本体多远
c:遮盖层

怪异盒子模型

box-sizing

content-box : 默认值 盒子总宽=内(width)+padding+border
border-box : 怪异盒模型 盒子的总宽=width,会对应得缩小内容部分
如果border+padding > width,盒子总宽=border+padding,内容部分为0

多列布局(加上兼容性前缀)

column-width:每列的最小宽度
column-count:列数
columns:column-width column-count;规定列的宽度和列数。
column-gap:列之间间隙的大小
column-rule:列之间的边框。值与border一样的
column-span:none/all 设置给子元素,规定这个元素跨不夸列

// 下面两个只兼容谷歌
-webkit-column-break-before: 设置或检索对象之前是否断行。设定给子元素,子元素之前是否另起一列 auto/always/avoid
auto:既不强迫也不禁止在元素之前断行并产生新列
always:总是在元素之前断行并产生新列
avoid:避免在元素之前断行并产生新列
-webkit-column-break-after: 设定给子元素,子元素之后

禁止文字选中

user-select:none;
-moz-user-select:none;
-ms-user-select:none;

上一篇下一篇

猜你喜欢

热点阅读