一、Flex 布局是什么?

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

任何一个容器都可以指定为 Flex 布局。但在使用时,需要注意以下两点:

1、Webkit内核的浏览器,必须加上-webkit前缀

2、设为Flex布局以后,子元素的float,clear和vertical-align属性将失效

二、基本概念

  采用 Flex 布局的元素,称为 Flex 容器(flex container),简称"容器"。它的所有子元素自动成为容器成员,称为 Flex 项目(flex item),简称"项目"。

  容器默认存在两根轴:水平的主轴(main axis)和垂直的交叉轴(cross axis)。主轴的开始位置(与边框的交叉点)叫做main start,结束位置叫做main end;交叉轴的开始位置叫做cross start,结束位置叫做cross end

  项目默认沿主轴排列。单个项目占据的主轴空间叫做main size,占据的交叉轴空间叫做cross size

三、属性

弹性盒布局是CSS 3新增的功能,它具有如下几个配套属性:

  • flex-flow:该属性作用于弹性盒容器,用于控制容器内子元素的排列方式和换行方式。该属性是一个复合属性,由flex-direction和flex-wrap。
  • flex-direction:指定弹性盒容器内子元素的排列方向。该属性支持如下属性值:
    • row:横向从左到右排列
    • row-reverse:横向从右到左排列
    • column:纵向从上到下排列
    • column-reverse:纵向从下到上排列
  • flex-wrap:指定弹性盒容器内子元素的换行方式。该属性支持如下属性值:

    • nowrap:不换行,是默认值。
    • wrap:换行。
    • wrap-reverse:反向换行。
  • order:该属性作用于弹性盒容器内的子元素,指定子元素的排列顺序
  • flex:该属性作用于弹性盒容器内的子元素,用于控制子元素的缩放比例。该属性是一个复合属性,由flex-grow、flex-shrink、flex-basis三个子属性组成。该属性支持如下属性值:
    • flex:是一个复合属性。其完整属性为flex-grow  flex-shrink  flex-basis;但该属性值也支持简写成一个整数值,比如flex:2;这相当于指定flex:2 2 0px。
    • flex-grow:该属性指定flex容器内各子元素的拉伸因子。默认值为0,表示该子元素不会被拉伸。
    • flex-shrink:该属性指定flex容器内各子元素的收缩因子。默认值为0,表示该子元素不会被缩小。
    • flex-basis:该属性指定flex容器内各子元素缩放之前的基准大小。支持长度值和百分比,默认值为0。
  • align-items:该属性作用于弹性盒容器,用于控制弹性盒容器内所有子元素在垂直方向上的对其方式。
  • align-self:该属性作用于弹性盒容器内的子元素,用于控制该子元素自身在垂直方向上的对齐方式。

align-items和align-self两个属性都允许设置以下属性值:

    • flex-start:顶部(或左边)对齐
    • flex-end:底部(或右边)对齐
    • center:居中对齐
    • baseline:顶部(或左边)对齐,但以元素的底部作为对齐基准线。
    • stretch:拉伸子元素,让它们占满父容器。

除此之外,由于align-self是作用于flex容器中的子元素,用于控制该子元素本身的对其方式,所以align-self还可以额外指定auto属性值,用于说明该子元素采用父容器的对齐方式。

  • justify-content:该属性作用于弹性盒容器内的子元素,用于控制该子元素自身在排列方式上的对其方式。该属性支持如下属性值:
    • flex-start:所有子元素都靠近排列方向的起始端,留出结束端多余的空间。
    • flex-end:所有子元素都靠近排列方向的结束端,留出起始端多余的空间。
    • center:所有子元素都靠近排列方向的中间,留出起始端、结束端多余的空间。
    • space-between:多余的空间平均分布到各子元素的中间。
    • space-around:多余的空间平均分布到各子元素的中间和两边。

该属性设置不同值时的效果如下(简单画了一下,存在细微差异请谅解)

  • align-content:该属性作用于弹性盒容器,用于控制弹性盒容器内行的分布方式。该属性支持如下属性值:
    • flex-start:所有行都靠近顶部或左端。
    • flex-end:所有行都靠近底部或右端。
    • center:所有行居中显示。
    • space-between:多余的空间平均分布到各行之间。
    • space-around:多余的空间平均分布到各行之间和两边。

下面页面代码示范了align-content属性的功能:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title> align-content </title>
<style type="text/css">
div#container {
border: 1px solid black;
padding: 5px;
width: 350px;
height: 160px;
display: flex;
flex-wrap:wrap;
}
div>div {
border: 1px solid #aaf;
padding:5px;
width:100px;
}
</style>
</head>
<body>
<div id="container">
<div>栏目一</div>
<div>栏目二</div>
<div>栏目三</div>
<div>栏目四</div>
<div>栏目五</div>
<div>栏目六</div>
<div>栏目七</div>
<div>栏目八</div>
<div>栏目九</div>
</div>
<button onclick="change(this.innerHTML);">flex-start</button>
<button onclick="change(this.innerHTML);">flex-end</button>
<button onclick="change(this.innerHTML);">center</button>
<button onclick="change(this.innerHTML);">space-between</button>
<button onclick="change(this.innerHTML);">space-around</button>
<script type="text/javascript">
function change(val){
document.getElementById('container').style.alignContent = val;
}
</script>

下面是为单击按钮改变id为container的容器align-content属性后的效果,图中用红线标记的为该效果对应的属性值。

弹性布局(flex)的更多相关文章

  1. 弹性布局flex

    前几天写过怪异盒子布局,以前在项目中用到弹性布局flex这个属性,当时没深入研究,这里各种查阅各种测试,把这个属性记录下 以免忘记, 弹性布局:是提供一种更加有效的方式来对一个容器中的条目进行排列.对 ...

  2. 前端入门5-CSS弹性布局flex

    本篇文章已授权微信公众号 dasu_Android(大苏)独家发布 声明 本系列文章内容全部梳理自以下四个来源: <HTML5权威指南> <JavaScript权威指南> MD ...

  3. 移动端弹性布局--flex

    目前,Flex布局,可以简便.完整.响应式地实现各种页面布局.而且,它已得到了所有浏览器的支持,这意味着,我们能很安全地使用这项功能. 如果你对弹性网页布局感兴趣,那可别错过flex这么好用的属性哦. ...

  4. 弹性布局-flex

    浅谈display:flex   display:flex 意思是弹性布局 首先flex的出现是为了解决哪些问题呢? 一.页面行排列布局 像此图左右两个div一排显示 可以用浮动的布局方式 html部 ...

  5. 弹性布局Flex的基本语法

    一.Flex的简介 Flex 是 Flexible Box 的缩写,意为"弹性布局",用来为盒状模型提供最大的灵活性.用六个字概括弹性布局就是简单.方便.快速. flex( fle ...

  6. 弹性布局--flex方向

    flex方向 flex方向由flex-direction特性决定,用于定义弹性布局模式.flex-direction共有4种模式:从左向右.从右向左.从上往下.从下往上. 主轴 主轴的起点与终点定义了 ...

  7. 微信小程序页面布局之弹性布局-Flex介绍

    布局的传统解决方案,基于盒状模型,依赖 display 属性 + position属性 + float属性.它对于那些特殊布局非常不方便,比如,垂直居中就不容易实现. 2009年,W3C 提出了一种新 ...

  8. 简单探讨弹性布局flex

    css 弹性布局: 盒子模型: box-sizing属性1.content-box 正常的普通的盒子模型用padding和border会使盒子变大:(向外扩张)2.border-box 盒子模型,pa ...

  9. 弹性布局flex 介绍

    摘自:http://www.ruanyifeng.com/blog/2015/07/flex-grammar.html 网页布局(layout)是CSS的一个重点应用. 布局的传统解决方案,基于盒状模 ...

  10. Flutter布局----弹性布局 (Flex)

    弹性布局(Flex) 弹性布局允许子组件按照一定比例来分配父容器空间.弹性布局的概念在其它UI系统中也都存在,如H5中的弹性盒子布局,Android中的FlexboxLayout等.Flutter中的 ...

随机推荐

  1. leetcode-824-Goat Latin(字符串的处理)

    题目描述: A sentence S is given, composed of words separated by spaces. Each word consists of lowercase ...

  2. Oracle PL/SQL学习之你需要知道的快捷键

    1.格式化sql语句 Ctrl+A  然后  Ctrl+F7 2.窗口最大化最小化 首选项-->快捷键-->Maximize Toggle,然后修改成自己熟悉的快捷键设置.

  3. 1. java 的访问修饰符

    一.什么情况下使用修饰符 属性通常使用private封装起来 方法一般使用public用于被调用 会被子类继承的方法,通常使用protected private protected package p ...

  4. [原创] 项目 watch EMFILE 报错处理过程

    目录 事件 处理过程 参考资料 小知识点 单进程文件句柄限制 系统总文件句柄限制 inotify 文件系统事件监控 事件 公司XX游戏 S114服启动失败(使用 pomelo - node.js 框架 ...

  5. linux入门 配置网络

    我因为有自己的ssr,因此想让虚拟机共享我的ssr,并且不想搞的太麻烦,特此记录一下 1. 获取本机的ip 在命令行里输入ipconfig /all 获取本机IP,如下图所示,我本机ip为10.3.7 ...

  6. More Effective C++ 35个改善方法

    美·Scott Meyers 侯捷 More Exceptional C++: 40 New Engineering Puzzles, Programming Problems, and Soluti ...

  7. [转] Jenkins pipeline 中获取 exit code, stdout and stderr 返回值和输出

    [From] https://issues.jenkins-ci.org/browse/JENKINS-44930 其做法是,把stdout定向到一个文件,sh 配置 returnStatus: tr ...

  8. epoll_wait 返回值学习以及epoll使用学习

    https://blog.csdn.net/analogous_love/article/details/88721574

  9. IIS进程池异常崩溃,导致网站 service unavailable,原因排查与记录。

    昨晚十点钟的样子,网站崩溃,开始 service unavailable,最近开始业务高峰,心里一惊,麻痹肯定进程池又异常崩溃了.又碰到什么问题?上次是因为一个异步线程的问题,导致了进程池直接崩溃,后 ...

  10. 我的Python升级打怪之路【四】:Python之前的一些补充

    字符串的格式化 1.百分号的方式 %[(name)][flags][width].[precision]typecode (name) 可选,用于选择指定的key flags 可选,可供选择的值有: ...