美文网首页
伸缩布局1(flex-direction、justify-con

伸缩布局1(flex-direction、justify-con

作者: 63537b720fdb | 来源:发表于2019-12-11 00:32 被阅读0次

    使用float方式让对象水平展示时,有时我们还要考虑到清除浮动的问题
    这时直接使用flex,就可以达到float的效果,还不需要清除浮动。

                /*ul设置flex属性*/
                ul{
                    width: 500px;
                    border: 1px solid #000;
                    margin: 100px;
                    /*在这*/
                    display: flex;
                }
    
                /*设置li的宽高*/
                ul>li{
                    width: 100px;
                    height: 100px;
                }
    
                /*设置每个li的背景颜色*/
                ul>li:nth-child(1){
                    background-color: red;
                }
                ul>li:nth-child(2){
                    background-color: blue;
                }
                ul>li:nth-child(3){
                    background-color: green;
                }
            <ul>
                <li>1</li>
                <li>2</li>
                <li>3</li>
            </ul>
    

    在深入了解伸缩布局前,我们还需要了解一些前置知识
    伸缩容器:设置了flex属性的结构, 如ul
    伸缩项:伸缩容器里的子集, 如li
    主轴:默认从伸缩容器的左侧到右侧的水平线
    主轴的起点:如图
    主轴的终点:如图
    侧轴:主轴的垂直线
    侧轴的起点:如图
    侧轴的终点:如图

    image.png

    一、主轴方向 flex-direction

    在伸缩布局中,默认情况下水平方向是主轴,主轴的起点在伸缩容器的最左侧,主轴的终点在伸缩容器的最右侧,我们可以通过属性来修改主轴方向
    flex-direction:主轴的起点

    1.flex-direction: row; 默认值
    主轴起点在伸缩容器最左边,终点在伸缩容器最右边,从左至右排版

                ul{
                    width: 500px;
                    border: 1px solid #000;
                    margin: 100px;
                    /*在这*/
                    display: flex;
                    flex-direction: row;
                }
    
    image.png

    2.flex-direction: row-reverse;
    起点在伸缩容器最右边,终点在伸缩容器最左边,从右至左排版

    image.png

    3.flex-direction: column;
    起点在伸缩容器最上边,终点在伸缩容器最下边,从上至下排版

    image.png

    4.flex-direction: column-reverse;
    起点在伸缩容器最下边,终点在伸缩容器最上边,从下至上排版

    image.png

    注意:侧轴是主轴的垂直方向,主轴改变,侧轴也相应发生改变

    二、伸缩项根据主轴的对齐方式 justify-content

    image.png

    1.justify-content: flex-start;默认值
    首先根据主轴的方向排序好伸缩项,再将排序好的伸缩项和主轴的起点对齐
    伸缩项默认和主轴的起点对齐

                ul{
                    width: 500px;
                    border: 1px solid #000;
                    margin: 100px;
                    display: flex;
                    flex-direction: row; 主轴起点的默认值
                    /*在这*/
                    justify-content: flex-start; 伸缩项对齐的默认值
                }
    
    image.png

    2.justify-content: flex-end;
    首先根据主轴的方向排序好伸缩项,再将排序好的伸缩项和主轴的终点对齐

                ul{
                    width: 500px;
                    border: 1px solid #000;
                    margin: 100px;
                    display: flex;
                    flex-direction: row; 主轴起点的默认值
                    /*在这*/
                    justify-content: flex-end; 主轴上伸缩项对齐的默认值
                }
    
    image.png

    3.justify-content: center;
    首先根据主轴的方向排序好伸缩项,再将排序好的伸缩项和主轴的中点对齐

                ul{
                    width: 500px;
                    border: 1px solid #000;
                    margin: 100px;
                    display: flex;
                    flex-direction: row; 主轴起点的默认值
                    /*在这*/
                    justify-content: flex-center; 主轴上伸缩项对齐的默认值
                }
    
    image.png

    4.justify-content: space-between;

                ul{
                    width: 500px;
                    border: 1px solid #000;
                    margin: 100px;
                    display: flex;
                    flex-direction: row; 主轴起点的默认值
                    /*在这*/
                    justify-content:space-between; 
                }
    
    image.png

    space-between的对齐过程:
    首先,根据主轴的方向排序好伸缩项


    image.png

    然后,计算 伸缩容器多余的空间space / (伸缩项数目-1)


    image.png
    最后,将计算好的容器分配到伸缩项之间between
    image.png

    5.justify-content: space-around;

                ul{
                    width: 500px;
                    border: 1px solid #000;
                    margin: 100px;
                    display: flex;
                    flex-direction: row; 主轴起点的默认值
                    /*在这*/
                    justify-content:space-around; 主轴上伸缩项对齐的默认值
                }
    
    image.png

    space-around的对齐过程:
    首先,根据主轴的方向排序好伸缩项


    image.png

    然后,计算 伸缩容器多余的空间space / (伸缩项数目 * 2)


    image.png
    最后,将计算好的容器分配到伸缩项两侧around
    image.png

    三、伸缩项根据侧轴的对齐方式 align-items

    侧轴和主轴相互垂直
    和主轴对齐方式相比,侧轴对齐方式也有flex-start center flex-end

    1.align-items: flex-start;
    根据主轴方向排序好伸缩项,再将伸缩项基于侧轴的起点对齐

                ul{
                    width: 500px;
                    height: 350px;
                    border: 1px solid #000;
                    margin: 100px;
                    display: flex;
                    /*告诉浏览器主轴的起点在伸缩容器的最左边,告诉浏览器伸缩项从左至右排版*/
                    flex-direction: row;
                    /*告诉浏览器排版好的伸缩项需要和侧轴的起点对齐*/
                    align-items: flex-start;
                }
    
    image.png

    2.align-items: flex-end;
    根据主轴方向排序好伸缩项,再将伸缩项和侧轴的终点对齐

                ul{
                    width: 500px;
                    height: 350px;
                    border: 1px solid #000;
                    margin: 100px;
                    display: flex;
                    /*告诉浏览器主轴的起点在伸缩容器的最左边,告诉浏览器伸缩项从左至右排版*/
                    flex-direction: row;
                    /*告诉浏览器排版好的伸缩项需要和侧轴的终点对齐*/
                    align-items: flex-end;
                }
    
    image.png

    3.align-items: center;
    根据主轴方向排序好伸缩项,再将伸缩项和侧轴的中点对齐

                ul{
                    width: 500px;
                    height: 350px;
                    border: 1px solid #000;
                    margin: 100px;
                    display: flex;
                    /*告诉浏览器主轴的起点在伸缩容器的最左边,告诉浏览器伸缩项从左至右排版*/
                    flex-direction: row;
                    /*告诉浏览器排版好的伸缩项需要和侧轴的中点对齐*/
                    align-items: center;
                }
    
    image.png

    下面是侧轴对齐和主轴对齐 不同 的地方

    4.align-items: baseline;
    根据主轴方向排序好伸缩项,让所有伸缩项在一条基线上对齐
    vertical-align中提到的基线就是最短一个元素的底线

    image.png
                ul{
                    width: 500px;
                    height: 350px;
                    border: 1px solid #000;
                    margin: 100px;
                    text-align: center;
                    
                    display: flex;
                    /*告诉浏览器主轴的起点在伸缩容器的最左边,告诉浏览器伸缩项从左至右排版*/
                    flex-direction: row;
                    /*告诉浏览器排版好的伸缩项要在一条基线上对齐*/
                    align-items: baseline;
                }
    
                ul>li:nth-child(2){
                    background-color: blue;
                    margin-top:50px ;
                }
    

    给第二个li设置margin-top:50px ;为了让所有伸缩项的基线在一条线上对齐,红li和绿li也向下移


    image.png

    5.align-items: stretch;拉伸对齐/等高对齐
    让所有伸缩项的高度等于侧轴的高度
    注意:伸缩项不能设置高度

                ul{
                    width: 500px;
                    height: 350px;
                    border: 1px solid #000;
                    margin: 100px;
                    text-align: center;             
                    display: flex;
                    /*告诉浏览器主轴的起点在伸缩容器的最左边,告诉浏览器伸缩项从左至右排版*/
                    flex-direction: row;
                    /*告诉浏览器排版好的伸缩项需要和侧轴的起点对齐*/
                    align-items: stretch;
                }
                ul>li{
                    width: 100px;
                    /*height: 100px;*/
                    line-height: 100px;
                }
    
    image.png

    总结:根据主轴(justify-content)或侧轴(align-items)的对齐方式方法为
    1.伸缩项根据主轴方向按默认方式排序好
    2.若设置align-items,则根据侧轴给出的起点对起,justify-content原理相同

    我正在跟着江哥学编程,更多前端+区块链课程: www.it666.com

    相关文章

      网友评论

          本文标题:伸缩布局1(flex-direction、justify-con

          本文链接:https://www.haomeiwen.com/subject/afrngctx.html