摘要:布局涉及到個屬性不含,其中父容器子容器各個。那么軸本身又是怎樣確定的呢在布局中,屬性決定主軸的方向,交叉軸的方向由主軸確定。如圖,剩余空間按的比例分配給子容器。如圖,超出的部分按的比例從給子容器中減去。
這幾種方式的搭配使用可以輕松搞定 PC 端頁面的常見需求,比如實現水平居中可以使用?margin: 0 auto
,實現水平垂直同時居中可以如下設置:
.dad { position: relative; }
.son { position: absolute; margin: auto; top: 0; right: 0; bottom: 0; left: 0; }
.dad { position: relative; }
.son { width: 100px; height: 100px; position: absolute; top: 50%; left: 50%; margin-top: -50px; margin-left: -50px; }
然而,這些寫法都存在一些缺陷:缺少語義并且不夠靈活。我們需要的是通過 1 個屬性就能優雅的實現子元素居中或均勻分布,甚至可以隨著窗口縮放自動適應。在這樣的需求下,CSS 的第 4 種布局方式誕生了,這就是我們今天要重點介紹的 flex 布局。
使用 flex 布局首先要設置父容器?display: flex
,然后再設置?justify-content: center
?實現水平居中,最后設置?align-items: center
?實現垂直居中。
#dad { display: flex; justify-content: center; align-items: center }
先從兩個基本概念說起
?
lex 的核心的概念就是 容器 和 軸。容器包括外層的 父容器 和內層的 子容器,軸包括 主軸 和 交叉軸,可以說 flex 布局的全部特性都構建在這兩個概念上。flex 布局涉及到 12 個 CSS 屬性(不含display: flex
),其中父容器、子容器各 6 個。不過常用的屬性只有 4 個,父容器、子容器各 2 個,我們就先從常用的說起吧。
?
justify-content
?屬性用于定義如何沿著主軸方向排列子容器
?
flex-start:起始端對齊
?
?
flex-end:末尾段對齊
?
center:居中對齊
?
space-around:子容器沿主軸均勻分布,位于首尾兩端的子容器到父容器的距離是子容器間距的一半。
?
space-between:子容器沿主軸均勻分布,位于首尾兩端的子容器與父容器相切。
?
align-items
?屬性用于定義如何沿著交叉軸方向分配子容器的間距。
?
flex-start:起始端對齊
?
flex-end:末尾段對齊
?
center:居中對齊
?
?
baseline:基線對齊,這里的?baseline
?默認是指首行文字,即?first baseline
,所有子容器向基線對齊,交叉軸起點到元素基線距離最大的子容器將會與交叉軸起始端相切以確定基線。
?
stretch:子容器沿交叉軸方向的尺寸拉伸至與父容器一致。
?
?
子容器是有彈性的(flex 即彈性),它們會自動填充剩余空間,子容器的伸縮比例由 flex
屬性確定。
flex
的值可以是無單位數字(如:1, 2, 3),也可以是有單位數字(如:15px,30px,60px),還可以是 none
關鍵字。子容器會按照 flex
定義的尺寸比例自動伸縮,如果取值為 none
則不伸縮。
雖然 flex
是多個屬性的縮寫,允許 1 - 3 個值連用,但通常用 1 個值就可以滿足需求,它的全部寫法可參考下圖。
?
?
每個子容器也可以多帶帶定義沿交叉軸排列的方式,此屬性的可選值與父容器?align-items
?屬性完全一致,如果兩者同時設置則以子容器的?align-self
?屬性為準。
?
flex-start:起始端對齊
?
flex-end:末尾段對齊
?
center:居中對齊
?
baseline:基線對齊
?
?
stretch:拉伸對齊
?
justify-content
屬性決定子容器沿主軸的排列方式,align-items
屬性決定子容器沿著交叉軸的排列方式。那么軸本身又是怎樣確定的呢?在 flex 布局中,flex-direction
屬性決定主軸的方向,交叉軸的方向由主軸確定。
?
?
主軸的起始端由?flex-start
?表示,末尾段由?flex-end
?表示。不同的主軸方向對應的起始端、末尾段的位置也不相同。
向右:flex-direction: row
?
向下:flex-direction: column
?
向左:flex-direction: row-reverse
?
向上:flex-direction: column-reverse
?
?
主軸沿逆時針方向旋轉 90° 就得到了交叉軸,交叉軸的起始端和末尾段也由 flex-start
和 flex-end
表示。
上面介紹的幾項屬性是 flex 布局中最常用到的部分,一般來說可以滿足大多數需求,如果實現復雜的布局還需要深入了解更多的屬性。
?
?
? nowrap:不換行?
?
?
wrap-reverse:逆序換行
逆序換行是指沿著交叉軸的反方向換行。
?
?
?
flow 即流向,也就是子容器沿著哪個方向流動,流動到終點是否允許換行,比如 flex-flow: row wrap
,flex-flow
是一個復合屬性,相當于 flex-direction 與 flex-wrap 的組合,可選的取值如下:
row
、column
等,可多帶帶設置主軸方向
wrap
、nowrap
等,可多帶帶設置換行方式
row nowrap
、column wrap
等,也可兩者同時設置
當子容器多行排列時,設置行與行之間的對齊方式。
?
?
flex-start:起始端對齊
?
flex-end:末尾段對齊
?
center:居中對齊
?
space-around:等邊距均勻分布
?
space-between:等間距均勻分布
?
stretch:拉伸對齊
?
flex-basis
?表示在不伸縮的情況下子容器的原始尺寸。主軸為橫向時代表寬度,主軸為縱向時代表高度。
?
?
子容器彈性伸展的比例。如圖,剩余空間按 1:2 的比例分配給子容器。
?
?
?
子容器彈性收縮的比例。如圖,超出的部分按 1:2 的比例從給子容器中減去。
?
?
改變子容器的排列順序,覆蓋 HTML 代碼中的順序,默認值為 0,可以為負值,數值越小排列越靠前
?
?
以上就是 flex 布局的全部屬性,一共 12 個,父容器、子容器各 6 個,可以隨時通過下圖進行回顧。
?
參考:https://juejin.im/post/58e3a5a0a0bb9f0069fc16bb
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/2317.html
摘要:塊級元素生成一個矩形框,作為文檔流的一部分行內元素則會創建一個或多個行框,置于父級元素中。元素框相對于之前正常文檔流中的位置發生偏移,并且原先的位置仍然被占據。元素框不再占有文檔流位置,并且相對于視窗進行定位。 談到布局,首先就要想到定位,當別人問我,css的position定位有哪些取值,分別表示什么意思?呃.....抓頭.gif,是時候回歸本質,看定義了。 1. 定位 1.1 po...
摘要:圣杯布局這是一個經典的布局挑戰,歷史上出現的方案都沒有完美解決。直到布局的出現,終于成為可能。有了布局,一切將會變得更簡單。垂直居中這個經典的問題問題一直被挑戰了很多年,歷史的解決方案沒有一個能夠完整地解決。 關于css的flex布局,我只想說他真的解決了曾經布局中float和position中的痛苦,網上關于flex的文章很多了,在這里分享兩篇好的文章(真的只有兩篇)供大家學習. 一...
摘要:居中分為水平居中和垂直居中,水平居中方式也較為常見和統一,垂直居中的方法就千奇百怪了。若把最后一行加上,即可同時實現水平和垂直居中。 博客原文地址:Claiyre的個人博客 https://claiyre.github.io/如需轉載,請在文章開頭注明原文地址不為繁華易匠心 從css入門就開始接觸,無所不在的,一直備受爭議的居中問題。css居中分為水平居中和垂直居中,水平居中方式也較為...
閱讀 1433·2021-11-22 15:24
閱讀 2525·2021-10-11 11:06
閱讀 2334·2021-10-09 09:45
閱讀 2532·2021-09-09 09:33
閱讀 639·2019-08-30 15:53
閱讀 1444·2019-08-30 12:48
閱讀 678·2019-08-29 13:47
閱讀 506·2019-08-26 18:27