CSS弹性盒布局(display:flex)

CSS弹性布局(display:flex)

参考:

http://www.runoob.com/w3cnote/flex-grammar.html

https://www.jianshu.com/p/5856c4ae91f2

http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

https://www.cnblogs.com/xuyuntao/articles/6391728.html

主要内容:

父级:
    display:flex;
    
    (兼容绝大部分浏览器):-webkit-     真实工作下使用postCss插件-自动添加浏览器兼容
    display: -webkit-flex; /* Safari */
    display: flex;
    *如果使用了弹性布局,子元素不需要使用浮动float
    
    父级身上的常用属性:
        justify-content:    子元素水平排列
            flex-start(默认)    从左开始
            flex-end    从右开始
            center    居中!!
            space-between    两端对齐
            space-around    子元素张开手分布
        
        align-items        子元素垂直排列
            flex-start(默认)    从上开始
            flex-end    从下开始
            center    居中!!
            stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度
            baseline: 项目的第一行文字的基线对齐
        
        align-content        多行子元素垂直排列
            flex-start:        与交叉轴的起点对齐。
            flex-end:            与交叉轴的终点对齐。
            center:            与交叉轴的中点对齐。    
            space-between:     与交叉轴两端对齐,轴线之间的间隔平均分布。
            space-around:        每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
            stretch(默认值):    轴线占满整个交叉轴。
        
        flex-flow(基本不用,面试可能会提到)    
            flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap
            flex-flow: <flex-direction> <flex-wrap>;
            举例:flex-flow:column wrap;
        
        flex-direction    子元素排列方向
            row(默认值):主轴为水平方向,起点在左端。
            row-reverse:主轴为水平方向,起点在右端。
            column:主轴为垂直方向,起点在上沿。
            column-reverse:主轴为垂直方向,起点在下沿。
            
        flex-wrap        子元素一行排不下如何换行
            nowrap(默认):不换行
            wrap:换行,第一行在上方
            wrap-reverse:换行,第一行在下方
            
    子集身上的属性:
        flex    是flex-grow, flex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选
            将行分为定义比例的几份
            *子元素在划分父元素宽度,先刨除固定宽度
        
        align-self        允许单个子元素有与其他项目不一样的垂直对齐方式,可覆盖align-items属性
            .item {
                align-self: auto | flex-start | flex-end | center | baseline | stretch;
                    }
            
        flex-grow        定义子元素的放大比例,默认为0,即如果存在剩余空间,也不放大
            .item {
                flex-grow: <number>;     /* default 0 */        <number>只代表缩放系数
                    }
                    
        order        定义子元素的排列顺序。数值越小,排列越靠前,默认为0
            .item {
                  order: <integer>;
                }

练习案例:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>flex布局案例-淘宝底部导航栏</title>
    <link rel="stylesheet" href="bootstrap/css/bootstrap.css">
    <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }
        .footer-nav{
            width: 100%;
            height: 60px;
            background-color: grey;
            display: flex;
            position: absolute;
            left: 0;
            bottom: 0;
        }
        .footer-nav .tab{
            width: 20%;
            box-sizing: border-box;
            border-left: 1px solid red;
            flex: 1;
            text-align: center;
            line-height: 30px;
            font-size: 16px;
            color: white;
        }
        .footer-nav .tab .tab-icon{
           height: 30%;
        }
    </style>
</head>
<body>
<div class="footer-box">
<div class="footer-nav">
    <span class="tab">
        <span class="tab-icon glyphicon glyphicon-home"></span>
        <p class="text">首页</p>
    </span>
    <span class="tab">
        <span class="tab-icon glyphicon glyphicon-shopping-cart"></span>
        <p class="text">购物车</p>
    </span>
    <span class="tab">
        <span class="tab-icon glyphicon glyphicon-list-alt"></span>
        <p class="text">订单列表</p>
    </span>
    <span class="tab">
        <span class="tab-icon glyphicon glyphicon-user"></span>
        <p class="text">我的淘宝</p>
    </span>
    <span class="tab">
        <span class="tab-icon glyphicon glyphicon-option-horizontal"></span>
        <p class="text">更多</p>
    </span>
    <span class="tab">
        <span class="tab-icon glyphicon glyphicon-grain"></span>
        <p class="text">欢度清明</p>
    </span>
</div>
</div>
</body>
</html>
View Code

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <link rel="stylesheet" href="style/flex-1.css">
</head>
<body>
    <div class="outer">
        <div class="item div1">1</div>
        <div class="item div2">2</div>
        <div class="item div3">3</div>
        <div class="item div4">4</div>
        <div class="item">5</div>
        <div class="item">6</div>
        <div class="item">7</div>
    </div>
</body>
</html>
HTML代码
*{
    margin: 0;
    padding: 0;
    list-style: none;
}
.outer{
    width: 500px;
    height: 500px;
    border: 1px solid red;
    margin: 30px auto;
    display: flex;
    flex-wrap: wrap;
    align-content:flex-start;
}
.item{
    width: 125px;
    border: 1px solid #ff1bbe;
    background-color: #0D47A1;
    height: 125px;
    box-sizing: border-box;
    font-size: 32px;
    color: white;
    line-height: 125px;
    text-align: center;
    align-content: flex-start;
}
css代码

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        * {
            margin: 0;
            padding: 0;
            list-style: none;
        }
        .outer {
            width: 500px;
            height: 500px;
            border: 1px solid red;
            margin: 30px auto;
            display: flex;
            flex-wrap: wrap;
            align-content: flex-start;
        }
        .item {
            border: 1px solid #ff1bbe;
            background-color: #0D47A1;
            height: 125px;
            box-sizing: border-box;
            font-size: 32px;
            color: white;
            line-height: 125px;
            text-align: center;
        }
        .div1{width: 80px}
        .div2{flex: 1}
        .div3{flex: 2}
    </style>
</head>
<body>
    <div class="outer">
        <div class="item div1">1</div>
        <div class="item div2">2</div>
        <div class="item div3">3</div>

    </div>
</body>
</html>
View Code

<!DOCTYPE=html>
<html lang="zh-cn">
<head>
<meta charset="UTF-8">
<title>
关于文档元素测试
</title>
<style>
 
#father{
 
    width:200px;
    display:flex;
    flex-direction:row;
    flex-wrap:wrap;
    align-content:center;
    height:200px;
    background-color:grey;
}
.son1{
    
    height:30px;
    width:100px;
    background-color:orange;
}
 
.son2{
    
    height:30px;
    width:100px;
    background-color:red;
}
 
.son3{
    height:30px;
    width:100px;
    background-color:#08a9b5;
}
 
 
.son4{
    height:30px;
    width:100px;
    background-color:#9ad1c3;
}
 
.son5{
    
    height:30px;
    width:100px;
    background-color:rgb(21,123,126);
}
</style>
</head>
<body>
 
<div id="father">
    <div class="son1">q</div>
    <div class="son2">w</div>
    <div class="son3">e</div>
    <div class="son4">e</div>
    <div class="son5">e</div>
</div>
 
</body>
</html>
View Code

flex布局换行空白间隙之align-content

参考:https://blog.csdn.net/txfyteen/article/details/82663029

原文地址:https://www.cnblogs.com/XJT2018/p/10642859.html