搜尋

首頁  >  問答  >  主體

為什麼flex項目不能縮小至內容大小之下?

我有 4 個 Flexbox 列,一切正常,但是當我在列中新增一些文字並將其設為大字體大小時,由於 Flex 屬性,它會使列比應有的寬度更寬。

我嘗試使用word-break:break-word ,它有所幫助,但是當我將列大小調整為非常小的寬度時,文字中的字母被分成多行(每行一個字母),並且但該列的寬度不會小於一個字母的大小。

觀看此視頻 (一開始,第一列是最小的,但是當我調整視窗大小時,它是最寬的列。我只想始終尊重 Flex 設定;Flex 大小 1 : 3 : 4 : 4)

我知道,將字體大小和列填充設置為較小會有所幫助......但是還有其他解決方案嗎?

我無法使用 overflow-x:hidden

JSFiddle


#
.container {
  display: flex;
  width: 100%
}
.col {
  min-height: 200px;
  padding: 30px;
  word-break: break-word
}
.col1 {
  flex: 1;
  background: orange;
  font-size: 80px
}
.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>


#
P粉038161873P粉038161873438 天前765

全部回覆(2)我來回復

  • P粉884667022

    P粉8846670222023-10-16 12:25:29

    我發現多年來 Flex 和 grid 一直困擾著我,所以我提出以下建議:

    * { min-width: 0; min-height: 0; }

    然後如果您需要這種行為,只需使用 min-width: automin-height: auto 即可。

    事實上,也可以加入框大小以使所有佈局更加合理:

    * { box-sizing: border-box; min-width: 0; min-height: 0; }

    有人知道是否會產生任何奇怪的後果嗎?在混合使用上述方法的幾年裡我還沒有遇到任何問題。事實上,我想不出任何我想要從內容向外佈局到 Flex/Grid 的情況,而不是從 Flex/Grid 向內佈局到內容的情況 --- 當然,如果它們存在,它們也是罕見的。所以這感覺像是一個糟糕的預設值。但也許我錯過了一些東西?

    回覆
    0
  • P粉557957970

    P粉5579579702023-10-16 11:35:45

    Flex 專案的自動最小尺寸

    您遇到了 Flexbox 預設值。

    彈性項目不能小於其內容沿主軸的尺寸。

    預設值是...

    • 最小寬度:自動
    • #最小高度:自動
    #

    ...分別用於行方向和列方向的彈性項目。

    您可以透過將彈性項目設定為來覆寫這些預設值:

    • 最小寬度:0
    • #最小高度:0
    • #溢位:隱藏(或任何其他值,可見除外)

    Flexbox 規格

    關於auto值...

    #

    換句話說:

    • min-width: automin-height: auto 預設值僅在overflow 可見時適用.
    • 如果overflow值不可見,則min-size屬性的值為0
    • 因此,overflow: hide 可以取代 min-width: 0min-height: 0

    還有...


    你已經應用了 min-width: 0 但項目仍然沒有縮小?

    巢狀 Flex 容器

    #

    如果您要處理HTML 結構的多個層級上的Flex 項目,則可能需要覆寫預設的min-width: auto / min-height: auto 位於更高級別的項目上。

    基本上,具有 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-widthmin-height 屬性的 auto 值為「新」。這表示某些瀏覽器預設仍可能呈現0 值,因為它們在更新該值之前實作了Flex 佈局,而0min 的初始值CSS 2.1IE11 就是這樣的瀏覽器。 其他瀏覽器已更新至較新的 flexbox 規格 值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>

    回覆
    0
  • 取消回覆