搞定flex布局

這幾種方式的搭配使用可以輕松搞定 PC 端頁面的常見需求,比如實現水平居中可以使用?

margin: 0 auto
,實現水平垂直同時居中可以如下設置:

.dad {position: relative;
}
.son {position: absolute;margin: auto;top: 0;right: 0;bottom: 0;left: 0;
}

.dad {position: relative;
}
.son {width: 100px;height: 100px;position: absolute;top: 50%;left: 50%;margin-top: -50px;margin-left: -50px;
}

然而,這些寫法都存在一些缺陷:缺少語義并且不夠靈活。我們需要的是通過 1 個屬性就能優雅的實現子元素居中或均勻分布,甚至可以隨著窗口縮放自動適應。在這樣的需求下,CSS 的第 4 種布局方式誕生了,這就是我們今天要重點介紹的 flex 布局。

flex 基本概念

使用 flex 布局首先要設置父容器?

display: flex
,然后再設置?
justify-content: center
?實現水平居中,最后設置?
align-items: center
?實現垂直居中。

#dad {display: flex;justify-content: center;align-items: center
}


先從兩個基本概念說起

lex 的核心的概念就是 容器。容器包括外層的 父容器 和內層的 子容器,軸包括 主軸交叉軸,可以說 flex 布局的全部特性都構建在這兩個概念上。flex 布局涉及到 12 個 CSS 屬性(不含
display: flex
),其中父容器、子容器各 6 個。不過常用的屬性只有 4 個,父容器、子容器各 2 個,我們就先從常用的說起吧。

1. 容器

  • 容器具有這樣的特點:父容器可以統一設置子容器的排列方式,子容器也可以單獨設置自身的排列方式,如果兩者同時設置,以子容器的設置為準。

1.1 父容器

  • 設置子容器沿主軸排列:justify-content

justify-content
?屬性用于定義如何沿著主軸方向排列子容器。

flex-start:起始端對齊


?

flex-end:末尾段對齊


center:居中對齊


space-around:子容器沿主軸均勻分布,位于首尾兩端的子容器到父容器的距離是子容器間距的一半。


space-between:子容器沿主軸均勻分布,位于首尾兩端的子容器與父容器相切。


  • 設置子容器如何沿交叉軸排列:align-items

align-items
?屬性用于定義如何沿著交叉軸方向分配子容器的間距。

flex-start:起始端對齊


flex-end:末尾段對齊


center:居中對齊


baseline:基線對齊,這里的?

baseline
?默認是指首行文字,即?
first baseline
,所有子容器向基線對齊,交叉軸起點到元素基線距離最大的子容器將會與交叉軸起始端相切以確定基線。


stretch:子容器沿交叉軸方向的尺寸拉伸至與父容器一致。


1.2 子容器

  • 在主軸上如何伸縮:flex

子容器是有彈性的(flex 即彈性),它們會自動填充剩余空間,子容器的伸縮比例由

flex
屬性確定。

flex
的值可以是無單位數字(如:1, 2, 3),也可以是有單位數字(如:15px,30px,60px),還可以是
none
關鍵字。子容器會按照
flex
定義的尺寸比例自動伸縮,如果取值為
none
則不伸縮。

雖然

flex
是多個屬性的縮寫,允許 1 - 3 個值連用,但通常用 1 個值就可以滿足需求,它的全部寫法可參考下圖。

  • 單獨設置子容器如何沿交叉軸排列:align-self
每個子容器也可以單獨定義沿交叉軸排列的方式,此屬性的可選值與父容器?
align-items
?屬性完全一致,如果兩者同時設置則以子容器的?
align-self
?屬性為準。
flex-start:起始端對齊


flex-end:末尾段對齊


center:居中對齊


baseline:基線對齊


?

stretch:拉伸對齊


2. 軸

如圖所示, 包括 主軸交叉軸,我們知道
justify-content
屬性決定子容器沿主軸的排列方式,
align-items
屬性決定子容器沿著交叉軸的排列方式。那么軸本身又是怎樣確定的呢?在 flex 布局中,
flex-direction
屬性決定主軸的方向,交叉軸的方向由主軸確定。

  • 主軸

?

主軸的起始端由?

flex-start
?表示,末尾段由?
flex-end
?表示。不同的主軸方向對應的起始端、末尾段的位置也不相同。

向右:

flex-direction: row


向下:

flex-direction: column


向左:

flex-direction: row-reverse


向上:

flex-direction: column-reverse


  • 交叉軸

?

主軸沿逆時針方向旋轉 90° 就得到了交叉軸,交叉軸的起始端和末尾段也由

flex-start
flex-end
表示。

上面介紹的幾項屬性是 flex 布局中最常用到的部分,一般來說可以滿足大多數需求,如果實現復雜的布局還需要深入了解更多的屬性。

?

flex 進階概念

1. 父容器

  • 設置換行方式:flex-wrap
  決定子容器是否換行排列,不但可以順序換行而且支持逆序換行。
nowrap:不換行

wrap:換行

  


?

wrap-reverse:逆序換行

逆序換行是指沿著交叉軸的反方向換行。


?

?

  • 軸向與換行組合設置:flex-flow

flow 即流向,也就是子容器沿著哪個方向流動,流動到終點是否允許換行,比如

flex-flow: row wrap
flex-flow
是一個復合屬性,相當于 flex-direction 與 flex-wrap 的組合,可選的取值如下:

    • row
      column
      等,可單獨設置主軸方向

    • wrap
      nowrap
      等,可單獨設置換行方式

    • row nowrap
      column wrap
      等,也可兩者同時設置

  • 多行沿交叉軸對齊:align-content

當子容器多行排列時,設置行與行之間的對齊方式。

?

flex-start:起始端對齊


flex-end:末尾段對齊


center:居中對齊


space-around:等邊距均勻分布


space-between:等間距均勻分布


stretch:拉伸對齊


2. 子容器

  • 設置基準大小:flex-basis

flex-basis
?表示在不伸縮的情況下子容器的原始尺寸。主軸為橫向時代表寬度,主軸為縱向時代表高度。

?

  • 設置擴展比例:flex-grow

子容器彈性伸展的比例。如圖,剩余空間按 1:2 的比例分配給子容器。

/

?

  • 設置收縮比例:flex-shrink

子容器彈性收縮的比例。如圖,超出的部分按 1:2 的比例從給子容器中減去。

?

  • 設置排列順序:order

改變子容器的排列順序,覆蓋 HTML 代碼中的順序,默認值為 0,可以為負值,數值越小排列越靠前

?

以上就是 flex 布局的全部屬性,一共 12 個,父容器、子容器各 6 個,可以隨時通過下圖進行回顧。

?

?

?

?

?

?


作者:osimly
鏈接:https://juejin.im/post/58e3a5a0a0bb9f0069fc16bb

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/370014.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/370014.shtml
英文地址,請注明出處:http://en.pswp.cn/news/370014.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

Java基礎5一數組的常見應用算法

常用算法 1.冒泡排序: 原理&#xff1a;比較兩個相鄰的元素&#xff0c;將值大的元素交換至右端 示例: public static void bubbleSort(int[] a) {int n a.length;//總共進行n-1輪的比較for (int i 1; i < n; i) {for (int j 0; j < n - i; j) {if (a[j] > a[j 1]…

使用Xtend構建Vaadin UI

今天&#xff0c;我決定向Xtend打個招呼。 我希望學習一些新的編程語言。 選擇一個標準的清單并不多。 它必須是在JVM上運行的編程語言&#xff0c; 如果我不需要學習用于建筑應用的全新生態系統&#xff0c;那就太好了。 我已經檢查了幾個選項。 JVM的編程語言列表已不多了…

python 瀏覽器顯示本地文件夾_瀏覽器讀取本地文件

{"moduleinfo":{"card_count":[{"count_phone":1,"count":1}],"search_count":[{"count_phone":4,"count":4}]},"card":[{"des":"阿里云文件存儲NAS是一個可共享訪問&#xf…

p15頁

給你一個n*n的01矩陣&#xff0c;只能夠將0變成1&#xff0c;使得每個元素上下左右之和均是偶數&#xff0c; 比如 0 0 0 0 1 0 1 0 0>>>>1 0 1 0 0 0 0 1 0 一個轉變了3步 多實例T 然后一個n&#xff08;n<15&#xff09; 表示n*n的矩陣 …

html 登陸sql server,jsp實現注冊與登錄頁面+sqlsever2008

//index.jspString path request.getContextPath();String basePath request.getScheme()"://"request.getServerName()":"request.getServerPort()path"/";%>登陸用戶登陸用戶名&#xff1a;密 碼:注冊新用戶//Logon.jspString path req…

百度前端學院-基礎學院-第四課

今天是第四天&#xff0c;進度可以&#xff0c;表揚一下自己。 今天的課程目標是&#xff1a;掌握 CSS 稍微復雜的一些選擇器&#xff0c;還有背景&#xff0c;邊框等一些 CSS 樣式屬性。 CSS背景&#xff1a; 背景色&#xff1a;background-color:gray; 背景圖&#xff1a…

JUnit測試方法訂購

直到4.10版為止的Junit都使用反射API返回的測試類中測試方法的順序作為測試方法執行的順序– Class.getMethods&#xff08;&#xff09; 。 引用getMethods&#xff08;&#xff09;api的Javadoc&#xff1a; 返回的數組中的元素未排序&#xff0c;并且沒有任何特定順序。 …

html中padding和margin的區別和用法與存在的bug消除

關于margin&#xff1a;在需要border外側添加距離時。空白處不需要背景時。相連的兩個部分的地方需要加外邊的邊距時使用。 關于padding&#xff1a;在需要border內側添加距離時。空白處需要背景時。相連的兩個部分的地方需要加內部的邊距時使用。 IE6中雙邊距Bug&#xff1a; …

python發微信提醒天氣冷了注意保暖_2019天氣變冷的朋友圈說說 注意保暖的微信問候語...

1.天冷了&#xff0c;注意添加衣物&#xff0c;別著涼。可你還是著涼了。看你難受的樣子&#xff0c;我的心&#xff0c;唉&#xff0c;只有一句話能表達&#xff1a;小樣&#xff0c;你也有今天&#xff01;為了不讓我得逞&#xff0c;你要注意身體哦。2.天氣變涼要注意&#…

Fiddler抓包使用教程-QuickExec

轉載請標明出處&#xff1a;http://blog.csdn.net/zhaoyanjun6/article/details/73468287 本文出自【趙彥軍的博客】 在 Fiddler 中自帶了一個 QuickExec 命令行&#xff0c;用戶可以直接輸入并快速執行腳本命令。 常見命令 help 打開官方的使用頁面介紹&#xff0c;所有的命令…

自己整理的css3動畫庫,附下載鏈接

動畫調用語法 animation: bounceIn 0.3s ease 0.2s 1 both; 按順序解釋參數&#xff1a; 動畫名稱 如&#xff1a;bounceIn 一周期所用時間 如&#xff1a;0.3s 速度曲線 如&#xff1a;ease 值 描述 linear 動畫從頭到尾的速度是相同的。 ease 默認。動畫以低速開始&#xff0…

帶有Spring的REST的ETag

1.概述 本文將重點介紹ETags-Spring支持&#xff0c;RESTful API的集成測試以及帶有curl的使用場景。 這是關于使用Spring 3.1和Spring Security 3.1和基于Java的配置來建立安全的RESTful Web服務的系列文章的第9篇。 REST with Spring系列&#xff1a; 第1部分 – 使用Spring…

html5與css3都要學嗎,前端要學css3嗎?

前端要學css3&#xff1b;HTML5、CSS3是前端工程師必須要學會。現在移動端的興起&#xff0c;導致web前端開發的技術逐變向css3和html5轉變&#xff0c;所以css3一定要學。CSS3是CSS(層疊樣式表)技術的升級版本&#xff0c;于1999年開始制訂&#xff0c;2001年5月23日W3C完成了…

PHP中cookie和session的區別

1、cookie數據存放在客戶的瀏覽器上&#xff0c;session數據放在服務器上。 2、cookie不是很安全&#xff0c;別人可以分析存放在本地的COOKIE并進行COOKIE欺騙考慮到安全應當使用session。 3、session會在一定時間內保存在服務器上。當訪問增多&#xff0c;會比較占用你服務器…

ubuntu下anaconda3+pygame

有是很無語的地方&#xff0c;網上教程一堆&#xff0c;又是要下載什么包&#xff0c;然后又是什么依賴亂七八糟的整一堆。都不知道怎么想的 試了 sudo apt-get install python-pygame 這個是行不通的&#xff01;&#xff01;&#xff01;根本沒有任何卵用 害我捯飭了半天&am…

react 判斷圖片是否加載完成_React中型項目的優化實踐

項目介紹整個項目大概有60個頁面&#xff0c;用到的組件大概150&#xff0c;package里面的依賴大概有70個&#xff0c;應該勉強算得上是一個中型的React的項目了。下面給大家看看我們現在build一次項目的結果--打包時間約150s&#xff0c;打包完之后的資源gzip之后約1.2m&#…

搭建本地wordpress

1.首先&#xff0c;下載xampp&#xff0c;安裝按默認勾選即可。 2.安裝完成后&#xff0c;啟動Apache和MySQL這兩個服務。 啟動后變成綠色&#xff0c;表示啟動成功。 3.點擊MySQL項的Admin進入數據庫后臺。 4.點擊用戶賬戶新建用戶。 5.填寫用戶名&#xff0c;host name選本地…

編寫Java批注

Java 批注的允許的屬性類型刻意非常嚴格&#xff0c;但是允許的類型也可以使用一些簡潔的復合批注類型。 考慮教程站點中的示例注釋&#xff1a; package annotation; interface ClassPreamble {String author();String[] reviewers(); }在這里&#xff0c;作者和審閱者具有St…

Python基礎【day02】:字符串(四)

在Python中字符串本身有帶很多操作&#xff0c;字符串的特性&#xff0c;不可以被修改 0、字符串常用功能匯總 1、字符串的定義 #定義空字符串>>> name#定義非空字符串 >>> name"luoahong"#通過下標訪問 >>> name[1] u#不能修改字符串的值…

cryptojs vue 使用_VueJs里利用CryptoJs實現加密及解密

第一步 安裝安裝crypto-js第二步 創建在js文件目錄下創建一個js文件secret/*** 對頁面上輸入的密碼進行加密傳輸給后臺進行驗證&#xff0c;對返回的數據進行解密&#xff0c;在頁面展示*/let CryptoJS require(crypto-js); // 引入AES源碼jsexport default {/** 對密碼進行加…