• 布局学习笔记--flex布局


    flex布局

    1.什么是flex布局?

    Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性。

    属性介绍建议阅读阮一峰的flex布局教程http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html

    在这里写下自己的理解

    水平的主轴(main axis)和垂直的交叉轴(cross axis)

    1.1容器的属性

    控制从左到右或者相反、从上到下或者相反

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

    控制怎么是否换行或新的一行在上方

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

    以上两个属性的简写

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

     

    以下两个属性的解释是假设主轴从左到右,交叉轴从上到下

    主轴对齐方式:左对齐、右对齐、居中、两端对齐间隔相等、每个项目左右间隙相同

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

    交叉轴对齐方式:上对齐、下对齐、居中、项目第一行文字的基准线对齐、拉伸项目撑满整个盒子

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

     

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

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

    假设主轴从左到右交叉轴从上到下解释

    • flex-start:与交叉轴的起点对齐。(整体看作一个盒子,盒子里面从左到右排好后,与上对齐)

    • flex-end:与交叉轴的终点对齐。(整体看作一个盒子,盒子里面从左到右排好后,与下对齐)

    • center:与交叉轴的中点对齐。(整体看作一个盒子,盒子里面从左到右排好后,居中)

    • space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。(从左到右排好后,最上最下两排分别上下对齐,余下的间隙每排相同)

    • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。(从左到右排好后,每两排之间的间隙相同,最上最下与边框的间隙减半)

    • stretch(默认值):轴线占满整个交叉轴。(从左到右排好后,每排拉伸为相同高度,撑满盒子的高)

     

    1.2项目的属性

    order属性定义排列顺利,数值越小越靠前,默认为0;

    flex-grow属性定义项目的放大比例,默认为0 ;

    lex-shrink属性定义了项目的缩小比例,默认为1 ;

    flex-basis属性定义了在分配多余空间之前,项目占据的主轴空间(main size);

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

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

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

    这是项目属性最重要的一个属性,针对某一个项目单独设置。

     

    2.为什么要使用flex布局?

    传统的布局方案主要基于CSS盒子模型,依赖Display、Position、Float等属性。但是它对于一些特殊布局非常不方便,比如水平垂直居中。 传统的方式如下

    .dad {
        position: relative;
    }
    ​
    .son {
        position: absolute;
        margin: auto;
        top: 0;
        right: 0;
        bottom: 0;
        left: 0;
    }

    但是在flex布局中只需要三行

    .dad {
        display: flex;
        justify-content: center;
        align-items: center
    }

    所以简洁高效是flex布局的优点。

     

    3.怎么使用flex布局?

    这一部分是使用flex布局实现一个骰子的六个平面

    3.0背景

    首先创建六个<div>标签,id分别命名dot1-dot6,class统一为dots;

        <div class="dots" id="dot1"></div>
      <div class="dots" id="dot2"></div>
      <div class="dots" id="dot3"></div>
      <div class="dots" id="dot4"></div>
      <div class="dots" id="dot5"></div>
      <div class="dots" id="dot6"></div>
            body {
                display: flex;
                flex-wrap: wrap;
            }
            .dots {
                height: 100px;
                width: 100px;
                
                padding: 5px;
                margin: 20px;
                border-radius: 10px;
            }

    此时得到了6个小方块

    3.1一点

    下面设置第一个方块,垂直居中一个点,给点添加样式.item,以及用flex设置#dot1垂直居中

        <div class="dots" id="dot1">
            <span class="item"></span>
        </div>
            .item {
                display: block;
                height: 30px;
                 30px;
                
                border-radius: 50%;
                margin: 0;
                padding: 0;
            }
            #dot1 {
                display: flex;
                justify-content: center;
                align-items: center;
            }

    3.2两点

    #dot2只需要设置两点的间距为space-between,左上角的点可以按照默认值,右下角的点需要用align-self单独设置位置

        <div class="dots" id="dot2">
            <span class="item"></span>
            <span class="item"></span>
        </div>
            #dot2 {
                display: flex;
                justify-content: space-between;
            }
            #dot2 .item:nth-child(2) {
                align-self: flex-end;
            }

    3.3三点

    #dot3与上一个类似,但是多一个中间的点需要设置为垂直居中

        <div class="dots" id="dot3">
            <span class="item"></span>
            <span class="item"></span>
            <span class="item"></span>
        </div>
            #dot3 {
                display: flex;
                justify-content: space-between;
            }
    ​
            #dot3 .item:nth-child(2) {
                align-self: center;
            }
    ​
            #dot3 .item:nth-child(3) {
                align-self: flex-end;
            }

    3.4四点

    #dot4分成两个.row,两个.row用space-between分隔开,行内再同样用space-between分割开分隔开

        <div class="dots" id="dot4">
            <div class="row">
                <span class="item"></span>
                <span class="item"></span>
            </div>
            <div class="row">
                <span class="item"></span>
                <span class="item"></span>
            </div>
        </div>
            #dot4 {
                display: flex;
                flex-wrap: wrap;
                align-content: space-between;
            }
    ​
            #dot4 .row {
                flex-basis: 100%;
                display: flex;
                justify-content: space-between;
            }

    3.5五点

    #dot5同时借鉴#dot3和#dot4,在#dot4的基础上,在中间再加一个.row,设置垂直居中,.row内加flex-flow: column;

        <div class="dots" id="dot5">
            <div class="row">
                <span class="item"></span>
                <span class="item"></span>
            </div>
            <div class="row">
                <span class="item"></span>
            </div>
            <div class="row">
                <span class="item"></span>
                <span class="item"></span>
            </div>
        </div>
            #dot5 {
                display: flex;
                justify-content: center;
            }
    ​
            #dot5 .row {
                display: flex;
                flex-flow: column;
                justify-content: space-between;
            }
    ​
            #dot5 .row:nth-child(2) {
                justify-content: center;
            }

    3.6六点

     #dot6借鉴#dot4,在#dot4的基础上,在中间再加一个.row,.row还需要加一个flex-basis: 100%;

        <div class="dots" id="dot6">
            <div class="row">
                <span class="item"></span>
                <span class="item"></span>
            </div>
            <div class="row">
                <span class="item"></span>
                <span class="item"></span>
            </div>
            <div class="row">
                <span class="item"></span>
                <span class="item"></span>
            </div>
        </div>
            #dot6 {
                display: flex;
                flex-wrap: wrap;
                align-content: space-between;
            }
    ​
            #dot6 .row {
                flex-basis: 100%;
                display: flex;
                justify-content: space-between;
            }

     

     

     

     

     

     

     

    参考链接:

    https://www.cnblogs.com/yugege/p/5246652.html

    http://www.ruanyifeng.com/blog/2015/07/flex-examples.html

  • 相关阅读:
    From MSI to WiX, Part 2
    From MSI to WiX, Part 1
    WIX Custom Action (immediate, deffered, rollback)
    SVN: revert all command
    HowTo: SVN undo add without reverting local changes
    “Assign Random Colors” is not working in 3ds Max 2015
    CruiseControl.NET : svnrevisionlabeller
    JSON parser error with double quotes
    How to: Extract files from a compiled setup.exe created by Inno setup
    虚拟账号ftp服务器
  • 原文地址:https://www.cnblogs.com/tanyx/p/12134165.html
Copyright © 2020-2023  润新知