移動端的自適應佈局神器—Flex Box(2)
之前的例子中,都是按照水平方向為例的,這些例子中的元素,高度都是相同的。如果元素的高度不同,在縱向方向上,也需要設定一些對齊方式。Flex佈局中也為我們提供了在另一個方向上對齊的設定,這個屬性就是align-item。align-items有五個選項值,它們分別是:
stretch — 設定元素佔滿整個長度,前提是沒有指定這些元素的高度,這是預設值
flex-start — 設定元素在起點對齊
flex-end — 設定元素終點對齊
center — 設定元素按照中線對齊
baseline — 設定元素按照每個元素中第一行文字的基線對齊
下面的例子中可以直觀的看到align-item屬性是如何進行工作的。
程式碼:
<!DOCTYPE> <html> <head> <meta charSet="utf-8" /> <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/> <style type="text/css"> .container{ display:flex; display:-webkit-flex; border: 2px solid black; padding: 20px; margin: 20px; flex-direction: row; flex-wrap: nowrap; justify-content: center; } .item1{ padding-top: 10px; background: green; width: 200px; height: 100px; margin: 10px; font-weight: bold; } .item2{ padding-top: 50px; background: green; width: 300px; height: 200px; margin: 10px; font-weight: bold; } .item3{ background: green; width: 100px; height: 50px; margin: 10px; font-weight: bold; } .item4{ padding-top: 100px; background: green; width: 100px; height: 150px; margin: 10px; font-weight: bold; } .flex-start{ align-items: flex-start; } .flex-end{ align-items: flex-end; } .center{ align-items: center; } .stretch{ align-items: stretch; } .baseline{ align-items: baseline; } </style> </head> <body> <div class="container flex-start"> <div class="item1">1</div> <div class="item2">2</div> <div class="item3">3</div> <div class="item4">4</div> </div> <div class="container flex-end"> <div class="item1">1</div> <div class="item2">2</div> <div class="item3">3</div> <div class="item4">4</div> </div> <div class="container center"> <div class="item1">1</div> <div class="item2">2</div> <div class="item3">3</div> <div class="item4">4</div> </div> <div class="container baseline"> <div class="item1">1</div> <div class="item2">2</div> <div class="item3">3</div> <div class="item4">4</div> </div> <div class="container stretch"> <div class="item1">1</div> <div class="item2">2</div> <div class="item3">3</div> <div class="item4">4</div> </div> </body> </html>
這個例子有幾處修改需要注意。首先,我們為不同的item元素添加了不同的padding-top值,這是為了能夠看出baseline的作用(按照第一行文字的基線對其)。其次,修改了不同item元素的高度,從而能夠看出使用align-items屬性後元素的展現的變化情況。
通過這個示例,就可以很清晰的明晰align-items是如何影響元素對齊方式的了。注意,當設定為stretch時,由於為元素設定了高度,所以最後的表現形式看起來和設定為flex-start的情況差不多。如果沒有設定高度,每個元素的高度都會等於100%。
當有多個元素,並且設定了元素可以換行時,可能會出現在彈性容器內部中包含了很多行元素。以水平為例,這麼多行的元素,每一行其實都有一個主軸,而這些主軸的對齊方式,其實也可以設定對齊方式。這個屬性是align-content。這個屬性的作用,可以理解為把每一行元素看成是一個元素,然後去在縱軸方向按不同的方式排列他們,類似於之前的align-items。只不過,這裡排列的單位是軸線。
align-content屬性包含的屬性值和justify-content屬性包含的屬性值完全相同,通過下面的例子,來體會一下align-content屬性是如何對軸線進行排列的。
<!DOCTYPE>
<html>
<head>
<meta charSet="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1"/>
<style type="text/css">
.container{
display:flex;
display:-webkit-flex;
border: 2px solid black;
padding: 20px;
margin: 20px;
flex-direction: row;
flex-wrap: wrap;
justify-content: center;
height: 300px;
}
.item1{
background: green;
width: 200px;
height: 30px;
margin: 10px;
font-weight: bold;
}
.item2{
background: green;
width: 300px;
height: 30px;
margin: 10px;
font-weight: bold;
}
.item3{
background: green;
width: 100px;
height: 30px;
margin: 10px;
font-weight: bold;
}
.item4{
background: green;
width: 100px;
height: 30px;
margin: 10px;
font-weight: bold;
}
.item5{
background: green;
width: 200px;
height: 30px;
margin: 10px;
font-weight: bold;
}
.item6{
background: green;
width: 300px;
height: 30px;
margin: 10px;
font-weight: bold;
}
.item7{
background: green;
width: 80px;
height: 30px;
margin: 10px;
font-weight: bold;
}
.item8{
background: green;
width: 50px;
height: 30px;
margin: 10px;
font-weight: bold;
}
.item9{
background: green;
width: 120px;
height: 30px;
margin: 10px;
font-weight: bold;
}
.item10{
background: green;
width: 200px;
height: 30px;
margin: 10px;
font-weight: bold;
}
.flex-start{
align-content: flex-start;
}
.flex-end{
align-content: flex-end;
}
.center{
align-content: center;
}
.stretch{
align-content: stretch;
}
.space-around{
align-content: space-around;
}
.space-between{
align-content: space-between;
}
</style>
</head>
<body>
<div class="container flex-start">
<div class="item1">1</div>
<div class="item2">2</div>
<div class="item3">3</div>
<div class="item4">4</div>
<div class="item5">5</div>
<div class="item6">6</div>
<div class="item7">7</div>
<div class="item8">8</div>
<div class="item9">9</div>
<div class="item10">10</div>
</div>
<div class="container flex-end">
<div class="item1">1</div>
<div class="item2">2</div>
<div class="item3">3</div>
<div class="item4">4</div>
<div class="item5">5</div>
<div class="item6">6</div>
<div class="item7">7</div>
<div class="item8">8</div>
<div class="item9">9</div>
<div class="item10">10</div>
</div>
<div class="container center">
<div class="item1">1</div>
<div class="item2">2</div>
<div class="item3">3</div>
<div class="item4">4</div>
<div class="item5">5</div>
<div class="item6">6</div>
<div class="item7">7</div>
<div class="item8">8</div>
<div class="item9">9</div>
<div class="item10">10</div>
</div>
<div class="container strench">
<div class="item1">1</div>
<div class="item2">2</div>
<div class="item3">3</div>
<div class="item4">4</div>
<div class="item5">5</div>
<div class="item6">6</div>
<div class="item7">7</div>
<div class="item8">8</div>
<div class="item9">9</div>
<div class="item10">10</div>
</div>
<div class="container space-between">
<div class="item1">1</div>
<div class="item2">2</div>
<div class="item3">3</div>
<div class="item4">4</div>
<div class="item5">5</div>
<div class="item6">6</div>
<div class="item7">7</div>
<div class="item8">8</div>
<div class="item9">9</div>
<div class="item10">10</div>
</div>
<div class="container space-around">
<div class="item1">1</div>
<div class="item2">2</div>
<div class="item3">3</div>
<div class="item4">4</div>
<div class="item5">5</div>
<div class="item6">6</div>
<div class="item7">7</div>
<div class="item8">8</div>
<div class="item9">9</div>
<div class="item10">10</div>
</div>
</body>
</html>
上面就介紹完了所有可以在彈性容器中設定的所有屬性。這些屬性,都是在父元素中設定的,通過為父元素設定這些屬性,可以改變其中子元素的排布方式。
喜歡讀書的,喜歡學知識的小夥伴,歡迎關注公眾號“精粹微閱讀”加入我們哦~~~