display:flex(弹性盒子布局)在移动端的兼容性,可以毫不夸张地说,已经做得相当不错了,基本可以说是“放心大胆用”的级别。
回想一下,flexbox 从它正式推出以来,经历了很长一段时间的“需要厂商前缀”的尴尬期。那时候,为了让它在不同浏览器上都能正常工作,我们不得不写一堆 `webkit`, `ms`, `moz` 这样的前缀,CSS 文件里看起来像一堆乱码。但是,好在这一切都已经成为过去式了。
现在,绝大多数主流的移动端浏览器,包括 Chrome、Safari(iPhone 自带浏览器)、Edge(在 Android 和 iOS 上都有)、Firefox 等等,都对 flexbox 提供了非常完善的原生支持。你不需要再为那些古老的浏览器版本去操心,也不需要为了兼容性而写那些冗余的前缀代码。
这意味着什么?意味着你现在写 CSS 的时候,可以直接、自信地使用 `display: flex;`,然后在后面的属性里,比如 `justifycontent`、`alignitems`、`flexdirection`、`flexwrap`,以及子项的 `flexgrow`、`flexshrink`、`flexbasis` 等等,都可以像在桌面端一样,直接应用,不用担心它会在手机上“罢工”。
当然,如果你非要追求极致的、几乎不存在的用户,或者开发一些需要兼容极其古老的、已经没人用的手机操作系统,那可能还需要做一些额外的研究。但对于绝大多数面向用户的、现代化的移动应用开发来说,flexbox 的兼容性是完全没有问题的。
相比于以前那些需要浮动(float)或者定位(position)来模拟的布局方式,flexbox 简直是救世主。想让元素在容器里水平居中?用 `justifycontent: center;` 搞定。想让它们在垂直方向上也居中?加上 `alignitems: center;`,两行代码就解决了,而且无论容器大小如何变化,元素都能稳稳地居中。想要元素平均分布?`justifycontent: spacebetween;` 或 `spacearound;`,一句话的事情。想要元素自动换行,并且保持间距?`flexwrap: wrap;`,再配合 `justifycontent` 和 `aligncontent`,就能轻松实现响应式的多列布局。
用 flexbox 来实现移动端的各种常见布局需求,比如导航栏、列表项的对齐、卡片式布局、表单元素的排列等等,都比以往任何时候都要简单、高效和优雅。它让开发者能更专注于页面的视觉设计和交互逻辑,而不是被浏览器兼容性问题牵着鼻子走。
所以,总结一下,display:flex 在移动端兼容性上,你几乎可以完全不用担心。大胆地用它来构建你的移动端界面吧,它会让你事半功倍。