flex弹性布局笔记

Flex 起步

核心概念

主轴设置

简单理解为:元素的默认添加方向所在的轴,即为主轴

侧轴设置

与主轴交叉的那个轴被称为侧轴

 

弹性布局实现过程

语法:

display: flex;

在需要设置为弹性盒子的DIV元素上添加 display 属性即可,父元素设置为弹性盒子,其直接的子元素具有弹性布局的特性。

示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .box{
                display: flex;
            }
            .item{
                width: 100px;
                height: 100px;
                background-color: red;
                margin: 10px;
            }
        </style>
    </head>
    <body>
        <div class="box">
            <div class="item"></div>
            <div class="item"></div>
            <div class="item"></div>
        </div>
    </body>
</html>

演示效果:

 

核心属性

父项属性

1、设置主轴

语法:

flex-direction: row; /* 设置X轴为主轴,子元素从左向右排列,默认 */
flex-direction: row-reverse; /* 设置X轴为主轴,子元素从右向左排列 */
flex-direction: column; /* 设置Y轴为主轴,子元素从上向下排列 */
flex-direction: column-reverse; /* 设置Y轴为主轴,子元素从下向上排列 */

示例1:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .box{
                display: flex;
                flex-direction: row;
            }
            .item{
                width: 100px;
                height: 100px;
                background-color: red;
                margin: 10px;
            }
        </style>
    </head>
    <body>
        <div class="box">
            <div class="item"></div>
            <div class="item"></div>
            <div class="item"></div>
        </div>
    </body>
</html>

演示效果:

示例2:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .box{
                border: 1px solid #000;
                height: 300px;
                display: flex;
                flex-direction: row-reverse; /* 修改 */
            }
            .item{
                width: 100px;
                height: 100px;
                background-color: red;
                margin: 10px;
                font-size: 20px;
            }
        </style>
    </head>
    <body>
        <div class="box">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
        </div>
    </body>
</html>
​

演示效果:

 

示例3:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .box{
                border: 1px solid #000;
                height: 300px;
                display: flex;
                flex-direction: column; /* 修改 */
            }
            .item{
                width: 100px;
                height: 100px;
                background-color: red;
                margin: 10px;
                font-size: 20px;
            }
        </style>
    </head>
    <body>
        <div class="box">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
        </div>
    </body>
</html>
​

演示效果:

 

示例4:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .box{
                border: 1px solid #000;
                height: 300px;
                display: flex;
                flex-direction: column-reverse; /* 修改 */
            }
            .item{
                width: 100px;
                height: 100px;
                background-color: red;
                margin: 10px;
                font-size: 20px;
            }
        </style>
    </head>
    <body>
        <div class="box">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
        </div>
    </body>
</html>
​

演示效果:

2、换行属性

语法:

flex-wrap: wrap; /* 设置换行 */
flex-wrap: nowrap; /* 设置不换行,默认 */

示例1:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .box{
                border: 1px solid #000;
                height: 300px;
                width: 300px;
                display: flex;
                flex-direction: row; /* 设置主轴 */
                flex-wrap: nowrap; /* 不换行,默认 */
            }
            .item{
                width: 100px;
                height: 100px;
                background-color: red;
                margin: 10px;
                font-size: 20px;
            }
        </style>
    </head>
    <body>
        <div class="box">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
        </div>
    </body>
</html>
​

演示效果:

 

示例2:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .box{
                border: 1px solid #000;
                height: 300px;
                width: 300px;
                display: flex;
                flex-direction: row; /* 设置主轴 */
                flex-wrap: wrap; /* 换行 */
            }
            .item{
                width: 100px;
                height: 100px;
                background-color: red;
                margin: 10px;
                font-size: 20px;
            }
        </style>
    </head>
    <body>
        <div class="box">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
        </div>
    </body>
</html>
​

演示效果:

 

3、主轴子元素排列

语法:

justify-content: flex-start; /* 从开始位置对齐 */
justify-content: center; /* 居中对齐 */
justify-content: flex-end; /* 从结束位置对齐 */
justify-content: space-evenly; /* 平分,完全平分 */
justify-content: space-around; /* 平分,元素外边距值相等 */
justify-content: space-between; /* 平分,两边贴边,剩下空间平分 */

 

平分示例1:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .box{
                border: 1px solid #000;
                height: 300px;
                display: flex;
                justify-content: space-evenly; /* 修改 */
            }
            .item{
                width: 100px;
                height: 100px;
                background-color: red;
                margin: 10px;
                font-size: 20px;
            }
        </style>
    </head>
    <body>
        <div class="box">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
        </div>
    </body>
</html>
​

演示效果:

 

平分示例2:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .box{
                border: 1px solid #000;
                height: 300px;
                display: flex;
                justify-content: space-around; /* 修改 */
            }
            .item{
                width: 100px;
                height: 100px;
                background-color: red;
                margin: 10px;
                font-size: 20px;
            }
        </style>
    </head>
    <body>
        <div class="box">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
            <div class="item">4</div>
        </div>
    </body>
</html>
​

演示效果:

 

平分示例3:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .box{
                border: 1px solid #000;
                height: 300px;
                display: flex;
                justify-content: space-between; /* 修改 */
            }
            .item{
                width: 100px;
                height: 100px;
                background-color: red;
                margin: 10px;
                font-size: 20px;
            }
        </style>
    </head>
    <body>
        <div class="box">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
            <div class="item">4</div>
        </div>
    </body>
</html>
​

演示效果:

 

4、侧轴子元素排列

设置子元素排列分为单行和多行两个属性:

/* 单行 */
align-items: flex-start;
/* 多行 */
align-content: flex-start;

语法:

/* 单行 */
align-items: flex-start; /* 从开始位置对齐 */
align-items: center; /* 居中对齐 */
align-items: flex-end; /* 从结束位置对齐 */
​
/* 多行 */
align-content: flex-start; /* 从开始位置对齐 */
align-content: flex-end; /* 从结束位置对齐 */
align-content: center; /* 居中对齐 */
align-content: space-around; /* 平分,元素的外边距值相等 */
align-content: space-between; /* 平分,两边贴边,平分剩余空间 */

 

平分示例1:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .box{
                border: 1px solid #000;
                height: 700px;
                width: 300px;
                display: flex;
                flex-wrap: wrap;
                /* 多行 */
                align-content: space-around; /* 修改 */
            }
            .item{
                width: 100px;
                height: 100px;
                background-color: red;
                margin: 10px;
                font-size: 20px;
            }
        </style>
    </head>
    <body>
        <div class="box">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
            <div class="item">4</div>
            <div class="item">4</div>
            <div class="item">4</div>
        </div>
    </body>
</html>
​

演示效果

 

平分示例2:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .box{
                border: 1px solid #000;
                height: 700px;
                width: 300px;
                display: flex;
                flex-wrap: wrap;
                /* 多行 */
                align-content: space-between; /* 修改 */
            }
            .item{
                width: 100px;
                height: 100px;
                background-color: red;
                margin: 10px;
                font-size: 20px;
            }
        </style>
    </head>
    <body>
        <div class="box">
            <div class="item">1</div>
            <div class="item">2</div>
            <div class="item">3</div>
            <div class="item">4</div>
            <div class="item">4</div>
            <div class="item">4</div>
        </div>
    </body>
</html>
​

演示效果

 

子项属性

子项属性是将属性定义在弹性盒子内的直接子元素上。

语法:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title></title>
        <style type="text/css">
            .box{
                display: flex;
            }
            .item{
                flex: 1; /* 设置在item中的为子项属性 */
            }
        </style>
    </head>
    <body>
        <div class="box">
            <div class="item"></div>
        </div>
    </body>
</html>
​

 

1、元素的占比

语法:

.item{
    flex: 1; /* 值为数字类型,值越大占比越大,可以为小数 */
}

 

示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .box{
                border: 1px solid #000;
                height: 700px;
                display: flex;
                justify-content: space-around;
            }
            .item{
                width: 100px;
                height: 100px;
                background-color: red;
                margin: 10px;
                font-size: 20px;
            }
            #a{
                flex: 1;
            }
            #b{
                flex: 2;
            }
            #c{
                flex: 3;
            }
            #d{
                flex: 4;
            }
        </style>
    </head>
    <body>
        <div class="box">
            <div class="item" id="a">1</div>
            <div class="item" id="b">2</div>
            <div class="item" id="c">3</div>
            <div class="item" id="d">4</div>
        </div>
    </body>
</html>
​

演示效果:

 

2、排序属性

语法:

.item{
    order: 0; /* 值为数字类型,默认为0,值越大越靠后,可以使用负数 */
}

示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .box{
                border: 1px solid #000;
                height: 700px;
                display: flex;
                justify-content: space-around;
            }
            .item{
                width: 100px;
                height: 100px;
                background-color: red;
                margin: 10px;
                font-size: 20px;
            }
            #a{
                order: 1;
            }
            #b{
                order: 3;
            }
            #c{
            }
            #d{
                order: 2;
            }
        </style>
    </head>
    <body>
        <div class="box">
            <div class="item" id="a">1</div>
            <div class="item" id="b">2</div>
            <div class="item" id="c">3</div>
            <div class="item" id="d">4</div>
        </div>
    </body>
</html>
​

演示效果:

 

3、自身侧轴排列方式

语法:

align-self: flex-start; /* 开始 */
align-self: center; /* 居中 */
align-self: flex-end; /* 结束 */
align-items: stretch; /* 拉伸 */

 

示例:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title></title>
        <style type="text/css">
            .box{
                border: 1px solid #000;
                height: 700px;
                display: flex;
                justify-content: space-around;
            }
            .item{
                width: 100px;
                height: 100px;
                background-color: red;
                margin: 10px;
                font-size: 20px;
            }
            #a{
                align-self: center; /* 居中 */
            }
        </style>
    </head>
    <body>
        <div class="box">
            <div class="item" id="a">1</div>
            <div class="item" id="b">2</div>
            <div class="item" id="c">3</div>
            <div class="item" id="d">4</div>
        </div>
    </body>
</html>
​

演示效果:

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值