flex布局子元素寬度超出父元素問題及解決方案
發(fā)布時間:2024-02-20 16:02:20 作者:codeCat!
我要評論

在Flex布局中,當子元素的總寬度超過父容器的寬度時就會出現(xiàn)問題,本文就來介紹一下flex布局子元素寬度超出父元素問題及解決方案,具有一定的參考價值,感興趣的可以了解一下
1. 第一次遇到這個問題的場景
先看效果圖,大家可以看一下下面的樣式,很明顯左邊和右邊的盒子我是給的定寬,但是被擠壓了
這個是我在項目中遇到的一個bug,使用的 flex 布局,由于我動態(tài)的修改綠色盒子的顯示與隱藏,導(dǎo)致兩邊盒子的擠壓
<style> .container { width: 1400px; display: flex; height: 100vh; } .box1 { background-color: red; width: 300px; } .box2 { background-color: yellow; flex: 1; } .box3 { background-color: green; width: 400px; } </style> <div class="container"> <div class="box1"></div> <div class="box2"> <div> ...el-table </div> </div> <div class="box3 none"></div> </div>
2. 第二種情況
很明顯,紅色的盒子沒有300px
<style> .container { display: flex; width: 600px; height: 600px; } .box1 { background-color: red; width: 300px; } .box2 { background-color: yellow; flex: 1; } </style> <div class="container"> <div class="box1"></div> <div class="box2">Loremipsumdolorsitametconsecteturadipisicingelit.Quasi,eveniet?</div> </div>
3. 問題原因
- 首先了解一下
flex: n;
的定義,當使用單值語法的時候,可以理解為就是設(shè)置了flex: n 1 0;
對應(yīng)的flex-grow: n; flex-shrink: 1; flex-basis: 0;
,這里我們只探究flex-grow: n;
- flex-grow:規(guī)定了項在 flex 容器中分配剩余空間的相對比例,這里的剩余空間指的是除內(nèi)容之外的空間
- 而上面兩種情況:
- 情況一:由于
flex-grow
只能使當前元素生效,而子元素的寬度也就是當前元素的內(nèi)容,在 el-table 中第一次讀取寬度后,會給子元素設(shè)置固定寬度,進而導(dǎo)致沒有剩余空間,也就是當內(nèi)容空間大于剩余空間時flex-grow: n;
就已經(jīng)失效了 - 情況二:內(nèi)容的長單詞沒有空格,可能在解析的時候當做一個字符,所以內(nèi)容的長度就是整個字符的實際長度,同樣也導(dǎo)致了
flex-grow: n;
的失效
- 情況一:由于
4. 解決方案
4.1 方案一
- 內(nèi)容盒設(shè)置
width: 0;
,側(cè)邊欄正常,但是內(nèi)容盒的內(nèi)容會溢出,這種情況看怎么處理內(nèi)容部分 - 因為側(cè)邊欄的寬度一般都是固定的,這種處理方案雖然會有一定的取舍,但是會比原先好一些
4.2 方案二
- 給內(nèi)容盒設(shè)置
overflow-y: auto;
,這樣側(cè)邊欄正常,內(nèi)容盒會出現(xiàn)橫向滾動條
到此這篇關(guān)于flex布局子元素寬度超出父元素問題及解決方案的文章就介紹到這了,更多相關(guān)flex布局子元素寬度超出內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持腳本之家!
相關(guān)文章
- 在使用彈性布局的時候,必然會有碰到分配子元素空間問題,本文主要介紹了flex子元素內(nèi)容超出盒子容器寬度問題解決,感興趣的可以了解一下2023-04-24