伸缩布局
伸缩布局技术主要用在移动端。在PC端的高版本浏览器支持,低版本不支持。在PC端一般不用伸缩布局的方式。
注意嗷:伸缩布局应该在父盒子的样式中设置,设置完后是对子盒子产生影响。
Flex布局
常用属性![在这里插入图片描述](https://i-blog.csdnimg.cn/blog_migrate/589e0e78e17d6752886c88858ccb78e1.png)
flex-direction
作用:控制主轴方向,水平?垂直?从左往右?从右往左?从上到下?从下到上??
主轴的概念:
一个盒子里如果所有子盒子都是从上往下排列。则认为从上往下的线条称为 主轴。
同理,一个盒子里的子盒子若都是从左往右排列,则称一条从左到右的线条为 主轴
flex-direction
: row | row-reverse | column | column-reverse (设置主轴方向)
flex-direction: row 主轴方向水平向右; row-reverse 方向相反
flex-direction: column 主轴方向竖直向下;column-reverse 方向相反
flex-direction: column
flex-direction: column-reverse
要注意1、2、3块的顺序发生了改变。也就是说,flex-direction会决定盒子分布的起点位置,以及接下来的布局方向。
flex-direction: row-reverse
justify-content
取值:flex-start | flex-end | center | space-between | space-around
justify-content
用于指定主轴(水平方向)上flex子项的对齐方式
用主轴确定了盒子布局的起点后,就可以用justify-content
来确定盒子之间的相对位置。
父级盒子已经display: row; flex-direction: row;
-
justify-content: flex-start
默认值,表示与主轴的起始位置对齐 -
justify-content: flex-end
表示与主轴的结束位置对齐 -
justify-content: center
表示与主轴中间位置对齐 -
justify-content: space-between
表示与主轴两端对齐,中间距离间距相等。要注意特殊情况,当剩余空间为负数或者只有一个项时,效果等同于flex-start -
justify-content: space-around
表示间距相等,中间间距是两端间距的2倍,要注意特殊情况,当剩余空间为负数或者只有一个项时,效果等同于center
align-items
取值:stretch(拉伸) | flex-start | flex-end | center | baseline
-
flex-start与侧轴开始位置对齐
-
flex-end与侧轴结束位置对齐
-
center:表示与侧轴中间对齐(justify-content: flex-start;)
-
baseline:让所有盒子沿着一条基准线对齐。必须不同盒子的高度不同才能显示出效果。否则看不出来区别。
flex-wrap
作用:设置父元素为Flex布局后,可能会出现因为子盒子数量太多而导致子盒子溢出父盒子。这个时候,就可以使用flex-wrap来决定时候解决这个问题。
flex-wrap
用于指定 Flex 子项是否换行(换列)(注意:在计算机科学中wrap为“换行”的意思,不是“包裹”(参考自有道翻译))取值:nowrap | wrap | wrap-reverse
-
nowrap:不换行。默认设置。(为防止子盒子溢出,会强制改变子盒子的宽度(高度)以适应父盒子的宽度(高度))
-
wrap:换行。保持子盒子的形状。
盒子太多的时候会改变盒子之间的外边距
-
wrap-reverse:反转子盒子的起始位置
align-content
该属性只作用于多行的情况下,用于多行的对齐方式。
-
stretch
:默认值,当 Flex 子项未设置高度 或者高度值为auto时,stretch起作用, 将Flex子项高度设置为行高度; -
flex-start
: 表示各行与侧轴开始位置对齐,第一行紧靠侧轴开始边界,之后的每一行都紧靠前面一 行 -
flex-end
: 表示各行与侧轴的结束位置对齐,最后行紧靠侧轴结束边界, 之后的每行都紧靠前面一 行 -
center
: 表示各行与侧轴中间对齐; -
space-between
: 表示两端对齐。中间间距相等。要注意特殊情况,当剩余空间为负数时,效果等同于flex start -
space-around
: 表示各行之间间距相等,中间间距是两端间距的2倍。要注意特殊情况,当剩余空间为负数时,效果等同于 center
align-self
该属性用来单独指定某 Flex 子项的对齐方式
取值:auto | flex-start | flex-end | center | baseline | stretch
-
-
复合属性 flex
可以用来做响应式布局,来适应不同页面大小。根据父盒子的大小,子盒子等比缩放。
<body>
<div id="main_div">
<div class="item" style="flex: 1; height: 2rem;">div1</div>
<div class="item" style="flex: 2; height: 4rem;">div2</div>
<div class="item" style="flex: 3; height: 6rem;">div3</div>
<div class="item" style="flex: 1; height: 7rem;">div3</div>
<div class="item" style="flex: 2;height: 8rem;">div3</div>
<div class="item" style="flex: 4;height: 9rem;">div3</div>
</div>
</body>
根据 div 标签中的style属性的 flex 设置,main_div 中第一个div 的宽度为一行的 1/ (1+2+3+1+2+4),第二个div宽度为一行的 2/(1+2+3+1+2+4),其他标签宽度以此类推。
好处是:当页面大小改变时子盒子的相对宽度不变。
(宽度至少要撑起内容啊)