1. 程式人生 > >移動端的自適應佈局神器—Flex Box(2)

移動端的自適應佈局神器—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>

上面就介紹完了所有可以在彈性容器中設定的所有屬性。這些屬性,都是在父元素中設定的,通過為父元素設定這些屬性,可以改變其中子元素的排布方式。

喜歡讀書的,喜歡學知識的小夥伴,歡迎關注公眾號“精粹微閱讀”加入我們哦~~~