关于flex布局

1.flex初探

简单示例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .menu {
            border: 1px solid red;
            width: 500px;
            display: flex;
        }
        .menu .item{
            width: 45px;
            height: 50px;
            border: 1px solid green;
        }
    </style>
</head>
<body>
<div class='menu'>
    <div class='item'>北京</div>
    <div class='item'>上海</div>
    <div class='item'>深圳</div>
</div>
</body>
</html>

效果图如下,可以看到同样效果比float简单许多:

image

2.flex元素方向

默认flex-direction为row,水平铺满,可修改为column垂直铺满:

.menu {
            border: 1px solid red;
            width: 500px;

            display: flex;
            flex-direction: column; /*主轴=纵向*/
        }
        .menu .item{
            width: 45px;
            height: 50px;
            border: 1px solid green;
        }

效果图如下:

image

3.排列方式justify-content属性

整体css:

.menu {
            border: 1px solid red;
            width: 500px;
            display: flex;
            flex-direction: row; /*主轴=横向*/
            justify-content: flex-start; /*默认排列方式*/
        }
        .menu .item{
            width: 45px;
            height: 50px;
            border: 1px solid green;
        }

justify-content: space-between
image
justify-content: space-evenly;
image
justify-content: flex-start;
image
justify-content: flex-end;
image

4.排列方式 align-items属性

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .menu {
            border: 1px solid red;
            width: 500px;
            height: 500px;
            display: flex;
            flex-direction: row; /*主轴=横向*/
            /*justify-content: space-evenly;*/
            justify-content: space-between;
            align-items: center;
            /*align-items: flex-start;*/
            /*align-items: flex-end;*/
        }
        .menu .item{
            width: 45px;
            height: 50px;
            border: 1px solid green;
        }
    </style>
</head>
<body>
<div class='menu'>
    <div class='item'>北京</div>
    <div class='item'>上海</div>
    <div class='item'>深圳</div>
</div>
</body>
</html>

align-item:center显示,align-item值等于flex-start,flex-end属性可自行测试下效果
image

5.换行flex-wrap: wrap;

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .menu {
            border: 1px solid red;
            width: 500px;
            height: 500px;
            display: flex;
            flex-direction: row; /*主轴=横向*/
            justify-content: flex-start;
            align-items: flex-end;/*未指定换行可以控制内容显示位置*/
            flex-wrap: wrap; /*指定该属性后,宽度铺满之后会自动换行,不然只会铺满单行*/
            align-content: flex-start;/*指定换行后,由该属性控制显示位置,个人测试所得,欢迎指正*/
        }
        .menu .item{
            width: 40px;
            height: 50px;
            border: 1px solid green;
        }
    </style>
</head>
<body>
<div class='menu'>
    <div class='item'>北京</div>
    <div class='item'>上海</div>
    <div class='item'>深圳</div>
    <div class='item'>深圳</div>
    <div class='item'>深圳</div>
    <div class='item'>深圳</div>
    <div class='item'>深圳</div>
    <div class='item'>深圳</div>
    <div class='item'>深圳</div>
    <div class='item'>深圳</div>
    <div class='item'>深圳</div>
    <div class='item'>深圳</div>
    <div class='item'>深圳</div>
    <div class='item'>深圳</div>
    <div class='item'>深圳</div>
    <div class='item'>深圳</div>
</div>


</body>
</html>

剩余空间,flex-grow


<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .menu {
            border: 1px solid red;
            width: 500px;
            height: 500px;
            display: flex;
            flex-direction: row; /*主轴=横向*/
            justify-content: flex-start; /*横轴*/
        }
        .menu .item {
            width: 50px;
            height: 50px;
            border: 1px solid green;
        }
    </style>
</head>
<body>
<div class='menu'>
    <div class='item' style="">北京</div>
    <!--制定flex-grow的所有元素占据剩余空间,flex-grow值代表占比,如上海占剩余空间2/3,深圳占1/3-->
    <div class='item' style="flex-grow: 2">上海</div>
    <div class='item' style="flex-grow: 1">深圳</div>
</div>
</body>
</html>

效果如下:
image

案例

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
    <style>
        .course-list {
            display: flex;
            justify-content: space-between;
            flex-wrap: wrap;
        }
        .course-list .item {
            width: 24%;
            height: 100px;
            background-color: skyblue;
            margin-top: 15px;
        }
        /*如果最后一个元素,是第3个,右边距=一个位置 + 所有空白位置/3(有三个空白位置)*/
        .course-list .item:last-child:nth-child(4n - 1) {
            margin-right: calc(24% + 4% / 3);
        }
        .course-list .item:last-child:nth-child(4n - 2) {
            margin-right: calc(48% + 8% / 3);
        }
    </style>
</head>
<body>

<div class="container">
    <div class="course-list">
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
        <div class="item"></div>
    </div>
</div>
</body>
</html>

效果,解释下justiy-content:space-between如果元素数量不一致,但都会两头对齐不美观,需要判断最后一个元素是不是处在第二位、第三位从而设置margin-right确保元素显示对齐:
image

posted @   麦兜顶当当  阅读(1)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示