网页布局在学校教学大多数还是教学float浮动,flex布局却没有教学,甚至没有提及。教学应该与时俱进,而不是墨守成规。对于学生也应该不应该局限于课堂上的学习。
今天我就讲讲Flex的基本用法以及由来。
早在2009年谷歌就开始推出,摒弃了传统的盒模型display+psistion+float模式,flex布局能满足绝大多部分使用传统布局的需求,而且比传统布局更快速便捷。Flex————Flexible Box,译为“弹性布局”。这种布局可以简便的、完整、响应式的实现各种页面布局,采用flex布局的元素被叫做flex容器(在浏览器的调试模式下可以看到元素标签后面会带一个flex标签,点击可快速调试),其中的子元素成为容器中的成员,这些成员可以根据属性的设置,在容器大小改变时自适应地弹性排布,而不改变整体它的布局。更为重要的是,容器空间不足以放下子元素的时候,子元素也不会撑开容器,而是根据容器大小进行弹性的放缩。当然,这种布局方式早已被所有浏览器支持(ie10以上)话说ie也开退休了,微软已宣布将于2022年6月16日正式退役。这奇奇怪怪的浏览器终于再见了!!!喜大普奔~
Flex的基本使用
.box{
display: flex;
}
在设为 Flex 布局以后,子元素的float、clear和vertical-align属性都将失效
Flex的基本概念
采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"。
容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。
主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。
主轴默认的方向是横向 从左往右,交叉轴的默认方向是纵向 从上往下
当然有默认就能更改,下面介绍一下容器的属性
容器的属性
flex容器具有6个属性分别是flex-direction、flex-wrap、flex-flow、justify-content、align-items、align-content
-
flex-directionzidan
决定主轴的方向(即项目的排列方向)
.box {
flex-direction: row | row-reverse | column | column-reverse;
}
分别是主轴横向 从左往右 |横向 从右往左 |横向 从上往下 |横向 从下往上
- flex-wrap
默认情况下,项目都排在一条线(又称"轴线")上即不换行。flex-wrap属性定义,如果一条轴线排不下,如何换行。
.box{
flex-wrap: nowrap | wrap | wrap-reverse;
}
此处需要注意的是属性值wrap-reverse 换行,但第一行在下方,并不是指排列顺序
- flex-flow
此处是
flex-direction属性和flex-wrap属性的简写形式,类似一个语法糖吧,默认值与原先一致 - justify-content 定义了项目item在主轴上的对齐方式
.box {
justify-content: flex-start | flex-end | center | space-between | space-around;
}
具体对齐方式与轴的方向有关,下面以主轴为从左到右为例。
flex-start(默认值):左对齐flex-end:右对齐center: 居中space-between:两端对齐,项目之间的间隔都相等。space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。
- align-items 定义项目item在交叉轴上如何对齐
.box {
align-items: flex-start | flex-end | center | baseline | stretch;
}
具体对齐方式与轴的方向有关,下面以交叉轴为从上到下为例。
flex-start:交叉轴的起点对齐。flex-end:交叉轴的终点对齐。center:交叉轴的中点对齐。baseline: 项目的第一行文字的基线对齐。stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。
- align-content
定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。即该属性
flex-wrap不为默认值且项目item至少为两行时才有效果。
项目的属性
flex项目(item)具有6个属性分别是order、flex-grow、flex-shrink、flex-basis、flex、align-self
order定义项目的排列顺序。数值越小的项目排列越靠前,默认值为0。flex-grow定义项目的放大比例,默认值为0,即如果存在剩余空间,也不放大。与flex-shrink相似。flex-shrink定义了项目的缩小比例,默认为1,即如果空间不足,项目将缩小。与flex-grow相似。flex-basis定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。如若使用,建议先设置flex-basis再设置flex-shrink、flex-grow,按照逻辑顺序便于理解。flexflex属性是flex-grow、flex-shrink和flex-basis的简写,默认值为0 1 auto。后两个属性是可选的,即flex至少写一个属性值。建议优先使用flex,而不是分开始写,浏览器会根据值进行相关填充值align-selfalign-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性,即align-self优先级高于父元素的布局方式。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch