P粉4404536892023-08-22 12:47:17
我發現這在過去的幾年裡對於flex和grid都多次給我帶來了麻煩,所以我建議以下操作:
* { min-width: 0; min-height: 0; }
如果需要這種行為,只需使用min-width: auto
或min-height: auto
。
實際上,還可以加入box-sizing以使所有佈局更合理:
* { box-sizing: border-box; min-width: 0; min-height: 0; }
有人知道是否有任何奇怪的後果嗎?在使用上述方法的幾年中,我沒有遇到任何問題。實際上,我想不出任何情況下我會希望從內容向外佈局到flex/grid,而不是從flex/grid向內佈局到內容 --- 而且如果這種情況存在,那肯定很少見。所以這感覺像是一個糟糕的預設設定。但也許我漏掉了什麼?
P粉7524794672023-08-22 10:57:07
您遇到了flexbox的預設設定。
Flex專案在主軸上不能小於其內容的尺寸。
預設為...
min-width: auto
min-height: auto
...分別適用於行方向和列方向的flex項目。
您可以透過設定flex項目為:
min-width: 0
min-height: 0
overflow: hidden
(或任何其他值,除了visible
)關於auto
值...
換句話說:
min-width: auto
和min-height: auto
預設僅在overflow
為visible
時適用。 overflow
的值不是visible
,則min-size屬性的值為0
。 overflow: hidden
可以取代min-width: 0
和min-height: 0
。 以及...
min-height: auto
。 巢狀的Flex容器
#如果您在HTML結構的多個層次上處理flex項目,則可能需要覆寫較高層級項目上的預設min-width: auto
/ min-height: auto
。
基本上,具有min-width: auto
的較高層級flex專案可以阻止下方嵌套的具有min-width: 0
的專案縮小。
範例:
#Chrome vs. Firefox / Edge
自2017年以來,Chrome似乎要么(1)恢復到min-width: 0
/ min-height: 0
的預設值,要么(2)根據某個神秘的演算法在某些情況下會自動套用0
的預設值。 (這可能是他們所謂的幹預。)因此,許多人在Chrome中看到他們的佈局(尤其是期望的滾動條)按預期工作,但在Firefox / Edge中不起作用。有關更詳細的信息,請參閱這裡:Firefox和Chrome之間的flex-shrink差異
IE11
如規格所述,min-width
和min-height
屬性的auto
值是「新的」。這意味著某些瀏覽器可能仍然預設呈現0
值,因為它們在值更新之前實作了flex佈局,並且因為0
是CSS 2.1中min-width
和min-height
的初始值。 IE11是其中之一。 其他瀏覽器已經更新到了在flexbox規格中定義的較新的auto
值。
.container { display: flex; } .col { min-height: 200px; padding: 30px; word-break: break-word } .col1 { flex: 1; background: orange; font-size: 80px; min-width: 0; /* NEW */ } .col2 { flex: 3; background: yellow } .col3 { flex: 4; background: skyblue } .col4 { flex: 4; background: red }
<div class="container"> <div class="col col1">Lorem ipsum dolor</div> <div class="col col2">Lorem ipsum dolor</div> <div class="col col3">Lorem ipsum dolor</div> <div class="col col4">Lorem ipsum dolor</div> </div>