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

    flex 布局

    1. 图例

    flex 的位置表

    2. 容器的属性

    1) flex-direction 属性

    属性决定主轴的方向(即项目的排列方向)

    flex-direction: row | row-reverse | column | column-reverse;

    • row(默认值):主轴为水平方向,起点在左端
    • row-reverse:主轴为水平方向,起点在右端
    • column:主轴为垂直方向,起点在上沿
    • column-reverse:主轴为垂直方向,起点在下沿

    2) flex-wrap 属性

    决定项目的换行规则

    flex-wrap: nowrap | wrap | wrap-reverse;

    • nowrap(默认):不换行
    • wrap:换行,第一行在上方
    • wrap-reverse:换行,第一行在下方

    3) flex-flow 属性

    flex-direction 和 flex-wrap 规则的缩写

    flex-flow: <flex-direction> || <flex-wrap>;

    • 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:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

    5) align-items 属性

    项目在交叉轴上的对齐方式

    align-items: flex-start | flex-end | center | baseline | stretch;

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

    6) align-content 属性

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

    align-content: flex-start | flex-end | center | space-between | space-around | stretch;

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

    3. 项目的属性

    1) order: (integer)

    规定项目的顺序;

    2) flex-grow: (number)

    default 0 表示不会自动填充未满的空间

    3) flex-shrink: (number)

    default 1 表示可以压缩已设定的宽度
    故 flex-grow, flex-shrink两个同时设为0代表项目的大小固定,不通过改变大小来适应容器

    4) flex-basis: length | auto /* default auto */

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

    5) flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]

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

    6) align-self: auto | flex-start | flex-end | center | baseline | stretch;

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

    4. 理解

    <div class="wrop">
        <span class="item">...</span>
        <span class="item">...</span>
        <span class="item">...</span>
        <span class="item">...</span>
        <span class="item">...</span>
        <span class="item">...</span>
    </div>
    
    1. 当 wrop 设置为 wrop 时,可能造成里面的 item 不能充满整个容器,这时可以设置 wrop 或 item的 flex-grow: 1; ,可以使所有的 itme 或对应的 item 补充剩余的空间
    .wrop {
      display: flex;
      flex-wrap: wrap;
      align-content: flex-start;
    }
    .item {
        height: 25%;
         30%;
    }
    .item:nth-child(1){
        flex-grow: 1;
    }
    


    1. 当 wrop 设置为 nowrop 时,可能造成里面的 item 充满整个容器而导致宽度比设定时小,这时可以设置 wrop 或 item的 flex-shrink: 0; ,可以使所有的 itme 或对应的 item 的大小保持原来的大小
    .wrop {
      display: flex;
      flex-wrap: nowrap;
      align-content: flex-start;
    }
    .item {
        height: 25%;
        flex-basis: 40%;
    }
    .item:nth-child(1){
        flex-shrink: 0;
    }
    


    <!DOCTYPE html>
    <html>
    <meta charset="UTF-8">
    <meta name="renderer" content="webkit">
    <meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0,user-scalable=no">
    <link rel="shortcut icon" type="image/x-icon" href="../images/day.png" media="screen">
    <style>
    *{
      margin: 0;
    }
    html{
      height: 100%;
    }
    body{
      height: 100%;
    }
    .HolyGrail {
      min-height: 100vh;
      background-color: #eae6e6;
    }
    header,
    footer {
      color: white;
      text-align: center;
      background-color: #484848;
      box-sizing: border-box;
      border: 1px solid white;
    }
    .HolyGrail {
      display: flex;
      flex-direction: column;
    }
    header,
    footer {
      flex: 1;
    }
    .HolyGrail-body {
      display: flex;
      /*flex: 1;*/
      height: 60%;
    }
    .HolyGrail-nav, .HolyGrail-ads {
      /* 两个边栏的宽度设为12em */
      flex: auto;
      box-sizing: border-box;
      border: 1px solid;
    }
    .HolyGrail-content {
      flex-grow: 1;
      box-sizing: border-box;
      border: 1px solid;
    }
    .HolyGrail-nav{
      order: -1;
    }
    @media (max- 768px) {
      .HolyGrail-body {
        flex-direction: column;
        /*flex: 1;*/
      }
      .HolyGrail-nav,
      .HolyGrail-ads,
      .HolyGrail-content {
        flex: auto;
      }
    }
    </style>
    <body class="HolyGrail">
      <header>...</header>
      <div class="HolyGrail-body">
        <main class="HolyGrail-content">content</main>
        <nav class="HolyGrail-nav">nav</nav>
        <aside class="HolyGrail-ads">ads</aside>
      </div>
      <footer>...</footer>
    </body>
    </html>
    

    5. 参考链接

    Flex 布局教程:语法篇
    Flex 布局教程:实例篇

  • 相关阅读:
    漫话JavaScript与异步·第三话——Generator:化异步为同步
    HTTPS、证书与使用Charles抓包
    【前端基础】动态脚本与JSONP
    前端十万个为什么(之一):我们为什么需要npm?
    一个前端程序员的费曼技巧练习
    漫话JavaScript与异步·第二话——Promise:一诺千金
    漫话JavaScript与异步·第一话——异步:何处惹尘埃
    Flex:CSS3布局利器
    BFC探秘
    虚机的部分操作
  • 原文地址:https://www.cnblogs.com/CccZss/p/8552947.html
Copyright © 2011-2022 走看看