当前位置: 首页 > Web前端 > CSS

说说flex布局使用中遇到的一些问题

时间:2023-03-30 21:59:51 CSS

原因工作结束后,由于大量使用flex布局,遇到了一些不清楚的问题和一些有趣的特性。写一篇博客记录在这里。flex的三个值的含义众所周知。flex布局中有两类属性:一种作用于弹性容器(Flexcontainer),一种作用于弹性项(Flexitem),flex作用于弹性项。属性。flex是flex-grow、flex-shrink、flex-basis三个值的缩写。该值指定弹性项目将如何拉伸或收缩以适应弹性容器中的可用空间。flex-grow定义弹性项目的放大列。它可以接受数字(也可以接受小数),但不接受负值。默认值为0。值为0意味着即使容器中仍有剩余空间,弹性项目也不会增长。flex-shrink定义了flexitem的收缩比例,也接受数字(小数也可以),不接受负值。默认值为1。如果一个flex-item的flex-shrink设置为0而其他flex-items的flex-shrink值为1,那么当flex容器空间用完时,该flex-item不会被压缩,而其他flex-items会按比例压缩。flex-basis定义了flex项目在容器中分配空间之前占用的主轴空间(不一定是宽度,因为主轴方向可以是垂直的),默认值为auto。如果在弹性项目上同时设置了flex-basis和width,则width将被忽略。另请注意,当主轴为横向时,设置max-width或min-width将限制flex项目的宽度。这里先说说flex-basis的取值:指定的值,比如以px、em为单位的取值。百分比,如果取百分比,则相对于其父弹性容器的宽度或高度计算(取决于主轴方向)。如果没有指定包含块的大小(即父元素的大小取决于子元素),那么结果和auto是一样的。auto值表示根据弹性项的宽度或高度(根据主轴的水平或垂直轴)调整尺寸,如果不设置宽度或高度,则根据内容。设置flex后如何计算弹性项的宽度下面是代码示例A

B
C
#content{显示:弹性;宽度:360px;}.box1{宽度:100px;flex:110;}.box2{宽度:100px;flex:110;}.box3{宽度:100px;flex:110;}因为flex-basis的值为0,弹性容器的剩余空间为360px-0*3=360px,因为三个元素都设置了flex-grow:1,所以剩下的空间三个元素在空间中的比例为1:1:1,每个元素的宽度为360px/3=120px。如果更改代码怎么办?#content{显示:flex;宽度:360px;}.box1{宽度:100px;flex:110;}.box2{宽度:100px;flex:11auto;}.box3{flex:11200px;}此时弹性容器内剩余宽度为:360px-0-100px-200px=60px,剩余空间的比例三个元素的占用也是1:1:1。那么宽度就是:0+20px=20px,100px+20px=120px,200px+20px=220px。对应复杂情况的计算,这里有个写的很好的回答:flex设置为1和auto有什么区别?flex对单值、双值、三值的赋值规则是什么?它将被视为flex-grow的值,1表示flex-shrink,0%表示flex-basis。有效宽度值:将被视为flex-basis的值,flex-shrink和flex-grow均为1。关键字:比如auto,none,下面会讲到这两个。double值的情况下:第一个值必须是一个无单位的数字,作为flex-grow的值;第二个值可以是:一个无单位的数:它将作为flex-shrink的值,flex-basis的值为0%。一个有效的宽度值:会被当作flex-basis的值,flex-shrink的值为1。三个值的情况下:第一个和第二个值必须是无单位的数字,作为分别是flex-grow、flex-shrink、flex-basis的值;第三个值可以是有效的宽度值或自动。flex:0、flex:1、flex:auto、flex:none、flex:0%之间有什么区别?说完以上三种赋值方式,缩写就变得容易理解了:flex:0是flex:0的缩写10%是flex:none的缩写flex:00auto是flex:1的缩写flex:1的缩写10%flex:auto的缩写为flex:11autoflex:0%的缩写flex:110%的缩写总结:以上是对取值的梳理flex属性,而且近一年没写博客了,最近还要填坑,前端之路如歌如舞~