flex布局

css概念

层叠样式表(英文全称:Cascading Style Sheets)是一种用来表现HTML(标准通用标记语言的一个应用)或XML(标准通用标记语言的一个子集)等文件样式的计算机语言。CSS不仅可以静态地修饰网页,还可以配合各种脚本语言动态地对网页各元素进行格式化。

CSS 能够对网页中元素位置的排版进行像素级精确控制,支持几乎所有的字体字号样式,拥有对网页对象和模型样式编辑的能力


Flex布局

为什么使用flex布局

在PC端常见的布局:
流式布局
浮动布局
层布局

在移动端常见的布局:
flex布局

flex布局是css3中的提出的一种布局方案,在开发移动端页面时,
基本上都是flex布局,当然,如果你不考虑浏览器的兼容性问题,
你在PC端也可以使用Flex布局。

原因:很多PC端浏览器对CSS3的支持并不友好。

如果使用flex布局,那么就不要想着浮动布局。

flex布局概念

flex布局中的几个概念:
1)容器:如果给一个盒子添加了一个display:flex; 那么这个盒子就是一个容器。
2)项目:容器中的直接子元素就是项目(儿子) 项目默认都是在主轴上进行排列的
3)主轴:默认情况下,项目是按照水平方向从左到右进行排列,这个排列方向就是主轴的方式
4)交叉轴:和主轴垂直的那个轴就是交叉轴

采用Flex布局的元素,称为Flex容器(flex container),简称”容器”。它的所有子元素自动成为容器成员,称为Flex项目(flex item),简称”项目”。

image.png

容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end。

项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size。


如何使用flex布局

对于容器来说,我们需要学习6大属性,以于项目来说,我们也需要学习6大属性。

容器相关的属性
容器的属性: 意味着下面的属性需要写在容器中
    flex-direction: direction本意是方向的意思  作用:用来设置主轴的方向
        row:默认值  水平面右  默认情况下,如果你不设置主轴的方向,那么默认就是水平向右的
        row-reverse   reverse本意是反转的意思    水平向左  
        column    column本意是列的意思   让主轴垂直向下
        column-reverse   让主轴垂直向上  
        注意:项目是从主轴的起点开始排列。
    flex-wrap:
        如果说容器的宽度比较小,项目的总宽度大于容器的宽度,此时项目在容器中会进行压缩,默认是不
        换行的。
        如果想你让它换行,通过flex-wrap属性来设置。
        nowrap:不换行   默认值
        wrap : 换行 
    flex-flow:不是一个新的属性,是上面两个属性的复合属性
        flex-flow:是flex-direction属性和flex-wrap属性的简写形式
        如:row nowrap   表示:主轴的水平向右的   不换行
    justify-content:用来处理主轴上的富余空间的
        flex-start:表示项目在主轴的开始点排列,富余空间在主轴的结束位置
        flex-end:表示项目在主轴的结束点排列,富余空间在主轴的开始位置
        center:  表示项目在主轴的中间位置,富余空间在主轴的两侧
        space-between: 表示富余空间在项目和项目之间
        space-around:around表示环绕的意思   表示富余空间环绕项目
        注意:什么时候使用justify-content,只有有富余空间时才会使用
    align-items: 理解1:项目在交叉轴上的摆放位置  理解2:处理项目在交叉轴的富余空间
        flex-start:项目在交叉轴的起来开始排列,富余空间在后面
        flex-end::项目在交叉轴的起来结束位置排列,富余空间在前面
        center:  项目在交叉轴的起来中间位置排列,富余空间在两侧
    align-content:  多行项目,形成多根主轴,此属性是用来设置多根主轴的位置关系
        使用前提:
            1)多行项目   
        flex-start: 两根主轴都从开始位置开始排列
        flex-end : 两根主轴都从结束位置开始排列
        center:两根主轴从中间位置开始排列

复制代码

图示

flex-direction(row、row-reverse、column、column-reverse ):

image.png

flex-wrap:

(1)nowrap(默认):不换行。

image.png

(2)wrap:换行,第一行在上方。

image.png

(3)wrap-reverse:换行,第一行在下方。

image.png

justify-content:

image.png

align-items:

image.png

align-content:

image.png


项目相关的属性
项目的相关属性:
    1.order:设置单个项目在主轴的排列顺序   order的默认值是0
        如果数字越小,越靠近主轴的起始点
    2.flex-grow: grow表示生长因子  
        如果说有富余空间,你想让哪个项目生长。就可以设置flex-grow。
        把富余空间分成了三份,每个项目占一份
        .son1{ flex-grow:1; }
        .son2{ flex-grow:1; }
        .son3{ flex-grow:1; }
        
        把富余空间分成了6分,老大占1份,老二占2份,老三占3份
        .son1{ flex-grow:1; }
        .son2{ flex-grow:2; }
        .son3{ flex-grow:3; }
        
    3.flex-shrink: 定义了项目的缩小比例
    flex-shrink: <number>;
    默认值: 1,即如果空间不足,该项目将缩小,负值对该属性无效。
    如果所有项目的 flex-shrink 属性都为 1,当空间不足时,都将等比例缩小。
    如果一个项目的 flex-shrink 属性为 0,其他项目都为 1,则空间不足时,前者不缩小。
    4. flex-basis: 定义了在分配多余空间之前,项目占据的主轴空间,浏览器根据这个属性,计算主轴是否有多余空间
        flex-basis: <length> | auto;
        auto : 即项目本来的大小, 这时候 item 的宽高取决于 width 或 height 的值
        当 flex-basis 值为 0 % 时,是把该项目视为零尺寸的,故即使声明该尺寸为 140px,也并没有什么用。
        当 flex-basis 值为 auto 时,则跟根据尺寸的设定值(假如为 100px),则这 100px 不会纳入剩余空间。
    5. flex: flex-grow, flex-shrink 和 flex-basis的简写
        flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
        flex 的默认值是以上三个属性值的组合。假设以上三个属性同样取默认值,则 flex 的默认值是 0 1 auto。
    6. align-self: 允许单个项目有与其他项目不一样的对齐方式
        单个项目覆盖 align-items 定义的属性
        默认值为 auto,表示继承父元素的 align-items 属性,如果没有父元素,则等同于 stretch。
        align-self: auto | flex-start | flex-end | center | baseline | stretch;


复制代码

图示

order:

image.png

flex-grow:

image.png

flex-shrink:

image.png

align-self:

image.png


总结

Flex是Flexible Box的缩写,意为”弹性布局”,用来为盒状模型提供最大的灵活性。任何一个容器都可以指定为Flex布局。它有项目六大属性和容器相关的六大属性,掌握这12个属性也就掌握了flex布局。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享