文章出自个人博客 https://knightyun.github.io/2021/07/05/css-flex-chrome-safari-bug,转载请申明。


问题

最近的开发中有遇到一个页面样式的兼容性问题,大致是使用 flex 布局的两个嵌套弹性盒子,在 ChromeSafari 中对一些特殊情况的处理行为不一致,从而产生了测试 bug;

复现

下面将问题简化为了一个 demo 模型,一个定高 300pxflex 盒子 A(红色边框),嵌套了另一个高度被子元素(绿色块)撑开的 flex 盒子 B(蓝色边框),其中盒子 B 为垂直伸缩 flex-direction: column;,Footer 元素(绿色边框)高度固定 100px,背景半透明;代码:

<!DOCTYPE html>
<html lang="en"><head><meta charset="UTF-8" /><meta http-equiv="X-UA-Compatible" content="IE=edge" /><meta name="viewport" content="width=device-width, initial-scale=1.0" /><title>Demo</title><style>.flex-box-a {display: flex;width: 300px;height: 300px;flex-direction: column;border: 2px solid red;}.flex-box-b {display: flex;width: 200px;height: auto;border: 2px solid blue;}.inner-green-box {width: 100px;height: 100px;background: green;}.inner-aqua-box {width: 100px;height: 100px;background: aqua;}.footer-box {width: 200px;height: 100px;border: 2px solid lime;background: skyblue;opacity: .5;}.bottom-brown-box {width: 304px;height: 100px;color: white;background: burlywood;}</style></head><body>Flex Box A - height: 300px;<div class="flex-box-a">Flex Box B - height: auto;<div class="flex-box-b"><div class="inner-green-box">height: 100px;</div><div class="inner-aqua-box"></div></div><div class="footer-box">Footer - height: 100px;</div></div><div class="bottom-brown-box">height: 100px;</div></body>
</html>

效果:

然后增加绿色块子元素的高度,可以发现在 Chromeflex 盒子 B 的高度会被该子元素撑开,Footer 元素高度被压缩,而 Safari 中的盒子 B 的高度并没有被子元素撑开,而是超出部分被隐藏在了 Footer 下层,同时 Footer 元素也被少量压缩:

当绿色块子元素高度超过最外层 flex 盒子 A 的高度时,Chrome 中的内层 flex 盒子 B 继续被撑开,Footer 元素直接脱离外层 flex 盒子,而 Safari 中只有子元素超出外层 flex 盒子,Footer 依然只被少量压缩:

解决

最终解决问题的方式是放开外层 flex 盒子 A 的高度限制,这样无论在 Chrome 还是 Safariflex 盒子都能被自由撑开,行为表现一致:

因此开发中遇到类似定高弹性并存的情况,需要合理设计布局,避免不必要的兼容问题;

CSS flex 盒子在 Chrome 和 Safari 中的行为差异相关推荐

  1. chrome和safari_私人浏览器-如何在Chrome和Safari中使用隐身模式

    chrome和safari Private browsing, or "incognito mode" has become a popular way to surf the w ...

  2. html safari图片不显示,html - 某些FA图标显示在FF,Chrome和Safari中,但没有浏览器会全部显示它们 - 堆栈内存溢出...

    我正在使用Pixelarity( https://pixelarity.com/ethereal )的模板,其中他们实现了超赞的v4字体. 由于我也想使用"品牌",因此我需要连接v ...

  3. html+css基础仏学习教程之HTML 中播放声音或者视频的方法有很多种。

    在 HTML 中播放声音或者视频的方法有很多种. HTML 音频 问题,以及解决方法 在 HTML 中播放音频并不容易! 您需要谙熟大量技巧,以确保您的音频文件在所有浏览器中(Internet Exp ...

  4. css3 flex 省略号,CSS:使用flexbox的中间省略号,在safari中的中断

    我试图在使用flexbox而不是float的两段内容之间创建一个省略号.我需要的效果可能永远不会与浮动工作.CSS:使用flexbox的中间省略号,在safari中的中断 第一个"列&quo ...

  5. ionic android绝对定位,Safari中的CSS故障与Ionicons作为背景内容和绝对定位

    我创建了我的第一个使用SASS(Compass)的网站,我非常喜欢它,它是一个非常方便的工具.我还添加了Font Awesome,并经常使用它,因为我想优化Retina desiplays,因此使用更 ...

  6. input onblur事件在chrome/safari中失效

    解决方案:chrome/safari中的input onblur事件要先调用focus()的.示例: <script type="text/javascript" src=& ...

  7. css hack(ie6-9,firefox,chrome,opera,safari)

    来源:http://www.cnblogs.com/WuQiang/archive/2011/08/23/2150240.html 在这个浏览器百花争鸣的时代,作为前端开发的我们为了我们漂亮的设计能适 ...

  8. CSS——弹性盒模型(Flex)

    CSS--弹性盒模型 前言 本文大部分参考自阮一峰老师和B站后盾人的Flex布局教程. 原文地址:

  9. 面试总结(CSS 的盒模型?、CSS 中选择器的优先级以及 CSS 权重如何计算?、CSS 中哪些属性可继承,哪些不可以?、CSS 单位中 px、em 和 rem 的区别?、rem 适配....)

    CSS 的盒模型?         盒子模型(Box Modle)可以用来对元素进行布局,包括内边距,边框,外边距,和实际 内容这几个部分                 第一种是 W3C 标准的盒子 ...

最新文章

  1. idea配置echache.xml报错Cannot resolve file 'ehcache.xsd'
  2. 政务数据放开在即 政策红利下大数据投资亮点凸显
  3. 记录,一些jar包的作用
  4. 【Git】Git 分支管理 ( 使用 git cherry-pick 命令提取提交记录应用于当前分支 | 创建新分支应用某个提交 | git cherry-pick 冲突处理 )
  5. CentOS6.5+puppet3.7.3 安装、配置及测试
  6. subprocess.Popen 运行windows命令出现“句柄无效”报错的解决方法
  7. php读取js验证码,js实现获取短信验证码实例
  8. 本地虚拟机ceph 100.000% pgs not active
  9. Facebook 的 PHP 性能与扩展性
  10. cdr 表格自动填充文字_操作基础知识Word文字编辑
  11. Learn OpenCV之Heatmap
  12. Aurelia历险记:创建自定义PDF查看器
  13. 如何把Excel表格显示到邮件正文里?
  14. 乐2的android版本,乐视2高通|MIUI10|安卓6.0|最终完美版|极速_最新最全的乐2高通版ROM刷机包下载、刷机...
  15. 关于Linux中的apt-get的相关操作及原理
  16. 科大讯飞往届生招聘_我从飞往西雅图的最后一波设计采访中学到的东西
  17. Frida Internal - Part 1: 架构、Gum 与 V8
  18. github、码云的使用
  19. 删除Maven骨架Archetype
  20. 用python画肖战_从python爬虫以及数据可视化的角度来为大家呈现“227事件”后,肖战粉丝的数据图...

热门文章

  1. day18(javaEE三大组件之一servlet(简介(一)))
  2. Linux学习命令总结个人及个人心得
  3. kohana的modules集合
  4. “投机取巧”快速恢复坏扇区多的数据
  5. JDK源码学习之前言
  6. 你需要知道的基础算法知识——STL和基础数据结构(三)
  7. html是一种描述的沙子语言,小学低年级语文阅读训练
  8. golang常用手册:数据类型、变量和常量
  9. 2821: 作诗(Poetize)
  10. Android 时间维护服务 TimeService(针对于特殊定制设备)