前端求教,有没有懂 flex 布局的

查看 113|回复 9
作者:awesomePower   
是这样的,给flex容器设置了align-content: stretch;,它也是个默认值,有拉伸的效果。
然后所有子项中有一个设置了高度,最后拉伸的结果是两行的高度不一样,它是怎么个原理,每行最终的拉伸高度是怎么计算的,有大佬给解答一下吗?
代码示例: https://txgq4v-5000.csb.app/

拉伸, flex, stretch, 子项

fd9xr   
https://css-tricks.com/snippets/css/a-guide-to-flexbox/
awesomePower
OP
  
@fd9xr 上面只写了拉伸占据剩余空间。没写拉伸的幅度是怎么计算的啊。我想知道多行、高度和没设置高度混合的情况下,拉伸的空间是怎么计算的
xiaoqidev   
容器高 500 ,p 有默认边距行高等,div 默认高度大概 120 ,3 指定高度 190 ,剩余空间 500-120-190=190 默认拉伸 1:1 分配各 95 ,1 、2 高 120+95 约 215 ,3 指定高 190 ,4 高跟 3 一样 190 再加拉伸 95 最后高 285
awesomePower
OP
  
@xiaoqidev 谢谢你的解答,很详细。我有两个疑问:
1.div 的这里默认高度为什么是 120 呢
2. 4 和 3 的高度一样的原因是不是因为 align-items 的默认属性也是拉伸,导致 4 拉伸成了行高
awesomePower
OP
  
@xiaoqidev 我看了一下 chrome 的盒模型示意图,懂了。这里因为字体设置的原因,导致 p 元素的高度是 49 ,然后又因为 font-size:35px;导致 p 的 margin-top 和 margin-bottom 也是 35px ,最后加起来就是 49+35+35=119 。
再次感谢你的解惑
xingx   
https://www.ruanyifeng.com/blog/2015/07/flex-grammar.html
c9y   
我是这么理解的.
你这个例子中:
结构 .box > (.item > p)*4, p 的 font-size: 35px, line-height 和 margin 为浏览器默认
我这里使用 chrome, 默认 line-height: 1.4, margin: font-size 0; (这里非常要注意浏览器的默认属性, 尤其是 line-height, 比如 mdn 就说明了大部分是默认 1.2, 这里使用 1.4 是使用了你提供的, 实际上我进入你的页面 font-size*line-height = 46, 这里 line-height 是无穷小数, 所以一般需要严格计算的地方应该指定 line-height)
即: p 的高度为 margin-top + (font-size * line-height) + margin-bottom = 35px + (35px * 1.4) + 35px = 119px
第 2 行的一个.item 设置了 height: 190px, 其他.item 的 height 自适应
假设: 第 1 行自适应高度为 x, 第 2 行自适应高度为 y.
则有: y - x = 190px - 119px = 71px (这个是重点, 会根据可以用于计算的值用于计算占比)
x + y = 500px
两式相加: 2y = 500px + 71px, y = 285.5px
则 x = 214.5px.
c9y   
@c9y #7 y - x = 190px - 119px = 71px
(编辑的时候把 71px 干掉了
c9y   
@c9y #8 好吧, 是有问题. 不知道为啥 v2 自己干掉了
您需要登录后才可以回帖 登录 | 立即注册

返回顶部