日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

別再用 float 布局了,flex 才是未來!

來源: 責編: 時間:2023-10-26 17:09:33 251觀看
導讀前面一篇文章「一文帶你弄懂 CSS 布局知識」里,我整體介紹了 CSS 的布局知識,其中說到 float 布局是 CSS 不斷完善的副產(chǎn)物。而在 2023 年的今天,flex 這種布局方式才是未來!那么今天我們就來學習下 flex 彈性布局。什么

前面一篇文章「一文帶你弄懂 CSS 布局知識」里,我整體介紹了 CSS 的布局知識,其中說到 float 布局是 CSS 不斷完善的副產(chǎn)物。而在 2023 年的今天,flex 這種布局方式才是未來!那么今天我們就來學習下 flex 彈性布局。fVK28資訊網(wǎng)——每日最新資訊28at.com

fVK28資訊網(wǎng)——每日最新資訊28at.com

什么是 Flex 布局?

在經(jīng)過了長達 10 年的發(fā)展之后,CSS3 才終于迎來了一個簡單好用的布局屬性 —— flex。Flex 布局又稱彈性布局,它使用 flexbox 屬性使得容器有了彈性,可以自動適配各種設(shè)備的不同寬度,而不必依賴于傳統(tǒng)的塊狀布局和浮動定位。fVK28資訊網(wǎng)——每日最新資訊28at.com

舉個很簡單地例子,如果我們想要實現(xiàn)一個很簡單左側(cè)定寬,右側(cè)自適應(yīng)的導航布局,如下圖所示。fVK28資訊網(wǎng)——每日最新資訊28at.com

-w1239-w1239fVK28資訊網(wǎng)——每日最新資訊28at.com

在沒有 flex 之前,我們的代碼是這么寫的。fVK28資訊網(wǎng)——每日最新資訊28at.com

<div><h1>4.1 兩欄布局 - 左側(cè)定寬、右側(cè)自適應(yīng) - float</h1><div class="container">  <div class="left41"></div>  <div class="right41"></div></div></div>
/** 4.1 兩欄布局 - 左側(cè)定寬、右側(cè)自適應(yīng) - float **/.left41 {  float: left;  width: 300px;  height: 500px;  background-color: pink;}.right41 {  width: 100%;  height: 500px;  background-color: aquamarine;}

這種方式不好的地方在于,我們還需要去理解 float 這個概念。一旦需要理解 float 這個概念,我們就會拖出一大堆概念,例如文檔流、盒子模型、display 等屬性(雖然這些東西確實應(yīng)該學)。但對于 flex 來說,它就很簡單,只需要設(shè)置一個伸縮系數(shù)即可,如下代碼所示。fVK28資訊網(wǎng)——每日最新資訊28at.com

<div><h1>4.2 兩欄布局 - 左側(cè)定寬、右側(cè)自適應(yīng) - flex</h1><div class="container42">  <div class="left42"></div>  <div class="right42"></div></div></div>
.container42 {  display: flex;}.left42 {  width: 300px;  height: 500px;  background-color: pink;}.right42 {  flex: 1;  width: 100%;  height: 500px;  background-color: aquamarine;}

上面的代碼里,我們只需要將父級容器設(shè)置為 flex 展示形式(display: flex),隨后在需要自動伸縮的容器里設(shè)置屬性即可。上面代碼中的 flex: 1 表示其占據(jù)所有當行所剩的空間。通過這樣的方式,我們非常方便地實現(xiàn)了彈性布局。fVK28資訊網(wǎng)——每日最新資訊28at.com

當然,上面只是一個最簡單的例子,甚至還不是很能體現(xiàn)出 flex 的價值。flex 除了在響應(yīng)式布局方面非常方便之外,它在對齊等方面更加方便,能夠極大地降低學習成本、提高工作效率。fVK28資訊網(wǎng)——每日最新資訊28at.com

Flex 核心概念

對于 Flex 布局來說,其有幾個核心概念,分別是:主軸與交叉軸、起始線和終止線、Flex 容器與 Flex 容器項。fVK28資訊網(wǎng)——每日最新資訊28at.com

主軸和交叉軸

在 Flex 布局中有一個名為 flex-direction 的屬性,可以取 4 個值,分別是:fVK28資訊網(wǎng)——每日最新資訊28at.com

  • row
  • row-reverse
  • column
  • column-reverse

如果你選擇了 row 或者 row-reverse,那么主軸(Main Axis)就是橫向的 X 軸,交叉軸(Cross Axis)就是豎向的 Y 軸,如下圖所示。fVK28資訊網(wǎng)——每日最新資訊28at.com

主軸是橫向的X軸,交叉軸是豎向的Y軸主軸是橫向的X軸,交叉軸是豎向的Y軸fVK28資訊網(wǎng)——每日最新資訊28at.com

如果你選擇了 column 或者 column-reverse,那么主軸(Main Axis)就變成是豎向的 Y 軸,交叉軸(Cross Axis)就是橫向的 X 軸,如下圖所示。fVK28資訊網(wǎng)——每日最新資訊28at.com

主軸是豎向的Y軸,交叉軸是橫向的X軸主軸是豎向的Y軸,交叉軸是橫向的X軸fVK28資訊網(wǎng)——每日最新資訊28at.com

起始線和終止線

過去,CSS 的書寫模式主要被認為是水平的,從左到右的。但現(xiàn)代的布局方式涵蓋了書寫模式的范圍,所以我們不再假設(shè)一行文字是從文檔的左上角開始向右書寫的。fVK28資訊網(wǎng)——每日最新資訊28at.com

對于不同的語言來說,其書寫方向不同,例如英文是從左到右,但阿拉伯文則是從右到左。那么對于這兩種語言來說,其xx會有所不同 TODO。舉個簡單的例子,如果 flex-direction 是 row ,并且我是在書寫英文。由于英文是從左到右書寫的,那么主軸的起始線是左邊,終止線是右邊,如下圖所示。fVK28資訊網(wǎng)——每日最新資訊28at.com

-w557-w557fVK28資訊網(wǎng)——每日最新資訊28at.com

但如果我在書寫阿拉伯文,由于阿拉伯文是從右到左的,那么主軸的起始線是右邊,終止線是左邊,如下圖所示。fVK28資訊網(wǎng)——每日最新資訊28at.com

-w541-w541fVK28資訊網(wǎng)——每日最新資訊28at.com

在 Flex 布局中,起始線和終止線決定了 Flex 容器中的 Flex 元素從哪個方向開始排列。 舉個簡單例子,如果我們通過 direction: ltr 設(shè)置了文字書寫方向是從左到右,那么起始線就是左邊,終止線就是右邊。此時,如果我們設(shè)置的 flex-direction 值是 row,那么 Flex 元素將會從左到右開始排列。但如果我們設(shè)置的 flex-direction 值是 row-reverse,那么 Flex 元素將會從右到左開始排列。fVK28資訊網(wǎng)——每日最新資訊28at.com

在上面的例子中,交叉軸的起始線是 flex 容器的頂部,終止線是底部,因為兩種語言都是水平書寫模式。但如果有一種語言,它的書寫形式是從底部到頂部,那么當設(shè)置 flex-direction為 column 或 column-reverse 時,也會有類似的變化。fVK28資訊網(wǎng)——每日最新資訊28at.com

Flex 容器與 Flex 元素

我們把一個容器的 display 屬性值改為 flex 或者 inline-flex 之后,該容器就變成了 Flex 容器,而容器中的直系子元素就會變?yōu)?flex 元素。如下代碼所示,parent 元素就是 Flex 容器,son 元素就是 Flex 元素。fVK28資訊網(wǎng)——每日最新資訊28at.com

<style>#parent {    display: flex;}</style><div id="parent">    <div id="son"></div></div>

Flex 核心屬性

對于 Flex 來說,它有非常多的用法,但核心屬性卻相對較少。這里我只簡單介紹幾個核心屬性,如果你想了解更多 Flex 的屬性,可以去 Mozilla 官網(wǎng)查詢,這里給個傳送門:flex 布局的基本概念 - CSS:層疊樣式表 | MDN。fVK28資訊網(wǎng)——每日最新資訊28at.com

對于 Flex 布局來說,其核心屬性有如下幾個:fVK28資訊網(wǎng)——每日最新資訊28at.com

  1. flex-direction 主軸方向
  2. flex 伸縮系數(shù)及初始值
  3. justify-content 主軸方向?qū)R
  4. align-items 交叉軸方向?qū)R

flex-direction 主軸方向

如上文所介紹過的,flex-direction 定義了主軸的方向,可以取 4 個值,分別是:fVK28資訊網(wǎng)——每日最新資訊28at.com

  • row 默認值
  • row-reverse
  • column
  • column-reverse

一旦主軸確定了,交叉軸也確定了。主軸和交叉軸與后續(xù)的對齊屬性有關(guān),因此弄懂它們非常重要!舉個很簡單的例子,如下的代碼將展示下圖的展示效果。fVK28資訊網(wǎng)——每日最新資訊28at.com

.box {  display: flex;  flex-direction: row-reverse;}<div class="box">  <div>One</div>  <div>Two</div>  <div>Three</div></div>

-w538-w538fVK28資訊網(wǎng)——每日最新資訊28at.com

如果你將 flex-direction 改成 column-reverse,那么將會變成如下的效果,如下圖所示。fVK28資訊網(wǎng)——每日最新資訊28at.com

-w541-w541fVK28資訊網(wǎng)——每日最新資訊28at.com

flex 伸縮系數(shù)及初始值

前面說到 Flex 布局可以很方便地進行響應(yīng)式布局,其實就是通過 flex 屬性來實現(xiàn)的。flex 屬性其實是 flex-grow、flex-shrink、flex-basis 這三個參數(shù)的縮寫形式,如下代碼所示。fVK28資訊網(wǎng)——每日最新資訊28at.com

flex-grow: 1;flex-shrink: 1;flex-basis: 200px;/* 上面的設(shè)置等價于下面 flex 屬性的設(shè)置 */flex: 1 1 200px;

在考慮這幾個屬性的作用之前,需要先了解一下 可用空間 available space 這個概念。這幾個 flex 屬性的作用其實就是改變了 flex 容器中的可用空間的行為。fVK28資訊網(wǎng)——每日最新資訊28at.com

假設(shè)在 1 個 500px 的容器中,我們有 3 個 100px 寬的元素,那么這 3 個元素需要占 300px 的寬,剩下 200px 的可用空間。在默認情況下,flexbox 的行為會把這 200px 的空間留在最后一個元素的后面。fVK28資訊網(wǎng)——每日最新資訊28at.com

-w537-w537fVK28資訊網(wǎng)——每日最新資訊28at.com

如果期望這些元素能自動地擴展去填充滿剩下的空間,那么我們需要去控制可用空間在這幾個元素間如何分配,這就是元素上的那些 flex 屬性要做的事。fVK28資訊網(wǎng)——每日最新資訊28at.com

flex-basis

flex-basis 屬性用于設(shè)置 Flex 元素的大小,其默認值是 auto。此時瀏覽器會檢查元素是否有確定的尺寸,如果有確定的尺寸則用該尺寸作為 Flex 元素的尺寸,否則就采用元素內(nèi)容的尺寸。fVK28資訊網(wǎng)——每日最新資訊28at.com

flex-grow

flex-grow 若被賦值為一個正整數(shù),flex 元素會以 flex-basis 為基礎(chǔ),沿主軸方向增長尺寸。這會使該元素延展,并占據(jù)此方向軸上的可用空間(available space)。如果有其他元素也被允許延展,那么他們會各自占據(jù)可用空間的一部分。fVK28資訊網(wǎng)——每日最新資訊28at.com

舉個例子,上面的例子中有 a、b、c 個 Flex 元素。如果我們給上例中的所有元素設(shè)定 flex-grow 值為 1,容器中的可用空間會被這些元素平分。它們會延展以填滿容器主軸方向上的空間。fVK28資訊網(wǎng)——每日最新資訊28at.com

但很多時候,我們可能都需要按照比例來劃分剩余的空間。此時如果第一個元素 flex-grow 值為 2,其他元素值為 1,則第一個元素將占有 2/4(上例中,即為 200px 中的 100px), 另外兩個元素各占有 1/4(各 50px)。fVK28資訊網(wǎng)——每日最新資訊28at.com

flex-shrink

flex-grow 屬性是處理 flex 元素在主軸上增加空間的問題,相反 flex-shrink 屬性是處理 flex 元素收縮的問題。如果我們的容器中沒有足夠排列 flex 元素的空間,那么可以把 flex 元素 flex-shrink 屬性設(shè)置為正整數(shù),以此來縮小它所占空間到 flex-basis 以下。fVK28資訊網(wǎng)——每日最新資訊28at.com

與flex-grow屬性一樣,可以賦予不同的值來控制 flex 元素收縮的程度 —— 給flex-shrink屬性賦予更大的數(shù)值可以比賦予小數(shù)值的同級元素收縮程度更大。fVK28資訊網(wǎng)——每日最新資訊28at.com

justify-content 主軸方向?qū)R

justify-content 屬性用來使元素在主軸方向上對齊,它的初始值是 flex-start,即元素從容器的起始線排列。justify-content 屬性有如下 5 個不同的值:fVK28資訊網(wǎng)——每日最新資訊28at.com

  • flex-start:從起始線開始排列,默認值。
  • flex-end::從終止線開始排列。
  • center:在中間排列。
  • space-around:每個元素左右空間相等。
  • space-between:把元素排列好之后,剩余的空間平均分配到元素之間。

各個不同的對齊方式的效果如下圖所示。fVK28資訊網(wǎng)——每日最新資訊28at.com

flex-start:fVK28資訊網(wǎng)——每日最新資訊28at.com

-w454-w454fVK28資訊網(wǎng)——每日最新資訊28at.com

flex-end:fVK28資訊網(wǎng)——每日最新資訊28at.com

-w444-w444fVK28資訊網(wǎng)——每日最新資訊28at.com

center:fVK28資訊網(wǎng)——每日最新資訊28at.com

-w449-w449fVK28資訊網(wǎng)——每日最新資訊28at.com

space-around:fVK28資訊網(wǎng)——每日最新資訊28at.com

-w442-w442fVK28資訊網(wǎng)——每日最新資訊28at.com

space-between:fVK28資訊網(wǎng)——每日最新資訊28at.com

-w453-w453fVK28資訊網(wǎng)——每日最新資訊28at.com

align-items 交叉軸方向?qū)R

align-items 屬性可以使元素在交叉軸方向?qū)R,它的初始值是 stretch,即拉伸到最高元素的高度。align-items 屬性有如下 5 個不同的值:fVK28資訊網(wǎng)——每日最新資訊28at.com

  • stretch:拉伸到最高元素的高度,默認值。
  • flex-start:按 flex 容器起始位置對齊。
  • flex-end:按 flex 容器結(jié)束為止對齊。
  • center:居中對齊。
  • baseline:始終按文字基線對齊。

各個不同的對齊方式的效果如下圖所示。fVK28資訊網(wǎng)——每日最新資訊28at.com

stretch:fVK28資訊網(wǎng)——每日最新資訊28at.com

-w448-w448fVK28資訊網(wǎng)——每日最新資訊28at.com

flex-start:fVK28資訊網(wǎng)——每日最新資訊28at.com

-w439-w439fVK28資訊網(wǎng)——每日最新資訊28at.com

flex-end:fVK28資訊網(wǎng)——每日最新資訊28at.com

-w438-w438fVK28資訊網(wǎng)——每日最新資訊28at.com

center:fVK28資訊網(wǎng)——每日最新資訊28at.com

-w444-w444fVK28資訊網(wǎng)——每日最新資訊28at.com

要注意的事,無論 align-items 還是 justify-content,它們都是以主軸或者交叉軸為參考的,而不是橫向和豎向為參考的,明白這點很重要。fVK28資訊網(wǎng)——每日最新資訊28at.com

Flex 默認屬性

由于所有 CSS 屬性都會有一個初始值,所以當沒有設(shè)置任何默認值時,flex 容器中的所有 flex 元素都會有下列行為:fVK28資訊網(wǎng)——每日最新資訊28at.com

  • 元素排列為一行 (flex-direction 屬性的初始值是 row)。
  • 元素從主軸的起始線開始。
  • 元素不會在主維度方向拉伸,但是可以縮小。
  • 元素被拉伸來填充交叉軸大小。
  • flex-basis 屬性為 auto。
  • flex-wrap 屬性為 nowrap。

弄清楚 Flex 元素的默認值有利于我們更好地進行布局排版。fVK28資訊網(wǎng)——每日最新資訊28at.com

實戰(zhàn)項目拆解

看了那么多的 Flex 布局知識點,總感覺干巴巴的,是時候來看看別人在項目中是怎么用的了。fVK28資訊網(wǎng)——每日最新資訊28at.com

-w1290-w1290fVK28資訊網(wǎng)——每日最新資訊28at.com

上面是我在 CodePen 找到的一個案例,這樣的一個布局就是用 Flex 布局來實現(xiàn)的。通過簡單的分析,其實我們可以拆解出其 Flex 布局方法,大致如下圖所示。fVK28資訊網(wǎng)——每日最新資訊28at.com

-w1297-w1297fVK28資訊網(wǎng)——每日最新資訊28at.com

首先整體分為兩大部分,即導航欄和內(nèi)容區(qū)域,這部分的主軸縱向排列的(flex-direction: column),如上圖紅框部分。隨后在內(nèi)容區(qū)域,又將其分成了左邊的導航欄和右邊的內(nèi)容區(qū)域,此時這塊內(nèi)容是橫向排列的(flex-direction: row),如下上圖藍框部分。fVK28資訊網(wǎng)——每日最新資訊28at.com

剩下的內(nèi)容布局也大致類似,其實就是無限套娃下去。由于偏于原因,這里就不繼續(xù)深入拆解了,大致的布局思路已經(jīng)說得很清楚了。fVK28資訊網(wǎng)——每日最新資訊28at.com

有了 Flex 布局之后,貌似布局也變得非常簡單了。但紙上得來終覺淺,還是得自己實際動手練練才知道容易不容易,不然就變成紙上談兵了!fVK28資訊網(wǎng)——每日最新資訊28at.com

總結(jié)

看到這里,關(guān)于 Flex 布局的核心點就介紹得差不多了。掌握好這幾個核心的知識點,開始去實踐練習基本上沒有什么太大的問題了。剩下的一些比較小眾的屬性,等用到的時候再去查查看就足夠了。fVK28資訊網(wǎng)——每日最新資訊28at.com

接下來更多的時間,就是找多幾個實戰(zhàn)案例實踐,唯有實踐才能鞏固所學知識點。后面有機會,我將分享我在 Flex 布局方面的項目實踐。fVK28資訊網(wǎng)——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-15181-0.html別再用 float 布局了,flex 才是未來!

聲明:本網(wǎng)頁內(nèi)容旨在傳播知識,若有侵權(quán)等問題請及時與本網(wǎng)聯(lián)系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: 開發(fā)人員都應(yīng)該知道的九個GitHub庫

下一篇: 是時候放棄Dockerfile了,考慮上手Buildpack吧

標簽:
  • 熱門焦點
  • 6月iOS設(shè)備性能榜:M2穩(wěn)居榜首 A系列只能等一手3nm來救

    沒有新品發(fā)布,自然iOS設(shè)備性能榜的上榜設(shè)備就沒有什么更替,僅僅只有跑分變化而產(chǎn)生的排名變動,畢竟蘋果新品的發(fā)布節(jié)奏就是這樣的,一年下來也就幾個移動端新品,不會像安卓廠商,一
  • Automa-通過連接塊來自動化你的瀏覽器

    1、前言通過瀏覽器插件可實現(xiàn)自動化腳本的錄制與編寫,具有代表性的工具就是:Selenium IDE、Katalon Recorder,對于簡單的業(yè)務(wù)來說可快速實現(xiàn)自動化的上手工作。Selenium IDEKat
  • 19個 JavaScript 單行代碼技巧,讓你看起來像個專業(yè)人士

    今天這篇文章跟大家分享18個JS單行代碼,你只需花幾分鐘時間,即可幫助您了解一些您可能不知道的 JS 知識,如果您已經(jīng)知道了,就當作復習一下,古人云,溫故而知新嘛。現(xiàn)在,我們就開始今
  • 這款新興工具平臺,讓你的電腦效率翻倍

    隨著信息技術(shù)的發(fā)展,我們獲取信息的渠道越來越多,但是處理信息的效率卻成為一個瓶頸。于是各種工具應(yīng)運而生,都在爭相解決我們的工作效率問題。今天我要給大家介紹一款效率
  • Temu起訴SHEIN,跨境電商戰(zhàn)事升級

    來源 | 伯虎財經(jīng)(bohuFN)作者 | 陳平安日前據(jù)外媒報道,拼多多旗下跨境電商平臺Temu正對競爭對手SHEIN提起新訴訟,訴狀稱Shein&ldquo;利用市場支配力量強迫服裝廠商與之簽訂獨家
  • 共享單車的故事講到哪了?

    來源丨海克財經(jīng)與共享充電寶相差不多,共享單車已很久沒有被國內(nèi)熱點新聞關(guān)照到了。除了一再漲價和用戶直呼用不起了。近日多家媒體再發(fā)報道稱,成都、天津、鄭州等地多個共享單
  • 消費結(jié)構(gòu)調(diào)整丨巨頭低價博弈,拼多多還卷得動嗎?

    來源:征探財經(jīng)作者:陳香羽隨著流量紅利的退潮,電商的存量博弈越來越明顯。曾經(jīng)主攻中高端與品質(zhì)的淘寶天貓、京東重拾&ldquo;低價&rdquo;口號。而過去與他們錯位競爭的拼多多,靠
  • 微博大門常打開,迎接海外畫師漂洋東渡

    作者:互聯(lián)網(wǎng)那些事&ldquo;起猛了,我能看得懂日語了&rdquo;。&ldquo;為什么日本人說話我能聽懂?&rdquo;&ldquo;中文不像中文,日語不像日語,但是我竟然看懂了&rdquo;&hellip;&hell
  • 消息稱小米汽車開始篩選交付中心:需至少120個車位

    IT之家 7 月 7 日消息,日前,有微博簡介為“汽車行業(yè)從業(yè)者、長三角一體化擁護者”的微博用戶 @長三角行健者 發(fā)文表示,據(jù)經(jīng)銷商集團反饋,小米汽車目前
Top 主站蜘蛛池模板: 荔波县| 定日县| 凤山市| 青冈县| 壤塘县| 双流县| 游戏| 林甸县| 罗山县| 哈尔滨市| 特克斯县| 钦州市| 东兴市| 南宁市| 青田县| 介休市| 麻栗坡县| 临邑县| 柯坪县| 茂名市| 桐庐县| 土默特左旗| 淮安市| 南华县| 德化县| 普定县| 洪雅县| 吉林市| 青川县| 金塔县| 永年县| 彭泽县| 苍梧县| 广东省| 汝南县| 全椒县| 隆德县| 邻水| 霍城县| 扎鲁特旗| 农安县|