1.弹性布局概念介绍
弹性布局:
事实上它是一种新类型的盒子模型,也有书上称作弹性伸缩盒布
局。
比较新的布局方式:旨在提供一个更加有效的方式来布置,对齐
和分布在容器之间的各项内容,即使它们的大小是未知或者动态变化
的。
弹性布局的主要思想是让容器有能力来改变项目的宽度和高度,
以填满可用空间 (主要是为了容纳所有类型的显示设备和屏幕尺寸)
的能力。
优点:
1. 应用恰当的弹性布局对用户十分友好。页面中所有元素可
以随着用户的偏好缩放。
2. 对于同时喜欢流动和定宽布局的设计师来说,弹性布局是
完美的,因为前两种布局的优点在弹性布局中都能找到。
缺点:
1. 需要花更多时间理解和测试,让布局适合所有用户。
2. 这种布局类型相对于其他两个更难制作
2.弹性布局属性
display:flex | inline-flex;(适用于父类容器元素上)
box:将对象作为弹性伸缩盒显示。 (伸缩盒最老版本)
inline-box:将对象作为内联块级弹性伸缩盒显示。 (伸
缩盒最老版本) (CSS3)
flexbox:将对象作为弹性伸缩盒显示。(伸缩盒过渡版本)
inline-flexbox:将对象作为内联块级弹性伸缩盒显示。
(伸缩盒过渡版本)
flex:将对象作为弹性伸缩盒显示。
inline-flex:将对象作为内联块级弹性伸缩盒显示。
float, clear and vertical-align 在 flex 项目中不起作
用
css 多列 (CSS columns) 在弹性盒子中不起作用
flex-flow(适用于父类容器上)复合属性
设置或检索伸缩盒对象的子元素排列方式。可以同时设置
flex-direction/flex-wrap
flex-direction (适用于父类容器的元素上):设置或检索
伸缩盒对象的子元素在父容器中的位置。
row:横向从左到右排列 (左对齐) ,默认的排列方式。
row-reverse:反转横向排列 (右对齐,从后往前排,最后一项排 在最前面。
column:纵向排列。
column-reverse:反转纵向排列,从后往前排,最后一项排在最上面。
flex-wrap (适用于父类容器上) 设置或检索伸缩盒对象的子元素超出父容器时是否换行。
nowrap:当子元素溢出父容器时不换行。
wrap:当子元素溢出父容器时自动换行。
wrap-reverse:当子元素溢出父容器时自动换行, 方向同 wrap 反转排列。
justify-content(适用于父类容器上)设置或检索弹壳性盒子元素在主轴方向上的对齐方式。
flex-start:弹性盒子元素将向行起始位置对齐。
flex-end:弹性盒子元素将向行结束位置对齐。
center:弹性盒子元素将向行中间位置对齐。
space-between:弹性盒子元素会平均地分布在行里。
space-around:弹性盒子元素会平均地分布在行里,两端保留子元素与子元素之间间距大小的一半。
注:
主轴就是弹性盒子子元素沿着排列的轴;与主轴垂直的轴称为侧轴。
如果你有 row ,则主轴是水平方向,侧轴是垂直方向。
如果你有 column,则主轴是垂直方向,侧轴是水平方向。
align-items(适用于父类容器上)设置或检索弹壳性盒子元素在侧轴方向上的对齐方式。
flex-start:弹性盒子元素的侧轴 (纵轴) 起始位置的边界紧靠住该行的侧轴起始边界。
flex-end:弹性盒子元素的侧轴 (纵轴) 起始位置的边界紧靠住该行的侧轴结束边界。
center:弹性盒子元素在该行的侧轴 (纵轴) 上居中放置。
baseline:如弹性盒子元素的行内轴与侧轴为同一条,则该值与'flex-start'等效。其它情况下,该值将参与基线对齐。
stretch:如果指定侧轴大小的属性值为'auto',则其值会使项目的边距盒的尺寸尽可能接近所在行的尺寸,但同时会遵照'min/max-width/height'属性的限制。
align-self(适用于检索弹壳性盒子)设置或检索弹壳性盒子元素自身在侧轴方向上的对齐方式。
auto:如果'align-self'的值为'auto',则其计算值为元素的父元素的'align-items'值,如果其没有父元素,则计算值为'stretch'。
flex-start:弹性盒子元素的侧轴 (纵轴) 起始位置的边界紧靠住该行的侧轴起始边界。
flex-end:弹性盒子元素的侧轴 (纵轴) 起始位置的边界紧靠住该行的侧轴结束边界。
center:弹性盒子元素在该行的侧轴 (纵轴) 上居中放置。(如果该行的尺寸小于弹性盒子元素的尺寸,则会向两个方向溢出相同的长度) 。
baseline:如弹性盒子元素的行内轴与侧轴为同一条,则该值与'flex-start'等效。其它情况下,该值将参与基线对齐。
stretch:如果指定侧轴大小的属性值为'auto',则其值会使项目的边距盒的尺寸尽可能接近所在行的尺寸。
align-content(适用于父类容器上)设置或检索弹壳性盒堆叠伸缩行的对齐方式。
flex-start:各行向弹性盒容器的起始位置堆叠。弹性盒容器中第一行的侧轴起始边界紧靠住该弹性盒容器的侧轴起始边界,之后的每一行都紧靠住前面一行。
flex-end:各行向弹性盒容器的结束位置堆叠。弹性盒容器中最后一行的侧轴起结束界紧靠住该弹性盒容器的侧轴结束边界,之后的每一行都紧靠住前面一行。
center:各行向弹性盒容器的中间位置堆叠。各行两两紧靠住同时在弹性盒容器中居中对齐,保持弹性盒容器的侧轴起始内容边界和第一行之间的距离与该容器的侧轴结束内容边界与第最后一行之间的距离相等。
space-between:各行在弹性盒容器中平均分布。
space-around:各行在弹性盒容器中平均分布,两端保留子元素与子元素之间间距大小的一半。
stretch:各行将会伸展以占用剩余的空间。
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
body{
background-color: #ccc;
}
.box1{
height: 800px;
width: 1200px;
background-color: rgba(50, 100, 140, 0.5);
margin: 0px auto;
}
.box3{
width: 346px;
height: 250px;
background-image: url(./fce1d16c579c77c03355d9562118f49c_593442292911999496.jpg);
color: white;
}
.box2{
height: 800px;
margin: 0px auto;
/* 弹性布局 */
display: flex;
/* 1. 向两端对齐,中间自适应 */
justify-content: space-between;
/* 2. 均匀分布,两边空出来的距离等于中间距离 */
justify-content: space-around;
/* 3. 平等均匀分布,距离完全一样 */
justify-content: space-evenly;
/* 4. 默认从弹性开始的地方分布 */
justify-content: flex-start;
/* 5. 从弹性结束的地方分布 */
justify-content: flex-end;
/* 排列方式是按照行还是按照列,默认是正序行(row),reverse:反转布局 */
/* 6. 行的倒序 */
flex-direction: row-reverse;
/* 7. 列的倒序 */
flex-direction: column-reverse;
/* 8. 换行,默认不换行(nowrap),只要看到wrap就是换行 */
flex-wrap: wrap;
/* 竖向排列方式 */
/* 当前父盒子必须有一定高度 */
/* 9. 竖向中间分布,垂直方向松散排列,两边空出来的距离等于中间距离 */
align-items: center;
/* 10. 默认弹性开始分布 */
align-items: flex-start;
/* 11. 默认弹性结束分布 */
align-items: flex-end;
/* 12. 必须搭配换行使用(flex-wrap: wrap;)垂直方向紧密排列 */
align-content: center;
}
</head>
<body>
<div class="box1">
<div class="box2">
<div class="box3"></div>
<div class="box3"></div>
<div class="box3"></div>
<div class="box3"></div>
<div class="box3"></div>
<div class="box3"></div>
<div class="box3"></div>
<div class="box3"></div>
<div class="box3"></div>
</div>
</div>
</body>
</html>