CSS中的Flex布局

一.什么是Flex布局

Flex布局可以:簡便、完整、響應(yīng)式的實(shí)現(xiàn)各種頁面布局。
FlexFlexible box的縮寫,意為彈性布局,用來為盒子模型提供最大的靈活性。

二.Flex布局使用

  1. Flex使用語法

任何一個容器都可以指定為Flex布局,使用方法如下:

.box {
    display:flex;
}

行內(nèi)元素也可以使用Flex布局:

.box {
    display:inline-flex;
}

????????使用Flex布局后,子元素的floatclear、vertical-align屬性將失效。

  1. 基本概念

采用Flex布局的元素,稱為Flex容器,簡稱容器,它的所有子元素自動成為容器成員,稱為Flex項(xiàng)目,簡稱項(xiàng)目

  • 容器默認(rèn)存在兩根軸:水平的主軸(main axis)垂直的交叉軸(cross axis);
  • 主軸的開始位置(與邊框的交叉點(diǎn))叫main start,結(jié)束位置叫main end;
  • 交叉軸的開始位置叫cross start,結(jié)束位置叫cross end;
  • 項(xiàng)目默認(rèn)沿主軸排列,單個項(xiàng)目占據(jù)的主軸空間叫作main size,占據(jù)的交叉軸空間叫作corss size;
  • 簡化:x軸為主軸y軸為交叉軸;

三.容器的屬性

  1. 所有屬性概述

Flex容器一共有六大屬性,如下:

  • flex-direction:內(nèi)部元素的排列方式:從左到右、從右到左、從上到下、從下到上;
  • flex-wrap:子元素的換行方式:不換行、換行(第一行在上面、第二行在上面);
  • flex-flow:子元素的排列方式和換行方式的簡寫;
  • justify-content:子元素的水平對齊方式;
  • align-items:子元素的垂直對齊方式;
  • align-content:設(shè)置多個元素組成的整塊的對齊方式;
  1. flex-direction

flex-direction決定主軸的方向(即項(xiàng)目的排列方向),簡化:內(nèi)部元素的排列方式---->(從左到右、從右到左、從上到下、從下到上)。

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

圖示:



下面以一個代碼為例,表示四個方向的排列:

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8">
        <title>Flex</title>
    </head>
    <body>
        <div class="div">
            <div class="divC" style="width: 100px;height: 100px;background-color: aqua;"></div>
            <div class="divC" style="width: 100px;height: 100px;background-color: black;"></div>
            <div class="divC" style="width: 100px;height: 100px;background-color: blue;"></div>
        </div>
        <style type="text/css">
            .div{
                /* 設(shè)置為flex布局 */
                display: flex;
                /* 默認(rèn):從左往右 */
                flex-direction: row;
                /* row(默認(rèn)值):主軸為水平方向,起點(diǎn)在左端。
                row-reverse:主軸為水平方向,起點(diǎn)在右端。
                column:主軸為垂直方向,起點(diǎn)在上沿。
                column-reverse:主軸為垂直方向,起點(diǎn)在下沿。 */
            }
        </style>
    </body>
</html>

上面的flex-directionrow時效果:


上面的flex-directionrow-reverse時效果:

上面的flex-directioncolumn時效果:

上面的flex-directioncolumn-reverse時效果:

  1. flex-wrap

默認(rèn)情況下,項(xiàng)目都排在一條線(軸線)上,flex-wrap定義如果一條軸線排不下,如何換行。簡化為:
子元素的換行方式:不換行、換行(第一行在上面、第二行在上面)

.box {
    flex-wrap:nowrap | wrap | warp-reverse;
}

nowraop(默認(rèn)) 不換行 :


warp 換行(第一行在上):

wrap-reverse 換行(第二行在上):

  1. flex-flow

flex-flow屬性是flex-direction屬性和flex-wrap屬性的簡寫形式,默認(rèn)值為:row nowrap。簡化:是子元素的排列方式和換行方式的簡寫。

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

justify-content屬性定義了項(xiàng)目在主軸上的對齊方式。簡化:設(shè)置子元素的水平對齊方式

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

圖示:


詳細(xì)說明:

  • flex-start(默認(rèn)值):左對齊
  • flex-end:右對齊
  • center:居中
  • space-between:兩端對齊,項(xiàng)目之間的間隔相等
  • space-around:每個項(xiàng)目兩側(cè)的間隔相等,所以,項(xiàng)目之間的間隔比的項(xiàng)目與邊框的間隔大一倍
  1. align-items
    align-items屬性定義項(xiàng)目在交叉軸上如何對齊。簡化:設(shè)置子元素的垂直對齊方式

格式:

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

圖示:


詳細(xì)說明:

  • flex-start:交叉軸的起點(diǎn)對齊(頂部對齊)
  • flex-end:交叉軸的終點(diǎn)對齊(底部對齊)
  • center:交叉軸的中點(diǎn)對齊(垂直對齊)
  • baseline:項(xiàng)目的第一行文字的基線對齊(基于內(nèi)部第一行文本對齊)
  • stretch(默認(rèn)值):如果項(xiàng)目未設(shè)置成高度或設(shè)為auto,將占滿整個容器的高度(高度占滿整個容器)
  1. align-content

align-content屬性定義了多根軸線的對齊方式,如果項(xiàng)目只有一根軸線,該屬性不起作用。簡化:設(shè)置多個元素組成的整塊的對齊方式

格式:

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

圖示:


詳細(xì)說明:

  • flex-start:與交叉軸的起點(diǎn)對齊(頂部對齊)
  • flex-end:與交叉軸的終點(diǎn)對齊(底部對齊)
  • center:與交叉軸的中點(diǎn)對齊(居中對齊)
  • sapce-between:與交叉軸兩端對齊,軸線之間的間隔平均分布
  • space-around:每根軸線兩側(cè)的間隔相等,所以軸線之間的間隔比軸線與邊框之間的間隔大
  • stretch(默認(rèn)值):軸線占滿整個交叉軸(高度占滿整個容器)

四.項(xiàng)目(子元素)的屬性

  1. 所有屬性概述
  • order:按照數(shù)字大小設(shè)置各個元素之間的排列方式
  • flex-grow:按照權(quán)重分配剩余空間進(jìn)行等比例放大
  • flex-shrink:按照權(quán)重進(jìn)行等比例縮小
  • felx-basis:設(shè)置子元素原始所占主軸空間大小(寬度)
  • flex:設(shè)置放大、縮小和原始大小的縮寫,建議優(yōu)先使用此方式
  • align-self:單獨(dú)設(shè)置特定元素的對齊方式,忽略align-items
  1. order
    order屬性定義項(xiàng)目的排列順序,數(shù)值越小,排列越靠前,默認(rèn)為0。
    簡化:按照數(shù)字大小設(shè)置各個元素之間的排列方式

格式:

.item {
    order:<integer>;
}

圖示:


  1. flex-grow
    flex-grow屬性定義項(xiàng)目的放大比例,默認(rèn)為0,即如果存在剩余空間,也不放大。簡化:按照權(quán)重分配剩余空間進(jìn)行等比例放大

格式:

.item{
    flex-grow:<number>;
}

??????
如果所有項(xiàng)目的flex-grow都為1,那么它們將均勻分配剩余空間。
如果某個項(xiàng)目flex-grow2,其余項(xiàng)目為1,那么前者分配到的空間將比后者大一倍。

圖示:


  1. flex-shrink
    flex-shrink屬性定義了項(xiàng)目的縮小比例,默認(rèn)為1,即如果空間不足,該項(xiàng)目將縮小。簡化:按照權(quán)重進(jìn)行等比例縮小。

格式:

.item{
    flex-shrink:<number>;
}

??????
負(fù)值是一個無效的數(shù)值;
如果某個項(xiàng)目屬性值為0,那么該項(xiàng)目將不會縮小,而是讓其它項(xiàng)目縮小。

圖示:


  1. flex-basis
    flex-basis屬性定義了在分配多余空間之前,項(xiàng)目占據(jù)的主軸空間main size;
    瀏覽器根據(jù)這個屬性計算是否有多余空間,默認(rèn)值為auto,即項(xiàng)目本來大小。

簡化:設(shè)置子元素原始所占主軸空間大小(寬度)。

??????
它可以設(shè)為跟widthheight一樣的值,那么項(xiàng)目將會占據(jù)固定空間

格式:

.item{
    flex-basis:<length> | auto;
}
  1. flex
    flex屬性是flex-grow,flex-shrinkflex-basis的簡寫,默認(rèn)值為“0 1 auto”,后兩個屬性可選。

簡化:設(shè)置放大、縮小、原始大小的簡寫,建議優(yōu)先使用該方式

??????
該屬性有兩個快捷值:“auto(1 1 auto)”、“none(0 0 auto)”,建議優(yōu)先寫這兩個快捷值。

格式:

.item {
    flex:none | [<flex-grow> <flex-shrink> <flex-basis>];
}
  1. align-self
    align-self屬性允許單個項(xiàng)目與其他項(xiàng)目有不一樣的對齊方式,可以覆蓋align-items屬性,默認(rèn)值為auto,表示繼承父元素的align-items屬性,如果沒有父元素,那么等同于stretch

簡化:單獨(dú)設(shè)置特定元素的方式,忽略align-items

格式:

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

圖示:


?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容