博客列表 >弹性布局之弹性容器基础-2019年11月5日

弹性布局之弹性容器基础-2019年11月5日

古城老巷丶
古城老巷丶原创
2019年11月06日 07:27:041106浏览

什么是弹性布局(flex)?有什么用?

        任何一个元素,只要设置了display: flex属性, 就可以将它声明为一个Flex容器

        Flexible Box 模型,通常被称为 flexbox, 是一种一维布局模型,它给 flexbox 的子元素之间提供了强大的空间元素的分布和对齐能力。

        在传统布局中, 元素水平对齐比较容易实现,而垂直对齐非常麻烦Flex可以优雅的实现容器中多个子元素之间如何分布, 以及对齐方式。

flex的主轴与交叉轴。

        



作业:

        1.1:

            

css

.container {
        height: 400px;
        border: 1px solid red;
        /*创建flex容器,以块元素显示, 容器宽度由元素宽高叠加构成*/
        display:flex;

    }

    .item {
        width: 100px;
        background:#E11DCDFF;
        border: 1px solid black;
        font-size: 2rem;
        text-align: center;
        line-height: 100px;
    }

        效果:

            image.pngimage.png

        手抄:

            image.png               


         1.2以行内元素显示, 容器宽度由元素宽高叠加构成。注解:在容器设置了:display: inline-flex;,以行内元素显示

       

css

    /*设置父级框的颜色边框样式*/
    .container {
        height: 400px;
        border: 1px solid red;
         /*创建flex容器,以行内元素显示, 容器宽度由元素宽高叠加构成*/
        display: inline-flex;
    }

    .item {
        width: 100px;
        background:#E11DCDFF;
        border: 1px solid black;

        font-size: 2rem;
        text-align: center;
        line-height: 100px;
    }

        实际效果:

        image.png

        手抄:

            image.png


        2.1:水平排列,弹性填充不换行,在flex容器里添加上:flex-direction: 控制flex元素排列的方向。

        

实例

.container {
        height: 300px;
        border: 2px solid red;
        /*创建flex容器,以块级元素显示*/
        display: flex ;

        /*水平排列, 弹性填充不换行*/
        /*默认值: 从左到右水平排列,从起始线到终止线*/
        flex-direction: row;
    }

    .item {
        width: 100px;
        background-color: lightblue;
        border: 1px solid black;

        font-size: 2rem;
        text-align: center;
        line-height: 100px;
    }

效果:

        image.png


        

        2.2,从右到左水平排列, 反向

                 flex-direction: row-reverse;

        效果:

image.png


        2.3:垂直排列, 弹性元素表现的如同块元素,从上到下

        css

实例

    .container {
        height: 300px;
        border: 2px solid red;
        /*创建flex容器,以块级元素显示*/
        display: flex;


    }

   
    /*垂直排列, 弹性元素表现的如同块元素*/
    /*取消容器高度和元素的宽度,这样看上去更直观*/
    .container {
        height: auto;

        /*从上到下垂直排列(如块元素),主轴为垂直方向*/
        flex-direction: column;
    }

    .item {
        width: auto;
    }

    .item {
        width: 100px;
        background-color: lightblue;
        border: 1px solid black;

        font-size: 2rem;
        text-align: center;
        line-height: 100px;
    }

            

        效果

            image.png


        2.3:垂直排列,从下往上。

                 flex-direction: column-reverse;

        效果

            image.png

        手抄:

            image.png


    

        3.1:显示效果,换行显示:

           css:

            

实例

    /*创建flex容器*/
    .container {
    	/*定义高度,创建多行flex容器*/
    	width: 500px;
        /*以块级元素显示*/
        display: flex;
        /*换行显示, 元素宽度不压缩*/
    	flex-wrap: wrap;
    }

    效果图:

        image.png

        3.3,显示效果,不换行显示:

        css

            

实例

    /*公共样式*/
    .container {
        height: 300px;
        border: 2px solid red;
    }

    .item {
        width: 100px;
        background-color: lightblue;
        border: 1px solid black;
        font-size: 2rem;
        text-align: center;
        line-height: 100px;
    }

    /*创建flex容器*/
    .container {
    	/*定义高度,创建多行flex容器*/
    	width: 500px;
        /*以块级元素显示*/
        display: flex;
    	/*反向换行显示*/
    	flex-wrap: wrap-reverse;
    }

    image.png


手抄:

        image.png


        4.弹性元素在主轴上如何分布

            4.1: flex-start:  单行样式和多行样式

        css     

        /*从起始线(左)开始,默认值*/.
        flex-start{justify-content: flex-start;	}

        效果:

        image.png

        4.1:flex-start:  多行样式

                css:

            

实例

    /*从起始线(左)开始,默认值*/
    .flex-start {
        justify-content: flex-start;
    }

    /*创建一个通用样式组件*/
    .wrap {
        flex-wrap: wrap;
    }

        效果:

        image.png

        4.2:flex-end: 主轴终点开始排列,单行和多行。

            css:

            

实例

	/*flex-end: 从终止线(右)开始*/
	.flex-end{justify-content: flex-end;}

    /*进行换行处理*/
    .wrap {
        flex-wrap: wrap;
    }

            效果:

        image.png


        4.3:center: 弹性元素做一个整体居中显示

            css:

            

实例

/*center: 所有元素居中排列*/
	.center{justify-content: center;}
	
    /*进行换行处理*/
    .wrap {
        flex-wrap: wrap;
    }



            效果:

        1572976590549992.png

        4.4:space-between:首尾元素紧贴起止点,其它元素平分剩余空间

            css:

            

实例

	/*space-between:主轴上首元素贴起始线,尾元素贴终止线,剩余元素均分空间*/
	.space-between{justify-content: space-between;}
    /*进行换行处理*/
    .wrap {
        flex-wrap: wrap;
    }


        效果:

        image.png


        4.5:space-around:每个元素二边空间相等,相邻元素空间累加。

            css:

            

实例

	/*space-around: 主轴上空间在元素二侧平均分配,元素间隙比它到边框间隙大一倍*/
	.space-around{justify-content: space-around;}
    /*进行换行处理*/
    .wrap {
        flex-wrap: wrap;
    }



            效果:

            image.png


        4.6:space-evenly:每个元素, 以及元素到与起止点的空间全部相等

            css:

            

实例

	/*space-evenly主轴上剩余空间在元素之间平均分配,包括元素与边框之间*/
	.space-evenly{justify-content: space-evenly;}
	
    /*进行换行处理*/
    .wrap {
        flex-wrap: wrap;
    }

        效果:

            image.png


5,使用justify-content的按排列来设置导航。

    css

实例

    a {
        text-decoration: none;
        background-color: lightgreen;
        color: black;
        padding: 5px 10px;
        margin: 0 5px;
        border-radius: 5px 5px 0 0;
    }

    nav {
        display: flex;
        border-bottom: 1px solid gray;
    }

    a:hover,
    a:focus,
    a:active {
        background-color: orangered;
        color: white;
    }
    /*设置导航从起始线(左)开始排序,*/
    nav {
        justify-content: flex-start;
    }
    /*从终止线(右)开始*/
    nav {
        justify-content: flex-end;
    }
    /*设置所有元素居中排列*/
    nav {
        justify-content: center;
    }

        效果:

        image.png

手抄:

        image.png

6.align-items: 设置单行容器中元素在垂直轴上的排列方式

        stretch: 默认值, 元素高度自动拉伸充满整个容器

        css:

实例

    .container {
        width: 500px;
        height: 300px;
    }
    /*单行容器*/
    /*stretch: 默认值,元素在交叉轴上自动延展到容器的高度*/
    .stretch {
        align-items: stretch;
    }

    /*多行容器*/
    /*align-content: stretch: 元素拉伸高度填充全部空间*/
    .wrap-stretch {
        align-content: stretch;
    }
    .wrap {
        flex-wrap: wrap;
    }

        效果:

        

image.png

        flex-start: 元素紧贴容器起点

        css:

实例

 @import url("public.css");

    .container {
        width: 500px;
        height: 200px;
    }

    /*单行容器*/
	/*align-items: flex-start: 元素从容器的交叉轴起始线开始排列*/
	.flex-start{align-items: flex-start}


    /*多行容器*/
	/*align-content: flex-start;: 默认顶部, 起始线*/
	.wrap-flex-start{align-content: flex-start};

    .wrap {
        flex-wrap: wrap;
    }

        效果:

        image.png

        

        flex-end: 元素紧贴容器终点

            css:

实例

        @import url("public.css");

    .container {
        width: 500px;
        height: 200px;
    }
/*align-items: flex-end: 元素从容器的交叉轴终止线开始排列*/
    .flex-end{align-items: flex-end;}
    /*align-content: flex-end;: 底部, 终止线*/
    .wrap-flex-end{align-content: flex-end;}
    .wrap {
        flex-wrap: wrap;
    }

        效果:

        1572984122823465.png

        center: 所有元素做为一个整体在容器垂直方向居中显示

        css:

实例

    @import url("public.css");

    .container {
        width: 500px;
        height: 200px;
    }

    /*align-items: center: 元素位于交叉轴中心位置排列*/
    .center{align-items: center;}
    /*align-content: center: 居中*/
    .wrap-center{align-content: center;}
    .wrap {
        flex-wrap: wrap;
    }

        效果:

        image.png


        space-between: 垂直方向首尾行紧贴起止点,其它行平分剩余空间

        css:

            

实例

    .wrap-space-between{align-content: space-around;}
    .wrap {
        flex-wrap: wrap;
    }

        效果:

        image.png

       

        space-around: 每个元素二边空间相等,相邻元素空间累加

        css:

            

实例

    /*align-content: space-around: 交叉轴上空间在元素二侧平均分配,元素间隙比它到边框间隙大一倍*/
    .wrap-space-around {
        align-content: space-around;
    }

    .wrap {
        flex-wrap: wrap;
    }

        效果:

            image.png


        space-evenly: 每个元素, 以及元素到与起止点的空间全部相等

            css:

            

实例

    /*align-content: space-evenly: 交叉轴上剩余空间在元素之间平均分配,包括元素与边框之间*/
    .wrap-space-evenly {
        align-content: space-evenly;
    }

    .wrap {
        flex-wrap: wrap;
    }

           效果:

            image.png


手抄:

        image.pngimage.png


总结:

        通过学习Flex,相比以前的布局更简单。

        Flex对齐排列有两种,一种是水平排列,一种是垂直排列。水平排列分两种,从左到右排列,从右到左排列,垂直排列也分两种,从上到下排列和从下到上排列。

        Flex中, 起始线使用flex-start, 终止线用flex-end表示

        Flex容器,容器中定义flex时,为块元素,独占一行,垂直排列,定义或inline-flex时,做为行内元素显示,即宽度由flex元素决定。

        flex-direction 可以设置二个排列方向,四个值,水平排列,分左右,右左,垂直排列分上下,下上

        flex-wrap 可以设置是否换行 ,三个值,二个方向,

        flex-flow 作用是简写flex-direction和flex-wrap属性

        justify-content 设置排列起始位置,按排列起始位置与剩余空间分配议案

        align-items  控制元素在交叉轴上的排列方式

        align-content  只适用于在多行容器中,控制交叉轴上元素的排列和容器剩余空间的处理方式,有二种对齐方式: 基本对齐, 分布式对齐

        
































声明:本文内容转载自脚本之家,由网友自发贡献,版权归原作者所有,如您发现涉嫌抄袭侵权,请联系admin@php.cn 核实处理。
全部评论
文明上网理性发言,请遵守新闻评论服务协议