11.2 flex布局的基本概念

1、flex容器与flex子元素

(1)基础示例

img

示例代码

<div id="div1" style="display: flex;">
    <div id="div2">第1列</div>
    <div id="div3">第2列</div>
    <div id="div4">第3列</div>
</div>

div1是flex容器,div2、div3、div4是flex子元素。设置display: flex的元素称为flex容器flex container,flex容器的子元素称为flex项flex item、列、flex子元素。


(2)flex子元素内嵌套复杂布局

示例代码

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>小步教程</title>

    <style>
        *{
            box-sizing: border-box;
        }
        .parent{
            display: flex;
            border: 1px solid #666;
        }

        [class^="col"]{
            width: 150px;
            /* flex: 1; */
        }

        .col1{
            background-color: #0aaa76;
        }

        .col2{
            background-color: #4aa6fc;
        }

        .col3{
            background-color: #ed7d31;
            height: 80px;
        }
    </style>
</head>
<body>
    <div class="parent">
        <div class="col1">
            <div>第1列</div>
            <div>小步教程</div>
        </div>
        <div class="col2">
            <div>第2列</div>
            <div>xiaobuteach.com</div>
        </div>
        <div class="col3">
            <div>第3列</div>
            <div>每列可继续加入复杂布局</div>
        </div>
    </div>
</body>
</html>

[class^="col"]表示匹配class属性名以col开头的元素。这里在每列仅加入两个div,还能继续复杂布局内容。运行效果

img


2、弹性

flex子元素默认会收缩不会伸长,可以分别设置。

示例代码:各列添加flex: 1设置同时支持伸长与收缩。

        [class^="col"]{
            width: 100px;
            flex: 1;
        }

运行效果

img

第1列宽度原始设置150px,现已伸长至170px。

弹性的定义。当调整flex容器的宽度变大(这里通过调整窗口大小),各列显示宽度会在原始宽度(width或flex-basis属性)基础上自动伸长。同理,调整flex容器宽度变小,各列宽度自动收缩。

img

flex容器宽度太小,各列相应收缩,第3列在收缩时出现溢出。


3、flex布局设计特点

(1)flex容器统一控制子元素。大多数flex专用属性设置在flex容器,统一控制子元素;子元素仅能设置少数flex专用属性。float属于在每个子元素设置。

(2)支持弹性。提供列的伸长与收缩。

(3)多排列方向支持与响应式支持。子元素order属性配合支持响应式需求。

(4)提供各种对齐与排列。包括水平方向、垂直方向、多行场景。