flex 換主軸后子元素占滿_Chrome72 嵌套 flex 布局修改,你的網站可能會發生布局錯亂...

起源

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.pswp.cn/news/453751.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/453751.shtml
英文地址,請注明出處:http://en.pswp.cn/news/453751.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用 Django + Wusgi + Nginx 部署 Django

如何在生產上部署Django? Django的部署可以有很多方式,采用 nginxuwsgi 的方式是其中比較常見的一種方式。 uwsgi介紹 uWSGI是一個Web服務器,它實現了WSGI協議、uwsgi、http等協議。Nginx中HttpUwsgiModule的作用是與uWSGI服務器進行交換。 WSGI / …

網絡學習網址

網絡之路博客 http://ccieh3c.com/ 轉載于:https://www.cnblogs.com/changha0/p/8179801.html

路由到另外一個頁面_Nextjs使用解讀一(項目搭建與路由系統)

文章說明:1. 之前想搭建個人博客,由于學習的是react技術棧,所以就到處搜羅資料學了nextjs,配合koa就把博客搭起來了。該系列文章基于我的學習筆記,重新整理了一遍,如果有錯誤之處,還請指正。2. …

微信獲取token -1000

最終翻看微信開發api找到需要去配置IP白名單。只需要配置訪問來源IP即可。 轉載于:https://www.cnblogs.com/yangjinqiang/p/8184663.html

產品技術和管理

為啥純粹為消費者傳遞體驗的活動可以價格不菲,幾為暴利?——談客戶體驗作為客戶價值提升之源 不論產品還是服務,如果能夠為消費者傳遞有益的體驗,其價值就可以在一般的產品服務之上得以體現;附加了體驗的產品&#xff…

Linux 修改系統編碼

linux服務器的字符集設置可能影響到網站頁面出現 “???” 等問號亂碼,還有可能導致文件中的漢字部分出現亂碼。有兩個原因 服務器沒有安裝 zh_CN.UTF-8 字符集,導致不支持中文!服務器雖然裝了 zh_CN.UTF-8…

jquery ztree 設置勾選_047 JAVA-jQuery

jQuery操作元素屬性的值表單:<body><input type"button" name"" id"but1" value"測試獲得屬性值" /><hr />賬號&#xff1a;<input type"text" name"sxtzh" id"zhanghao" value&q…

Opencv undefined reference to `cv::imread() Ubuntu編譯

Ubuntu下編譯一個C文件&#xff0c;C源程序中使用了opencv&#xff0c;opencv的安裝沒有問題&#xff0c;但是在編譯的過程中出現如下錯誤&#xff1a; undefined reference to cv::imread(std::string const&, int)undefined reference to cv::noArray()undefined referen…

深度學習目標檢測之 YOLO v1

這是繼 RCNN&#xff0c;fast-RCNN 和 faster-RCNN 之后&#xff0c;rbg&#xff08;RossGirshick&#xff09;針對DL目標檢測速度問題提出的另外一種框架。YOLO V1 增強版本GPU中能跑45fps&#xff0c;簡化版本155fps。 論文名&#xff1a; 《You Only Look Once&#xff1a;…

編程珠璣番外篇

1.Plan 9 的八卦 在 Windows 下喜歡用 FTP 的同學抱怨 Linux 下面沒有如 LeapFTP 那樣的方便的工具. 在蘋果下面用慣了 Cyberduck 的同學可能也會抱怨 Linux 下面使用 FTP 和 SFTP 是一件麻煩的事情. 其實一點都不麻煩, 因為在 LINUX 系統上壓根就不需要用 FTP. 為什么呢? 因…

BT下載原理分析

版權聲明&#xff1a;本文為博主原創文章&#xff0c;未經博主允許不得轉載。 BitTorrent協議。 BT全名為BitTorrent,是一個p2p軟件,你在下載download的同時&#xff0c;也在為其他用戶提供上傳upload&#xff0c;因為大家是“互相幫助”&#xff0c;所以不會隨著用戶數的增加而…

表格列求和_excel表格制作,Excel表格的基本操作,包含制作一個表格10方面的知識...

創建表格&#xff0c;插入與刪除一行一列或多行多行&#xff0c;一次移動一行一列或多行多列&#xff0c;拆分與合并單元格&#xff0c;單元格內換行&#xff0c;表格求和與求平均值是Excel表格的基本操作&#xff1b;除此之外&#xff0c;Excel表格的基本操作還包括調整行高列…

深度學習之 FPN (Feature Pyramid Networks)

論文題目&#xff1a;Feature Pyramid Networks for Object Detection論文鏈接&#xff1a;https://arxiv.org/abs/1612.03144論文代碼&#xff1a;Caffe版本 https://github.com/unsky/FPN 《Feature Pyramid Networks for Object Detection》這篇論文主要解決的問題是目標檢…

ISLR—第二章 Statistical Learning

Statistical Learning Y 和X的關系why estimate f 用來預測 預測的時候可以將f^當成一個black box來用&#xff0c;目的主要是預測對應x時候的y而不關系它們之間的關系。用來推斷 推斷的時候&#xff0c;f^不能是一個black box&#xff0c;因為我們想知道predictor和response之…

提高編程思想

虛函數和抽象函數有什么區別 虛函數是有代碼的并明確允許子類去覆蓋&#xff0c;但子類也可不覆蓋,就是說可以直接用&#xff0c;不用重寫 抽象函數是沒有代碼&#xff0c;子類繼承后一定要重寫 ****************************************************************** 在一…

python特效代碼_網頁愛心特效弱爆了,我讓你點擊網頁顯示所有python模塊!

點擊網頁特效上周寫了一篇文章快速搭建個人博客的教程文章&#xff1a;其中說到了一個點擊網頁出現愛心特效的插件 click_heart.js ,當然大家可能也見過其他博客上面&#xff0c;有點擊網頁出現類似 富強、民主、文明、和諧等等&#xff0c;關于代碼在這里不多贅述&#xff0c;…

Python 包管理之 poetry

poetry是一個Python虛擬環境和依賴管理的工具。poetry和pipenv類似&#xff0c;另外還提供了打包和發布的功能。 官方文檔&#xff1a;python-poetry.org/docs/ python項目部署&#xff1a;poetry管理本地環境,上線用docker poetry 安裝 poetry提供多種安裝方式&#xff0c…

Windows數據庫編程接口簡介

數據庫是計算機中一種專門管理數據資源的系統&#xff0c;目前幾乎所有軟件都需要與數據庫打交道&#xff08;包括操作系統&#xff0c;比如Windows上的注冊表其實也是一種數據庫&#xff09;&#xff0c;有些軟件更是以數據庫為核心因此掌握數據庫系統的使用方法以及數據庫系統…

映客都是互刷禮物嗎_映客互刷禮物有什么用_映客守護有什么用

一起直播、互刷禮物、改ID發性感照,趙本山女375x332 - 122KB - PNG一起直播、互刷禮物、改ID發性感照,趙本山女600x893 - 247KB - JPEG一起直播、互刷禮物、改ID發性感照,趙本山女600x448 - 151KB - JPEG土豪互刷禮物嚇壞男主播 即興表演鐵頭功撞墻560x688 - 57KB - JPEG一起直…

Python 之打包工具 setup.py

1. 為什么需要對項目分發打包&#xff1f; 平常我們習慣了使用 pip 來安裝一些第三方模塊&#xff0c;這個安裝過程之所以簡單&#xff0c;是因為模塊開發者為我們默默地為我們做了所有繁雜的工作&#xff0c;而這個過程就是 打包。 打包&#xff0c;就是將你的源代碼進一步封…