我们知道,标准流中的,父容器里的多个块级的子元素会默认从上往下排列。但我们如果使用伸缩布局,就可以使子元素们在不脱离标准流的情况下,水平方向上,从左至右排列
flex 布局的优势
1、flex 布局的子元素不会脱离文档流,很好地遵从了“流的特性”。
2、flex 是一种现代的布局方式,是 W3C 第一次提供真正用于布局的 CSS 规范。 flex 非常提供了丰富的属性,非常灵活,让布局的实现更佳多样化,且方便易用。
但flex 的缺点在于,它不支持低版本的 IE 浏览器。
我们来明确几个概念
弹性盒子
弹性盒子指的是使用 display:flex 或 display:inline-flex 声明的父容器。
子元素/弹性元素
子元素/弹性元素指的是父容器里面的子元素们(父元素是弹性盒子)。
使用 display:flex 或 display:inline-flex 声明一个父容器为弹性盒子。此时,这个父容器里的子元素们,会遵循弹性布局。我们一般使用display:flex。
1.flex子项目在主轴的缩放比例,不指定flex属性,则不参与伸缩分配
min-width 最小值 min-width: 280px 最小宽度 不能小于 280
max-width: 1280px 最大宽度 不能大于 1280
flex-direction:用于设置盒子中子元素的排列方向。属性值可以是:
flex-direction这个属性默认子元素从左到右排列的。
子盒子如何在父盒子里面水平对齐方式如下所示,
子盒子如何在父盒子里面垂直对齐(单行),如下所示
flex-wrap控制是否换行,如下
flex-flow是flex-direction、flex-wrap的简写形式
align-content是针对flex容器里面多轴(多行)的情况,align-items是针对一行的情况进行排列。必须对父元素设置自由盒属性display:flex,并且设置排列方式为横向排列flex-direction:row并且设置换行,flex-wrap:wrap这样这个属性的设置才会起作用。
问问题要有逻辑,要描述清楚需求,语言无法表达的就配图,不然别人根本不知道你要的什么。首先:轴向有3个:x、y、z,都可以理解为某一方向的中心,你要围绕那根转呢?然后:多张图片的合集在空间上有一个共有的全局x、y、z轴接着:每张图片又有自己局部的x、y、z轴你是要全局轴上转还是局部轴上转或者全局和局部轴都转呢?如果你要都转的话,就像地球自转公转一样,那你自转时方向跟公转统一还是反向或是随机呢?每张图片自转速度要统一还是要随机呢,随机速度值有个参考范围么?问题描述不清楚,就包含了很多可能性,你如果问:很多张图片围一个圆圈,图片围绕圆心旋转,那这个问题大方向就只有两个可能了:形式1:“ ⊙ ” 外圈是图片路径,中点是圆心形式2: ”中 ” 口字是图片,中间竖线是圆心 ( 2即把形式1视角方向旋转90度以后的视角 )最近老是遇到布局问题,尤其是在垂直居中布局上。之前不了解display:flex最近看了看书,简单的整理了下,于是就产生了这篇文章flex弹性布局可以简便,完整,响应式的实现各种页面的布局,而且现在也得到了所有浏览器的支持,实在是布局很便利的工具呢。
一、flex布局的基本概念
1.任何一个元素使用display:flex属性后都可以看做一个flex容器;2.它的子元素变成flex容器中的项目,称为flex item;3.flex容器里面默认存在两根主轴:水平的主轴和垂直的轴
,用这两根轴将容器分成多行
二、flex容器的基本属性
1.flex-direction属性:表示项目的排列方式或者说主轴的方向,有以下四个值
row:默认值,主轴为水平方向,从左向右排列
row-reverse:主轴为水平方向,从右向左排列
column:主轴为垂直方向,从上往下排列
column-reverse:主轴为垂直方向,从下往上排列
2.flex-wrap属性:默认情况,所有的子元素都在一行,此属性主要定义如果不在一行时子元素如何排列,有如下三个值:
nowrap:不换行
wrap:换行
wrap-reverse:换行,第一行在下方,第二行在第一行上面依次类推
3.flex-flow:集1.和2.属性于一身,意思就是这个属性可以直接指定上面两个属性的值,默认值为:row nowrap
4.justify-content:定义子元素在主轴上的对齐方式,有以下五个值:
flex-start:左对齐
flex-end:右对齐
center:居中
space-between:两端对齐
space-around:每个项目两侧间隔相等
5.align-items属性:定义子元素在水平轴和垂直轴的交叉轴上如何对齐,有以下五个值:
flex-start:交叉轴的起点对齐
flex-end:交叉轴的终点对齐
center:交叉轴的中点对齐
baseline:项目的第一行文字基线对齐
strecth:默认
6.algin -content属性:定义多根轴线的对齐方式,如果项目只有一根轴线,则该属性不起作用,该属性有以下六个值:
flex-start:交叉轴的起点对齐
flex-end:交叉轴的终点对齐
center:交叉轴的中点对齐
space-between:与交叉轴的两端对齐,轴线间的间隔平均分布
space-around:每根轴线的两侧的间隔都相等
strecth:默认,轴线占满整个交叉轴
三、子元素(项目)的属性
1.order属性:定义子元素的排列顺序,数值越小,排列越靠前,默认为0
2.flex-grow属性:定义项目的放大比例,默认值是0,就是如果存在剩余空间,也不放大。
若所有子元素的flex-grow值为1,则子元素等分剩下的空间
若一个元素的属性值为N,剩下值为1,则属性值为N的元素等分的空间是1的N倍
3.flex-shrink属性:定义了项目的缩小比例,默认为1,就是如果空间不足,该项目将缩小
若所有子元素此属性为1,空间不足时,将会被等比缩小,
若有元素属性值为0,即使空间不足,也不会被缩小
4.flex-basis属性:定义了在分配多余空间之前,项目占据的主轴空间。浏览器根据这个属性,计算主轴是否有多余空间。它的默认值为auto原本的大小,也可以设置px结尾固定大小
5.flex属性:是2.3和4属性的简写,默认值为:0 1 auto,可以只写第一个值,后面两个是可选参数;该属性的两个快捷值:auto(1 1 auto)和none(0 0 auto)
6.align-self属性:此属性允许单个子元素与其他子元素不一样的对齐方
auto:默认值,表示继承父元素的属性,
其他:align-items值相同
四、一起来试一试