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

时间: 2017-11-09阅读: 1157标签: 布局作者: 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


站长推荐

1.阿里云: 本站目前使用的是阿里云主机,安全/可靠/稳定。点击领取2000元代金券、了解最新阿里云产品的各种优惠活动点击进入

2.腾讯云: 提供云服务器、云数据库、云存储、视频与CDN、域名等服务。腾讯云各类产品的最新活动,优惠券领取点击进入

3.广告联盟: 整理了目前主流的广告联盟平台,如果你有流量,可以作为参考选择适合你的平台点击进入

链接: http://www.fly63.com/article/detial/78

CSS五种方式实现 Footer 置底

页脚置底(Sticky footer)就是让网页的footer部分始终在浏览器窗口的底部。当网页内容足够长以至超出浏览器可视高度时,页脚会随着内容被推到网页底部;但如果网页内容不够长,置底的页脚就会保持在浏览器窗口底部。

响应式布局和自适应布局详解

自适应布局给了你更多设计的空间,因为你只用考虑几种不同的状态。而在响应式布局中你却得考虑上百种不同的状态。虽然绝大部分状态差异较小,但仍然也算做差异。它使得把握设计最终效果变得更难,同样让响应式布局更加的难以测试和预测

前端响应式布局

Responsive design,意在实现不同屏幕分辨率的终端上浏览网页的不同展示方式。通过响应式设计能使网站在手机和平板电脑上有更好的浏览阅读体验。

弹性(Flex)布局的使用

最近我参与实施的两个项目中,一个页面交互复杂,而另一个相对传统,两个项目相比之下凸显出了页面布局样式的时间占比不可忽视,使用了弹性布局代码量精简了不少

CSS:BFC规则的应用自适应两栏布局

两栏布局是写页面时经常用到的,要想实现两栏布局,就需要明白BFC规则,Block formatting context,直译为“块级格式化上下文”,可以简单的理解它为一个独立的区域,把区域内部元素与外部元素区分开,两者互不干扰。

css怎么让文字竖着排列?

css可以使用css样式writing-mode:tb-rl来设置文字竖着排列。writing-mode属性设置或检索对象的内容块固有的书写方向。

css3 弹性盒布局的使用-Flex

css3 的Flex弹性盒的布局是一个用于页面布局的全新CSS3模块功能。它可以把列表放在同一个方向(从左到右或从上到下排列),并且让这些列表能延伸到占用可用的空间。较为复杂的布局可以通过嵌套一个伸缩容器

CSS实现自适应两栏布局方法

浮动+margin第一种: 左侧栏固定宽度向左浮动,右侧主要内容则用margin-left留出左侧栏的宽度,默认宽度为auto,自动填满剩下的宽度。 第二种:左边绝对定位(脱离文档流,不占位置)

CSS中的圣杯布局与双飞翼布局

什么是圣杯布局?所谓圣杯布局就是用于实现一个两侧宽度固定,中间宽度自适应的三栏布局;什么是双飞翼布局?和圣杯布局一样,双飞翼布局也是用于实现一个两侧宽度固定,中间宽度自适应的三栏布局,就是布局的形式上存在差异 

网站设计和布局的重要性和过程

网站的设计是吸引客户的非常重要的因素。如今,互联网上存在着很多竞争,每个人都可以点击其客户,但是只有少数人能吸引他们。这通常是由于网站给人的第一印象。

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

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

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