flex布局,学习flex弹性布局总结

时间: 2017-11-09阅读: 834标签: 布局作者: Peale

flex布局(Flexible Box)是对界面css盒模型的一个优化,适应不同尺寸的屏幕,被定义flex的容器可以控制子元素的排列方向和大小,能够用更简单清晰的代码来完成复杂的布局。  

浏览器支持:

ChromeSafariFirefox
20-(old)、21+(new)3.1+(old)、6.1+(new)2-21(old)、22+(new)
OperaIE
12.1+(new)10(tweener)、11+(new)
AndroidiOS
2.1+(old)、4.4+(new)3.2+ (old)、7.1+(new)

Flex布局概念:


包含元素(flex container)设置display:flex或inline-flex来定义弹性容器,子元素为弹性项目(flex-item)。每个弹性容器包含两根轴(Axis),弹性项目默认从左到右排列的那个轴为主轴(main axis),垂直主轴的那根轴为交叉轴(cross axis)。

弹性盒子使用了不同的布局算法,某些属性用在弹性容器上没有意义:

  1. 多栏布局模块的column-*属性对弹性项目无效。
  2. float与clear对弹性项目无效。使用float将使元素的display属性计为block。
  3. vertical-align对弹性项目的对齐无效。

语法

设置在容器上的属性
a. flex-direction: row(默认) | row-reverse | column | column-reverse ;


1
2
3
4
5
6
.container{
display:flex;
flex-direction:row
}
* 主轴在水平方向,从左到右排列。



item1
item2
item3



1
2
3
4
5
6
.container{
display:flex;
flex-direction:row-reverse
}
* 主轴在水平方向,从右到左排列。



item1
item2
item3



1
2
3
4
5
6
.container{
display:flex;
flex-direction:column
}
* 主轴在垂直方向,从上到下排列。



item1
item2
item3



1
2
3
4
5
6
.container{
display:flex;
flex-direction:column-reverse
}
* 主轴在垂直方向,从下到上排列。



item1
item2
item3




b. flex-wrap: nowrap(默认) | wrap | wrap-reverse ;


1
2
3
4
.container{
display:flex;
flex-wrap:nowrap
}



item1
item2
item3
item4



1
2
3
4
.container{
display:flex;
flex-wrap:wrap
}



item1
item2
item3
item4



1
2
3
4
.container{
display:flex;
flex-wrap:wrap-reverse
}



item1
item2
item3
item4


c.justify-content: flex-start(默认) | flex-end | center | space-between | space-around ;


1
2
3
4
5
6
.container{
display:flex;
justify-content:flex-start
}
*左边对齐



item1
item2
item3



1
2
3
4
5
6
.container{
display:flex;
justify-content:flex-end
}
*右边对齐



item1
item2
item3



1
2
3
4
5
6
.container{
display:flex;
justify-content:center
}
*居中



item1
item2
item3



1
2
3
4
5
6
.container{
display:flex;
justify-content:space-between
}
*两边对齐,项目之间的间隔相等



item1
item2
item3



1
2
3
4
5
6
.container{
display:flex;
justify-content:space-around
}
*项目两边间距一样,项目之间的间距是项目一侧间距之和



item1
item2
item3



d.align-items: flex-start(默认) | flex-end | center | baseline | stretch ;


1
2
3
4
5
6
.container{
display:flex;
align-items:flex-start;
}
*项目在交叉轴(cross axis)上,向起点(cross start)对齐。



item1
item2
item3



1
2
3
4
5
6
.container{
display:flex;
align-items:flex-end;
}
*项目在交叉轴(cross axis)上,向终点(cross end)对齐。



item1
item2
item3



1
2
3
4
5
6
.container{
display:flex;
align-items:center;
}
*项目在交叉轴(cross axis)上,居中对齐。



item1
item2
item3



1
2
3
4
5
6
.container{
display:flex;
align-items:baseline;
}
*项目在交叉轴(cross axis)上,基于第一行文字的基线对齐。



什么是基线?

item1
item2
item3



1
2
3
4
5
6
.container{
display:flex;
align-items:stretch;
}
*项目在交叉轴(cross axis)上,撑满整个容器。(前提未设置高度或auto)



item1
item2
item3



e. align-content: flex-start | flex-end | center | space-between | space-around | stretch ; 定义了多根抽条件下在交叉轴(cross axis)下的对齐方式,容器只有一行时无作用


1
2
3
4
5
.container{
display:flex;
flex-wrap:wrap;
align-content:flex-start
}



item1
item2
item3



1
2
3
4
5
.container{
display:flex;
flex-wrap:wrap;
align-content:flex-end
}



item1
item2
item3



1
2
3
4
5
.container{
display:flex;
flex-wrap:wrap;
align-content:center
}



item1
item2
item3



1
2
3
4
5
.container{
display:flex;
flex-wrap:wrap;
align-content:space-between
}



item1
item2
item3



1
2
3
4
5
.container{
display:flex;
flex-wrap:wrap;
align-content:space-around
}



item1
item2
item3



1
2
3
4
5
6
7
.container{
display:flex;
flex-wrap:wrap;
align-content:stretch
}
*占满整个交叉轴,下面的空隙是设置了margin,非剩余空隙



item1
item2
item3



设置在项目上的属性

a.order 定义项目的排列顺序,按属性值大小,从小到大排列。


1
2
3
4
5
6
7
8
9
10
11
12
.container{
display:flex
}
.item1{
order:1
}
.item2{
order:3
}
.item3{
order:2
}

item1
item2
item3


b.flex-grow 定义项目等放大比例,默认是0(不放大)。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.container{
display:flex
}
.item1{
flex-grow:1
}
.item2{
flex-grow:2
}
.item3{
flex-grow:1
}
*存在在剩余空间的条件下,item2的占有剩余空间的大小是item3和item1的两倍。
注:下面的空间是设置了padding 和 margin 值,非剩余空间。

item1
item2
item3


c.flex-shrink 定义项目等缩小比例,默认是1(如果空间不够,将缩小)。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
.container{
display:flex
}
.item1{
flex-shrink:1
}
.item2{
flex-shrink:0
}
.item3{
flex-shrink:1
}
*空间不足的条件下,item3和item1将等比缩小,item2不缩小。
注:下面的空间是设置了padding 和 margin 值,非剩余空间。

item1
item2
item3


d.flex-basis 指定了项目在主轴方向上的初始大小,默认值是auto。


1
2
3
4
5
6
7
8
9
10
11
12
13
14
.container{
display:flex
}
.item1{
flex-basis:50px
}
.item2{
flex-basis:150px
}
.item3{
flex-basis:300px
}
*item1的在主轴上的初始的大小是50px,item2是150px,item3是300px。

item1
item2
item3


e.flex: none | [<’flex-grow’> <’flex-shrink’>? || <’flex-basis’>] ; 默认值是 0 1 auto ,快捷属性 flex:auto (1 1 auto) 、 flex:none (0 0 auto)


1
2
3
4
5
6
.container{
display:flex
}
.item{
flex:auto
}

item1
item2
item3


f. align-self: auto(默认) | flex-start | flex-end | center | baseline | stretch ;


1
2
3
4
5
6
7
8
.container{
display:flex
}
.item3{
align-self:auto
}
*设置auto 继承父元素的align-items属性,如果父元素没有设置,则相当于项目设置成了stretch。

item1
item2
item3



1
2
3
4
5
6
7
8
.container{
display:flex
}
.item3{
align-self:flex-start
}
*项目在交叉轴(cross axis)上起点对齐。

item1
item2
item3



1
2
3
4
5
6
7
8
.container{
display:flex
}
.item3{
align-self:flex-end
}
*项目在交叉轴(cross axis)上终点对齐。

item1
item2
item3



1
2
3
4
5
6
7
8
.container{
display:flex
}
.item3{
align-self:center
}
*项目在交叉轴(cross axis)上居中。

item1
item2
item3



1
2
3
4
5
6
7
8
.container{
display:flex
}
.item3{
align-self:baseline
}
*项目的第一行文字的基线对齐。

item1
item2
item3



1
2
3
4
5
6
7
8
.container{
display:flex
}
.item3{
align-self:stretch
}
*项目在交叉轴(cross axis)充满。

item1
item2
item3


结束

在整理的过程中发现内容也不少啊!其实没那么难,很多重复的东西,只是运用对象不一样罢了。  

来源:http://peale.cn/2016/11/30/2016_11_30_flex/#more


网站首页设计常见的6种布局方式

看到太多的网页设计师发布企业站的个人作品,设计中总是摆脱不了大框套小框的设计布局思路,不加思索的跳入单一的网页布局形式中,于是就有了把企业站常用的页面布局方式总结一下的想法

前端之移动页面布局

Native App 原生app手机应用程序使用原生的语言开发的手机应用,Android系统用的是java,iOS系统用的是object-C;Hybrid App 混合型app手机应用程序混合使用原生的程序和html5页面开发的手机应用

浮动,定位,flex布局

正常的布局流是将元素放置在浏览器视口内的系统:块级元素(display:block)在视口中垂直布局——每个都将显示在上一个元素下面的新行上,并且它们的外边距将分隔开它们。

CSS三栏布局的5种方法详解

假设高度已知,请写出三栏布局,其中左栏、右栏宽度各为300px,中间自适应.将浏览器窗口压窄,可以看到变化。由于上面的代码中设置的高度是min-width,而不是设置的固定高度width,所以现在看到的也就是高度不固定的情况。

CSS自定义属性+CSS Grid网格实现超级的布局能力

我在工作中使用CSS Grid已经有几个月了,我非常喜欢它在页面布局时给我的灵活性。这么长时间以来,我们一直没有一个真正的网格布局解决方案——用浮动和flexbox总是有各种各样的限制。但现在,我真的无法想象没有Grid的CSS!

css Grid布局

Gird布局是什么?Grid(网格) 布局使我们能够比以往任何时候都可以更灵活构建和控制自定义网格 ; 能够将网页分成具有简单属性的行和列来完成我们需要的网格布局

css实现div垂直水平居中的2种常用方法

利用vertical-align:middle进行垂直方向上的居中对齐,此方法需要满足的条件;这种方法比较暴力,利用定位解决:父元素开启相对定位,子元素绝对定位

前端必懂之Sticky Footer(粘性页脚)

Sticky Footer是css的一种布局场景。页脚footer永远固定在页面的底部,页面内容不够长的时候页脚黏在视窗底部,内容足够长时会被向下移动。老式门户网站由于内容过短常常版权页脚前移

第三代移动端布局方案

大家有没有发现淘宝的H5移动端没有使用任何rem和vw单位,而是和web端项目一样,使用的是px单位。虽然是px但它也很完美的将整个页面渲染了出来。那淘宝的FE是怎么实现的呢?

css vertical-align对齐规则

只能应用于内联元素以及 display 值为 table-cell 的元素。vertical-align 属性只能作用在 display 计算值为 inline、inline- block,inline-table 或 table-cell 的元素上。

fly63.com版权所有,内容以共享、参考、研究为目的,不存在任何商业目的。其版权属原作者所有,如有侵权,请与小编联系!情况属实本人将予以删除!

广告赞助文章投稿关于web前端网站点搜索站长推荐网站地图站长QQ:522607023

小程序专栏: 土味情话心理测试脑筋急转弯幽默笑话段子句子语录成语大全