flex:1详解

flex:1是什么意思

首先介绍一下 flex
MDN中是这么定义的

CSS属性 flex 规定了弹性元素如何伸长或缩短以适应flex容器中的可用空间。这是一个简写属性,用来设置 flex-grow, flex-shrink 与 flex-basis。

flex-grow

CSS flex-grow 属性定义弹性盒子项(flex item)的拉伸因子。

flex-grow
用法是这个样子的

flex-grow: 1;
flex-grow: inherit;

下面来举个栗子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>flex:1</title>
    <style>
        .box {
            height: 200px;
            display: flex;
        }
        #box1 {
            background-color: pink;
            flex-grow: 1;
        }
        #box2 {
            background-color: yellow;
            flex-grow: 3;
        }
    </style>
</head>
<body>
    <div class="box">
        <div id="box1">box1</div>
        <div id="box2">box2</div>
    </div>
</body>
</html>

一个大盒子,box,里面两个小盒子,box1、box2,大盒子有个高200px,再设置display: flex;小盒子设置不同的flex-grow,代表一份和三份。
效果如图
在这里插入图片描述

flex-shrink

CSS flex-shrink 属性指定了 flex 元素的收缩规则。flex 元素仅在默认宽度之和大于容器的时候才会发生收缩,其收缩的大小是依据 flex-shrink 的值。

举个栗子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            width: 500px;
            display: flex;
        }
        #box1 {
            width: 400px;
            background-color: #c5c5c5;
            flex-shrink: 1;
        }
        #box2 {
            width: 400px;
            background-color: khaki;
            flex-shrink: 3;
        }
    </style>
</head>
<body>
    <div class="box">
        <div id="box1">box1</div>
        <div id="box2">box2</div>
    </div>
</body>
</html>

400px+400px>500px,收缩后盒子宽的比例为3:1
在这里插入图片描述
在这里插入图片描述

flex-basis

CSS 属性 flex-basis 指定了 flex 元素在主轴方向上的初始大小。如果不使用 box-sizing 改变盒模型的话,那么这个属性就决定了 flex 元素的内容盒(content-box)的尺寸。
<‘width’>
width 值可以是 <‘length’>; 该值也可以是一个相对于其父弹性盒容器主轴尺寸的百分数 。负值是不被允许的。默认为 auto。
content
基于 flex 的元素的内容自动调整大小。

举个栗子

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            height: 200px;
            display: flex;
        }
        #box1 {
            background-color: lightcoral;
            flex-basis: 80%;
        }
        #box2 {
            background-color: lightpink;
            flex-basis: 100px;
        }
    </style>

</head>
<body>
    <div class="box">
        <div id="box1">box1</div>
        <div id="box2">box2</div>
    </div>
</body>
</html>

主轴宽982px,982px*80%=788.8px
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
最后

flex:1

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
    <style>
        .box {
            height: 200px;
            display: flex;
        }
        #box1 {
            background-color: lightpink;
            flex: 1;
        }
        #box2 {
            background-color: lightsalmon;
            flex: 1;
        }
        #box3 {
            background-color: lightslategray;
            flex: 3;
        }
    </style>
</head>
<body>
    <div class="box">
        <div id="box1">box1</div>
        <div id="box2">box2</div>
        <div id="box3">box3</div>
    </div>
</body>
</html>

在这里插入图片描述
页面自适应,伸缩也方便
在这里插入图片描述

### CSS `display: flex` 属性详解 #### 定义与基本概念 `display: flex` 是一种用于创建灵活布局的方式,能够更方便地设计响应式的网页结构。当容器设置此属性后,其子元素会自动成为弹性盒子模型中的项目,并遵循一系列特定的行为规则[^1]。 #### 基本语法 要使某个HTML元素作为Flexbox容器,只需简单地将其样式表中的`display`属性设为`flex`: ```css .container { display: flex; } ``` 这行简单的声明即可开启强大的布局能力。 #### 主轴与交叉轴的概念 在理解具体属性之前,先来认识两个重要术语——主轴(main axis) 和 交叉轴(cross axis),它们定义了项目的排列方向。默认情况下: - **主轴**是从左到右; - **交叉轴**则是从上至下; 可以通过改变某些属性来自由调整这两个维度的方向。 #### 关键属性介绍 ##### Flex Container Properties (作用于父级) ###### flex-direction 决定主轴的方向以及项目的排列顺序,默认值为row即横向排布。其他可能取值包括column(纵向)、row-reverse(反向横排)和column-reverse(反向纵排)。例如: ```css .container { flex-direction: row | column | row-reverse | column-reverse; } ``` ###### justify-content 控制沿主轴上的空间分配方式,影响的是每项之间的间距分布情况。常见选项有start、end、center、space-between、space-around等。比如让所有子元素居中显示可以这样写: ```css .container { justify-content: center; } ``` ###### align-items 设定侧轴上的对齐模式,适用于整个容器内的所有项目。可用参数如stretch(拉伸填充剩余空间),flex-start(顶部对齐),flex-end(底部对齐),center(垂直居中)等等。如果希望所有的孩子都位于中间位置则应采用下面的形式: ```css .container { align-items: center; } ``` ##### Flex Item Properties (作用于子级) ###### order 指定项目的排序次序,默认数值为0,越小越靠前。通过修改这个值可以让不同级别的组件按照需求重新排序而不必改动DOM树的位置关系。 ###### flex-grow 决定了该项目在其所在行内未被占用的空间所占的比例大小。接受任意非负实数输入,缺省状态下等于零意味着不增长也不收缩。 ###### flex-shrink 规定缩小因子,在总宽度不足时按比例减少尺寸以适应容器边界。同样是一个正整型常量,默认也是0表示不允许压缩。 ###### flex-basis 初始长度或宽高基数,通常配合百分比单位一起使用以便更好地实现自适应效果。 ###### align-self 允许单独配置某一项相对于兄弟节点的不同对齐策略,从而覆盖掉全局性的`align-items`设定。有效枚举列表包含auto、flex-start、flex-end、center、baseline、stretch六种情形之一[^2]。 #### 实际案例解析 考虑这样一个例子:构建一个具有左侧固定栏加右侧动态变化区域的页面框架。这就可以利用上述提到的知识点轻松搞定! ```html <div class="main-content"> <div class="left-content"></div> <div class="right-content"></div> </div> ``` 对应的CSS代码片段如下所示: ```css .main-content { width: 100%; height: 100%; background-color: #72f884; display: flex; /* 启动弹性盒 */ } .left-content { box-sizing: border-box; width: 200px; height: 100%; background-color: rgb(238, 119, 34); } .right-content { box-sizing: border-box; flex: 1; height: 100%; background-color: rgb(68, 133, 255); } ``` 这段样例展示了如何借助`display: flex`快速搭建起两列式布局方案,其中左边部分保持定宽而右边随窗口缩放自动调节自身范围。
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值