首頁  >  文章  >  web前端  >  flex佈局的實例講解

flex佈局的實例講解

零下一度
零下一度原創
2017-07-23 13:21:062497瀏覽

  flex佈局可以幫我們快速佈局一些區塊,實現你想要的效果,不用再去float,position之類的.我們在佈局網頁的時候很多時候都是一些特殊佈局,flex就能幫我快速去佈局,不需要去定位.

  任何一個盒子都可以指定為flex佈局,但是要注意,設為Flex 佈局以後,子元素的floatclear vertical-align屬性將會失效。

下面我們看看我們網站經常遇到實例:我們要讓圖片,文字居中並且都貼底部佈局,以往的經驗會,父容器設定text-align:center,但是垂直方向就很繁瑣了,

要么父容器設定padding-top,

要么給圖片設定margin-top;

要么position去定位;

但是注意了:雖然你這樣設定也能辦到,但是換一張圖片,大小不一致的話,哈哈,你就哭吧;

flex出場了,這時候你只需要在

父容器{

    display: flex;
    flex-direction:column;//让子元素纵向布局
    justify-content:flex-end;//子元素垂直方向布局,依次向下
    align-items: center;//让子元素水平方向居中

}

 

同理垂直居中的話只需要

justify-content:center;垂直方向居中

#
如果是想要图片居顶部,文字居底部;justify-content: space-between;//两端对齐

這是常見的上下佈局

justify-content有下面几个属性
  • flex-start(預設值):

    flex-direction:column时候为上对齐
    flex-direction:row为左对齐
  • flex-end:同理column下對齊   row為右對齊

  • center:居中

  • space-between:兩端對齊,項目之間的間隔都相等。

  • space-around:每個專案兩側的間隔相等。所以,專案之間的間隔比專案與邊框的間隔大一倍。

左右就更簡單了,對flex有興趣的可以自己去試試;

下面來具體將flex裡面的各種屬性,

以下6個屬性設定在容器上。

  • flex-direction

  • #flex-wrap

  • flex-flow

  • justify-content

  • align-items

  • align-content

 

 flex-direction屬性

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

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

 

它可能有4個值。

  • row(預設值):主軸為水平方向,起點在左端。

  • row-reverse:主軸為水平方向,起點在右端。

  • column:主軸為垂直方向,起點在上方沿。

  • column-reverse:主軸為垂直方向,起點在下方下方。

row 和column上面示範過了,就是順序

row-reverse為水平倒數;                                          

 column-reverse為垂直倒序

flex佈局的實例講解flex-wrap屬性定義,如果一條軸線排不下,如何換行。

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

flex-flow

flex-flow屬性是flex-direction屬性和flex-wrap 屬性的簡寫形式,預設值為row nowrap

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

 

align-items屬性

align-items:其實跟justify-content屬性差不多,如果在沒有指定flex- direction;的時候 

align-items就是垂直方向上變化位子關係;justify-content就是水平方向上變化位子關係

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

它可能取5個值。具體的對齊方式與交叉軸的方向有關,以下假設交叉軸從上到下。

  • flex-start:交叉軸的起點對齊。

  • flex-end:交叉軸的終點對齊。

  • center:交叉軸的中點對齊。

  • baseline: 專案的第一行文字的基線對齊。

  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

 

align-content属性

align-content属性定义了多根轴线的对齐方式。如果项目只有一根轴线,该属性不起作用。

 align-content:center;就是让这三排盒子垂直方向居中                         

   如果你设置为align-item:content;就没有让三个盒子一起垂直居中的效果了

 


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

 

下面讲一点flex应用在子集元素上

flex-grow属性

flex-grow属性定义项目的放大比例,默认为0,即如果存在剩余空间,也不放大。

.item {  flex-grow: <number>; /* default 0 */}

 

如果所有项目的flex-grow属性都为1,则它们将等分剩余空间(如果有的话)。如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

 如果给所有子集都设置flex-grow:1;将会成右边图,平分宽度;同理也可以平分高度;

例如给第三个盒子设置flex-grow:2,效果如下,第三个盒子分的宽度为其他的2倍

 

 

 

flex-basis属性

flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto,即项目的本来大小。

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

它可以设为跟widthheight属性一样的值(比如350px),则项目将占据固定空间。

其实这个跟flex-grow差不多,区别就在于可以单独设置其中某一个盒子的占比(长度或者宽度)

给第三个盒子设置flex-basis:100px;

给第九个盒子设置flex-basis:200px

 

 

flex属性

flex属性是flex-growflex-shrink 和 flex-basis的简写,默认值为0 1 auto。后两个属性可选。

.item {  flex: none | [ <&#39;flex-grow&#39;> <&#39;flex-shrink&#39;>? || <&#39;flex-basis&#39;> ]}

该属性有两个快捷值:auto (1 1 auto) 和 none (0 0 auto)。

建议优先使用这个属性,而不是单独写三个分离的属性,因为浏览器会推算相关值。

 

align-self属性

align-self属性允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch

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

该属性可能取6个值,除了auto,其他都与align-items属性完全一致。

第三个盒子align-self:flex-end;

第五个盒子align-self;stretch;

第九个盒子align-self:flex-start;

以上是flex佈局的實例講解的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn