博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
弹性盒布局学习总结
阅读量:5035 次
发布时间:2019-06-12

本文共 3820 字,大约阅读时间需要 12 分钟。

  近期在做移动端的项目过程中,经常听到有人说用弹性盒布局来写比较快,因为我一直用的是传统的百分比布局(好吧,不敢否认我还是喜欢用拿手的,但是不要鄙视我对新技术的热情),因此一直也想抽空学习下弹性盒布局,看看他到底是何方神圣,能够用到哪些场合,还有浏览器兼容性到底怎么样

一、语法

 应用flex布局,首先要设定一个flex容器(flex container),它的子元素就自动成为flex容器的成员,称为flex项目(flex item)。

.flex_container{
display:flex; /* 块元素 */ display:inline-flex; /* 行内元素 */ display:-webkit-flex; /* safari */ }

注意:处于flex布局内的成员其clear、float、vertical-align属性将失效

(在此借用阮大神的一张图):

1.设置在父容器上的六大属性

1)  flex-direction:决定了主轴的方向

.flex_container {
flex-direction: row | row-reverse | column | column-reverse;}
  • row(默认值):主轴为水平方向,起点在左端。
  • row-reverse:主轴为水平方向,起点在右端。
  • column:主轴为垂直方向,起点在上沿。
  • column-reverse:主轴为垂直方向,起点在下沿。

 

2) flex-wrap:决定了项目在轴上一行排列不下时是否换行

.flex_container{
flex-wrap: nowrap | wrap | wrap-reverse; }
  • nowrap:默认不换行,所有项目在一行显示
  • wrap:一行显示不完则换行显示,第一行在最上面
  • wrap-reverse:第一行开始在最下方

 

3)flex-flow:flex-direction和flex-wrap两属性的简写,默认值为row no-wrap

.flex_container {
flex-flow:
||
;}

 

4)justify-content:定义了项目在主轴上的对齐方式

.flex_container {
justify-content: flex-start | flex-end | center | space-between | space-around; }
  • flex-start(默认值):左对齐
  • flex-end:右对齐
  • center: 居中
  • space-between:两端对齐,项目之间的间隔都相等。
  • space-around:每个项目两侧的间隔相等。所以,项目之间的间隔比项目与边框的间隔大一倍。

5)align-items:定义项目在交叉轴上如何对齐

.flex_container{
align-items: flex-start | flex-end | center | baseline | stretch;}
  • flex-start:交叉轴的起点对齐。
  • flex-end:交叉轴的终点对齐。
  • center:交叉轴的中点对齐。
  • baseline: 项目的第一行文字的基线对齐。
  • stretch(默认值):如果项目未设置高度或设为auto,将占满整个容器的高度。

6)align-content:定义了项目在多根轴线上的对齐方式(如果一根轴线不起作用)

.flex_container {
align-content: flex-start | flex-end | center | space-between | space-around | stretch; }
  • flex-start:与交叉轴的起点对齐。
  • flex-end:与交叉轴的终点对齐。
  • center:与交叉轴的中点对齐。
  • space-between:与交叉轴两端对齐,轴线之间的间隔平均分布。
  • space-around:每根轴线两侧的间隔都相等。所以,轴线之间的间隔比轴线与边框的间隔大一倍。
  • stretch(默认值):轴线占满整个交叉轴。

2.项目的六大属性

1)order:定义了项目的排列顺序,数值越小排列越靠前,默认为0.

2)flex-grow:定义了项目的放大比例,默认为0,即存在剩余空间也不放大

.item {
flex-grow:
; /* default 0 */ }

注意:如果所有项目的flex-grow:1,则他们将等分剩余空间;如果一个项目的flex-grow属性为2,其他项目都为1,则前者占据的剩余空间将比其他项多一倍。

3)flex-shrink:定义了项目的缩小比例,默认为1,即如果空间不足,将缩小适应空间

.item {
flex-shrink:
; /* default 1 */}

注意:如果所有项目的flex-shrink属性都为1,当空间不足时,都将等比例缩小。如果一个项目的flex-shrink属性为0,其他项目都为1,则空间不足时,前者不缩小

4)flex-basis:定义在分配剩余空间之前,项目所占据的主轴空间。浏览器根据此特性计算主轴是否有剩余空间,默认值为auto,即项目本来大小

.item {
flex-basis:
| auto; /* default auto */ }

注意:若项目设为固定宽高,则占据固定空间,如200px||20%

5)flex:flex-grow、flex-shrink、flex-basis三个属性的缩写,默认值为0 1 auto,后两个属性可选

.item {
flex: none | [ <'flex-grow'> <'flex-shrink'>? || <'flex-basis'> ] }

注意:none代表(0 0 auto),  auto代表(1 1 auto)

6)align-self:允许单个项目有与其他项目不一样的对齐方式,可覆盖align-items属性。默认值为auto,表示继承父元素的align-items属性,如果没有父元素,则等同于stretch

.item {
align-self: auto | flex-start | flex-end | center | baseline | stretch; }

 二、布局

了解了flex的基本语法之后,究竟怎样用好这些语法进行布局了。自己为了练习写出了一个非常不好看low逼的导航条,但是基本的语法都用上了

.flex_container{
display: flex; flex-grow:row wrap; justify-content:space-between; width:640px; height:50px; margin:10% auto; background-color:#ccc; li{ display: flex; flex:1; align-items: stretch; justify-content: center; background-color:black; list-style:none; a{ flex:1; text-align: center; line-height: 50px; color:white; text-decoration: none; } } li:last-child{
flex:2; }}

注意:代码并没有做兼容性处理,可以自己写或者用autoprefixer工具来处理

具体详细布局策略移步至阮大神教程:

三、兼容性 

 浏览器一共支持三个不同版本的语法:

  • 新规范:最新版本的语法,即“display:flex”
  • 中间版本:2011年非官方规范,即“display:flexbox”
  • 老规范:2009年官方规范,即“display:box”

  从表中可以看出弹性盒布局在移动端的支持性还是比较好的,不过为了兼容不同的浏览器,建议还是用autoprefixer工具自动补全其不同的前缀。

 

转载于:https://www.cnblogs.com/worldly1013/p/6012865.html

你可能感兴趣的文章
开户vim编程之--cscope支持
查看>>
python数据类型图解
查看>>
C#微信登录-手机网站APP应用
查看>>
HTML5实践 -- iPhone Safari Viewport Scaling Bug
查看>>
一位数据挖掘成功人士 给 数据挖掘在读研究生 的建议
查看>>
Python3.6.0安装
查看>>
hdu1049
查看>>
H5项目常见问题及注意事项
查看>>
索尼(SONY) SVE1512S7C 把WIN8降成WIN7图文教程
查看>>
时间模块 && time datetime
查看>>
jquery自动生成二维码
查看>>
spring回滚数据
查看>>
新浪分享API应用的开发
查看>>
美国专利
查看>>
【JavaScript】Write和Writeln的区别
查看>>
百度编辑器图片在线流量返回url改动
查看>>
我对你的期望有点过了
查看>>
微信小程序wx:key以及wx:key=" *this"详解:
查看>>
下拉框比较符
查看>>
2.2.5 因子的使用
查看>>