欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

如何解決flex文本溢出問題小結(jié)

  發(fā)布時間:2022-07-11 15:55:41   作者:安迪five   我要評論
本文主要介紹了如何解決flex文本溢出問題,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧

前言

一個小姑娘問了我關(guān)于flex文本溢出的問題,事后我覺得這個問題還挺有意思的,所以簡單的研究下和大家分享分享。

問題

用一個簡化的css和html為例

<style>
  * {
    margin: 0;
    padding: 0;
  }
  .box {
    display: flex;
    height: 200px;
    margin-top: 20px;
    width: 400px;
    margin: 20px auto 0 auto;
  }
  .left {
    width: 100px;
    height: 100%;
    background: red;
  }
  .right {
    flex: auto;
    height: 100%;
    background: blue;
    color: #fff;
  }
  .text {
    overflow: hidden;
    white-space: nowrap;
    text-overflow: ellipsis;
  }
</style>

<div class="box">
  <div class="left">123</div>
  <div class="right">
    <p class="text">
      這是一段很長長長長長長長長長長長長長長長長長長文字,這是一段很長長長長長長長長長長長長長長長長長長文字
    </p>
  </div>
</div>
<div class="box" style="background: green">正常的box</div>

上面是一個flex容器,包括著兩個容器,其中右邊的容器中我們希望的應(yīng)該是正常展示,且文本顯示省略號,但總是事與愿違。頁面展示如下,左邊紅色區(qū)域被壓縮,藍(lán)色的區(qū)域拉伸了,并將父容器撐開。

那么,我們該如何解決怎么這個問題呢?

解決方法

方法有三,如下

  • 藍(lán)色容器設(shè)置 overflow: hidden
  • 藍(lán)色容器設(shè)置 width: 0
  • 藍(lán)色容器設(shè)置 min-width: 0

第一種 overflow超出截斷比較好理解。我們看看剩下的兩種。

法二 width

第二種,首先看下flex屬性

<!-- 縮寫 -->
flex: auto; 

flex-grow: 1;
flex-shrink: 1;
flex-basis: auto;

<!--默認(rèn)值為-->
flex: 0 1 auto;

flex: auto是flex: 0 1 auto的縮寫

其中

  • flex-grow:表示放大比例
  • flex-shrink:表示縮小比例
  • flex-basis:作用于子元素的主軸上的寬度屬性,并且優(yōu)先級比默認(rèn)的寬/高要高。 這個屬性決定CSS如何給可伸縮項在容器中分配初始大小.

上面作妖的屬性就是flex-basis。flex-basis的值有 content | \<width\>

flex-basis: 會檢索項目的width 或 height 值作為 flex-basis 的值。如果 width 或 height 值為 auto,則 flex-basis 設(shè)置為 content,也就是基于 flex 的元素的內(nèi)容自動調(diào)整大小。

注意: flex-basis設(shè)置 00% 上有所區(qū)別, 如果flex-basis的值為百分?jǐn)?shù),且它flex容器的尺寸沒有被顯式設(shè)置,此時flex-basis的值會被解析為content, 值會根據(jù)flex子項的內(nèi)容(指flex子項的子元素尺寸)來計算實際尺寸,多數(shù)情況下效果與 max-content 值一致,就是說flex子項的子元素有多長其主軸初始值就有多長。

這里藍(lán)色容器的flex-basis為默認(rèn)值0項目總寬度小于容器寬度,計算如下:

項目總寬度100px + 0px = 100px

待分配寬度400px - 100px = 300px

放大比例0 + 1 = 1 , 這是項目的flex-grow之和

每個項目得到自身的grow/總的grow之和比例的剩余空間。

紅色容器得到0/1 * 300px = 0,最終寬度100px + 0px = 100px

藍(lán)色容器得到 1/1 * 300px = 300px,最終寬度300px

將藍(lán)色容器的寬度設(shè)為0,驗證下我們的結(jié)果,結(jié)果如下,解決成功。

法三 min-width

一般情況下 min-width 屬性默認(rèn)值是 0 ,但是 Flexbox 容器中的 flex 項的 min-width 屬性默認(rèn)值是 auto ,這樣能為 Flexbox 布局指明更合理的默認(rèn)表現(xiàn)。將min-width設(shè)置成0,width未設(shè)置默認(rèn)值為auto。這個時候會使用shrink-to-fit算法去計算寬度(文獻(xiàn)3中說明flexbox中也會使用到該算法), 算法如下:

width = min(max(preferred minimum width, available width), preferred width)

其中

  • 最小寬度(preferred minimum width)也就是min-width
  • 可用寬度(available width) ,這個寬度為包含塊減去margin、border、padding以及所有相關(guān)滾動條的寬度。
  • 發(fā)生明確的換行外不發(fā)生換行的時 首選寬度(preferred width) 即content-box的寬度

那么計算如下: (816是當(dāng)時瀏覽器獲取的寬度)

min(max(0, 400px - 100px), 816px) = 300px

所以,設(shè)置最小寬度也能解決我們的問題。

flex再算一題

html的內(nèi)容如下,我們需要計算左右兩個容器的寬度。

<style>
  .box {
    display: flex;
    height: 200px;
    margin-top: 20px;
    width: 400px;
    margin: 20px auto 0 auto;
  }
  .item-1 {
    background: red;
    width: 200px;
    flex-shrink: 2;
  }
  .item-2 {
    background: blue;
    width: 300px;
    flex-shrink: 3;
  }
</style>
<div class="box">
  <div class="item-1">設(shè)置200px,實際169.23</div>
  <div class="item-2">設(shè)置300px,實際230.77</div>
</div>

開始計算,此時項目總寬度超過父容器時,這個時候需要使用flex-shrink計算

  • 先要去計算項目的虛擬總寬度Total = 各項目flex-basic * flex-strink 之和,這里左右項目都設(shè)置了寬度,所以flex-basis=width
  • 再計算單個項目的占比P = flex * flex-strink / Total
  • 最后計算項目應(yīng)該減去的大小 = 真實超出部分 * P

Total = 200 * 2 + 300 * 3 = 1300

P1 = 200 * (2 / VS)

P2 = 300 * (3 / VS)

最終得出:

item-1的寬度為:200 - (500 - 400) * P1 = 169.23px

item-2 的寬度為:300 - (500 - 400) * P2 = 230.77px

參考文獻(xiàn)

到此這篇關(guān)于如何解決flex文本溢出問題小結(jié)的文章就介紹到這了,更多相關(guān)flex文本溢出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!

相關(guān)文章

  • CSS flex-basis 文本溢出問題的解決

    這篇文章主要介紹了CSS flex-basis 文本溢出問題的解決,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起
    2019-12-04

最新評論