在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
不值一提的 1. flex 家族 flex 里有很多的属性,我们经常用到的就是如下操作: .container { display: flex; } .container > .left { flex: 1; } .container > .right { 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> div { padding: 5px; border: 1px solid #ccc; } .no-effect { align-items: center; margin: 100px; width: 200px; color: #999; } .no-effect > div:first-of-type { margin-right: 10px; } p { color: red; } .no-wrap { overflow: hidden; white-space: nowrap; text-overflow: ellipsis; } </style> </head> <body> <div style="display: flex;" class="no-effect"> <div style="flex: 0 0 80px">我比较短</div> <div style="flex: auto"> <p class="no-wrap">我很长,不是开玩笑的,可以长到没边</p> </div> </div> </body> </html> 我们想要的效果: 但实际的效果: 为什么会出现这个情况? 2. flex-basis 从中作梗
flex-grow: 1; flex-shrink: 1; flex-basis: auto;
我们左边 div 不放大,不缩小,固定 80px 宽度;右边 div 自动铺满剩余宽度也就是 200px - 80px = 120px,实际效果却远远超出了 120px,这是因为 flex-basis 为 auto 时的计算导致的。 我们来看看 flex-basis: auto 的历史:
所以当我们没有给 如此一来,在内部
普通元素: 3. 解决方式 知道原因后,那我们就可以对症下药了。
介绍了三种解决方式,再来聊聊前两种为什么可以解决的原因吧。 第一种很简单,width 设置为 0,但是 那么第二种呢? 第二种的情况比较复杂,当我们设置了 min(max(preferred minimum width, available width), preferred width) 翻译成人话就是:
shrink-to-fit 的宽度 = min ( max (最小宽度, 可用宽度) , 首选宽度) 那么来计算一下:
由计算可得: max(0, 272) = 272 min(272, 98) = 98 所以最终宽度是剩余部分 98px,当我们手动设置
总结 css 并没有我们想象的那么信口拈来,还有有规律可循的,不过这个寻的过程却是有点复杂……遇到不解的可以多看看它是怎么来的,要干嘛,就能明白解决它的思路了。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论