flex 换主轴后子元素占满_Chrome72 嵌套 flex 布局修改,你的网站可能会发生布局错乱...

news/2024/5/13 1:56:39/文章来源:https://blog.csdn.net/weixin_39545017/article/details/112398322

起源

2019 年 1 月 29 日,Chrome72 正式版(72.0.3626.81)发布,本次发布带来了一个改变,且没有在更新日志中提及,该改变导致某些网站发生了布局错乱。该改变主要针对的是嵌套的flex布局,下面我们一起看下是怎么回事。

问题

首先,我们有一个嵌套的 flex 布局,代码如下:

area
item
content

希望实现这样的效果:父容器 area 有一个指定的高度,且它是一个 flex 弹性盒子,它内部有一个子元素 item,使用 flex:1 指定了占满剩余空间,且 item 也是一个 flex 弹性盒子,它内部还有一个同样占满剩余空间的嵌套子元素 nest-item,通过设置 overflow:auto 让它的内容超出后显示滚动条。效果如下:

ccbf410a98cdfe2320cfdc9241e410fb.png

这样布局的想法很简单,即通过设置弹性盒子子元素的扩展比率,能得到一个自动占满剩余空间高度的容器,再在这个容器中放需要显示的内容,在某些情况下,这确实是一个比较不错的主意,在 Chrome72 之前都是可以正常显示的。但是 Chrome72.0.3626.81中显示如下:

dfda0ea0b72295cbf18b971608f678c7.png

追溯

为什么会出现这样的问题呢?我们看一下规范( https://drafts.csswg.org/css-flexbox/#min-size-auto )flex 弹性盒子主轴上子元素的最小大小是内容的大小(视主轴方向为宽或高)。

那么我们再看一下上面的例子,area 的主轴是纵向的,子元素 item 的最小高度即是内容的高度,而 nest-item 被 content 撑开,content 有一个高度(600px,超出了容器的高度),那么 item 的最小高度也就超过了 600px。这样一来,一层层都是被内容撑开,也就没有出现滚动条了,这样似乎是符合规范预期的。

在 chromium 的 issue 反馈中,有人提到了这个问题( https://bugs.chromium.org/p/chromium/issues/detail?id=927066 ),根据回复,这正是官方为了让 Chrome 更加符合规范行为而做的调整。也就是说,Chrome72 之前的版本,这算是一个没有按照规范行为而出现的 bug。新的调整,其实就是让 flex 弹性盒子的子元素最小高度的默认行为应用 min-height:min-content ,就像官方回复中提到的那样,让子元素作为 flex 弹性盒子时却和普通盒子处理方式不同是会让人困惑的。

解决方法

既然知道了原因,那么如果我们还想使用这样的布局方式,该怎么做呢?

对的,我们给 item 指定一个最小高度,让它不使用默认的行为(即内容的高度),一般我们指定最小高度为0 min-height:0。给 item 加上这个样式后,我们再看一下效果:

b375e18012b28e86230f10bba1bd1db5.png

嗯,已经符合我们的预期了。为了验证规范中提到的对主轴方向的行为,我们修改一下代码,将主轴设置为水平方向试试,代码如下:

area
item
content

效果如下:

9fb21538f197e2b4dcc4fc9781b4541e.png

看来主轴为水平方向时,是符合规范预期行为的(Chrome72 及以前的版本都符合),那么我们给 item 加上一句样式 min-width:0 ,效果如下:

9c52c981ebc347b0af63246092feb0ec.png

嗯,是符合我们预期的。

结语

好了,现在你已经知道是怎么一回事了,可是等等,你说你升级到Chrome72没有发现我说的问题?

那是因为官方注意到这个修改会影响到一些网站的正常显示,因此在 2019 年 2 月 6 日(正是春节假期间)发布的 Chrome72.0.3626.96 中,将这个问题还原回以前的行为了( https://chromium.googlesource.com/chromium/src/+/032ef9666487db1d04b656a095b041de8c6d2b63 )。

官方的意思是为了避免这个修改给某些网站带来的不好的影响,因此预留时间给大家修改,等到Chrome73将会发布这一改变。所以为了未来更好的浏览体验,检查一下你的页面吧!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_708079.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

手机网站制作html5,【怎么样制作手机网站】如何使用dreamweavercs6建立手机网站?织梦手机WAP浏览模块如何制作手机网站?如何制作html5手机页面?...

【怎么样制作手机网站】如何使用dreamweavercs6建立手机网站?织梦手机WAP浏览模块如何制作手机网站?如何制作html5手机页面?下面就和小编一起来看看吧!如何使用dreamweavercs6建立手机网站?制作步骤如下:1。打开DreamweaverCS6软件,可以在DreamweaverCS6软件的开…

高并发高流量网站架构

Web2.0的兴起,掀起了互联网新一轮的网络创业大潮。以用户为导向的新网站建设概念,细分了网站功能和用户群,不仅成功的造就了一大批新生的网站,也极大的方便了上网的人们。但Web2.0以用户为导向的理念,使得新生的网站有…

视频网站盈利模式与营销策划

在与数十家视频网站进行信息网络传播权交易过程中,在研究视频网站内容和盈利模式基础上,综合自己在传统媒体和新媒体领域十几年的策划和营销经验,我发现:视频网站的盈利模式其实早就形成多种体系,但是盈利之路艰难&…

android怎样封装,如何封装属于自己的博客网站安卓APP 源码家园

说实话我今天在写这个文章的时候是我使用易语言(E4A\易安卓)的第一天,我也是易小白,但是的确可以用!我为什么写这个文章呢?因为之前我也想封装自己的网站,然后去网上找的在线封装生成APP,果然能封装好了&am…

13个超棒的代码资源网站推荐

很多开发者都有过网站开发的经历,大家使用CSS、HTML以及JavaScript等技术来完成这一工作。但想必大家也知道,网站开发是一个很耗费时间的工作。你可能需要花费大量的时间在一些网站上寻找解决问题的代码段。这的确很耗费时间,但却几乎又是不可…

网站性能优化的三重境界

这篇文章是关于网站性能优化体验的,性能优化是一个复杂的话题,牵涉的东西非常多,我只是按照我的理解列出了性能优化整个过程中需要考虑的种种因素。点到为止,包含的内容以浅显的介绍为主,如果你有见解能告知我那再好不…

SEO艺术

SEO艺术 编辑推荐 在本书中,四位搜索引擎优化(SEO)领域最受瞩目的专家阐述了制订以及执行一个完善的SEO策略时应遵循的一些实用指南与最新技术。 基本信息 原书名: The Art of SEO原出版社: OReilly作者: (…

[个人网站搭建]·Django增加评论功能(Python3)

[个人网站搭建]Django增加评论功能 个人主页--> https://xiaosongshine.github.io/ 个人网站搭建github地址:https://github.com/xiaosongshine/djangoWebs 安装django插件 pip install django-contrib-comments配置settings.py INSTALLED_APP(#...,django_com…

阿里云官方网站免费套餐怎么抢

阿里云推出包含云服务器 ECS、负载均衡、云数据库 RDS、云数据库 Redis 版、云数据库 Mongodb 版、弹性公网 IP、CDN、对象存储 OSS、文件存储 NAS等40核心云产品,6个月免费使用何为免费套餐,其实就是让你先体验,觉得好用,易用&am…

IIS新建站点服务器,localhost能登录但是IP访问登录不了。

IIS服务器新建站点之后,浏览页面,服务器本地是可以登录,但是localhost换成IP就无法访问。其他站点IP却可以访问。 1.如果浏览直接失败,说明端口号需要更换。 2.如果出现IP不能访问,localhost能访问,需要在高…

解决: 网站访问报错 AccessDenied (阿里云 OSS + CDN )

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到教程。 1. 使用阿里云 OSS服务 CDN 服务后&#xff0c;直接用顶级域名访问个人站点失败&#xff0c;报错如下&#xff1a; <Code>Acces…

.NET技术+25台服务器怎样支撑世界第54大网站

摘要&#xff1a;同时使用Linux和Windows平台产品&#xff0c;大量使用静态的方法和类&#xff0c;Stack Overflow是个重度性能控。同时&#xff0c;取代横向扩展&#xff0c;他们坚持着纵向扩展思路&#xff0c;因为“硬件永远比程序员便宜”。 【编者按】StackOverflow是一个…

网站盈利的10种方式

如果你有自己的网站&#xff0c;而且已经有了不少的流量&#xff0c;你肯定会开始考虑如何通过这个网站来挣一些钱。 在这篇文章中&#xff0c;我会向大家介绍网站最常见的10种盈利方式。 1.按点击付费广告 在网站上展示一个按点击付费的广告横幅是最简单的盈利方式&#xff…

基于Ubuntu环境使用docker搭建对于中文识别的chineseocr_lite项目

光学字符识别&#xff08;OCR&#xff09; 光学字符识别&#xff08;OCR&#xff09;目前已经有了很广泛的应用&#xff0c;很多开源项目都会嵌入OCR 来扩展原有的能力&#xff0c;例如身份证识别、出入停车场的车牌识别、拍照翻译等等本文介绍的开源的中文 OCR 项目&#xff…

Ubuntu环境使用conda安装轻量级中文ocr开源项目chineseocr_lite,最简单的方式

问题 接使用docker的方式来创建项目所报的错误选中文件之后&#xff0c;界面不停的绕圈&#xff0c;显示不了对于图片的识别结果&#xff0c;并且监控界面上出现错误提示如下ImportError: libpython3.6m.so.1.0: cannot open shared object file: No such file or directory&a…

基于Ubuntu使用docker的方式来搭建基于Yolo3+crnn的Chineseocr识别

Docker Docker简单易用&#xff0c;具体的安装和配置可以看我的或者其他人的博客 安装完之后&#xff0c;输入以下命令安装chineseocr并且开启服务 docker pull zergmk2/chineseocr docker run -d -p 8080:8080 zergmk2/chineseocr 在浏览器输入http://127.0.0.1:8080/ocr网…

实现基于darknet框架实现CTPN版本自然场景文字检测 与CNN+CTCOCR文字识别的ChineseOCR搭建

Github地址 Github源码地址 支持系统:mac/ubuntu python3.6 实现功能 文字检测&#xff1b; 文字识别&#xff1b; 支持GPU/CPU&#xff0c;CPU优化&#xff08;opencv dnn&#xff09; docker镜像服务&#xff08;CPU优化版本&#xff09; 下载镜像 链接:https://pan.baidu…

使用javascript实现对于chineseocr的API调用

ChineseOCR在线API 网页地址 界面 提供多种接口调用方式&#xff0c;比如在线调用、Javascript api调用、curl api调用和python api调用四种方式&#xff0c;本次使用javascript api调用的方式进行OCR识别在线Javascript工具 在线工具网页链接在线Base64 转化工具 在线工具…

使用python实现对于chineseocr的API调用

ChineseOCR在线API 网页链接 界面 提供多种接口调用方式&#xff0c;比如在线调用、Javascript api调用、curl api调用和python api调用四种方式&#xff0c;本次使用javascript api调用的方式进行OCR识别在线Base64 转化工具 Base64在线小工具代码修改 新增一个变量fill_w…

使用多线程的方式调用chineseocr_API

ChineseOCR在线API 网页链接 界面 提供多种接口调用方式&#xff0c;比如在线调用、Javascript api调用、curl api调用和python api调用四种方式&#xff0c;本次使用javascript api调用的方式进行OCR识别代码 import glob import base64 import os import requests import …