分享更有价值
被信任是一种快乐

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

文章页正文上

本篇内容主要讲解“三个flex属性对元素的影响是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“三个flex属性对元素的影响是什么”吧!首先我们需要了解,flex 是三个属性 flex-growflex-shrinkflex-basis的简写,可以使用一个、两个、或者三个值指定 flex 属性。具体语法可以参考MDN-flex接下来我们逐一拆解这三个属性对元素的影响flex-basis 定义了空间分配发生之前初始化 flex 子元素的尺寸,属性默认值 auto; flex 子元素未伸张和收缩之前,它的大小是多少。如果 flex-basis 设置为 auto , 浏览器会先检查 flex 子元素的主尺寸是否设置了 flex 子元素的初始值。比如说你已经给你的 flex 子元素设置了 150px 的宽,则 150px 就是这个 flex 子元素的 flex-basis;如果没有设置,则 auto 会解析为其内容的大小。这个例子中,给第一个元素设置宽度15免费云主机、域名0px,第二、三个元素不设置宽度。效果如下:如果你想 flexbox 完全忽略 flex 子元素的尺寸就设置 flex-basis 为 0。这样就算元素一设置了宽度,它最终的宽度也是内容宽度。在介绍剩下两个属性前先看两个概念 positive free space 正向自由空间和 negative free space反向自由空间:正向自由空间比如说,现在有 500px 宽的 flex 容器,flex-direction 属性值为 row, 三个 100px 宽的 flex 子元素, 那么没有被填充的 200px 的 就是正向自由空间(positive free space)。反向自由空间当子元素的宽度总和大于容器宽度时,溢出的尺寸100px就是反向自由空间。那么用什么属性分配正负自由空间呢?flex-grow 默认值 0,若被赋值为一个正整数, flex 元素会以 flex-basis 为基础,沿主轴方向增长尺寸,并占据可用空间。flex-grow 按比例分配增长空间。初始状态:我们给三个元素都设定宽度,并且总和不大于主轴宽度增加的宽度计算方法:假设元素的 flex-grow 值为 x,正向自由空间宽度为l,则每个元素增加的宽度=xx的总和lfrac{x}{x的总和}*l,元素最终宽度 = 元素初始宽度+增加的宽度元素初始宽度 + 增加的宽度;相同比例增长:当给每个子元素的都设定相同的 flex-grow 值,每个元素就会增长相同的宽度
效果如下:本例中第一个元素宽度的计算 11+1+1200+50=116.67pxfrac{1}{1+1+1}*200 + 50 = 116.67px;第二个元素宽度宽度计算 11+1+1200+100=166.67pxfrac{1}{1+1+1}*200 + 100 = 166.67px;第三个同理为216.67px216.67px不同比例增长:给每个子元素的都设定不同的 flex-grow 值效果如下:本例中第一个元素宽度的计算22+1+1200+50=150pxfrac{2}{2+1+1}*200 + 50 = 150px;第二个元素宽度的计算12+1+1200+100=150pxfrac{1}{2+1+1}*200 + 100 = 150px;第三个同理是200px200px如果想让开始时尺寸不同的元素内容宽度相等(平分容器宽度),可以将 flex-basis 设置为 0(完全忽略 flex 子元素的尺寸) flex-grow 为 1(等比例分配)效果如下:flex-shrink 属性指定了 flex 元素的缩小值,默认值为 1; 它确定在分配 negative free space 时,flex 子元素相对于 flex 容器中其余 flex 子元素收缩的程度。默认值 1。用于减少盒子空间使盒子适应容器而不溢出(为了避免 border 干扰去掉边框)我们给三个元素都设定宽度,并且总和大于主轴宽度;这里我们将元素的flex-shrink值设置为 0 (元素宽度不变,不需要吸收溢出的宽度),目的是观察一下反向自由空间。吸收的宽度计算:假设每个 flex-shrink 的值为 xnx_n,元素的初始宽度为 lnl_n,反向自由空间为LL那么每个元素吸收的宽度为: xnlnx1l1+...+xnlnLfrac{x_n*l_n}{x_1*l_1+…+x_n*l_n}*L给子元素相同的 flex-shrink 值,这里以默认值 1 为例这时第一个元素的吸收宽度为:11001100+1200+1300100=16.67pxfrac{1*100}{1*100+1*200+1*300}*100 = 16.67px,最终元素宽度为 10016.67=83.37px100-16.67=83.37px这时第一个元素的吸收宽度为:12001100+1200+1300100=33.33pxfrac{1*200}{1*100+1*200+1*300}*100 = 33.33px,最终元素宽度为 20033.33=166.67px200-33.33=166.67px这时第一个元素的吸收宽度为:13001100+1200+1300100=50pxfrac{1*300}{1*100+1*200+1*300}*100 = 50px,最终元素宽度为 30050=250px300-50=250px给子元素不同的 flex-shrink 值这时第一个元素的吸收宽度为: 11001100+2200100=20pxfrac{1*100}{1*100+2*200}*100 = 20px,最终元素宽度为 10020=80px100-20=80px这时第二个元素的吸收宽度为:22001100+2200100=80pxfrac{2*200}{1*100+2*200}*100 = 80px,最终元素宽度为 20080=120px200-80=120px这时第三个元素的 flex-shrink 值为 0,不吸收宽度,最终元素宽度即为元素本身的宽度 300px300px一般我们很少见上述属性单独使用,都是用flex这一个简写属性来表述元素的伸缩。Flex 简写形式允许你把三个数值按这个顺序书写 flex-growflex-shrinkflex-basis。以下是常见的几种取值:flex: initial 的扩展为 0 1 auto (不可放大、可缩小、大小与容器元素大小一致)flex: auto 的扩展为 1 1 auto (可放大、可缩小、大小与容器元素大小一致)flex: none 的扩展为 0 0 auto (不可放大、不可缩小、大小与容器元素大小一致)flex: 的扩展为 1 0效果如下:左侧宽度不变,右侧自适应效果如下:左右宽度不变,中间自适应PS.flex 子元素没有 positive free space 就不会增长;没有 negative free space 就不会缩小。到此,相信大家对“三个flex属性对元素的影响是什么”有了更深的了解,不妨来实际操作一番吧!这里是云技术网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

相关推荐: jquery中DOM的中文概念是什么

这篇文章主要介绍“jquery中DOM的中文概念是什么”,在日常操作中,相信很多人在jquery中DOM的中文概念是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”jquery中DOM的中文概念是什么”的疑惑有所帮助!接下来,…

文章页内容下
赞(0) 打赏
版权声明:本站采用知识共享、学习交流,不允许用于商业用途;文章由发布者自行承担一切责任,与本站无关。
文章页正文下
文章页评论上

云服务器、web空间可免费试用

宝塔面板主机、支持php,mysql等,SSL部署;安全高速企业专供99.999%稳定,另有高防主机、不限制内容等类型,具体可咨询QQ:360163164,Tel同微信:18905205712

主机选购导航云服务器试用

登录

找回密码

注册