flex布局中子項目尺寸不受flex-shrink限制的問題解決

預(yù)期是寫一個如下所示的布局內(nèi)容:
即有一個固定高度的外部容器,頂部的header已知高度,在header占據(jù)了固定高度后,剩下的都分給body部分。因此采用flex
布局,header設(shè)置flex-shrink
為0,不自動收縮,body則flex-shrink
為1,使其高度壓縮為剩余高度。這個操作看起來挺符合直覺的。
然后在上述的body中有個content-wrapper內(nèi)容塊,設(shè)置height: 100%
以及overflow: auto
來讓他高度占滿父容器并且內(nèi)容過多時生成滾動條。
demo代碼如下:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>測試pre標簽</title> <style> * { padding: 0; margin: 0; } html, body { height: 100%; } .container { width: 800px; height: 500px; display: flex; flex-direction: column; } .header { height: 100px; background-color: rgb(226, 110, 110); flex-shrink: 0; } .body { flex-shrink: 1; background-color: rgb(146, 146, 223); } .content-wrapper { height: 100%; overflow: auto; } </style> </head> <body> <div class="container"> <div class="header">Header</div> <div class="body"> <div class="content-wrapper"> <div style="height: 1000px">很多很多的內(nèi)容</div> </div> </div> </div> </body> </html>
但最終效果確實如此:
很明顯body的高度并沒有被限制,實際的高度是子元素的內(nèi)容高度。
So why? 用搜索引擎搜了許久沒找到理想的答案,這種問題確實也很難以表述。我現(xiàn)在真正想知道的是:為什么我給flex
布局中的子項目設(shè)置了flex-shrink: 1
,但它卻沒按我預(yù)期的表現(xiàn)呢。網(wǎng)絡(luò)上相關(guān)的資料都僅僅告知如使用的,對于我想知道的,最適合的資料應(yīng)該是翻flex
這塊的實現(xiàn)標準。
依據(jù)https://www.w3.org/TR/css-flexbox-1/一節(jié)中的描述,首先是這么句話:
Note: The auto keyword, representing an automatic minimum size, is the new initial value of the min-width and min-height properties.
可知彈性項目的min-width
和min-height
的默認值是auto
,并不同于其他布局中的情況(默認為0)。
再往下來看:
To provide a more reasonable default minimum size for flex items, the used value of a main axis automatic minimum size on a flex item that is not a scroll container is a content-based minimum size; for scroll containers the automatic minimum size is zero, as usual.
這段話描述了在主軸方向上,上述的auto
值應(yīng)該如何計算彈性項目的寬/高度(我的例子中是flex-direction: column
,因此主軸為垂直方向,關(guān)注點是min-height
)。由上可知,對于彈性項目如果其是非滾動容器,min-height
值為內(nèi)容高度;反之則是0。
綜上,demo中的問題,修改方法之一就是,將div.body
變?yōu)闈L動容器,即設(shè)置overflow
為scroll
、auto
或者hidden
(沒錯hidden屬性也是,因為hidden
只是隱藏溢出的內(nèi)容不提供滾動條,但仍然可以通過js控制里邊的內(nèi)容來達到滾動效果,所以該情況也是滾動容器)。另一種方式是我們可以直接覆蓋min-height
的默認值,即顯示設(shè)置min-height: 0
也能達到目的。
到此這篇關(guān)于flex布局中子項目尺寸不受flex-shrink限制的問題解決的文章就介紹到這了,更多相關(guān)flex子項目尺寸不受flex-shrink限制內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
css彈性盒flex-grow、flex-shrink、flex-basis詳解
這篇文章主要介紹了css彈性盒flex-grow、flex-shrink、flex-basis詳解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面2021-01-27詳解flex布局中flex-grow與flex-shrink的計算方式
這篇文章主要介紹了詳解flex布局中flex-grow與flex-shrink的計算方式,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨2019-12-17flex-grow、flex-shrink、flex-basis和九宮格布局理解
這篇文章主要介紹了flex-grow、flex-shrink、flex-basis和九宮格布局理解的相關(guān)資料,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要2019-07-25- 本篇文章給大家?guī)淼膬?nèi)容是關(guān)于flex-shrink如何計算?flex-shrink的計算方法介紹,有一定的參考價值,有需要的朋友可以參考一下,希望對你有所幫助2018-10-25