一、简介

flexbox:全称Flexible Box, 弹性盒子布局。可以简单实现各种伸缩性的设计,它是由伸缩容器和伸缩项目组成。任何一个元素都可以指定为flexbox布局。这种新的布局方案在2009年是由W3C组织提出来的,在此之前,Web开发一般使用基于盒子模型的传统页面布局,依赖定位属性、流动属性和显示属性来解决,参看链接:https://www.cnblogs.com/XYQ-208910/p/5810673.html。弹性盒子布局的出现,极大的方便了开发者,在如今的ReactNative开发中,也已经被引入使用。

伸缩流布局结构图如下:

弹性盒子布局具备的特征:

1、伸缩容器的子元素称为伸缩项目,伸缩项目使用伸缩布局来排版。伸缩布局和传统布局不一样,它按照伸缩流方向布局。

2、伸缩容器由两条轴构成,分别为主轴(main axis)和交叉轴(cross axis)。主轴既可以用水平轴,也可以是竖直轴,根据开发者需要来决定。

3、主轴的起点叫main start,终点叫main end,主轴的空间用main size表示。

4、交叉轴的起点叫cross start,终点叫cross end,交叉轴的空间用cross size表示。

5、默认情况下,伸缩项目总是沿着主轴方向排版,从开始位置到终点位置。至于换行显示,则通过设置伸缩属性来实现。

6、伸缩容器的属性有:display、flex-direction、flex-wrap、flex-flow、justify-content、align-items、align-content

7、伸缩项目的属性有: order、flex-grow、flex-shrink、flex-basis、flex、align-self

二、伸缩容器的属性,全局设置排版

HTML:[注意:下面的演示截图项目个数会根据需要选择性注释“flex-item”,有时用不到5个]

<!DOCTYPE html>
<html>
<head>
<title>Flexbox</title>
<!-- 采用外联方式导入css文件 -->
<link rel="stylesheet" type="text/css" href="./css_test.css">
</head>
<body>
<span class="flex-container">
<span class="flex-item" id="item1" style="color:white;font-size:20px">1</span>
<span class="flex-item" id="item2" style="color:white;font-size:20px">2</span>
<span class="flex-item" id="item3" style="color:white;font-size:20px">3</span>
<span class="flex-item" id="item4" style="color:white;font-size:20px">4</span>
<span class="flex-item" id="item5" style="color:white;font-size:20px">5</span>
</span>
</body>
</html> 

1、display:决定元素是否为伸缩容器

  • flex:产生块级伸缩容器

    .flex-container {
    display: flex;
    }
  • inline-flex:产生行内块级伸缩容器
  •  .flex-container {
    display: inline-flex;
    }

2、flex-direction:指定伸缩容器主轴的方向

  • row:水平方向,从左到右

     .flex-container {
    display: flex;
    flex-direction: row;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    }

  • row-reverse:水平方向,从右到左
     .flex-container {
    display: flex;
    flex-direction: row-reverse;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    }

  • column:竖直方向,从上到下
     .flex-container {
    display: flex;
    flex-direction: column;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    }

  • column-reverse:竖直方向,从下到上
     .flex-container {
    display: flex;
    flex-direction: column-reverse;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    }

3、flex-wrap:指定伸缩容器主轴方向空间不足时,决定是否换行以及换行方式

  • nowarp:不换行

    .flex-container {
    display: flex;
    flex-direction: row;
    flex-wrap: nowrap;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px; //下图单行状态宽度被重新计算
    height: 50px;
    background-color: green;
    margin: 1px;
    }

  • warp:换行,若主轴为水平方向,换行方向是从上到下
     .flex-container {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    }

  • wrap-reverse:换行,若主轴为水平方向,换行方向是从下到上
     .flex-container {
    display: flex;
    flex-direction: row;
    flex-wrap: wrap-reverse;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    }

4、flex-flow:flex-direction和flex-wrap的缩写,同时指定伸缩容器主轴方向和换行设置

  • row nowrap:默认主轴是水平方向,从左到右,且不换行

     .flex-container {
    display: flex;
    flex-flow: row nowrap;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px; //下图单行状态宽度被重新计算
    height: 50px;
    background-color: green;
    margin: 1px;
    }

5、justify-content:决定伸缩项目沿着主轴线的对齐方式

  • flex-start:与主轴线起始位置靠齐

     .flex-container {
    display: flex;
    flex-flow: row wrap;
    justify-content: flex-start;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    }

  • flex-end:与主轴线结束位置靠齐
     .flex-container {
    display: flex;
    flex-flow: row wrap;
    justify-content: flex-end;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    }

  • center:与主轴线中间位置靠齐
     .flex-container {
    display: flex;
    flex-flow: row wrap;
    justify-content: center;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    }

  • space-between:平均分配到主轴线里,第一个项目靠齐起始位置,最后一个项目靠齐终点位置
     .flex-container {
    display: flex;
    flex-flow: row wrap;
    justify-content: space-between;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    }

  • sapce-around:平均分配到主轴线里,两端保留一半的空间
    .flex-container {
    display: flex;
    flex-flow: row wrap;
    justify-content: space-around;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    }

6、align-items:决定伸缩项目不能换行时沿着交叉轴线的对齐方式

  • flex-start:与交叉轴线起始位置靠齐

     .flex-container {
    display: flex;
    flex-flow: row nowrap;
    align-items: flex-start;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px; //下图单行状态宽度被重新计算
    height: 50px;
    background-color: green;
    margin: 1px;
    }

  • flex-end:与交叉轴线结束位置靠齐
     .flex-container {
    display: flex;
    flex-flow: row nowrap;
    align-items: flex-end;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px; //下图单行状态宽度被重新计算
    height: 50px;
    background-color: green;
    margin: 1px;
    }

  • center:与交叉轴线中间位置靠齐
     .flex-container {
    display: flex;
    flex-flow: row nowrap;
    align-items: center;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    }

  • baseline:根据基线对齐
     .flex-container {
    display: flex;
    flex-flow: row nowrap;
    align-items: baseline;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    } #item1 {
    padding-top: 25px;
    } #item2 {
    padding-top: 20px;
    } #item3 {
    padding-top: 15px;
    } #item4 {
    padding-top: 10px;
    } #item5 {
    padding-top: 5px;
    }

  • stretch:沿着交叉轴线拉伸填充整个伸缩容器
     .flex-container {
    display: flex;
    flex-flow: row nowrap;
    align-items: stretch;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;//此时可以设置宽度,但不能设置高度,否则无法拉伸
    background-color: green;
    margin: 1px;
    }

7、align-content:决定伸缩项目可以换行时沿着交叉轴线的对齐方式,flex-warp:warp一定要开启

  • flex-start:与交叉轴线起始位置靠齐

     .flex-container {
    display: flex;
    flex-flow: row wrap;
    align-content:flex-start;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    }

  • flex-end:与交叉轴线结束位置靠齐
     .flex-container {
    display: flex;
    flex-flow: row wrap;
    align-content:flex-end;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    }

  • center:与主轴线中间位置靠齐
     .flex-container {
    display: flex;
    flex-flow: row wrap;
    align-content:center;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    }

  • space-between:平均分配到主轴线里,第一行项目靠齐起始位置,最后一行项目靠齐终点位置
     .flex-container {
    display: flex;
    flex-flow: row wrap;
    align-content:space-between;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    }

  • sapce-around:所有行平均分配到主轴线里,两端保留一半的空间
     .flex-container {
    display: flex;
    flex-flow: row wrap;
    align-content:space-around;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    }

  • stretch:沿着交叉轴
     .flex-container {
    display: flex;
    flex-flow: row wrap;
    align-content:stretch;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px; //不要设置高度,不然无法拉伸
    background-color: green;
    margin: 1px;
    }

三、伸缩项目的属性,单个设置排版

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

  • 表达式 order: integer;

     .flex-container {
    display: flex;
    flex-flow: row wrap;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    } #item4 {
    order: -1;
    } #item5 {
    order: -2;
    }

2、flex-grow:定义伸缩项目的放大比例,默认值为0,表示即使存在剩余空间,也不放大。

  • 表达式 flex-grow: number;

     .flex-container {
    display: flex;
    flex-flow: row wrap;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    } #item2 {
    flex-grow:; //空间不足,item2不会放大
    } #item4 {
    flex-grow:; //item4放大填满剩余空间
    }

3、flex-shrink:定义伸缩项目的收缩比例,默认值为1。

  • 表达式 flex-shrink: numer;

    .flex-container {
    display: flex;
    flex-flow: row nowrap;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    } #item4 {
    flex-shrink:; //单行,空间有限,item4缩小为原来的1/3
    } #item5 {
    flex-shrink:; //单行,空间有限,item5缩小为原来的1/5
    }

4、flex-basis:定义伸缩项目的基准值,剩余空间按照比例进行伸缩,默认auto。

  • auto

     .flex-container {
    display: flex;
    flex-flow: row wrap;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    } #item5 {
    flex-basis:auto;
    }

  • flex-basis: length

     .flex-container {
    display: flex;
    flex-flow: row wrap;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    } #item5 {
    flex-basis:200px;
    }

5、flex:是flex-grow、flex-shrink、flex-basis的缩写,默认值 0 1 auto。

  • none: 不设置

     .flex-container {
    display: flex;
    flex-flow: row wrap;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    } #item2 {
    flex: none; /* 等同于 flex: 0 0 auto */
    }

  • flex-grow flex-shrink flex-basis: 设置放大或缩小或基准线
     .flex-container {
    display: flex;
    flex-flow: row wrap;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    } #item2 {
    flex:; /* 等同于 flex: 1 1 auto 或者 等同于 flex: auto*/
    }

6、align-self:用来设置伸缩项目在交叉轴的对齐方式。

  • auto:自动对齐

     .flex-container {
    display: flex;
    flex-flow: row wrap;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    } #item3 {
    align-self: auto;
    }

  • flex-start: 向交叉轴的开始位置对齐
     .flex-container {
    display: flex;
    flex-flow: row wrap;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    } #item3 {
    align-self: flex-start;
    }

  • flex-end: 向交叉轴的结束位置对齐
     .flex-container {
    display: flex;
    flex-flow: row wrap;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    } #item3 {
    align-self: flex-end;
    }

  • center: 向交叉轴的中间位置对齐
     .flex-container {
    display: flex;
    flex-flow: row wrap;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    } #item3 {
    align-self: center;
    }

  • baseline:向交叉轴的基准线对齐
     .flex-container {
    display: flex;
    flex-flow: row wrap;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    height: 50px;
    background-color: green;
    margin: 1px;
    } #item1 {
    align-self: baseline;
    margin-top: 50px;
    } #item2 {
    align-self: baseline;
    }

  • stretch: 在交叉轴拉伸填满伸缩容器
     .flex-container {
    display: flex;
    flex-flow: row wrap;
    width: 160px;
    height: 160px;
    background-color: red;
    } .flex-item {
    width: 50px;
    background-color: green;
    margin: 1px;
    } #item1 {
    align-self: stretch;
    } #item2 {
    align-self: stretch;
    } #item3 {
    align-self: stretch;
    }

CSS:CSS弹性盒子布局 Flexible Box的更多相关文章

  1. css横向 弹性盒子布局的一些属性

    <head> <meta charset="utf-8"> <meta name="viewport" content=" ...

  2. CSS Flexbox 弹性盒子模型

    CSS Flexbox 弹性盒子模型 设置元素样式为 display: flex 或 display: inline-flex, 让元素变成flex容器, 从而可以通过flex模式布局它的子元素. f ...

  3. CSS3总结五:弹性盒子(flex)、弹性盒子布局

    弹性盒子容器的属性与应用 display:flex/inline-flex flex-direction flex-wrap justify-content align-items align-con ...

  4. CSS3弹性盒子(Flex Box)

    CSS3弹性盒子(Flex Box) 一.容器的属性:flex-directionflex-wrapflex-flowjustify-contentalign-itemsalign-content 1 ...

  5. Flex box 弹性盒子布局

    display: -webkit-flex 标识使用弹性布局 flex: num  占容器的比例   Flex等比划分 导航1 : Flex :1;  导航2  Flex: 2;     ————&g ...

  6. css position弹性盒子测试

    总结: 1.利用样式height:100%设置div高度为全屏时候必须设置所有的父元素,但是父元素那么多,不可控,所以此法不可行: 2.设置父框架的padding为100px,div进行float,p ...

  7. css FlexBox 弹性盒子常用方法总结

    总结一下弹性盒子常用的方法,弹性盒子的功能强大,这次我做了兼容性的felxbox,虽然代码多了一点,但在项目时候可以直接复制过来用,同时在项目上线的时候,如果这时候弹性盒子出了兼容问题,那就可急了~ ...

  8. 【CSS3】 CSS3:弹性盒子(Flex Box)

    Flex布局是什么 如何指定一个容器为Flex布局 Flex的基本语法 display flex-direction justify-content align-items flew-wrap ali ...

  9. 弹性方框模型 (Flexible Box Model) 快速入门

    简介 我可以肯定,您对于页面上水平或垂直排列的样式元素已经了解得够多了.但是,CSS 还缺少适用于此任务的合适机制.了解 CSS3 弹性方框模型(简称 Flexbox) 该草案将 Flexbox 描述 ...

随机推荐

  1. Python编程系列---使用装饰器传参+字典实现动态路由

    # 实现一个空路由表,利用装饰器将url和功能函数的对应关系自动存到这个字典中 router_dict = {} # 定义一个装饰器 # 再给一层函数定义,用来传入一个参数,这个参数就是访问的页面地址 ...

  2. 测试中常用sql

    1.增删改查 2.同一服务器下,要从一个数据库复制某张表到另一个数据库 create table test.sf_audit_plan as select * from v3_0_sf_full.sf ...

  3. 9.Nginx常用模块

    1.nginx开启目录浏览 提供下载功能 默认情况下,网站返回index指定的主页,若该网站不存在主页,则将请求交给autoindex模块 如果开启autoindex模块,则提供一个下载的页面, 如果 ...

  4. 【Autofac打标签模式】Component和Autowired

    [ Autofac打标签模式]开源DI框架扩展地址: https://github.com/yuzd/Autofac.Annotation/wiki Componet标签把类型注册到DI容器 1. 把 ...

  5. fullpage.js的引入方法

    1.先到官网上(https://github.com/alvarotrigo/fullPage.js)下载压缩包 2.引入文件 3.布局基本页面结构 4.实现全屏滚动(JS代码) <script ...

  6. Java自动化测试框架-04 - 来给你的测试报告化个妆整个形 - (上)(详细教程)

    简介 前边通过宏哥的讲解和分享想必小伙伴们和童鞋们都已经见过testng框架生成的测试报告,是不是它的样子和长相实在是不敢让大家伙恭维.那么今天宏哥就当一回美容师,由宏哥来给它美美容:当一回外科医生, ...

  7. CSAPP:代码优化【矩阵读写】

    转载请注明出处:https://www.cnblogs.com/ustca/p/11790314.html 写程序最主要的目标就是使它在所有可能的情况下都正确工作,另一方面,在很多情况下,让程序运行得 ...

  8. SSM简易版

    技术准备 Java: 基础知识 框架: Spring,SpringMVC,Mybatis 数据库: Mysq 开发工具: Eclipse,Maven 项目结构 数据库设计 创建数据库:student ...

  9. Java 计算n对应的二进制位上有几个1,分别在什么位置

    Java计算n的二进制位上有几个1,分别在什么位置   public List<Integer> getBinOneCount(int n){     List<Integer> ...

  10. MySQL字符集与排序规则总结

      字符集与排序规则概念 在数据库当中都有字符集和排序规则的概念, 很多开发人员甚至包括有些DBA都会将这个混淆,当然这个情况也有一些情有可原的原因.一来两者本来就是相辅相成,相互依赖关联: 另外一方 ...