FLEXBOX(弹性盒布局模型)以及适用场景

FLEX布局是什么?

2009年,W3C提出了一种新的布局方案—-Flex 布局,可以简便、完整、响应式地实现各种页面布局。 目前,它已经得到了所有浏览器的支持,这意味着,现在就能很安全地使用这项功能。

2.知识剖析

一,怎么运用FLEX布局
flex布局非常灵活,任一容器都可以指定为flex布局。块状只需要display属性规定为flex即可。 行内元素也可以指定为flex布局,将display属性设置为inline-flex。 还有WebKit内核的浏览器需要加上-webkit前缀。 需要注意的是设置成为flex布局之后,子元素的float,clear,text-align,vertical-align就会失效。
二,基本概念
采用flex布局的元素就被称为flex容器(flex contain),它的所有子元素称为flex项目(flex item)。 容器默认存在两根轴线,一根主轴(main axis)一根交叉轴(cross axis)。 项目默认沿主轴排列,单个项目占据的主轴空间叫main size,占据的交叉轴空间叫cross size.
三. FLEX-BOX容器属性
flex-box(容器)和flex-item(项目)各自都有不同的属性。通过对它们进行不同的设置来对整体布局进行调整以达到想要的效果。
flex-box容器的主要属性有:

1.flex-direction 决定项目在主轴的排列方向。
2.flex-wrap 决定如果一条轴线排不下了,该如何换行。
3.flex-row 是flex-direction和wrap的简写形式,默认row nowrap。
4.justify-content 决定项目在主轴方向上如何对齐。
5.align-items 决定项目在交叉轴上如何对齐。
6.align-content 定义多根轴线如何对齐。

FLEX-DIRECTION
FLEX-DIRECTION属性决定主轴的方向(即项目的排列方向)。

1.flex-direction: row;表示默认值,主轴在水平方向,从左到右。
2.flex-direction: row-reverse;主轴在水平方向,从右到左。
3.flex-direction: column;主轴在垂直方向上,从上到下。 这样的话就会将原本在x轴从左向右排列的项目更改为从上到下排列。
4.flex-direction: column-reverse; 主轴在垂直方向上,同样的,反转一下,是从下到上。

FLEX-WRAP
默认情况下,项目都排在一条线(又称”轴线”)上。FLEX-WRAP属性定义,如果一条轴线排不下,如何换行。

1.flex-wrap: nowrap;也是这个属性的默认值,表示不换行,项目等比例缩小(如果没规定flex-shrink为0的情况下)。
2.flex-wrap: wrap;表示换行,且第一行在上方。
3.flex-wrap: wrap-reverse;这个时候,也会换行,但是第一行就要跑到下方去了。

FLEX-FLOW
FLEX-FLOW属性是FLEX-DIRECTION属性和FLEX-WRAP属性的简写形式,默认值为ROW NOWRAP。
flex-flow: flex-direction || flex-wrap;
JUSTIFY-CONTENT
JUSTIFY-CONTENT属性定义了项目在主轴上的对齐方式。

1.flex-start: 也是这个属性的默认值,表示主轴起点对齐。
2.flex-end: 主轴终点对齐
3.center: 居中
4.space-between: 两端对齐,项目之间的间隔都相等。
5.space-around: 每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

ALIGN-ITEMS
ALIGN-ITEMS属性定义项目在交叉轴上如何对齐。

1.flex-start: 也是这个属性的默认值,表示交叉轴起点对齐。
2.flex-end: 交叉轴终点对齐
3.center: 居中
4.stretch(默认值): 如果项目未设置高度或设为auto,将占满整个容器的高度。
5.baseline: 项目的第一行文字的基线对齐。

ALIGN-CONTENT
ALIGN-CONTENT属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。

1.flex-start: 与交叉轴的起点对齐。
2.flex-end: 交叉轴终点对齐。
3.center: 与交叉轴的中点对齐。
4.space-between: 与交叉轴两端对齐,轴线之间的间隔平均分布。
5.space-around: 项目的第一行文字的基线对齐。
6.stretch(默认值): 轴线占满整个交叉轴。

四. FLEX项目属性
flex项目的属性也有6个。项目的属性有:

1.order 决定项目的排列顺序,数值越小,排列越靠前。
2.flex-grow 决定项目的放大比例,默认值是0,也就是存在剩余空间,不放大。
3.flex-shrink 是也就是决定项目的缩小比例,默认是1,表示剩余空间不足时,等比缩小,如果需要不变,可以设置为04.flex-basis 定义了在分配多余项目之前,项目占据的主轴空间。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。它可以设为跟width或height属性一样的值(比如350px),则项目将占据固定空间。
5.flex 是以上三个的简写,默认0 1 auto,也就是不放大,不缩小,占据项目本来大小的主轴空间。该属性有两个快捷值: auto (1 1 auto) 和 none (0 0 auto),这里也不过多赘述。
6.align-self属性 默认auto,继承flex容器,也就是父元素的align-items属性,项目和algn-items一样,只是决定单个item对交叉轴的对齐方式。

3.常见问题
display:flex可以复合使用吗?
4.解决方案
答案是可以的,一个元素可以是一个display的子元素同时也是另外一个display的父元素。
5.代码实战

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <title>flex编码实战</title>
    <style>
        body {
            display: flex;
            /*flex-direction: column;*/
            /*flex-wrap: wrap;*/
            /*flex-wrap: wrap-reverse;*/
            /*justify-content: flex-start;*/
            /*justify-content: flex-end;*/
            /*justify-content: center;*/
            /*justify-content: space-between;*/
            /*justify-content: space-around;*/
            /*align-items: center;*/
            /*align-items: flex-start;*/
            /*align-items: flex-end;*/
            /*align-items: baseline;*/
            /*align-content: center;*/
            /*align-content: space-between;*/
            /*align-content: space-around;*/
            /*align-content: stretch;*/
            width: 80vw;
            height: 80vh;
            margin: 2rem auto;
            border: 1px solid #000;
        }
        .box1 {
            display: flex;
            justify-content: center;
            align-items: center;
            /*order: 5;*/
            flex-shrink: 0;
            width:30%;
            height:30%;
            border: 1px solid #ff0000;
        }
        .box2 {
            width:60%;
            height: 60%;
            background-color: #ffff00;
        }
        .box3 {
            width: 30%;
            height:30%;
            background-color: #d58512;
        }
        .box4 {
            width: 20%;
            height: 30%;
            background-color: #2aabd2;
        }
        .box5 {
            /*align-self: flex-end;*/
            /*flex-shrink: 0;*/
            /*flex-grow: 1;*/
            width: 10%;
            height: 20%;
            background-color: #32c086;
        }
        .box6 {
            width: 50%;
            height: 40%;
            background-color: #5fc0cd;
        }
    </style>
</head>
<body>
<div class="box1">1
    <div class="box2">2</div>
</div>
<div class="box3">3</div>
<div class="box4">4</div>
<div class="box5">5</div>
<div class="box6">6</div>
</body>
</html>

猜你喜欢

转载自blog.csdn.net/qq_27064559/article/details/81871675