前端布局神器display:flex

2009年,W3C提出了一種新的方案--Flex布局,可以簡便、完整、響應式地實現各種頁面布局。目前已得到所有現在瀏覽器的支持。

flex瀏覽器支持

一、Flex布局是什么?

Flex是Flexible Box的縮寫,翻譯成中文就是“彈性盒子”,用來為盒裝模型提供最大的靈活性。任何一個容器都可以指定為Flex布局。

.box{display: -webkit-flex; /*在webkit內核的瀏覽器上使用要加前綴*/display: flex; //將對象作為彈性伸縮盒顯示 } 

當然,行內元素也可以使用Flex布局。

.box {display: inline-flex; //將對象作為內聯塊級彈性伸縮盒顯示
}

兼容性寫法
.box {display: flex || inline-flex;
}

二、基本概念

采用Flex布局的元素,被稱為Flex容器(flex container),簡稱“容器”。其所有子元素自動成為容器成員,成為Flex項目(Flex item),簡稱“項目”。

結構示意圖


容器默認存在兩根主軸:水平方向主軸(main axis)和垂直方向交叉軸(cross axis),默認項目按主軸排列。

  • main start/main end:主軸開始位置/結束位置;
  • cross start/cross end:交叉軸開始位置/結束位置;
  • main size/cross size:單個項目占據主軸/交叉軸的空間;

三、容器屬性

設置在容器上的屬性有6種。

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

flex-direction屬性:決定主軸的方向(即項目的排列方向)

.box {flex-direction: row | row-reverse | column | column-reverse;
}
  • row(默認):主軸水平方向,起點在左端;
  • row-reverse:主軸水平方向,起點在右端;
  • column:主軸垂直方向,起點在上邊沿;
  • column-reserve:主軸垂直方向,起點在下邊沿。
主軸的4個方向

flex-wrap屬性:定義換行情況

默認情況下,項目都排列在一條軸線上,但有可能一條軸線排不下。

一條軸線排不下

.box{flex-wrap: nowrap | wrap | wrap-reverse;
}
  • nowrap(默認):不換行;


    不換行nowrap
  • wrap:換行,第一行在上方;


    換行,第一行在上
  • wrap-reverse:換行,第一行在下方。


    換行,第一行在下

flex-flow屬性:flex-direction和flex-wrap的簡寫,默認row nowrap

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

justify-content屬性:定義項目在主軸上的對齊方式。

對齊方式與軸的方向有關,本文中假設主軸從左到右。

.box {justify-content: start | end | flex-start | flex-end | center | left | right | space-between | space-around | space-evenly | stretch | safe | unsafe | baseline | first baseline | last baseline; } 
  • flex-start(默認值):左對齊;

    左對齊
  • flex-end:右對齊;

    右對齊
  • center:居中;

居中對齊
  • space-between:兩端對齊,項目之間間隔相等;
兩端對齊
  • space-around:每個項目兩側的間隔相等,即項目之間的間隔比項目與邊框的間隔大一倍。
兩側間隔相等

align-items屬性:定義在交叉軸上的對齊方式

對齊方式與交叉軸的方向有關,假設交叉軸從下到上。

.box{align-items: flex-start | flex-end | center | baseline | stretch;
}
  • flex-start:起點對齊;
起點對齊
  • flex-end:終點對齊;
終點對齊
  • center:中點對齊;
中點對齊
  • baseline:項目的第一行文字的基線對齊;
基線對齊
  • stretch(默認值):如果項目未設置高度或設為auto,將占滿整個容器的高度。

align-content屬性:定義多根軸線的對齊方式

如果項目只有一根軸線,該屬性不起作用。
所以,容器必須設置flex-wrap:···;

.box{align-content: flex-start | flex-end | center | space-between | space-around | stretch;
}
  • flex-start:與交叉軸的起點對齊;
起點對齊
  • flex-end:與交叉軸的終點對齊;
終點對齊
  • center:與交叉軸的中點對齊;
中點對齊
  • space-between:與交叉軸的兩端對齊,軸線之間的間隔平均分布;
軸線之間等間距
  • space-around:每根軸線兩側的間隔相等,即軸線之間的間隔比軸線與邊框的間隔大一倍;
軸線兩側等間距
  • stretch(默認值):軸線占滿整個交叉軸。
項目未設置高度時

有意思的是,當你不給項目設置高度但是給容器設置align-content不為stretch時,同一軸線上的項目的高度將等于項目中高度最高的項目。

四、項目的屬性

設置在項目上的屬性也有6個。

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

order屬性:定義項目的排列順序。

數值越小,排列越靠前,默認為0,可以是負值。

.item {order: <整數>;
}
展示效果不明顯,直接盜圖

flex-grow屬性:定義項目的放大比例

默認值為0,即如果空間有剩余,也不放大。
可以是小數,按比例占據剩余空間。

默認情況

.item{flex-grow: <數字>;
}

若所有項目的flex-grow的數值都相同,則等分剩余空間

等分剩余空間

若果有一個項目flex-grow為2,其余都為1,則該項目占據剩余空間是其余的2倍

不等分占據

flex-shrink屬性:定義項目的縮小比例

默認值都為1,即如果空間不足將等比例縮小。
如果有一個項目的值為0,其他項目為1,當空間不足時,該項目不縮小。
負值對該屬性無效,容器不應該設置flex-wrap。


.item{flex-shrink: <非負整數>;
}

如果一個項目設置flex-shrink為0;而其他項目都為1,則空間不足時,該項目不縮小。

設置flex-shrink為0的項目不縮小

如果所有項目都為0,則當空間不足時,項目撐破容器而溢出。

不縮小

如果設置項目的flex-shrink不為0的非負數效果同設置為1。

flex-basis屬性:定義在分配多余空間之前,項目占據的主軸空間。

默認值為auto,瀏覽器根據此屬性檢查主軸是否有多余空間。


.item{flex-basis:  <auto或者px>;
}

注意設置的flex-basis是分配多余空間之前項目占據的主軸空間,如果空間不足則默認情況下該項目也會縮小。

設置flex-basis為350px,但空間充足

?

空間不足,項目縮小,小于設定值

flex屬性是flex-grow,flex-shrink和flex-basis的簡寫

默認值為0 1 auto,第一個屬性必須,后兩個屬性可選。

.item{flex: none | [<flex-grow><flex-shrink><flex-basis>];
}
  • 可以用?flex:auto;?代替?flex: 1 1 auto;
  • 可以用?flex: none;代替?flex: 0 0 auto
####align-self屬性:允許單個項目與其他項目有不一樣的對齊方式
>默認值為auto,表示繼承父元素的align-items屬性,并可以覆蓋align-items屬性。 

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

?

轉載自:https://www.cnblogs.com/qingchunshiguang/p/8011103.html

轉載于:https://www.cnblogs.com/lhj-blog/p/10386906.html

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

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

相關文章

bind簡單轉發實驗

2019獨角獸企業重金招聘Python工程師標準>>> *主配置文件內容// [rootlocalhost /]# cat /etc/named.conf // // named.conf // // Provided by Red Hat bind package to configure the ISC BIND named(8) DNS // server as a caching only nameserver (as a local…

數據結構:塊狀鏈表

一、概述 有時候我們需要設計這樣一種數據結構&#xff1a;它能快速在要求位置插入或者刪除一段數據。先考慮兩種簡單的數據結構&#xff1a;數組和鏈表。數組的優點是能夠在O(1)的時間內找到所要執行操作的位置&#xff0c;但其缺點是無論是插入或刪除都要移動之后的所有數據&…

記賬本開發小計(四)

今天處理的是記賬本小軟件中的查詢功能&#xff0c;由于賬目的要求就是準確性&#xff0c;所以對于記賬本程序來說&#xff0c;模糊查詢并不適用&#xff0c;所以在這里只能是按照指定的條件來進行查詢所以我做的事按照時間進行查詢&#xff0c;為了方便進行處理&#xff0c;這…

Linux ps命令、Linux top命令

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Linux ps命令用于顯示當前進程 (process) 的狀態。 語法 ps [options] [--help][options] [--help] 參數&#xff1a; ps 的參數非常…

Prime Distance POJ - 2689 線性篩

一個數 $n$ 必有一個不超過 $\sqrt n$ 的質因子。 打表處理出 $1$ 到 $\sqrt n$ 的質因子后去篩掉屬于 $L$ 到 $R$ 區間的素數即可。 Code: #include<cstdio> #include<cstring> #include<algorithm> #include<iostream> using namespace std; const…

給定a和n,計算a+aa+aaa+a...a(n個a)的和(大數據處理)

題目描述&#xff1a;給定a和n&#xff0c;計算aaaaaaa...a(n個a)的和。 輸入&#xff1a;測試數據有多組&#xff0c;輸入a&#xff0c;n&#xff08;1<a<9,1<n<100&#xff09;。 輸出&#xff1a;對于每組輸入,請輸出結果。 樣例輸入&#xff1a;1 10 樣例輸出&…

ssh和rsh的區別、Linux rsh命令

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 ssh 和 rsh的區別主要有: 1 安全級別不同, 主要是ssh的密碼等都是加密傳輸,而且還有密鑰認證的機制, rsh明文傳輸. 而且沒有密鑰的機制.…

Java并發編程(多線程)中的相關概念

眾所周知&#xff0c;在Java的知識體系中&#xff0c;并發編程是非常重要的一環&#xff0c;也是面試中必問的題&#xff0c;一個好的Java程序員是必須對并發編程這塊有所了解的。 并發必須知道的概念 在深入學習并發編程之前&#xff0c;我們需要了解幾個基本的概念。 同步和異…

4、容器虛擬化網絡概述

Docker 網絡 Docker 的網絡實現其實就是利用了 Linux 上的網絡名稱空間和虛擬網絡設備&#xff08;特別是 veth pair&#xff09;。 Linux 網絡命名空間&#xff1a;https://www.jianshu.com/p/369e50201bce Linux虛擬網絡設備之veth&#xff1a; https://segmentfault.com/a/1…

Linux whoami命令、Linux su命令、Linux w命令

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Linux whoami命令用于顯示自身用戶名稱。 顯示自身的用戶名稱&#xff0c;本指令相當于執行"id -un"指令。 語法 whoami […

Weekly 10

Algorithm 1.Remove Element What 移除數組中的指定元素,返回處理后的長度sum,并且數組前sum長度的元素為處理后的元素,不用額外數組&#xff0c;O(1)。How 用快慢指針,快指針遍歷,遇到不等于指定元素的替換掉慢指針,然后慢指針前進一位即可。Key Codesclass Solution {public …

大數據計算:如何僅用1.5KB內存為十億對象計數

摘要&#xff1a;AddThis的數據分析副總監Matt Abrams在High Scalability上發表了一篇文章&#xff0c;介紹了他們公司如何應對大數據。Matt Abrams表示&#xff0c;AddThis僅僅用了1.5KB內存的內存就計算了十億個不同的對象&#xff0c;這與他們所使用的計算方法分不開的。 A…

C#關鍵字的個人理解與注釋

C#關鍵字注釋&#xff1a;abstract&#xff1a;抽象as&#xff1a;類型轉換&#xff08;返回轉換結果&#xff09;base&#xff1a;基類bool&#xff1a;布爾類型break&#xff1a;條件中斷語句byte&#xff1a;字節case&#xff1a;條件語句catch&#xff1a;異常捕獲后執行ch…

Linux declare命令、Linux tail 命令

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 Linux declare命令用于聲明 shell 變量。 declare為shell指令&#xff0c;在第一種語法中可用來聲明變量并設置變量的屬性([rix]即為變…

詳解Nagios配置文件的邏輯關系

1.主配置文件/usr/local/nagios/etc/nagios.cfg a.定義了用戶和組 b.定義了某些具體參數 c.定義了配置文件和可以存放配置文件的文件夾 d.通過開頭的#號去注釋選項以達到關閉配置的效果 e.更改配置后&#xff0c;可以通過命令 /usr/local/nagios/bin/nagios –v /usr/local/na…

10 步讓你成為更優秀的程序員

這篇文章要介紹的&#xff0c;是我作為專業程序員這些年來學到的能真正提高我的代碼質量和整體工作效率的10件事情。 1. 永遠不要復制代碼 不惜任何代價避免重復的代碼。如果一個常用的代碼片段出現在了程序中的幾個不同地方&#xff0c;重構它&#xff0c;把它放到一個自己的函…

《流浪地球》 電影全集

《流浪地球》 電影全集 《流浪地球》是由郭帆導演&#xff0c;吳京特別出演&#xff0c;屈楚蕭、李光潔、吳孟達等人主演的科幻片《流浪地球》宣布定檔2019大年初一。同時&#xff0c;影片發布了一款定檔預告片&#xff0c;預告片開頭傳來一段廣播聲音&#xff1a;“太陽急速老…

kotlin之plus、copyOf、reverse、forEach、filter、map、reduce、fold等函數解釋和使用

kotlin之::函數調用、plus&#xff08;增加元素&#xff09;、copyOf&#xff08;復制數組&#xff09;、reverse&#xff08;翻轉數組&#xff09;、forEach&#xff08;遍歷數組&#xff09;、filter&#xff08;過濾數組&#xff09;、map函數操作及擴展、reduce函數、fold函…

linux 常用命令 雜記

前些天發現了一個巨牛的人工智能學習網站&#xff0c;通俗易懂&#xff0c;風趣幽默&#xff0c;忍不住分享一下給大家。點擊跳轉到教程。 1.cat cat 命令用于連接文件并打印到標準輸出設備上。 使用權限 所有使用者 2.Linux chgrp命令用于變更文件或目錄的所屬群組。 3.Linux…

C程序員要學C++嗎?

最近網友問到這一問題&#xff0c;但我更希望被問的是“C程序員需要學面向對象編程嗎&#xff1f;”&#xff0c;那就讓我先從回答這一問題開始&#xff0c;并做適當的擴展。 就我的成長經歷來看&#xff0c;C程序員必須學習面向對象編程&#xff01;面向對象編程語言有其天然的…