成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

十分鐘徹底掌握 CSS Flex 布局

開發 前端
CSS 中的 Flex 布局是一種一維的布局模型,一次只能處理一個維度上的元素布局,一行或者一列。它給 flexbox 的子元素之間提供了強大的空間分布和對齊能力。下面就來看看如何在 CSS 中使用 Flex 布局!

CSS 中的 Flex 布局是一種一維的布局模型,一次只能處理一個維度上的元素布局,一行或者一列。它給 flexbox 的子元素之間提供了強大的空間分布和對齊能力。下面就來看看如何在 CSS 中使用 Flex 布局!

基本概念

Flexbox 布局也叫 Flex 布局,彈性盒子布局。它的目標是提供一個更有效地布局、對齊方式,并且能夠使父元素在子元素的大小未知或動態變化情況下仍然能夠分配好子元素之間的間隙。

主要思想是使父元素能夠調整子元素的寬度、高度、排列方式,從而更好的適應可用的布局空間。設定為flex布局的元素能夠放大子元素使之盡可能填充可用空間,也可以收縮子元素使之不溢出。

Flex布局更適合小規模的布局,可以簡便、完整、響應式的實現各種頁面布局。但是,設為Flex布局以后,其子元素的float?、clear?和vertical-align屬性將失效。Flex彈性盒模型的優勢在于只需聲明布局應該具有的?為,?不需要給出具體的實現?式,瀏覽器負責完成實際布局,當布局涉及到不定寬度,分布對?的場景時,就要優先考慮彈性盒布局。

Flex 布局是一個完整的模塊,它包括了一套完整的屬性。其中采用 Flex 布局的元素,稱為 Flex 容器,簡稱"容器"。它的所有子元素就是容器成員,稱為 Flex 項目,簡稱"項目"。

圖片

容器默認存在兩個軸:水平軸(main axis)和垂直軸(cross axis),項目默認沿主軸排列(水平軸):

圖片

這里面涉及到了幾個概念,下面來看一下:

  • main axis: Flex 父元素的主軸是指子元素布局的主要方向軸,它由屬性flex-direction來確定主軸是水平還是垂直的,默認為水平軸。
  • main-start & main-end: 分別表示主軸的開始和結束,子元素在父元素中會沿著主軸從main-start到main-end排布。
  • main size: 單個項目占據主軸的長度大小。
  • cross axis: 交叉軸,與主軸垂直。
  • cross-start & cross-end: 分別表示交叉軸的開始和結束。子元素在交叉軸的排布從cross-start開始到cross-end。
  • cross size: 子元素在交叉軸方向上的大小。

容器屬性

想要使用flex布局,首先需要給父元素指定為flex布局,這樣容器內的元素才能實現flex布局:

<div class="container"></div>
.container {
display: flex | inline-flex;
}

這里有兩種方式可以設置flex布局,使用display: flex;?會生成一個塊狀的flex容器盒子,使用display: inline-flex;?會生成一個行內的flex容器盒子。如果我們使用塊狀元素,比如div標簽,就可以使用flex,如果使用行內元素,就可以使用inline-flex。多數情況下,我們會使用 display: flex;。

父元素(容器)可以設置以下六個屬性:

  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items
  • align-content

1、flex-direction

flex-direction:主軸方向,它決定了容器內元素排列方向,它有四個屬性值:

.container {
flex-direction: row | row-reverse | column | column-reverse;
}

(1)flex-direction: row:默認值,沿水平主軸從左到右排列,起點在左沿。

圖片

(2)flex-direction: row-reverse:沿水平主軸從右到左排列,起點在右沿。

圖片

(3)flex-direction: column:沿垂直主軸從上到下排列,起點在上沿。

圖片

(4)flex-direction: column-reverse:沿垂直主軸從下到上排列,起點在下沿。

圖片

2、flex-wrap

flex-wrap:容器內元素是否可以換行,它有三個屬性值:

.container {
flex-wrap: nowrap | wrap | wrap-reverse;
}

(1)flex-wrap: nowrap:默認值,不換行。當主軸的長度是固定并且空間不足時,項目尺寸會隨之進行調整,而不會換行。

圖片

(2)flex-wrap: wrap:換行,第一行在上面

圖片

(3)flex-wrap: wrap-reverse:換行,第一行在下面。

圖片

3、flex-flow

flex-flow? 是 flex-direction? 屬性和flex-wrap?屬性的簡寫,默認為:flex-flow:row nowrap,用處不大,最好還是分開來寫。該屬性的書寫格式如下:

.container {
flex-flow: <flex-direction> <flex-wrap>;
}

4、justify-content

justify-content:元素在主軸的對齊方式,它有五個屬性值:

.container {
justify-content: flex-start | flex-end | center | space-between | space-around;
}

這里以水平方向為主軸進行舉例,即flex-direction: row。

(1)justify-content : flex-start:默認值,元素在主軸上左對齊(上對齊)。

圖片

(2)??justify-content : flex-end??:元素在主軸上右對齊(下對齊)。

圖片

(3)justify-content : center :元素在主軸上居中對齊。

? 圖片 ?

(4)justify-content : space-between:元素在主軸上兩端對齊,元素之間間隔相等

圖片

(5)justify-content : space-around :每個項目兩側的間隔相等。所以,項目之間的間隔比項目與邊框的間隔大一倍。

圖片

5、align-items

align-item:元素在交叉軸上的對齊方式,它有五個屬性值:

.container {
align-items: flex-start | flex-end | center | baseline | stretch;
}

這里以水平方向為主軸進行舉例,即flex-direction: row。

(1)align-item:flex-start:交叉軸的起點對齊(上面或左邊)。設置容器高度為 100px,項目高度分別為 20px、40px、60px、80px、100px,效果如圖所示:

圖片

(2)align-item:flex-end:交叉軸的終點對齊(下面或右邊)。設置容器高度為 100px,項目高度分別為 20px、40px、60px、80px、100px,效果如圖所示:

圖片

(3)align-item:center:交叉軸的中點對齊。設置容器高度為 100px,項目高度分別為 20px、40px、60px、80px、100px,效果如圖所示:

圖片

(4)align-item:stretch:默認值、如果元素未設置高度或設為auto,將占滿整個容器的高度。假設容器高度設置為 100px,而項目沒有設置高度,則項目的高度也為 100px:

圖片

(5)align-item:baseline:以元素的第一行文字的基線對齊

圖片

6.、align-content

align-content:多根軸線對齊方式。如果元素只有一根軸線,該屬性不起作用。它有六個屬性值:

.container {
align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}

那這個軸線數怎么確定呢?實際上這主要是由flex-wrap?屬性決定的,當flex-wrap? 設置為 nowrap? 時,容器僅存在一根軸線,因為項目不會換行,就不會產生多條軸線。當 flex-wrap? 設置為 wrap 時,容器可能會出現多條軸線,這時就需要去設置多條軸線之間的對齊方式。

這里以水平方向為主軸時舉例,即:flex-direction: row; flex-wrap: wrap;

(1)align-content: stretch:默認值,軸線占滿整個交叉軸。這里我們先設置每個項目都是固定寬度,效果如下:

圖片

下面就去掉每個項目的高度,它會占滿整個交叉軸,效果如下:

圖片

(2)align-content: flex-start:從交叉軸開始位置填充。

圖片

(3)align-content: flex-end:從交叉軸結尾位置填充。

圖片

(4)align-content: center:與交叉軸中點對齊。

圖片

(5)align-content: space-between:與交叉軸兩端對齊,軸線之前的間隔平均分布。

圖片

(6)align-content: space-around:每根軸線兩側的間隔都相等。所以,軸線之間的間隔比軸線與邊框的間隔大一倍。

圖片

項目屬性

子元素有以下六個屬性:

  • order
  • flex-grow
  • flex-shrink
  • flex-basis
  • flex
  • align-self

1、order

order?屬性用來定義項目的排列順序。數值越小,排列越靠前,默認為0。使用形式如下:

.item {
order: <integer>;
}

圖片

2、flex-basis

flex-basis屬性定義了在分配多余空間之前,項目占據的主軸空間,瀏覽器會根據這個屬性來計算主軸是否有多余空間。它的默認值為auto,即項目的本來大小。使用形式如下:

.item {
flex-basis: <length> | auto;
}

當主軸設置為水平時,當設置了 flex-basis,設置的項目寬度值會失效,flex-basis? 需要跟 flex-grow? 和 flex-shrink 配合使用才能生效。有兩種特殊的值:

  • 當flex-basis 值為 0 % 時,項目尺寸會被認為是0,因此無論項目尺寸設置多少都用;
  • 當flex-basis 值為 auto 時,則跟根據尺寸的設定值來設置大小。

3、flex-grow

flex-grow屬性定義項目的放大比例,默認為0,即如果存在剩余空間時也不放大。

當容器中所有的項目都設置了flex-basis屬性時,如果仍有是剩余的空間,設置的 flex-grow 屬性才能生效。

  • 如果所有項目的flex-grow屬性都設置為1,那么它們會均分剩余的空間,如下圖所示:

圖片

  • 如果其中一個項目的flex-grow屬性設置為2,其他均為1,那么它占據的剩余空間就是其他項目的兩倍,如下圖所示:

圖片

4、flex-shrink

flex-shrink屬性定義了項目的縮小比例,默認為1,即如果空間不足,該項目將縮小。不能設置負值,使用形式如下:

.item {
flex-shrink: <number>;
}
  • 如果所有項目的flex-shrink 屬性都為 1,當空間不足時,都將等比例縮小,如下圖所示:

圖片

  • 如果一個項目的flex-shrink 屬性為 0,其他項目都為 1,則空間不足時,前者不縮小,如下圖所示:

圖片

5、flex

flex?屬性是flex-grow?, flex-shrink? 和 flex-basis?的簡寫,后兩個屬性可選。默認值為:flex:0 1 auto。使用形式如下:

.item{
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
}

對于flex的取值有幾種常用的特殊情況:

(1)默認值:flex:0 1 auto,即在有剩余空間時,只放大不縮小。

.item {
flex:0 1 auto;
}
.item {
flex-grow: 0;
flex-shrink: 1;
flex-basis: auto;
}

(2)flex: none,即有剩余空間時,不放大也不縮小,最終尺寸通常表現為最大內容寬度。

.item {
flex:0 0 auto;
}
.item {
flex-grow: 0;
flex-shrink: 0;
flex-basis: auto;
}

(3)flex: 0,即當有剩余空間時,項目寬度為其內容的寬度,最終尺寸表現為最小內容寬度。

.item {
flex:0 1 0%;
}
.item {
flex-grow: 0;
flex-shrink: 1;
flex-basis: 0%;
}

(4)flex: auto,即元素尺寸可以彈性增大,也可以彈性變小,具有十足的彈性,但在尺寸不足時會優先最大化內容尺寸。

.item {
flex:1 1 auto;
}
.item {
flex-grow: 1;
flex-shrink: 1;
flex-basis: auto;
}

(5)flex: 1,即元素尺寸可以彈性增大,也可以彈性變小,具有十足的彈性,但是在尺寸不足時會優先最小化內容尺寸。

.item {
flex:1 1 0%;
}
.item {
flex-grow: 1;
flex-shrink: 1;
flex-basis: 0%;
}

6、align-self

align-self?屬性允許單個項目有與其他項目不一樣的對齊方式,可覆蓋align-items?屬性。默認值為auto?,表示繼承父元素的align-items?屬性,如果沒有父元素,則等同于stretch。

.item {
align-self: auto | flex-start | flex-end | center | baseline | stretch;
}

這個屬性和align-items?屬性的效果是一樣的,只不過這個屬性只對單個項目生效,而align-items是對容器中所有的項目生效。

設置容器的align-items?屬性為flex-start?,容器中第三個項目的align-self?屬性為flex-end,效果如下:

圖片

責任編輯:姜華 來源: 前端充電寶
相關推薦

2024-08-30 10:51:51

2024-10-25 15:56:20

2020-12-17 06:48:21

SQLkafkaMySQL

2019-04-01 14:59:56

負載均衡服務器網絡

2023-09-26 22:12:13

數據倉庫Doris

2023-10-07 00:06:09

SQL數據庫

2022-06-16 07:31:41

Web組件封裝HTML 標簽

2024-06-19 09:58:29

2021-09-07 09:40:20

Spark大數據引擎

2023-04-12 11:18:51

甘特圖前端

2015-09-06 09:22:24

框架搭建快速高效app

2012-07-10 01:22:32

PythonPython教程

2023-11-30 10:21:48

虛擬列表虛擬列表工具庫

2024-05-13 09:28:43

Flink SQL大數據

2023-10-07 13:13:24

機器學習模型數據

2019-09-16 09:14:51

2009-10-09 14:45:29

VB程序

2023-07-15 18:26:51

LinuxABI

2024-11-07 16:09:53

2023-02-26 23:47:40

點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 亚洲欧美国产精品久久 | 天堂在线www | 国产91在线 | 亚洲 | 亚洲免费在线 | 欧美一级三级在线观看 | 亚洲精品久久久久久下一站 | 国产欧美日韩综合精品一区二区 | 国产超碰人人爽人人做人人爱 | 亚洲美女一区 | 日本韩国欧美在线观看 | 91视频国产精品 | 人碰人操 | 一区二区三区视频免费观看 | 国产精品久久久久久久一区探花 | 羞羞视频在线观看网站 | 久久一 | 日本精品久久久一区二区三区 | 羞羞网站免费观看 | 人人人艹| 国产一区二区不卡 | 成人在线精品 | 狠狠干天天干 | 国产精品免费看 | 久久精品日 | 日韩精品人成在线播放 | 欧美国产一区二区三区 | 一区二区三区在线电影 | 特黄毛片视频 | 男人的天堂在线视频 | 亚洲欧美另类在线观看 | 亚洲免费成人 | 最新毛片网站 | 国产精品视频一区二区三区 | 精品一区二区av | 视频在线一区 | 综合视频在线 | 日本黄色片免费在线观看 | 国产精品夜夜春夜夜爽久久电影 | 成人亚洲性情网站www在线观看 | 国产精品久久久久久久久久尿 | 欧美二区乱c黑人 |