• flex 布局


    一、什么是 flex 布局?

      flex 布局意为"弹性布局",用来为盒状模型提供最大的灵活性。

      主要思想:给容器控制项目的宽度高度的能力,使用 flex 项目可以自动填满容器的可用空间。Flex 容器(父元素)使用 Flex 项目(子元素)可以自动放大与收缩,用来填补可用的空闲空间。

    上图展示的是水平方向的 flex 容器,若 flex-direction 属性为竖直方向,则 main axis 的方向为竖直方向。

    • main axis: Flex容器的主轴主要用来配置Flex项目。注意,它不一定是水平,这主要取决于flex-direction属性。
    • main-start | main-end: Flex项目的配置从容器的主轴起点边开始,往主轴终点边结束。
    • main size: Flex项目的在主轴方向的宽度或高度就是项目的主轴长度,Flex项目的主轴长度属性是widthheight属性,由哪一个对着主轴方向决定。
    • cross axis: 与主轴垂直的轴称作侧轴,是侧轴方向的延伸。
    • cross-start | cross-end: 伸缩行的配置从容器的侧轴起点边开始,往侧轴终点边结束。
    • cross size: Flex项目的在侧轴方向的宽度或高度就是项目的侧轴长度,Flex项目的侧轴长度属性是widthheight属性,由哪一个对着侧轴方向决定。

    二、容器的属性

      Flex容器不是块容器,因此有些设计用来控制块布局的属片在Flexbox布局中不适用。特别是:多列组中所有column-*属性、floatclear属性和vertical-align属性在Flex容器上没有作用。

      1、display:定义一个 flex 容器,决定其为内联还是块

        取值:flex(块) | inline-flex(内联)

        如果元素 display 的值指定为 inline-flex,而且元素是一个浮动元素或绝对定位元素,则 display 的计算值是 flex。

      2、flex-direction:创建方向轴,定义 flex 项目在 flex 容器中放置的方向。

        取值:row(默认值):主轴为水平方向,起点在左端

           row-reverse:主轴为水平方向,起点在右端

           column:主轴为垂直方向,起点在上沿

           column-reverse:主轴为垂直方向,起点在下沿

      3、flex-wrap:让 flex 项目多行显示

         取值:nowrap(默认值):单行显示

            wrap:多行显示,第一行在上方

            wrap-reverse:多行显示,第一行在下方  

      4、flex-flow:属性 flex-direction 和 flex-wrap 属性的简写

      5、justify-content:定义项目在主轴上的对齐方式

        取值:flex-start(默认值):左对齐

           flex-end:右对齐

           center:居中

           space-between:两端对齐,项目之间的间隔都相等

           space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

      6、align-items:定义项目在交叉轴上的对齐方式

        取值:flex-start:交叉轴的起点对齐

           flex-end:交叉轴的终点对齐

           center:交叉轴的中点对齐

           baseline:项目的第一行文字的基线对齐

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

      7、align-content:定义多跟轴线的对齐方式。若只有一根轴线,则该属性不起作用。

        取值:flex-start:与交叉轴的起点对齐

           flex-end:与交叉轴的终点对齐

           center:与交叉轴的中点对齐

           space-between:与交叉轴两端对齐,轴线之间的间隔平均分布

           space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍    

           stretch(默认值):轴线占满整个交叉轴

    三、项目的属性

      1、order:定义项目的排列顺序,数值越小排列越靠前,默认为0

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

      3、flex-shrink:定义项目的缩小比例,默认为1,即如果空间不足,该项目缩小

      4、flex-basis:定义 flex 项目在分配多余空间之前的一个默认尺寸。默认值是 auto,即项目本来的大小。

      5、flex:是 flex-growflex-shrink 和  flex-basis三个属性的缩写。第二个和第三个参数( flex-shrink 和 flex-basis )是可选值。其默认值是 0 1 auto

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

        取值:auto | flex-start | flex-end | center | baseline | stretch;

    四、实例  

      1 <!DOCTYPE html>
      2 <html lang="en">
      3 
      4 <head>
      5     <meta charset="UTF-8">
      6     <title>Flex 布局</title>
      7     <style>
      8         /* basic style sheet */
      9         * {
     10             box-sizing: border-box;
     11         }
     12         html, body {
     13             height: 100%;
     14         }
     15         body {
     16             display: flex;
     17             align-items: center;
     18             justify-content: center;
     19             vertical-align: center;
     20             flex-wrap: wrap;
     21             align-content: center;
     22             font-family: 'Open Sans', sans-serif;
     23             background: linear-gradient(top, #222, #333);
     24         }
     25         [class^=box] {
     26             margin: 16px;
     27             padding: 4px;
     28             background-color: #e7e7e7;
     29             width: 104px;
     30             height: 104px;
     31             object-fit: contain;
     32             box-shadow: inset 0 5px white,
     33             inset 0 -5px #bbb,
     34             inset 5px 0 #d7d7d7,
     35             inset -5px 0 #d7d7d7;
     36             border-radius: 10%;
     37         }
     38         .item {
     39             display: block;
     40             width: 24px;
     41             height: 24px;
     42             border-radius: 50%;
     43             margin: 4px;
     44             background-color: #333;
     45             box-shadow: inset 0 3px #111, inset 0 -3px #555;
     46         }
     47         [class^=box] {
     48             display: flex;
     49         }
     50         .box-1 {
     51             justify-content: center;    /* 项目在主轴上的对齐方式,此例中为水平方向对齐方式 */
     52             align-items: center;        /* 项目在交叉轴上的对齐方式,此例中为竖直方向对齐方式 */
     53         }
     54         .box-2 {
     55             justify-content: space-between;
     56         }
     57         /* :nth-of-type(N) 选择器匹配属于父元素的特定类型的第 N 个子元素的每个元素 */
     58         .box-2 .item:nth-of-type(2) {
     59             align-self: flex-end;        /* 定义单个项目与其他项目具有不一样的对齐方式 */
     60         }
     61         .box-3 {
     62         }
     63         .box-3 .item:nth-of-type(2) {
     64             justify-content: center;
     65             align-self: center;
     66         }
     67         .box-3 .item:nth-of-type(3) {
     68             align-self: flex-end;
     69         }
     70         .box-4, .box-6 {
     71             justify-content: space-between;
     72         }
     73         .column {
     74             display: flex;
     75             flex-direction: column;        /* 创建方向轴,column表示主轴为垂直方向,起点在上沿 */
     76             justify-content: space-between;        /* 项目在主轴上的对齐方式,space-between 表示两端对齐 */
     77         }
     78         .box-5 {
     79             justify-content: space-between;
     80         }
     81         .box-5 .column:nth-of-type(2), .box-7 .column:nth-of-type(2) {
     82             justify-content: center;
     83         }
     84         .box-8 .column:nth-of-type(2) {
     85             justify-content: space-around;
     86         }
     87     </style>
     88 </head>
     89 
     90 <body>
     91     <div class="box-1">
     92         <span class="item"></span>
     93     </div>
     94 
     95     <div class="box-2">
     96         <span class="item"></span>
     97         <span class="item"></span>
     98     </div>
     99 
    100     <div class="box-3">
    101         <span class="item"></span>
    102         <span class="item"></span>
    103         <span class="item"></span>
    104     </div>
    105 
    106     <div class="box-4">
    107         <div class="column">
    108             <span class="item"></span>
    109             <span class="item"></span>
    110         </div>
    111         <div class="column">
    112             <span class="item"></span>
    113             <span class="item"></span>
    114         </div>
    115     </div>
    116 
    117     <div class="box-5">
    118         <div class="column">
    119             <span class="item"></span>
    120             <span class="item"></span>
    121         </div>
    122         <div class="column">
    123             <span class="item"></span>
    124         </div>
    125         <div class="column">
    126             <span class="item"></span>
    127             <span class="item"></span>
    128         </div>
    129     </div>
    130 
    131     <div class="box-6">
    132         <div class="column">
    133             <span class="item"></span>
    134             <span class="item"></span>
    135             <span class="item"></span>
    136         </div>
    137         <div class="column">
    138             <span class="item"></span>
    139             <span class="item"></span>
    140             <span class="item"></span>
    141         </div>
    142     </div>
    143 
    144     <div class="box-7">
    145         <div class="column">
    146             <span class="item"></span>
    147             <span class="item"></span>
    148             <span class="item"></span>
    149         </div>
    150         <div class="column">
    151             <span class="item"></span>
    152         </div>
    153         <div class="column">
    154             <span class="item"></span>
    155             <span class="item"></span>
    156             <span class="item"></span>
    157         </div>
    158     </div>
    159 
    160     <div class="box-8">
    161         <div class="column">
    162             <span class="item"></span>
    163             <span class="item"></span>
    164             <span class="item"></span>
    165         </div>
    166         <div class="column">
    167             <span class="item"></span>
    168             <span class="item"></span>
    169         </div>
    170         <div class="column">
    171             <span class="item"></span>
    172             <span class="item"></span>
    173             <span class="item"></span>
    174         </div>
    175     </div>
    176 
    177     <div class="box-9">
    178         <div class="column">
    179             <span class="item"></span>
    180             <span class="item"></span>
    181             <span class="item"></span>
    182         </div>
    183         <div class="column">
    184             <span class="item"></span>
    185             <span class="item"></span>
    186             <span class="item"></span>
    187         </div>
    188         <div class="column">
    189             <span class="item"></span>
    190             <span class="item"></span>
    191             <span class="item"></span>
    192         </div>
    193     </div>
    194 </body>
    195 
    196 </html>
    View Code
  • 相关阅读:
    javascript的alert的使用
    UIGestureRecognizer对图像进行缩放、移动、旋转操作
    对开源库使用 AutoCAD 文件格式
    计算机图形学常用算法
    KMP字符串模式匹配详解
    C++面试题String函数实现
    c++虚函数解析
    c++内存分配
    win32编程入门
    C++中Int转换成String
  • 原文地址:https://www.cnblogs.com/xlb-happymoment/p/7795019.html
Copyright © 2020-2023  润新知