
批改狀態(tài):合格
老師批語(yǔ):
介紹
CSS 彈性盒子布局是 CSS 的模塊之一,定義了一種針對(duì)用戶(hù)界面設(shè)計(jì)而優(yōu)化的 CSS 盒子模型。在彈性布局模型中,彈性容器的子元素可以在任何方向上排布,也可以“彈性伸縮”其尺寸,既可以增加尺寸以填滿(mǎn)未使用的空間,也可以收縮尺寸以避免父元素溢出。子元素的水平對(duì)齊和垂直對(duì)齊都能很方便的進(jìn)行操控。通過(guò)嵌套這些框(水平框在垂直框內(nèi),或垂直框在水平框內(nèi))可以在兩個(gè)維度上構(gòu)建布局。
術(shù)語(yǔ)
display:flex
屬性元素,任何元素都可以通過(guò)添加display:flex;
屬性,轉(zhuǎn)換為彈性盒元素,轉(zhuǎn)換為 flex 元素后,它的內(nèi)部的“子元素”就支持 flex 布局了。屬性 | 描述 |
---|---|
flex-flow | 主軸方向與換行方式 |
justify-content | 項(xiàng)目在主軸上的對(duì)齊方式 |
align-items | 項(xiàng)目在交叉軸上的對(duì)齊方式 |
align-content | 項(xiàng)目在多行容器中的對(duì)齊方式 |
1.flex-flow
屬性
flex-flow
屬性是flex-direction
屬性和flex-wrap
屬性的簡(jiǎn)寫(xiě)flex-direction
屬性指定了內(nèi)部元素是如何在 flex
容器中布局的,定義了主軸的方向。它的默認(rèn)值是row
,默認(rèn)水平方向?yàn)橹鬏S。
flex-wrap 指定 flex 元素單行顯示還是多行顯示 。如果允許換行,這個(gè)屬性允許你控制行的堆疊方向。它的默認(rèn)值是nowrap
,默認(rèn)是不允許換行顯示。
具體演示如下:
html 代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>flex-flow屬性演示</title>
<link rel="stylesheet" href="style/demo4.css" />
</head>
<body>
<div class="container">
<div class="item">元素塊1</div>
<div class="item">元素塊2</div>
<div class="item">元素塊3</div>
<div class="item">元素塊4</div>
<div class="item">元素塊5</div>
<div class="item">元素塊6</div>
<div class="item">元素塊7</div>
<div class="item">元素塊8</div>
</div>
</body>
</html>
css 代碼
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.container {
/* 轉(zhuǎn)換為flex彈性布局元素 */
display: flex;
padding: 1em;
height: 15em;
border: 1px solid #000;
margin: 1em;
}
.container > .item {
/* height: 2em; */
width: 5em;
background-color: lightcyan;
border: 1px solid #000;
}
/* 1. 單行容器 */
.container {
/* 控制主軸方向,默認(rèn)值是row水平方向 */
/* flex-direction: row; */
/* 控制項(xiàng)目換行方式,默認(rèn)值是nowrap不換行 */
/* flex-wrap: nowrap; */
/* 縮寫(xiě)方式flex-flow */
flex-flow: row nowrap;
}
}
不允許換行顯示效果如下:
可以看到的是,所有的項(xiàng)目都擠在一塊,哪怕是寬度不夠也只會(huì)收縮,不會(huì)換行。
加上 css 代碼
.container {
flex-flow: row wrap;
}
可以看到的是,在換行允許了之后,項(xiàng)目就不會(huì)收縮,而是換行顯示。 2.justify-content
屬性
justify-content
屬性定義了瀏覽器之間,如何分配順著彈性容器主軸的元素之間及其周?chē)目臻g。
在順著主軸的方向空間分配分為兩種情況
第一種是將容器下的所有項(xiàng)目看成是一個(gè)整體進(jìn)行空間分配
第二種是將容器下的項(xiàng)目看成是一個(gè)個(gè)獨(dú)立的個(gè)體進(jìn)行空間分配
一共有三種情況:
沿起始位置對(duì)齊:flex-start
沿終止位置對(duì)齊:flex-end
居中對(duì)齊:center
示例演示:
html 代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>flex-flow屬性演示</title>
<link rel="stylesheet" href="style/demo4.css" />
</head>
<body>
<div class="container">
<div class="item">元素塊1</div>
<div class="item">元素塊2</div>
<div class="item">元素塊3</div>
<div class="item">元素塊4</div>
<div class="item">元素塊5</div>
<div class="item">元素塊6</div>
<div class="item">元素塊7</div>
<div class="item">元素塊8</div>
</div>
</body>
</html>
css 代碼
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.container {
/* 轉(zhuǎn)換為flex彈性布局元素 */
display: flex;
padding: 1em;
height: 15em;
border: 1px solid #000;
margin: 1em;
}
.container > .item {
/* height: 2em; */
width: 5em;
background-color: lightcyan;
border: 1px solid #000;
}
.container {
flex-flow: row nowrap;
/* 左對(duì)齊 */
justify-content: flex-start;
/* 右對(duì)齊 */
justify-content: flex-end;
/* 居中對(duì)齊 */
justify-content: center;
}
按照順序,顯示效果如下:
左對(duì)齊顯示
右對(duì)齊顯示
居中顯示
一共有三種情況:
space-between
:均勻排列每個(gè)元素,首個(gè)元素放置于起點(diǎn),末尾元素放置于終點(diǎn)。
space-around
:均勻排列每個(gè)元素,每個(gè)元素周?chē)峙湎嗤目臻g。
space-evenly
:均勻排列每個(gè)元素,每個(gè)元素之間的間隔相等。
示例演示:
上邊的 html 代碼不變,css 代碼添加上如下:
.container {
/* 兩端對(duì)齊,剩余空間在除了起始項(xiàng)目和終結(jié)項(xiàng)目的其他項(xiàng)目?jī)啥似骄植?*/
justify-content: space-between;
/* 分散對(duì)齊,剩余空間在每個(gè)項(xiàng)目的左右兩端平均分布 */
justify-content: space-around;
/* 平均對(duì)齊,剩余空間在每個(gè)項(xiàng)目之間平均分布 */
justify-content: space-evenly;
}
顯示效果依次如下:
兩端對(duì)齊顯示:
分散對(duì)齊顯示:
平均對(duì)齊顯示:
3.align-items
屬性
align-items
屬性是項(xiàng)目在交叉軸上的對(duì)齊方式
它一共有四個(gè)常用的屬性值,分別是:
stretch
flex-start
flex-end
center
示例演示:
html 代碼用上邊的,css 代碼添加上下邊的。
.container {
flex-flow: row wrap;
/* 默認(rèn)是拉伸的 */
align-items: stretch;
/* 頂對(duì)齊 */
align-items: flex-start;
/* 底對(duì)齊 */
align-items: flex-end;
/* 居中對(duì)齊 */
align-items: center;
}
顯示效果按順序如下:
默認(rèn)值顯示:
頂對(duì)齊顯示:
底對(duì)齊顯示:
居中對(duì)齊顯示:
4.align-content
屬性
align-content
屬性設(shè)置了瀏覽器如何沿著彈性盒子布局的交叉軸在內(nèi)容項(xiàng)之間和周?chē)峙淇臻g。
它一共有 7 個(gè)常用的值,分別是:
它的顯示效果和 align-item 以及 justify-content 屬性的幾種顯示方式相似,不過(guò) align-content 屬性對(duì)于僅限單行的項(xiàng)目不起作用。
屬性 | 描述 |
---|---|
flex |
項(xiàng)目的縮放比例與基準(zhǔn)寬度 |
align-self |
單個(gè)項(xiàng)目在交叉軸上的對(duì)齊方式 |
order |
項(xiàng)目在主軸上排列順序 |
1.flex
屬性
flex
屬性是 flex-grow,flex-shrink,flex-basis 這三個(gè)屬性的縮寫(xiě)flex-grow
屬性設(shè)置了一個(gè) flex 項(xiàng)主尺寸的 flex 增長(zhǎng)系數(shù)。它指定了 flex 容器中剩余空間的多少應(yīng)該分配給項(xiàng)目(flex 增長(zhǎng)系數(shù))。flex-shrink
屬性指定了 flex 元素的收縮規(guī)則。flex 元素僅在默認(rèn)寬度之和大于容器的時(shí)候才會(huì)發(fā)生收縮,其收縮的大小是依據(jù) flex-shrink 的值。flex-basis
屬性指定了 flex 元素在主軸方向上的初始大小。如果不使用 box-sizing 改變盒模型的話(huà),那么這個(gè)屬性就決定了 flex 元素的內(nèi)容盒(content-box)的尺寸。
示例演示:
html 代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>項(xiàng)目上的屬性:flex</title>
<link rel="stylesheet" href="style/demo7.css" />
</head>
<body>
<div class="container">
<div class="item">item1</div>
<div class="item">item2</div>
<div class="item">item3</div>
<div class="item">item4</div>
</div>
</body>
</html>
css 代碼
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.container {
/* 轉(zhuǎn)換為flex彈性布局元素 */
display: flex;
padding: 1em;
height: 15em;
border: 1px solid #000;
margin: 1em;
}
.container > .item {
/* height: 2em; */
width: 5em;
background-color: lightcyan;
border: 1px solid #000;
}
/* 項(xiàng)目屬性flex */
.container .item {
/* flex: flex-grow flex-shrink flex-basis;
flex: 放大因子 收縮因子 項(xiàng)目在主軸上的基準(zhǔn)寬度 */
/* 默認(rèn)值:flex:0 1 auto;或者是flex:initial; */
/* 不放大,可以收縮,寬度取容器的width屬性 */
/* flex: 0 1 auto; */
flex: initial;
/* 允許放大和收縮 */
/* flex: 1 1 auto; */
flex: auto;
/* 禁止放大和收縮 */
/* flex: 0 0 auto; */
flex: none;
/* 如果只寫(xiě)一個(gè)數(shù)字,表示放大因子 */
/* flex: 1;等價(jià)于 flex: 1 1 auto; */
flex: 1;
/* flex通常不會(huì)用來(lái)設(shè)置所有項(xiàng)目的默認(rèn)選項(xiàng),通常用來(lái)設(shè)置某一個(gè)項(xiàng)目的特征 */
}
/* ---------------------------------------------- */
/* 案例,要求第二個(gè)和第三個(gè)項(xiàng)目的寬度是第一個(gè)和第四個(gè)項(xiàng)目的2倍 */
.container > .item:first-of-type,
.container > .item:last-of-type {
flex: 1;
}
.container > .item:nth-of-type(2),
.container > .item:nth-of-type(3) {
flex: 2;
}
案例:有四個(gè)項(xiàng)目,要求第二個(gè)和第三個(gè)項(xiàng)目的寬度是第一個(gè)和第四個(gè)項(xiàng)目的 2 倍。
案例顯示:
2.align-self
屬性
align-self
屬性可以單獨(dú)的去設(shè)置一個(gè)項(xiàng)目在交叉軸上的對(duì)齊方式
它也擁有四個(gè)屬性,分別是:
示例演示:
html 代碼用 1 中的代碼,css 代碼示例如下:
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.container {
/* 轉(zhuǎn)換為flex彈性布局元素 */
display: flex;
padding: 1em;
height: 15em;
border: 1px solid #000;
margin: 1em;
}
.container > .item {
/* height: 2em; */
width: 5em;
background-color: lightcyan;
border: 1px solid #000;
}
/* 例如設(shè)置第二個(gè)項(xiàng)目與其他項(xiàng)目的對(duì)齊方式不一樣 */
.container > .item:nth-of-type(2) {
align-self: stretch;
align-self: flex-start;
align-self: flex-end;
align-self: center;
}
顯示效果按順序如下:
默認(rèn)顯示:
頂對(duì)齊顯示:
底對(duì)齊顯示:
居中對(duì)齊顯示:
3.order
屬性
order
屬性: 設(shè)置某個(gè)項(xiàng)目在主軸上的排列順序。默認(rèn)序號(hào)越小越靠前,越大越靠后。沒(méi)有 border 屬性就按照代碼書(shū)寫(xiě)順序來(lái)顯示。
示例演示(讓 4 號(hào)項(xiàng)目排在第一位):
html 代碼
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>設(shè)置項(xiàng)目在主軸上的顯示順序</title>
<link rel="stylesheet" href="style/demo9.css" />
</head>
<body>
<div class="container">
<div class="item">1</div>
<div class="item">2</div>
<div class="item">3</div>
<div class="item">4</div>
</div>
</body>
</html>
css 代碼
* {
box-sizing: border-box;
margin: 0;
padding: 0;
}
.container {
/* 轉(zhuǎn)換為flex彈性布局元素 */
display: flex;
padding: 1em;
height: 15em;
border: 1px solid #000;
margin: 1em;
}
.container > .item {
/* height: 2em; */
width: 5em;
background-color: lightcyan;
border: 1px solid #000;
font-size: 3em;
}
/* 顯示順序:默認(rèn)按照源碼的書(shū)寫(xiě)順序排列 */
/* 默認(rèn)序號(hào)越小越靠前,越大越靠后 */
/* 支持負(fù)值 */
.container > .item:first-of-type {
background-color: yellow;
order: 1;
}
.container > .item:nth-of-type(2) {
background-color: lightgreen;
order: 2;
}
.container > .item:nth-of-type(3) {
background-color: lightcyan;
order: 3;
}
.container > .item:last-of-type {
background-color: #ccc;
order: 0;
}
顯示效果:
微信掃碼
關(guān)注PHP中文網(wǎng)服務(wù)號(hào)
QQ掃碼
加入技術(shù)交流群
Copyright 2014-2025 http://ipnx.cn/ All Rights Reserved | php.cn | 湘ICP備2023035733號(hào)