DIV橫向排列的方法:float/inline-block/flex

以下面這組 div 爲例,wrap 的高度由內容撐開

<div id="wrap">
    <div id="div1">div1</div>
    <div id="div2">div2</div>
    <div id="div3">div3</div>
</div>

平時是這樣的,上下排列~

float 浮動

#div1{
    float: left;
}
#div2 {
    float: right;
}
#div3 {
    float: right;
}

然後這樣了

成功橫向排列了,但是有幾個問題~

float 的特點:

  • 多個 div 右浮動時,順序會顛倒,請注意看 div2 和 div3,可以通過將它們再用一個 div 包起來,然後對它們設置左浮動,對父 div 設置右浮動來解決。
  • 脫離文檔流,若父元素高度由內容撐開,那麼就撐不開,從圖中可以看到 wrap 沒了,因爲高度變爲了 0,可通過清浮動來解決。
  • 文字會環繞在浮動元素周圍,圖中未表現出來。
  • 不能換行,圖中未表現出來。

inline-block 行塊標籤

#div1, #div2, #div3{
    display: inline-block;
}

橫排成功~但同樣有些問題:

inline-block 特點:

  • 元素間會有空白。這個空白其實是空白符,因爲 inline-block 會使元素在行內排列,也就是跟文字在一起排列,而我們源代碼中 div 和 div 之間的空格、Tab、換行符在瀏覽器裏會被合併成一個空白符,所以就會出現縫隙,常見的解決方案有:

                  1.通過給父元素設置 font-size: 0; ,使空白符不可見。但會導致子元素中繼承的字體大小也爲 0,解決方案:

                                1.可以明確子元素內字體大小的,爲其單獨設置文字大小。

                                2.可以使用 rem 作爲字體大小單位來繼承 HTML 根元素的字體大小屬性。

                   2.在源代碼裏把前一個 div 的結束標籤和後一個 div 的開始標籤貼在一起。可讀性極差,醜拒。

<div id="wrap">
    <div id="div1">div1
    </div><div id="div2">div2
    </div><div id="div3">div3</div>
</div>

                    3.不用 inline-block,嘿嘿~

  • 可以換行,如下圖


flex 彈性盒模型

最愛的解決方案,給父元素設置 display: flex; 即可。

#wrap{
    display: flex;
}

效果圖:

還可以通過 justify-content 屬性調整子元素的水平對齊方式:

#wrap{
    display: flex;
    justify-content: flex-start;
}

flex-start:

默認,圖同上。

flex-end:

center:

space-around:

space-between:

不過當父元素寬度不夠時, flex 默認是不會換行的,而是會等比例壓縮,縮放比例 flex-shrink 屬性或複合屬性 flex 相關。

通過 flex-wrap 屬性可以使其換行,該值有三個取值 nowrap、 wrap、 wrap-reverse,默認爲 nowrap。

#wrap{
    display: flex;
    flex-wrap: nowrap;
}

nowrap

默認,圖略。

wrap

wrap-reverse

flex 使用不再深入探討,推薦阮一峯寫的教程 Flex 佈局教程:語法篇
 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章