今天正好複習到flex佈局,因爲flex彈性盒佈局在咱們前端開發中尤其重要因此拿出來單獨總結一下,順便講一下常見的幾種居中方式前端
<style>
* {
padding: 0;
margin: 0;
box-sizing: border-box;
}
.flexBox {
/* display: flex; */
width: 200px;
height: 200px;
margin: 10px;
background-color: aqua;
}
.item {
height: 100px;
width: 100px;
border: 1px solid black;
background-color: rgb(116, 226, 42);
}
</style>
<div class="flexBox">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
</div>
複製代碼
這是沒加flex佈局時的子元素排列狀況↓bash
很顯然,子盒子都爲塊級元素被排在不一樣行上,若是想要讓他們排在一行,用以往的方式是使用float讓他們浮動起來↓.item {
float: left;//添加浮動
height: 100px;
width: 100px;
border: 1px solid black;
background-color: rgb(116, 226, 42);
}
複製代碼
不過因爲父盒子的寬度限制,不能所有排滿。接下來咱們就來試試flex佈局↓
.flexBox {
display: flex;//給父容器添加flex盒子模型
width: 200px;
height: 200px;
margin: 10px;
background-color: aqua;
}
複製代碼
如今是否是都排在一行了,不過因爲是彈性佈局,強制排在一行下,那確定是要收縮了,若是設置能夠換行排列呢?
.flexBox {
display: flex;
flex-wrap: wrap;//容許換行排列
width: 200px;
height: 200px;
margin: 10px;
background-color: aqua;
}
複製代碼
是否是發現和float同樣的效果,不過要是用float讓他們都排在一行上那是否是很麻煩呢。可見flex能夠給咱們更多的佈局方式。接下來讓咱們學習一下flex吧!
display: flex
設置爲flex盒子模型,在父容器下設置這個,此時在父容器下的全部元素都具備彈性,也就是能夠伸縮了。flex-direction: row
此屬性設置flex佈局中主軸方向(子元素的排列方向),默認row即從左到右,還有row-reverse從右到左,column從上到下,column-reverse從下到上,提及flex佈局中有2個軸,元素就是依靠這2個軸進行對齊,一個是主軸,也就是子元素的排列方向,默認row即爲水平軸。默認從左到右排序。如今把主軸方向改成row-reverse
即爲水平從右到左排列↓佈局
如今子元素調了一個頭開始排序。接下來使用column
試試↓學習
column-reverse
也同樣↓
記住咯,flex-direction設置的是flex佈局中子元素的主軸方向,也就是那4個:左右,右左,上下,下上。這些都是影響子元素的開始排列方向,還有一點先說下,側軸(副軸)是永遠垂直於主軸的。
flex-wrap: nowrap
這個屬性上面也接觸過了,也就是設置flex佈局中子元素的換行狀況,默認nowrap是不換行若是空間夠好說,空間不夠就要擠壓元素了。可選值爲:nowrap不換行,wrap可換行,wrap-reverse換行且反轉。先試試wrap於nowrap區別↓wrap-reverse
是怎麼回事↓
?是否是超出預料了呢,沒錯
wrap-reverse
就是新行的位置變了,變成了上面,通常咱們寫字,新行都在下面,而這個反轉,就把新行寫在了上方。
flex-flow: row nowrap
這是一個複合屬性,也就是把flex-direction
和flex-wrap
合併在一個屬性上。這個屬性能夠同時設置flex的主軸方向和換行方式。也能夠分開單獨設置。justify-content: flex-start
這是屬性設置的是主軸的對齊方式,以前沒有設置對齊方式就是一個挨着一個排列,看圖最容易明白。align-items:stretch
此屬性設置flex佈局下單行時的側軸對齊狀況。align-content:stretch
設置flex佈局中多行時的側軸對齊狀況,把每一行看做一個元素進行對齊,與justify-content相似。flex:0 1 auto
這是一個複合屬性,能夠同時設置flex-grow、flex-shrink、flex-basis,分別爲子元素擴展比例、收縮比例、基礎比例。接下來依次講解flex-grow:0
設置子元素的擴展比例默認0,不容許負值。說白了就是當設置了擴展比例以後,若是父元素還有剩餘空間,則這部分空間由全部設置擴展比例的子元素按比例分配。flew-shrink:1
設置子元素的收縮比例,默認爲1,不容許負。如今知道爲何,空間不足的時候子元素會默認收縮嗎,由於有默認收縮比例,而擴展比例默認爲0即不分配額外空間。flex-basis:auto
設置元素的基準伸縮比例,默認auto狀況下,元素的寬度由width或者內容決定。若是全部子元素的基準值之和大於剩餘空間,則會根據每項設置的基準值,按比率伸縮剩餘空間。align-self:auto
設置子元素自身的側軸對齊方式,此屬性能夠單獨設置每一個子元素在側軸上的對齊。order:0
設置每一個元素的排列順序,數值越小排在越前面,也就是按照給定優先級排列元素。margin:0 auto
+text-align:center
這個設置前提是父元素要有寬高,只設置元素的水平居中以及此元素的子元素水平居中。
若是想讓子元素內的字水平垂直居中,則只須要在子元素設置line-height:子元素高度
父元素設置display:flex
+justify-content:center
子元素自動水平居中,若是要垂直也居中則還要設置align-items:center
或者align-content:center
此時子元素都水平垂直居中 flex
align-self:center
,垂直軸爲主軸時也是同樣。 父元素給個定位屬性和高寬,子元素設置position:absolute
+left:50%
+top:50%
+transform:translate(-50%,-50%)
,transform屬性能夠換成margin-left:-(子元素寬度一半)
和margin-top:-(子元素高度一半)
這樣就能水平垂直居中了ui
position:absolute
+margin:auto
+top:0
+left:0
+right:0
+bottom:0
,這樣也能實現水平垂直居中了,過有些繁瑣就是了