伸缩盒模型flex【新】
搞清主軸、側軸

主轴的方向主要是用来确定flex的主方向,所以你子元素要么放置在一行,要么放置在一列。侧轴主要垂直于主轴运行,如下图所示:

1、flex-grow:定義擴展比率,默認0,不允許負值
.ul1{width:900px}
/*子元素*/
.ul1 li:nth-child(1){width:200px}
.ul1 li:nth-child(2){-webkit-flex-grow:1;width:50px}
.ul1 li:nth-child(3){-webkit-flex-grow:3;width:50px}
/*計算方法
剩餘空間:900-200-50-50 = 600
分4份:600/4 = 150
1、200 + 600/4 * 0 = 200
2、50 + 600/4 * 1 = 200
3、50 + 600/4 * 3 = 500
*/
2、flex-shrink:定義收縮比率,默認1,不允許負值
.ul2{width:400px}
/*子元素*/
.ul2 li:nth-child(1){width:200px}
.ul2 li:nth-child(2){width:200px;flex-shrink:3}
.ul2 li:nth-child(3){width:200px;flex-shrink:1}
/*計算方法
超出空間:400-200-200-200 = 200
分5份:200/5 = 40
1、200 - 40 * 1 = 160
2、200 - 40 * 3 = 80
3、200 - 40 * 1 = 160
*/
3、flex-basis:定義基準伸縮剩餘空間,默認auto
/* 當flex-grow:0;flex-shrink:1;時,flex-basis = max-width */
.ul3{width:400px}
.ul3 li{width:200px}
/*子元素*/
.ul3 li:nth-child(3){flex-basis:600px}
/*計算方法
li總空間:200+200+600 = 1000 即把flex-basis = width
所以比率為:200/1000、200/1000、600/1000
1、400 * 0.2 = 80
2、400 * 0.2 = 80
3、400 * 0.6 = 240
*/
/* 當 flex-shrink != 1 ,待續*/
flex:none | <' flex-grow '> <' flex-shrink >'? || <' flex-basis '>
4、flex-direction:定義書寫模式,默認row
flex-direction:row | row-reverse | column | column-reverse
flex-direction: 左對齊 | 右對齊 | 頂對齊 | 底對齊
/*父元素設置*/
.ul4{flex-direction: row;}
/*
1 2 3 row 3 2 1 row-reverse
1 3
2 2
3 1
column column-reverse
*/
5、flex-wrap:控制flex容器單行或多行,默認nowrap
flex-wrap:nowrap | wrap | wrap-reverse
/*父元素設置*/
.ul5{width:220px;flex-wrap:wrap}
.ul5 li{width:100px;height:100px}
flex-flow:<' flex-direction '> || <' flex-wrap '>
6、align-content:控制子元素在flex容器中的位置,多行,左右上下居中;默認stretch
如:flex-start各行向flex容器的超始位置堆疊,第一行緊靠側軸,第二行堅靠前一行;
align-content:flex-start | flex-end | center | space-between | space-around | stretch
/*父元素設置*/
.ul6{-webkit-flex-flow: row wrap;} /*演示多行*/
.ul6.flex-start{-webkit-align-content: flex-start} /*第一行側軸 靠 父級側軸起始邊界*/
.ul6.flex-end{-webkit-align-content: flex-end}/*最尾行側軸,靠 父級側軸結束邊界*/
.ul6.center{-webkit-align-content: center}/**/
.ul6.space-between{-webkit-align-content: space-between} /*第一行=flex-start 尾行=flex-end*/
.ul6.space-around{-webkit-align-content: space-around} /*兩行兩兩間空間相等*/
.ul6.stretch{-webkit-align-content: stretch}/**/
7、align-items:控制子元素在flex容器中的位置,調整伸縮項目在側軸的對齊方式;;默認stretch;
如: flex-start 弹性盒子元素的侧轴(纵轴)起始位置的边界紧靠住该行的侧轴起始边界。
align-items:flex-start | flex-end | center | baseline | stretch
/*父元素設置*/
.ul7{-webkit-flex-flow:row wrap}
.ul7.flex-start{-webkit-align-items:flex-start;align-items:flex-start}
.ul7.flex-end{-webkit-align-items:flex-end;align-items:flex-end}
.ul7.center{-webkit-align-items:center;align-items:center}
.ul7.baseline{-webkit-align-items:baseline;align-items:center}
.ul7.stretch{-webkit-align-items:stretch;align-items:stretch}
align-content與align-items相似,但有區別
align-content:對齊伸縮行;
align-items:對齊伸縮項目
如:當=flex-start/flex-end/center,有多行時,align-content行與行之間無間隙,而align-items行與行之間均分flex容器的高!
8、justify-content:一般為向行調整,設置伸縮項目沿主軸的對齊方式,調整項目之間的間距。
---在主軸方向上設置任何margin都不會生效
justify-content:flex-start | flex-end | center | space-between | space-around
/*父元素設置*/
.ul9.flex-start{justify-content:flex-start} /*左對齊*/
.ul9.center{justify-content:center} /*居中對齊*/
.ul9.space-between{justify-content:space-between} /*兩端對齊*/
.ul9.space-around{justify-content:space-around} /*兩端對齊基礎上左右兩邊會有一半間隙縮進 */
9、order:用整数值来定义排列顺序,数值小的排在前面。可以为负值。
/*子元素*/
.ul10 li:nth-child(1){order: 4}
.ul10 li:nth-child(3){order: -1}
.ul10 li:nth-child(1){order: 2}
10、可能較少用~align-self默認值为「auto」,則计算值为父元素的 <' align-items '> 值,否则为指定值。
align-self:auto | flex-start | flex-end | center | baseline | stretch
/*子元素*/
.ul8.flex-end li{-webkit-align-self:flex-end;align-self:flex-end}
.ul8.center li{-webkit-align-self:center;align-self:center}
See the Pen VvYyvp by elmok (@elmok) on CodePen.
<script async src="//assets.codepen.io/assets/embed/ei.js"></script>
以下佈局都須在
父元素display:box 或 display:inline-box
1)彈性盒模型-佈局方向-
子元素設置Box-orient 定义盒模型的布局方向
:Horizontal 水平显示 //默認可不寫
:vertical 垂直方向
box-direction 元素排列顺序
:Normal 正
:Reverse 反
box-ordinal-group 设置元素的具体位置
/*I:父元素設置*/
.box{
display:-webkit-box;
}
/*II:以下子元素設置*/
.box div{
-webkit-box-orient:Horizontal /*水平默認可不寫*/
}
.box div:nth-of-type(1){
-webkit-box-ordinal-group: 2 /*第1塊元素排第二位置*/
}
2)彈性盒模型-空間管理,子元素設置Box-flex ,即寬度width設置,加宽度:-固定宽度后再平分
/*I:父元素設置*/
.box{
display:-webkit-box;
}
/*II:以下子元素設置*/
.box div:nth-of-type(1){
-webkit-box-flex: 2; /*表示第1塊元素寬度點總寬的2份*/
}
3) 彈性盒模型-對齊,父元素設置box-pack,可理解為子元素左對齊,右對齊,居中,兩端對齊,
Start 子元素左
End 子元素右
Center 子元素居中
Justify 兩端對齊
相對應:
父元素設置 box-align,頂部Start 底部End 居中Center
另:未知宽度垂直居中: html{height:100%}body{height:100%}box{height:100%}
/*父元素*/
.box{
-webkit-box-pack:Center;-webkit-box-align: center
}
<pre>
.box,.box2,.box3{ font-size: 20px; text-align: center; color: #ffffff;height: 200px;border: 10px solid #000; padding: 10px;
display:-webkit-box;}
.box div,.box2 div,.box3 div{ width: 100px; height: 100px; background: peru;border:1px solid #ffffff}.box div:nth-of-type(1){-webkit-box-ordinal-group: 2}
.box div:nth-of-type(2){-webkit-box-ordinal-group: 4}
.box div:nth-of-type(3){-webkit-box-ordinal-group: 2}
.box div:nth-of-type(4){-webkit-box-ordinal-group: 5}
.box div:nth-of-type(5){-webkit-box-ordinal-group: 1}
/寬度設置/
.box2 div:nth-of-type(1){width: 300px;}
.box2 div:nth-of-type(2){-webkit-box-flex: 1;}
.box2 div:nth-of-type(3){-webkit-box-flex: 3;}
.box2 div:nth-of-type(4){-webkit-box-flex: 4;}
.box2 div:nth-of-type(5){-webkit-box-flex: 5;}
/子元素 左對齊,右對齊,居中,兩端對齊/
.box3{ -webkit-box-pack:Center;-webkit-box-align: center }
</pre>
See the Pen YyKmPY by elmok (@elmok) on CodePen.
<script async src="//assets.codepen.io/assets/embed/ei.js"></script>
伸缩盒模型【旧】
See the Pen zvYMNX by elmok (@elmok) on CodePen.
<script async src="//assets.codepen.io/assets/embed/ei.js"></script>
盒模型陰影
box-shadow:[inset] x y blur [spread] color
盒模型倒影--只支持webkit below above left right
box-reflect direction 方向
img { display: block;
-webkit-box-reflect: below 5px
-webkit-linear-gradient(right, rgba(0, 0, 0, 1) 0%, rgba(0, 0, 0, 0) 100%);
}
resize 自由缩放
Both 水平垂直都缩放
Horizontal 只水平方向缩放
Vertical 只垂直方向缩放
注意:一定要配合overflow:auto 一块使用只有水平方向可以缩放
.box{ width: 100px; height: 100px; border: 5px solid #000;background: url("../c2.jpg");
resize: both;
overflow: auto;
}
box-sizing:content-box | border-box
Content-box 标准盒模型 width/height=border+padding+content
Border-box 怪异盒模型 width/height=content
父元素設置column,:
column-width 宽度
column-count 列数
column-gap 距离
column-rule 栏目间隔线
<div class="wrap">
<p>中国看不起说大话的人。而在我看来大话并无甚,好比古代妇女缠惯了小脚,碰上正常的脚就称“大脚”;中国人说惯了“小话”,碰上正常的话,理所当然就叫“大话”了。</p>
<p>敢说大话的人得不到好下场,吓得后人从不说大话变成不说话。幸亏胡适病死了,否则看到这情景也会气死。结果不说大话的人被社会接受了。</p>
</div>
.wrap{width:900px;border:1px solid #000;font:14px/28px '宋体';color:#000;text-indent:2em;-webkit-column-count:4;//分為四欄
-webkit-column-gap:20px;//每欄間距為20px,即padding
-webkit-column-rule:1px solid peru;//欄線顏色粗細
-moz-column-count:4;-mox-column-gap:20px;-moz-column-rule:1px solid peru}
See the Pen avvyLo by elmok (@elmok) on CodePen.
<script async src="//assets.codepen.io/assets/embed/ei.js"></script>
.box{ columns:200px 3; }
/*或*/
.box{ columns:200px; }