• 弹性盒布局学习总结


      近期在做移动端的项目过程中,经常听到有人说用弹性盒布局来写比较快,因为我一直用的是传统的百分比布局(好吧,不敢否认我还是喜欢用拿手的,但是不要鄙视我对新技术的热情),因此一直也想抽空学习下弹性盒布局,看看他到底是何方神圣,能够用到哪些场合,还有浏览器兼容性到底怎么样

    一、语法

     应用flex布局,首先要设定一个flex容器(flex container),它的子元素就自动成为flex容器的成员,称为flex项目(flex item)。

    .flex_container{
        display:flex;                 /* 块元素 */
        display:inline-flex;         /* 行内元素 */
        display:-webkit-flex;       /* safari */
    }

    注意:处于flex布局内的成员其clear、float、vertical-align属性将失效

    (在此借用阮大神的一张图):

    1.设置在父容器上的六大属性

    1)  flex-direction:决定了主轴的方向

    .flex_container {
      flex-direction: row | row-reverse | column | column-reverse;
    }
    • row(默认值):主轴为水平方向,起点在左端。
    • row-reverse:主轴为水平方向,起点在右端。
    • column:主轴为垂直方向,起点在上沿。
    • column-reverse:主轴为垂直方向,起点在下沿。

    2) flex-wrap:决定了项目在轴上一行排列不下时是否换行

        .flex_container{
          flex-wrap: nowrap | wrap | wrap-reverse;
        }
    • nowrap:默认不换行,所有项目在一行显示
    • wrap:一行显示不完则换行显示,第一行在最上面
    • wrap-reverse:第一行开始在最下方

    3)flex-flow:flex-direction和flex-wrap两属性的简写,默认值为row no-wrap

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

    4)justify-content:定义了项目在主轴上的对齐方式

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

    5)align-items:定义项目在交叉轴上如何对齐

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

    6)align-content:定义了项目在多根轴线上的对齐方式(如果一根轴线不起作用)

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

    2.项目的六大属性

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

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

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

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

    3)flex-shrink:定义了项目的缩小比例,默认为1,即如果空间不足,将缩小适应空间

    .item {
      flex-shrink: <number>; /* default 1 */
    }

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

    4)flex-basis:定义在分配剩余空间之前,项目所占据的主轴空间。浏览器根据此特性计算主轴是否有剩余空间,默认值为auto,即项目本来大小

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

    注意:若项目设为固定宽高,则占据固定空间,如200px||20%

    5)flex:flex-grow、flex-shrink、flex-basis三个属性的缩写,默认值为0 1 auto,后两个属性可选

        .item {
          flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ]
        }

    注意:none代表(0 0 auto),  auto代表(1 1 auto)

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

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

     二、布局

    了解了flex的基本语法之后,究竟怎样用好这些语法进行布局了。自己为了练习写出了一个非常不好看low逼的导航条,但是基本的语法都用上了

    <ul class="flex_container">
            <li><a href="#">新闻</a></li>
            <li><a href="#">娱乐</a></li>
            <li><a href="#">生活</a></li>
            <li><a href="#">科技</a></li>
            <li><a href="#">财经报道</a></li>
     </ul>
    .flex_container{
        display: flex;
        flex-grow:row wrap;
        justify-content:space-between;
        width:640px;
        height:50px;
        margin:10% auto;
        background-color:#ccc;
        li{
            display: flex;
            flex:1;
            align-items: stretch;
            justify-content: center;
            background-color:black;
            list-style:none;
            a{
                flex:1;
                text-align: center;
                line-height: 50px;
                color:white;
                text-decoration: none;
            }
        }
    
        li:last-child{
            flex:2;
        }
    }

    注意:代码并没有做兼容性处理,可以自己写或者用autoprefixer工具来处理

    具体详细布局策略移步至阮大神教程:Flex布局教程:实例篇

    三、兼容性 

     浏览器一共支持三个不同版本的语法:

    • 新规范:最新版本的语法,即“display:flex”
    • 中间版本:2011年非官方规范,即“display:flexbox”
    • 老规范:2009年官方规范,即“display:box”

      从表中可以看出弹性盒布局在移动端的支持性还是比较好的,不过为了兼容不同的浏览器,建议还是用autoprefixer工具自动补全其不同的前缀。

    对内贵有志气,对外贵得人心
  • 相关阅读:
    online ddl与pt-osc详解
    几个重点问题回顾
    死锁及常见死锁模型
    InnoDB中锁的算法(3)
    一个幻读模型引出的记录可见性判断
    jupyter notebook的使用
    l线程池抓取lianjia
    lagou数据爬取
    爬虫代理的设置
    linux如何安装和启动mongdb
  • 原文地址:https://www.cnblogs.com/worldly1013/p/6012865.html
Copyright © 2020-2023  润新知