我的编程空间,编程开发者的网络收藏夹
学习永远不晚

三个flex属性对元素的影响是什么

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

三个flex属性对元素的影响是什么

本篇内容主要讲解“三个flex属性对元素的影响是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“三个flex属性对元素的影响是什么”吧!

首先我们需要了解,flex 是三个属性 flex-growflex-shrinkflex-basis的简写,可以使用一个、两个、或者三个值指定 flex 属性。具体语法可以参考MDN-flex

接下来我们逐一拆解这三个属性对元素的影响

flex-basis

flex-basis 定义了空间分配发生之前初始化 flex 子元素的尺寸,属性默认值 auto; flex 子元素未伸张和收缩之前,它的大小是多少。

如果 flex-basis 设置为 auto , 浏览器会先检查 flex 子元素的主尺寸是否设置了 flex 子元素的初始值。

比如说你已经给你的 flex 子元素设置了 150px 的宽,则 150px 就是这个 flex 子元素的 flex-basis;如果没有设置,则 auto 会解析为其内容的大小。这个例子中,给第一个元素设置宽度150px,第二、三个元素不设置宽度。

:first-child {
  width: 150px;
}

效果如下:

三个flex属性对元素的影响是什么

如果你想 flexbox 完全忽略 flex 子元素的尺寸就设置 flex-basis 为 0。这样就算元素一设置了宽度,它最终的宽度也是内容宽度。

三个flex属性对元素的影响是什么

正负自由空间

在介绍剩下两个属性前先看两个概念 positive free space 正向自由空间和 negative free space反向自由空间:

  • 正向自由空间

    比如说,现在有 500px 宽的 flex 容器,flex-direction 属性值为 row, 三个 100px 宽的 flex 子元素, 那么没有被填充的 200px 的 就是正向自由空间(positive free space)。

三个flex属性对元素的影响是什么

  • 反向自由空间

    当子元素的宽度总和大于容器宽度时,溢出的尺寸100px就是反向自由空间。

三个flex属性对元素的影响是什么

那么用什么属性分配正负自由空间呢?

flex-grow

  • flex-grow 默认值 0,若被赋值为一个正整数, flex 元素会以 flex-basis 为基础,沿主轴方向增长尺寸,并占据可用空间。flex-grow 按比例分配增长空间。

初始状态:我们给三个元素都设定宽度,并且总和不大于主轴宽度

.flex-grow-father {
  width: 500px;
  div:nth-child(1) {
    width: 50px;
  }
  div:nth-child(2) {
    width: 100px;
  }
  div:nth-child(3) {
    width: 150px;
  }
}

三个flex属性对元素的影响是什么

增加的宽度计算方法:假设元素的 flex-grow 值为 x,正向自由空间宽度为l,则每个元素增加的宽度=xx的总和l\frac{x}{x的总和}*lx的总和x∗l,元素最终宽度 = 元素初始宽度+增加的宽度元素初始宽度 + 增加的宽度元素初始宽度+增加的宽度;

  • 相同比例增长:当给每个子元素的都设定相同的 flex-grow 值,每个元素就会增长相同的宽度


.with-same-flex-grow {
  * {
    flex-grow: 1;
  }
}

效果如下:

三个flex属性对元素的影响是什么

本例中第一个元素宽度的计算 11+1+1200+50=116.67px\frac{1}{1+1+1}*200 + 50 = 116.67px1+1+11∗200+50=116.67px;

第二个元素宽度宽度计算 11+1+1200+100=166.67px\frac{1}{1+1+1}*200 + 100 = 166.67px1+1+11∗200+100=166.67px;

第三个同理为216.67px216.67px216.67px

  • 不同比例增长:给每个子元素的都设定不同的 flex-grow 值

.with-different-flex-grow {
  div:nth-child(1) {
    flex-grow: 2;
  }
  div:nth-child(2) {
    flex-grow: 1;
  }
  div:nth-child(3) {
    flex-grow: 1;
  }
}

效果如下:

三个flex属性对元素的影响是什么

本例中第一个元素宽度的计算22+1+1200+50=150px\frac{2}{2+1+1}*200 + 50 = 150px2+1+12∗200+50=150px;

第二个元素宽度的计算12+1+1200+100=150px\frac{1}{2+1+1}*200 + 100 = 150px2+1+11∗200+100=150px;

第三个同理是200px200px200px

  • 如果想让开始时尺寸不同的元素内容宽度相等(平分容器宽度),可以将 flex-basis 设置为 0(完全忽略 flex 子元素的尺寸) flex-grow 为 1(等比例分配)

.average {
  * {
    
    flex-basis: 0;
    flex-grow: 1;
  }
}

效果如下:

三个flex属性对元素的影响是什么

flex-shrink

flex-shrink 属性指定了 flex 元素的缩小值,默认值为 1; 它确定在分配 negative free space 时,flex 子元素相对于 flex 容器中其余 flex 子元素收缩的程度。默认值 1。用于减少盒子空间使盒子适应容器而不溢出(为了避免 border 干扰去掉边框)

我们给三个元素都设定宽度,并且总和大于主轴宽度;这里我们将元素的flex-shrink值设置为 0 (元素宽度不变,不需要吸收溢出的宽度),目的是观察一下反向自由空间。

.flex-shrink-wrapper {
  display: flex;
  div:nth-child(1) {
    width: 100px;
    background: gold;
  }
  div:nth-child(2) {
    width: 200px;
    background: tan;
  }
  div:nth-child(3) {
    width: 300px;
    background: gold;
  }
}
.zero {
  * {
    flex-shrink: 0;
  }
}

三个flex属性对元素的影响是什么

吸收的宽度计算:假设每个 flex-shrink 的值为 xnx_nxn,元素的初始宽度为 lnl_nln,反向自由空间为LLL那么每个元素吸收的宽度为: xnlnx1l1+...+xnlnL\frac{x_n*l_n}{x_1*l_1+...+x_n*l_n}*Lx1∗l1+...+xn∗lnxn∗ln∗L

  • 给子元素相同的 flex-shrink 值,这里以默认值 1 为例

.with-same-flex-shrink {
  * {
    flex-shrink: 1;
  }
}

三个flex属性对元素的影响是什么

这时第一个元素的吸收宽度为:11001100+1200+1300100=16.67px\frac{1*100}{1*100+1*200+1*300}*100 = 16.67px1∗100+1∗200+1∗3001∗100∗100=16.67px,最终元素宽度为 10016.67=83.37px100-16.67=83.37px100−16.67=83.37px

这时第一个元素的吸收宽度为:12001100+1200+1300100=33.33px\frac{1*200}{1*100+1*200+1*300}*100 = 33.33px1∗100+1∗200+1∗3001∗200∗100=33.33px,最终元素宽度为 20033.33=166.67px200-33.33=166.67px200−33.33=166.67px

这时第一个元素的吸收宽度为:13001100+1200+1300100=50px\frac{1*300}{1*100+1*200+1*300}*100 = 50px1∗100+1∗200+1∗3001∗300∗100=50px,最终元素宽度为 30050=250px300-50=250px300−50=250px

  • 给子元素不同的 flex-shrink 值

.with-different-flex-shrink {
  div:nth-child(1) {
    flex-shrink: 1;
  }
  div:nth-child(2) {
    flex-shrink: 2;
  }
  div:nth-child(3) {
    flex-shrink: 0;
  }
}

三个flex属性对元素的影响是什么

这时第一个元素的吸收宽度为: 11001100+2200100=20px\frac{1*100}{1*100+2*200}*100 = 20px1∗100+2∗2001∗100∗100=20px,最终元素宽度为 10020=80px100-20=80px100−20=80px

这时第二个元素的吸收宽度为:22001100+2200100=80px\frac{2*200}{1*100+2*200}*100 = 80px1∗100+2∗2002∗200∗100=80px,最终元素宽度为 20080=120px200-80=120px200−80=120px

这时第三个元素的 flex-shrink 值为 0,不吸收宽度,最终元素宽度即为元素本身的宽度 300px300px300px

flex 的简写值

一般我们很少见上述属性单独使用,都是用flex这一个简写属性来表述元素的伸缩。

Flex 简写形式允许你把三个数值按这个顺序书写 flex-growflex-shrinkflex-basis。以下是常见的几种取值:

  • flex: initial 的扩展为 0 1 auto (不可放大、可缩小、大小与容器元素大小一致)

  • flex: auto 的扩展为 1 1 auto (可放大、可缩小、大小与容器元素大小一致)

  • flex: none 的扩展为 0 0 auto (不可放大、不可缩小、大小与容器元素大小一致)

  • flex: <positive-number>的扩展为 <positive-number> 1 0

flex: <positive-number>的应用:

两栏布局
.two-grid-wrapper {
  display: flex;
  margin-top: 20px;
  height: 200px;
  .left {
    width: 200px;
    background-color: gold;
  }
  .right {
    flex: 1;
    background-color: tan;
  }
}

效果如下:左侧宽度不变,右侧自适应

三个flex属性对元素的影响是什么

三栏布局
.three-grid-wrapper {
  display: flex;
  margin-top: 20px;
  height: 200px;
  .left {
    width: 200px;
    background-color: gold;
  }
  .right {
    width: 200px;
    background-color: gold;
  }
  .center {
    flex: 1;
    background-color: tan;
  }
}

效果如下:左右宽度不变,中间自适应

三个flex属性对元素的影响是什么

PS.flex 子元素没有 positive free space 就不会增长;没有 negative free space 就不会缩小。

到此,相信大家对“三个flex属性对元素的影响是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

三个flex属性对元素的影响是什么

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

C++ 元编程对代码性能的影响:正面和负面因素是什么?

元编程对 c++++ 代码性能的影响既有正面也有负面影响:正面影响:避免运行时开销提高代码重用更好的类型安全负面影响:编译时间过长代码可读性下降性能损失元编程对 C++ 代码性能的影响元编程是一项强大的 C++ 技术,它允许程序在编译时操
C++ 元编程对代码性能的影响:正面和负面因素是什么?
2024-05-21

友元函数对类的继承性有什么影响?

友元函数的继承性当子类继承具有友元函数的类时:子类无法继承友元函数。父类的友元函数可以访问子类的私有成员。子类的友元函数无法访问父类的私有成员。友元函数对类的继承性影响前言友元函数是一种特殊的 C++ 函数,它可以在类的作用域之外访问该
友元函数对类的继承性有什么影响?
2024-04-17

友元函数对类的封装性有什么影响?

友元函数对类的封装性有影响,包括降低封装性、增加攻击面和提高灵活性。它可以访问类的私有数据,如示例中定义为 person 类的友元的 printperson 函数可以访问 person 类的私有数据成员 name 和 age。程序员需权衡风
友元函数对类的封装性有什么影响?
2024-04-17

影响服务器稳定性的因素是什么

影响服务器稳定性的因素有很多,其中一些主要的因素包括:硬件故障:服务器硬件故障是最常见的导致服务器不稳定的原因,包括CPU、内存、硬盘等硬件组件的故障。软件问题:软件问题包括操作系统的错误配置、应用程序的bug、以及安全漏洞等,都可能导致服
影响服务器稳定性的因素是什么
2024-04-26

PHP 数组转对象对性能的影响是什么?

在 php 中,数组到对象的转换会对性能产生影响,主要受数组大小、复杂性、对象类等因素影响。为了优化性能,可以考虑使用自定义迭代器、避免不必要的转换、批量转换数组等技巧。PHP中数组转对象的性能影响在PHP中,数组和对象是两种常用的数据结
PHP 数组转对象对性能的影响是什么?
2024-04-30

.net core抛异常对性能的影响是什么

今天小编给大家分享一下.net core抛异常对性能的影响是什么的相关知识点,内容详细,逻辑清晰,相信大部分人都还太了解这方面的知识,所以分享这篇文章给大家参考一下,希望大家阅读完这篇文章后有所收获,下面我们一起来了解一下吧。一、前言疑问:
2023-07-02

影响服务器租用稳定性的因素是什么

影响服务器租用稳定性的因素包括以下几点:服务器硬件质量:服务器的硬件质量直接影响其稳定性,包括CPU、内存、硬盘、网卡等硬件设备的性能和稳定性。数据中心环境:服务器所在的数据中心环境也会影响其稳定性,如温度、湿度、供电质量等因素都会对服务器
影响服务器租用稳定性的因素是什么
2024-04-24

影响服务器稳定性的八大因素分别是什么

这篇文章将为大家详细讲解有关影响服务器稳定性的八大因素分别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。 个人站长不使用香港虚拟主机的主要原因在于香港虚拟主机的打开速度慢。其实网站打开
2023-06-07

PHP 函数新特性对现有代码的影响是什么?

php 7.0 中引入的函数新特性对现有代码的影响:返回类型声明确保函数返回预期类型,提高安全性。标量类型提示帮助检测类型不匹配错误,減少错误。返回类型声明避免函数体内重复类型声明,減少冗余。类型提示为外部 api 和消费者提供更好的文档信
PHP 函数新特性对现有代码的影响是什么?
2024-05-04

Golang 函数文档对代码可维护性的影响是什么?

go 函数文档通过提供函数的预期行为和使用方式的描述来影响可维护性,从而:降低理解成本,让开发人员快速了解函数的使用方式。减少错误,防止滥用函数或传递错误的参数。方便重构,提供修改函数实现所需的信息。提高团队协作,确保成员对函数的使用和行为
Golang 函数文档对代码可维护性的影响是什么?
2024-05-06

编程热搜

目录