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

Flex包含的属性有很多,每个属性又包含了许多不同意义的属性值···然而在实际开发中,能被我们临幸的可能也只是那么几个:

{
display: flex;
justify-content: center|flex-start...;
align-items: center|flex-start...;
flex-grow: auto...;
}

上面是一本正经的分割线!

一、Flex简介

任何一个容器都可以通过设置 displayflex/inline-flex 将其指定为Flex布局。对于设置了Flex布局的容器,子元素的 float、clear、vertical-align 属性将失效;但是,如果对这些子元素设置 position 定位,那么Flex属性的作用会失效,一张图说明他们的作用权重:


采用Flex属性布局的元素称为Flex容器,而其所有的子元素称为Flex项目。容器默认存在两根轴线:水平的主轴(main axis)和垂直的交叉轴(cross axis)。轴的起始和结束为止分别称作main/cross start和main/cross end。项目默认沿主轴排列,项目占据的轴的空间叫main/cross size。详见下图:


Flex布局元素分为Flex容器和Flex项目,因而有Flex容器属性和Flex项目属性的区分。

二、Flex容器属性

1. Flex的容器属性包括:

  • flex-direction
  • flex-wrap
  • flex-flow
  • justify-content
  • align-items
  • align-content
1.1 flex-direction

该属性定义了主轴的方向,即项目的排列方向。value的取值包括:row | row-reverse | column | column-reverse。其中 row 是默认值,表示水平方向排列(起点在左端); column 表示垂直方向(起点在顶端);带 -reverse 的值则表示反方向。用法及其效果图如下:

示例代码:

<div class="flex-box">
<div class="flex-item">item1</div>
<div class="flex-item">item2</div>
<div class="flex-item">item3</div>
</div>
.flex-box{
display: flex; /*定义为flex布局*/
flex-direction:row-reverse; /*主轴为水平方向,起点在右端*/
background:orange;
}
.flex-item{
margin:10px;
height:100px;
width:100px;
background: purple;
color:#fff;
}

示例效果:


1.2 flex-wrap属性

该属性定义项目是否换行以及如何换行。在默认情况下,项目都排在一条轴线上,如果一条轴线排不下,浏览器就根据这个属性的值对项目排列做相应调整。value的取值包括:nowrap | wrap | wrap-reverse,其中,nowrap 是默认值,不换行。用法及其效果图如下:
示例代码:

.flex-box{
flex-wrap: wrap;
}

示例效果:


说明:wrap 表示换行,第一行在上方。使用 row-reverse 换行时,第一行在下方,亦即图中item6会出现在第一行。

1.3 flex-flow属性

该属性是 flex-directionflex-wrap 的简写形式,默认值为row nowrap。使用方式如下:
示例代码::

.flex-box{
flex-flow:colunm wrap;
}
1.4 justify-content属性

该属性定义了项目在主轴(main axis)上的对齐方式,value的取值包括:

  • flex-start:默认值。轴的起始端对齐(main/cross start)
  • flex-end:轴的终点端
  • center:居中
  • space-between:两端对齐,项目之间的间隔都相等。
  • space-around:每个项目两侧的间隔相等。那么项目之间的间隔就是项目与边框之间的间隔的两倍。

用法及效果如下:



说明:这些属性对项目的作用是根据主轴的方向不同而改变的,如果将 direction 设置为 column,那么这些效果则表现在纵向。

1.5 align-items属性

该属性定义项目在交叉轴(cross axis)上的对齐方式。value的取值包括:

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

效果如下:



1.6 align-content属性

该属性定义了多个轴线的对齐方式。value的取值包括:

  • flex-start:与交叉轴的起点对齐
  • flex-end:与交叉轴的终点对齐
  • center:交叉轴上居中
  • space-between:交叉轴上两端对齐,轴线之间的间隔两端分布
  • space-around:每个轴线两侧的间隔都相等。那么,轴线之间的间隔是轴线与边框之间间隔的两倍
  • stretch:默认值,轴线占满整个交叉轴

咦!怎么都这么熟悉呢?对比原来发现这个属性的取值是跟前两个属性的取值有很大相似的。但它们其的效果还是有区别的。看图:


对比下align-items里面的center,是不是发现不同呢?每一行项目之间的距离变小了!是变小了吗?其实是轴线居中了!在这里,因为项目的换行,形成了多条轴线,而align-content就是作用在轴线上的,所以它会让每一条轴线居中。而align-items是将所有的项目看做一个整体,即使项目换行,也是将整个项目看做是一条轴线,最后将这个整体居中。

三、Flex项目属性

1. Flex的项目属性包括:

  • order
  • flex-grow
  • flex-shrink
  • flex-basis
  • flex
  • align-self
1.1 order属性

该属性定义项目的排列顺序,数值越小,排列越靠前,默认值为0。

示例代码:

<div class="flex-box">
<div class="flex-item">item1</div>
<div class="flex-item">item2</div>
<div class="flex-item">item3</div>
</div>
.flex-box{
background:orange;
display: flex; /*定义为flex布局*/
}
.flex-item{
margin:10px;
height:100px;
width:100px;
background: purple;
color:#fff;
}
div:first-child{
order:0; /*item1的序号为0*/
}
div:nth-child(2){
order:-1;
}
div:last-child{
order:2;
}

示例效果:


说明:在本例中没有设置flex-direction的属性,那么其值默认是row,你也可以尝试将其设置成column,那么flex项目则会根据order纵向排列。

1.2 flex-grow属性

该属性定义项目的放大比例,默认为0,即不作任何的放大。flex容器下的项目是根据这个值的比例对容器的剩余空间进行瓜分的。使用效果如下:


说明:在使用这个属性的时候,一般也最好不要对flex项目设置宽度/高度,否则会影响flex容器的比例分配。

1.3 flex-shrink属性

该属性定义了项目的缩小比例,默认为1,即项目缩小。使用效果如下:


说明:这里flex容器的宽度设置成600px,flex项目的宽度均为300px,margin:10px;在为item1分配完空间后,剩下的空间被后面两个项目按比例缩小分配。

1.4 flex-basis属性

该属性定义了在分配多余空间之前,项目占据的主轴空间(main size)。浏览器根据这个属性,计算主轴(main asix)是否有多余空间。它的默认值为auto,即项目的原本大小。它换可以设置为跟width属性一样的值(eg: 100px),即项目占据固定空间(容器宽度不够自动被压缩)。使用效果如下:


说明:该属性的用法就像是使用width(flex-direction:row; 的时候)或heigh(direction为column的时候)属性那样,在容器宽度不够的时候,它会按照flex-shrink属性的默认值压缩项目。

1.5 flex属性

该属性是前三个属性:flex-grow、flex-shrink、flex-basis 的简写形式。默认值为0 1 auto,即不放大,自动缩小,后面两个属性值是可选项。该属性有两个快捷键值:auto(0 1 auto),none(0 0 auto)。建议优先使用这个属性,而不是单独写三个分离的属性。

1.6 align-self属性

该属性允许单个项目有与其他项目不一样的对齐方式。可覆盖作用在flex容器上的align-items属性。默认值为auto,表示继承父元素align-items属性,如果没有父元素,则等同stretch。value的取值包括:auto、flex-start、flex-end、end、baseline、stretch。该属性的取值除了auto之外,其他属性作用在该项目上的效果跟align-items作用在项目父元素(flex容器)上的效果是一样的,唯一不同的是:align-self仅对使用了该属性的项目产生效果,align-items是对所有的项目产生效果。

天下武功,唯快不破。Flex的优秀在于它的快捷,开发过程中使用Flex布局可以轻松地达到你想要的布局效果,方便快捷。尝试它并爱上它~

[续更]一起来撸一下Flex布局里面的那些属性的更多相关文章

  1. CSS3 Flex布局整理(三)-项目属性

    一.Flex布局中 Flex Item属性控制,可以指定显示顺序.剩余空间的放大,缩小.交叉轴的排列 1.order:定义项目的排列顺序,数值越小,排列越靠前,默认为0.类似z-index 2.fle ...

  2. flex布局中父容器属性部分演示效果

    如图可见flex的属性分为父容器和子容器的属性共12个.关于这些属性具体代表什么意思,网上有很多教程的文章,自觉不能写得比别人更好,所以这里主要写了一些例子关于父容器属性效果的演示,希望可以帮助大家理 ...

  3. CSS3 Flex布局整理(二)-容器属性

    一.Flex容器属性介绍 1.flex-flow :水平或垂直方向上的流动方式,包裹处理,其中包括了flex-direction属性和flex-wrap属性. 2.justify-content:定义 ...

  4. 30分钟彻底弄懂flex布局

    欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~ 本文由elson发表于云+社区专栏 目前在不考虑IE以及低端安卓机(4.3-)的兼容下,已经可以放心使用flex进行布局了.什么是flex布 ...

  5. 弄懂flex布局

    目前在不考虑IE以及低端安卓机(4.3-)的兼容下,已经可以放心使用flex进行布局了.什么是flex布局以及它的好处,这里就不再赘述. 在这篇文章里,想说说flex布局的属性语法及其细节.那么网上也 ...

  6. es6 Object.assign ECMAScript 6 笔记(六) ECMAScript 6 笔记(一) react入门——慕课网笔记 jquery中动态新增的元素节点无法触发事件解决办法 响应式图像 弹窗细节 微信浏览器——返回操作 Float 的那些事 Flex布局 HTML5 data-* 自定义属性 参数传递的四种形式

    es6 Object.assign   目录 一.基本用法 二.用途 1. 为对象添加属性 2. 为对象添加方法 3. 克隆对象 4. 合并多个对象 5. 为属性指定默认值 三.浏览器支持 ES6 O ...

  7. Flex布局 Flexbox属性具体解释

    原文:A Visual Guide to CSS3 Flexbox Properties Flex布局官方称为CSS Flexble Box布局模型是CSS3为了提高元素在容器中的对齐.方向.顺序,甚 ...

  8. CSS flex 布局快速入门

    以前已经学过flex了,一直没做笔记,现在做下笔记再回忆下. 首先,flex布局的迷之属性们,如果一知半解,机械记忆的话,那不到半个月基本忘光光.先感受一下这12个flex布局属性,是不是很“迷”人. ...

  9. flex布局使用

    什么是flex布局 flex是flexible Box的缩写,意味"弹性盒子",用来为盒子状模型提供最大的灵活性 任何一个盒子都可以指定为flex布局 .box{ display: ...

随机推荐

  1. CSS样式表-------第二章:选择器

    二 .选择器 内嵌.外部样式表的一般语法: 选择器 { 样式=值: 样式=值: 样式=值: ...... } 以下面html为例,了解区分一下各种样式的选择器 <head> <met ...

  2. centos设置上网代理

    假设我们要设置代理为 IP:PORT 1.网页上网网页上网设置代理很简单,在firefox浏览器下 Edit-->>Preferences-->>Advanced-->& ...

  3. spring cloud关于feign client的调用对象列表参数、设置header参数、多环境动态参数试配

    spring cloud关于feign client的调用 1.有些场景接口参数需要传对象列表参数 2.有些场景接口设置设置权限等约定header参数 3.有些场景虽然用的是feign调用,但并不会走 ...

  4. Image.FromStream(ms) 提示参数无效

    说明ms有问题,首先确保有读到数据,这种情况是保存到库的时候出错的. 原来你可能是这样写的: MemoryStream stream = new MemoryStream();PictureBox1. ...

  5. Relative-Frequency|frequency|pie chart |bar chart

    2.2Organizing Qualitative Data The number of times a particular distinct value occurs is called its ...

  6. 谁能率先挖掘出5G金矿?

    现在,消费者已经习惯4G的存在,它好像另外的一个太阳,点亮了夜生活,也丰富了白天的生活:随时随地的直播.视频通话.移动支付.嘀嘀打车等等,这些都因4G网络和智能手机而快速发展,帮助消费者清理碎片时间之 ...

  7. Selenium处理alert/confirm/prompt提示框

    About 回到顶部 重新认识alert首先,不是所有的alert都能叫做alert框.JavaScript中,关于消息提示框的方法有三个(虽然都跟alert差不多): alert(message)方 ...

  8. jQuery实现button按钮提交表单

    在JSP页面中,通常使用button按钮提交表单数据,使用jQuery实现代码如下: <span style="font-family:Comic Sans MS;font-size: ...

  9. AD复制问题汇总

    1:文件复制服务NtFrs 13568报错的解决方法 解决方法: 建议不要按照日志的提示进行操作,正确的操作应该是 出现这个问题的原因,是由于在硬件的损坏,导致服务器未正确处理NTFS USN 日志. ...

  10. OpenCV 图像平滑处理

    #include "opencv2/imgproc/imgproc.hpp" #include "opencv2/highgui/highgui.hpp" us ...