[英]Trouble using flex-basis
我不確定我是不是正確理解了flexbox模型,或者我是否錯誤地使用了它。
我有一個簡單的重復HTML塊:
<div class="row">
<span class="label">Label:</span>
<span class="value">{{session.value}}</span>
</div>
我的目標是讓每個標簽具有相同的寬度,並且具有占據剩余空間的值。 通常情況下,我會使用漂浮物或一些技巧,但我決定嘗試使用flexbox。
我試過的CSS很簡單:
.row {
display: flex;
}
.label {
width: 150px;
flex-basis: auto;
font-weight: bold;
}
我也嘗試過flex-basis: 150px
。 不幸的是,正在發生的事情是當我在單行中獲得單行時,內容的值是多行的,標簽會擠入可用的最小空間。 我的印象是加入flex-basis
設置flex容器的寬度,然后其他容器適合剩余的空間,基於它們的flex增長/收縮? 我不理解flexbox或沒有正確使用它?
你可以:
flex-grow
和flex-shrink
為0
,並將flex-basis
為150px
。 flex-grow
和flex-shrink
為1
,並將flex-basis
為100%
。 flex
屬性。 .row { display: flex; } .label { flex: 0 0 150px; font-weight: bold; } .value { flex: 0 1 100%; }
<div class="row"> <span class="label">Label 1:</span> <span class="value">{{session.value1}}</span> </div> <div class="row"> <span class="label">Label 2:</span> <span class="value">{{session.value2}}</span> </div> <div class="row"> <span class="label">Label 3:</span> <span class="value">{{session.value3}}</span> </div>
請注意, flex-grow: 0
和flex-shink: 1
是大多數瀏覽器的默認值,您只能使用flex-basis
屬性,但某些舊瀏覽器有一些細微差別, 例如 :
Internet Explorer 10使用
0
而不是1
作為flex-shrink
屬性的初始值。 解決方法是始終為flex-shrink
設置顯式值。
這就是為什么我更喜歡使用flex
屬性的顯式值。
對於具有彈性方向row
(默認)的彈性項目,使用flex-basis
而不是width
,何時定義固定寬度。
所以對於.label
來說
.label {
flex-basis: 150px;
font-weight: bold;
}
現在,為了使.value
占用剩余的空間,你使用flex-grow
,並且由於默認值是0
,並且通過給.value
一個1
, .value
將占用剩余空間的1個部分,而.label
0部分因此.value
將填補其余部分。
.value {
flex-grow: 1;
}
在空間不足的情況下,第三個屬性flex-shrink
(默認為1
)將允許.label
縮小。
堆棧代碼段
.row { display: flex; } .label { flex-basis: 150px; font-weight: bold; } .value { flex-grow: 1; } /* styling for this demo */ .row > span { border: 1px dotted lightgray; }
<div class="row"> <span class="label">Label:</span> <span class="value">{{session.value}}</span> </div>
如果您不希望.label
縮小超出其flex-basis
,請將其flex-shrink
設置為0
.row { display: flex; } .label { flex-basis: 150px; flex-shrink: 0; font-weight: bold; } .value { flex-grow: 1; } /* styling for this demo */ .row > span { border: 1px dotted lightgray; }
<div class="row"> <span class="label">Label:</span> <span class="value">{{session.value}}</span> </div>
使用簡寫版本flex: <flex-grow> <flex-shrink> <flex-basis>
的第二個樣本flex: <flex-grow> <flex-shrink> <flex-basis>
.row { display: flex; } .label { flex: 0 0 150px; font-weight: bold; } .value { flex: 1 1 auto; } /* styling for this demo */ .row > span { border: 1px dotted lightgray; }
<div class="row"> <span class="label">Label:</span> <span class="value">{{session.value}}</span> </div>
這是一篇很棒的文章,介紹如何使用Flexbox。 它還包括前綴屬性和“舊”,“tweener”和“新”版本。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.