D6|青训营

130 阅读3分钟

Flex

算算算第二篇实践文章吧。

基本概念

采用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。

image.png

flex-direction

flex-direction 属性用来决定主轴的方向(项目的排列方向)。

image.png initial:设置为属性的默认值
inherit:从父元素继承

flex-wrap

flex-wrap 属性用来设置当弹性盒子的子元素(项目)超出父容器时是否换行。 nowrap:默认值,表示项目不会换行。
wrap:项目会在需要时换行。
wrap-reverse:项目会在需要时以相反的顺序换行。
initial:设置为属性的默认值。
inherit:从父元素继承。

flex-flow

flexflow是以上两个属性的简写。

justify-content

justify-content 属性用于设置弹性盒子中元素在主轴(横轴)方向上的对齐方式。

image.png initial:设置为属性的默认值。
inherit:从父元素继承。

align-items

align-items 属性用来设置弹性盒子中元素在侧轴(纵轴)方向上的对齐方式。 image.png

align-content

align-content 属性可以在弹性盒子的侧轴还有多余空间时调整容器内项目的对齐方式。

stretch:默认值,将项目拉伸以占据剩余空间。
center:居中排布。
flex-start:顶部排列。
flex-end:底部排列。
space-between:多行项目均匀分布在容器中,第一行顶部,最后一行底部。
space-around:多行项目均匀分布在容器中,每行间距(包括离容器边缘的间距)都相等。
initial:设置为属性的默认值。
inherit:从父元素继承。

order

order属性用来设置项目在容器中出现的顺序。

image.png

align-self

align-self 属性为某个项目设置不同于其它项目的对齐方式,该属性可以覆盖align-items属性的值。

image.png auto:默认值,继承其父容器的align-items属性值,如果没有父容器,则为“stretch”。
stretch:拉伸以适合容器。
center:项目位于容器的中央。
flex-start:位于容器的顶部。
flex-end:位于容器的底部。
baseline:与容器的基线对齐。
initial:设置为属性的默认值。
inherit:从父元素继承。

flex

flex属性是 flex-grow、flex-shrink 和 flex-basis 三个属性的简写。
flex-grow:用来设置项目相对于其他项目的增长量,默认值0。
flex-shrink:用来设置项目相对于其他项目的收缩量,默认值1。
flex-basis:项目的长度,auto(默认值)、inherit(从父元素继承) 或以具体的值加 "%"、"px"、"em" 等单位。

image.png image.png

乱写:
本初学菜鸟尝试flex的时候,不知道p不可以嵌套div。内联元素可以嵌套内联元素,块级元素可以嵌套部分块级元素并也能嵌套内联元素,但内联元素不能嵌套块级元素。块级元素为block,内联元素为inline,拥有“inline”特性的同时又拥有“block”的特性称为replace元素。有几个特殊的块级元素只能包含内联元素,不能再包含块级元素,这几个特殊的标签是:h1、h2、h3、h4、h5、h6、p、dt。所以p里面不能嵌套div。

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>Document</title>
    <style>
        .big{
            display: flex;
        }
        .c1,.c2,.c3{
            text-align: center;
            line-height: 50px;
            width: 50px;
            height: 50px;
            color: white;
        }
        .c1{
            background-color: #7f96bc;
        }
        .c2{
            background-color: #345388;
            flex:2;
        }
        .c3{
            background-color: #10213d;
            flex:1 1 auto;
        }
    </style>
</head>
<body>
    <div class="big">
        <div class="c1"></div>
        <div class="c2"></div>
        <div class="c3"></div>
    </div>
</body>
</html>

image.png