zoukankan      html  css  js  c++  java
  • Flex布局

    Flex 布局,可以实现各种页面布局。目前,它已经得到了所有浏览器的支持。Webkit 内核的浏览器,必须加上-webkit前缀。
    Flex 是 Flexible Box 的缩写,意为"弹性布局"。

    一、Flex的基本概念

    采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"。

    flex.png

    容器默认存在两根轴:默认水平的为主轴(main axis)和垂直的为交叉轴(cross axis)。主轴的开始位置叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end
    项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size

    需要注意的是:当元素设为 Flex 布局以后,子元素的floatclearvertical-align属性将失效。

    二、将元素指定为Flex布局

    可以将任何容器指定为Flex布局

    .box{
      display: flex;
    }
    

    行内元素也可以使用 Flex 布局。

    .box{
       display: inline-flex;
    }
    

    Webkit 内核的浏览器,必须加上-webkit前缀。

    .box{
       display: -webkit-flex; /* Safari */
       display: flex;
    }
    

    三、容器属性详述

    容器的属性有6个。

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

    1.flex-direction

    flex-direction属性决定主轴的方向,即项目排列的方向。

    可能有4个值

    • row(默认值):主轴为水平方向,项目沿主轴从左至右排列
    • column:主轴为竖直方向,项目沿主轴从上至下排列
    • row-reverse:主轴水平,项目从右至左排列,与row反向
    • column-reverse:主轴竖直,项目从下至上排列,与column反向
    .container{
         100px;
        height: 100px;
        border: 1px solid black;
        border-radius: 10px;
    }
    .item{
        margin-left: 1px;
        margin-top: 1px;
        display: inline-block;
         20px;
        height: 20px;
        border: 1px solid black;
        border-radius: 20px;
        background: black;
        color: red;
        text-align: center;
    }
     <div class="container">
        <span class="item">1</span> 
        <span class="item">2</span>
        <span class="item">3</span>
        <span class="item">4</span>
        <span class="item">5</span>
        <span class="item">6</span>
    </div>
    
    
    .container{
        display: flex;
        border: 1px solid black;
        border-radius: 5px;
        flex-direction: column;
    }
    

    row.png

    column.png

    row-reverse.png

    column-reverse.png

    2.flex-wrap属性

    默认情况下,项目都排在一条线上,即主轴上。flex-wrap属性定义,当一条轴线排不下时,是否换行和方式。

    可能有3个值

    • nowrap(默认)
    • wrap
    • wrap-reverse

    wrap.png

    nowrap.png

    wrap-reverse.png

    3.flex-flow

    flex-flow属性是flex-direction属性和flex-wrap属性的简写形式,默认值为row nowrap

    4.justify-content属性

    justify-content属性定义了项目在主轴上的对齐方式。

    可能的值有:flex-start(默认),flex-end,center,space-between,space-around。当主轴沿水平方向时,具体含义为

    • flex-start(默认值):左对齐
    • flex-end:右对齐
    • center:居中对齐
    • space-between:两端对齐,项目之间的间隔都相等。
    • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

    flex-start.png

    center.png

    flex-end.png

    space-between.png

    space-around.png

    5.align-items属性

    align-items属性定义项目在交叉轴上如何对齐。

    可能的值有:

    • flex-start:交叉轴的起点对齐
    • flex-end:交叉轴的终点对齐
    • center:交叉轴的中点对齐
    • baseline:项目的第一行文字的基线对齐
    • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度

    flex-start1.png

    flex-end1.png

    center1.png

    stretch.png

    baseline.png

    6.align-content属性

    align-content属性定义了多根轴线(即item不止一行时)的对齐方式。如果项目只有一根轴线,该属性不起作用。
    注意当有多行时,定义了align-content后,align-items属性将失效。align-content可能值含义如下(假设主轴为水平方向):

    • flex-start:与交叉轴的起点对齐
    • flex-end:与交叉轴的终点对齐
    • center:与交叉轴的中点对齐
    • space- between:与交叉轴两端对齐,轴线之间的间隔平均分布
    • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍
    • stretch(默认值):轴线占满整个交叉轴

    flex-start2.png

    flex-end2.png

    center2.png

    space-between1.png

    space-around 1.png

    stretch1.png

    四、项目属性详述

    项目一共有六个属性:

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

    1.order属性

    order的值是整数,默认为0,整数越小,item排列越靠前。

     .item:nth-child(1){
    	order: 4;
     }
     .item:nth-child(1){
    	order: 3;
     }
     .item:nth-child(1){
    	order: 2;
     }
     .item:nth-child(1){
    	order: 1;
     }
    
    <div class="container">
        <span class="item">1</span> 
        <span class="item">2</span>
        <span class="item">3</span>
        <span class="item">4</span>
        <span class="item">5</span>
        <span class="item">6</span>
    </div>
    

    order.png

    2.flex-grow属性

    定义了当flex容器有多余空间时,item是否放大。默认值为0,即当有多余空间时也不放大;可能的值为整数,表示不同item的放大比例。

    flex-grow.png

    注意:当在容器中定义了flex-wrap: nowrap,而且空间不足的情况下,则没有放大的效果。

    3.flex-shrink

    定义了当容器空间不足时,item是否缩小。默认值为1,表示当空间不足时,item自动缩小,其可能的值为整数,表示不同item的缩小比例。

    如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小。

    负值对该属性无效。

    flex-shrink.png

    注意:当在容器中定义了flex-wrap: wrap,表示空间足够,则没有缩小的效果。

    4.flex-basis属性

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

    flex-basis.png

    5.flex属性

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

    6.align-self属性

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

    • auto:和父元素align-items的值一致
    • flex-start: 交叉轴的起点对齐
    • flex-end:交叉轴的终点对齐
    • center:交叉轴的中点对齐
    • baseline:项目的第一行文字的基线对齐
    • stretch:如果项目未设置高度或设为auto,将占满整个容器的高度

    align-self.png

  • 相关阅读:
    leetcode Convert Sorted List to Binary Search Tree
    leetcode Convert Sorted Array to Binary Search Tree
    leetcode Binary Tree Level Order Traversal II
    leetcode Construct Binary Tree from Preorder and Inorder Traversal
    leetcode[105] Construct Binary Tree from Inorder and Postorder Traversal
    证明中序遍历O(n)
    leetcode Maximum Depth of Binary Tree
    限制 button 在 3 秒内不可重复点击
    HTML 和 CSS 画三角形和画多边行基本原理及实践
    在线前端 JS 或 HTML 或 CSS 编写 Demo 处 JSbin 与 jsFiddle 比较
  • 原文地址:https://www.cnblogs.com/qfstudy/p/9630375.html
Copyright © 2011-2022 走看看