网格布局

就是用flex:1 将flex容器下面的元素进行等分的划分。

   <style>
        .box1,.box2,.box3{
            display: flex;
            
        }
        .box1 div,.box2 div,.box3 div
        {
            flex:1;
            background-color: palevioletred;
            margin:10px 10px 0px 0px;/*顺时针的方向上右下左*/
            height: 200px;
        }
    </style>
</head>
<body>
    <div class="box1">
        <div class="item1">1/2</div>
        <div class="item2">1/2</div>
    </div>
    <div class="box2">
        <div class="item1">1/3</div>
        <div class="item2">1/3</div>
        <div class="item2">1/3</div>
    </div>
    <div class="box3">
        <div class="item1">1/4</div>
        <div class="item2">1/4</div>
        <div class="item2">1/4</div>
        <div class="item2">1/4</div>
    </div>
    
</body>
</html>

image

Flex百分比布局

使用 flexbox 进行百分比布局是非常常见的一种方法,可以通过设置 flex 容器和 flex 项目的属性来实现。下面是一些常见的 flex 百分比布局技巧:

  1. 设置 flex 容器的宽度为百分比:可以使用 width: 100%; 或 max-width: 100%; 将 flex
    容器的宽度设置为其父元素的宽度,从而使其自适应屏幕大小。
  2. 设置 flex 项目的百分比宽度:可以使用 flex-basis: x%; 将 flex
    项目的宽度设置为相对于其父元素的百分比,这可以让 flex 项目自适应其父元素的宽度。
  3. 设置 flex 项目的 flex-grow 属性:使用 flex-grow 属性可以让 flex
    项目根据其可用空间进行自适应放大,可以使用 flex-grow: 1; 或 flex-grow: x; 将 flex
    项目的放大比例设置为相对于其他项目的百分比。
  4. 设置 flex 项目的 flex-shrink 属性:使用 flex-shrink 属性可以让 flex
    项目根据其可用空间进行自适应缩小,可以使用 flex-shrink: 1; 或 flex-shrink: x; 将 flex
    项目的缩小比例设置为相对于其他项目的百分比。

使用 flex 容器的 justify-content 和 align-items 属性:使用 justify-content 和 align-items 属性可以让 flex 容器中的项目相对于容器进行水平和垂直方向上的自适应布局,可以使用 justify-content: center; 和 align-items: center; 将项目居中显示。

    <style>
        .box1{
            display: flex;

        }
        .item1{
            /* flex-basis: 70%; */
            flex:0 1 70%;
            background-color: violet;
        }
        .item2{
            flex:0 1 30%;
            background-color: yellowgreen;
            /* flex-basis: 30%; */
        }
        .box2{
            display: flex;
            flex-wrap: wrap;
            justify-content: space-between;
        }
        .box2 div{
            flex: 0 0 33%;
            background-color: cadetblue;
            margin-bottom: 10px;
        }
    </style>
</head>
<body>
    <div class="box1">
        <div class="item1">70%</div>
        <div class="item2">30%</div>
    </div>
    <div class="box2">
        <div class="item3">33</div>
        <div class="item4">33</div>
        <div class="item5">33</div>
        <div class="item5">33</div>
        <div class="item5">33</div>
        <div class="item5">33</div>
    </div>
    
</body>

image

圣杯布局

页面分为三个部分 头部中间{左边部分(固定) 中间宽度(弹性) 右边宽度(固定) } 底部

   <style>
        *{
            padding: 0;
            margin:0
        }
        .content{
            display: flex;
            flex-direction: column;
            height: 100vh;
        }
        .header,.footer{
            height: 50px;
            background-color: bisque;
        }
        .main{
            flex:1;
            display: flex;
        }
        .left,.right{
            flex-basis: 200px;
            background-color: antiquewhite;
        }
        .center{
            flex:1;
        }
    </style>
</head>
<body>
    <div class="content">
        <div class="header">头部</div>
        <div class="main">
            <div class="left">1</div>
            <div class="center">2</div>
            <div class="left">3</div>
        </div>
        <div class="footer">底部</div>
    </div>
    
</body>
</html>

image

Flex流式布局

不管放多少个(一行四个)后都会自动换行下一个。
image

    <style>
       .box{
        display: flex;
         width: 200px;
         height: 200px;
         background-color: beige;
         flex-wrap: wrap;
         align-content: flex-start;
       }
       .box div{
        background-color: blueviolet;
        border:2px solid black;
        flex:0 1 25%;
        height: 50px;
        /* 默认情况下,元素的宽度和高度只包括内容区域的尺寸,
        而当设置 box-sizing: border-box 时,
        元素的宽度和高度包括内容区域、内边距和边框的尺寸。
        这里这样做的好处是不用考虑边框宽度问题进行布局
         */
        box-sizing: border-box;
    }
    </style>
</head>
<body>
    <div class="box">
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
        <div></div>
    </div>
    
</body>