P粉1565327062023-08-28 13:19:46
我發現多年來 Flex 和 grid 一直困擾著我,所以我提出以下建議:
* { min-width: 0; min-height: 0; }
然後如果您需要這種行為,只需使用 min-width: auto
或 min-height: auto
即可。
事實上,也可以加入框大小以使所有佈局更加合理:
* { box-sizing: border-box; min-width: 0; min-height: 0; }
有人知道是否會產生任何奇怪的後果嗎?在混合使用上述方法的幾年裡我還沒有遇到任何問題。事實上,我想不出任何我想要從內容向外佈局到 Flex/Grid 的情況,而不是從 Flex/Grid 向內佈局到內容的情況 --- 當然,如果它們存在,它們也是罕見的。所以這感覺像是一個糟糕的預設值。但也許我錯過了一些東西?
P粉0432953372023-08-28 12:43:23
您遇到了 Flexbox 預設值。
彈性項目不能小於其內容沿主軸的尺寸。
預設值是...
最小寬度:自動
#最小高度:自動
...分別用於行方向和列方向的彈性項目。
您可以透過將彈性項目設定為來覆寫這些預設值:
最小寬度:0
#最小高度:0
#溢位:隱藏
(或任何其他值,可見
除外)關於auto
值...
換句話說:
min-width: auto
和 min-height: auto
預設值僅在overflow
可見
時適用.overflow
值不可見
,則min-size屬性的值為0
。 overflow: hide
可以取代 min-width: 0
和 min-height: 0
。 還有...
min-height: auto
。 巢狀 Flex 容器
#如果您要處理HTML 結構的多個層級上的Flex 項目,則可能需要覆寫預設的min-width: auto
/ min-height: auto code> 位於更高級別的項目上。
基本上,具有 min-width: auto
的更高層級的 Flex 項目可以防止使用 min-width: 0
嵌套在下面的項目收縮。
範例:
Chrome 與 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
是min 的初始值CSS 2.1。 IE11 就是這樣的瀏覽器。 其他瀏覽器已更新至較新的
flexbox 規格中定義的 auto中定义的 auto
值a>.
.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>