Closed CruxF closed 4 years ago
flexbox的出现是为了解决逐渐复杂的web布局问题,因为这种布局方式很灵活。容器的子元素可以任意方向进行排列。 flex布局模型不同于块模型布局和内联模型布局,块和内联模型的布局计算依赖于块和内联的流方向,而flex布局依赖于flex directions。简单的说:flexbox是布局模块,而不是一个简单的属性,它包含父元素(flex container)和子元素(flex items)的属性。
强大且灵活的flexbox布局,让广大的前端开发者省去了解决盒子浮动所带来的苦恼。在如今手机端开发成为主流时代的,这种布局尤为重要,下面我们一起看看flexbox布局中各种属性所发挥的作用。
这个属性是在父元素中设置的,当父元素设置了该属性,那么默认其中的子元素横向布局,就和浮动布局一般,下面来看代码:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> .box { display: flex; display: -webkit-flex; } .item1, .item2, .item3 { background: #FFA500; padding: 10px; height: 100px; width: 80px; margin-top: 10px; margin-right: 10px; text-align: center; } </style> </head> <body> <div class="box"> <div class="item1">row1</div> <div class="item2">row2</div> <div class="item3">row3</div> </div> </body> </html>
点击我看演示效果哦。
这个属性在父元素中定义,作用是改变子元素的布局方向,主要有以下几个属性值:
下面贴一部分代码:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> .box { display: flex; display: -webkit-flex; flex-direction: column; } .item1, .item2, .item3 { background: #FFA500; padding: 10px; height: 100px; width: 80px; margin-top: 10px; margin-right: 10px; text-align: center; } </style> </head> <body> <div class="box"> <div class="item1">row1</div> <div class="item2">row2</div> <div class="item3">row3</div> </div> </body> </html>
更详细戳我看效果啊,具体实现请看demo中的网页源代码。
这个属性是定义在子元素中,作用是改变子元素在布局流中的位置。在父元素定义了布局方式为flex时,各个子元素的默认order值为0,当子元素order值设置为负值时向前排序,设置为正值向后排序,设置为0时为正常排序,下面请看代码:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title></title> <style> .box { display: flex; display: -webkit-flex; } .item1, .item2, .item3 { background: #FFA500; padding: 10px; height: 100px; width: 80px; margin-top: 10px; margin-right: 10px; text-align: center; } .item2 { order: 1; } </style> </head> <body> <div class="box"> <div class="item1">order1</div> <div class="item2">order2</div> <div class="item3">order3</div> </div> </body> </html>
点击这里看效果哦。
这个属性定义在父元素中,它的作用是设置子元素在页面缩小时,到底是在一行显示还是换行显示,主要有以下几个属性值:
下面贴核心代码,默认源代码请到项目源地址或者网页上查看,不说第二次了
.boxThree { display: flex; display: -webkit-flex; flex-wrap: wrap-reverse; }
点击我查看效果哦
这个属性定义在父元素中,它是flex-direction和flex-wrap这两个属性的缩写版本,但是在这场景下,flex-direction的属性值只能为row或者row-reverse,下面列举3种组合:
还有几种组合方式,大家可以去尝试一下,在这里不全部举出,下面贴出某一段核心代码:
.boxTwo { display: flex; display: -webkit-flex; flex-flow: row-reverse wrap; }
这个属性定义在父元素中,它的作用是让子元素以怎样的方式横向布局显示,主要有下面几个属性值:
下面贴出某一段核心代码:
.boxThree { display: flex; display: -webkit-flex; justify-content: center; }
这个属性定义在父元素中,十分怪异的一个属性,它有以下几个使用的前提:
属性值与justify-content类似,相比只是多了个stretch。下面贴出某段核心代码:
.boxSix { display: flex; display: -webkit-flex; flex-direction: column; flex-wrap: wrap; align-content: stretch; height: 300px; width: 800px; border: 1px solid #ccc; }
这个属性定义在父元素中,是一个十分常用的属性,它的作用是改变子元素纵向布局的方式,主要有以下几个属性值:
下面贴出某段核心代码:
.boxFour { display: flex; display: -webkit-flex; align-items: baseline; height: 300px; width: 800px; border: 1px solid brown; }
这个属性定义在子元素中,它的作用是改变某个子元素在纵轴方向的布局方式,主要有以下几个属性值:
.item14 { height: 190px; font-size: 28px; align-self: baseline; }
这个属性定义在子元素中,是非常实用的一个属性,它的作用是让子元素以几倍宽度拉伸,属性值的类型为number,下面贴出全部代码:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>flex-grow</title> <style> .box { display: flex; display: -webkit-flex; } .item1, .item2, .item3 { background: #FFA500; padding: 10px; height: 100px; margin-right: 10px; text-align: center; flex: 1; } .item1 { flex-grow: 2; } .item2 { flex-grow: 4; } </style> </head> <body> <div class="box"> <div class="item1">两倍宽度</div> <div class="item2">四倍宽度</div> <div class="item3">一倍宽度</div> </div> </body> </html>
这个属性定义在子元素中,它的作用就是让子元素在页面缩小时宽度如何变化,属性值为number,默认值是1。当值为2时,说明页面缩小时,该子元素将相对缩小两倍;当值为0时,页面缩小时,该子元素宽度不会发生改变。下面请看全部代码:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>flex-shrink</title> <style> .box { display: flex; display: -webkit-flex; } .item1, .item2, .item3 { background: #FFA500; padding: 10px; height: 100px; width: 400px; margin-right: 10px; text-align: center; } .item2 { flex-shrink: 0; } </style> </head> <body> <div class="box"> <div class="item1">flex-shrink</div> <div class="item2">flex-shrink</div> <div class="item3">flex-shrink</div> </div> </body> </html>
这个属性定义在子元素中,设置弹性盒元素的初始长度,默认值为auto,下面贴代码:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>flex-basis</title> <style> .box { display: flex; display: -webkit-flex; } .item1, .item2, .item3 { background: #FFA500; padding: 10px; height: 100px; margin-right: 10px; } .item2 { flex-basis: 0; } </style> </head> <body> <div class="box"> <div class="item1">flex-shrink</div> <div class="item2">flex-shrink</div> <div class="item3">flex-shrink</div> </div> </body> </html>
如果把类名为item2的内容换成别的,你们看看会出现什么情况?点击我查看上述代码效果哦
这个属性定义在子元素中,是flex-grow、flex-shrink、flex-basis这三个属性的缩写。默认值为“0 1 auto”,下面请看一段代码:
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>flex</title> <style> .box { display: flex; display: -webkit-flex; } .item1, .item2, .item3 { background: #FFA500; padding: 10px; height: 100px; margin-right: 10px; text-align: center; flex: 1; } .item2 { flex: 2 0 auto; } </style> </head> <body> <div class="box"> <div class="item1">flex</div> <div class="item2">flex-double</div> <div class="item3">flex</div> </div> </body> </html>
终于把flexbox布局的那些玩意探究的差不多了,真的是累,花了近一整天的时间,不过收获却是巨大的,之前对flexbox布局还是迷迷糊糊的,经过这次的总结和探究,算是进一步深入理解了。对flexbox布局的完全掌握我认为还是得经常将它运用在项目之中,多踩踩兼容的坑,同时也能将它熟记于心。
什么是flexbox布局?
flexbox的出现是为了解决逐渐复杂的web布局问题,因为这种布局方式很灵活。容器的子元素可以任意方向进行排列。 flex布局模型不同于块模型布局和内联模型布局,块和内联模型的布局计算依赖于块和内联的流方向,而flex布局依赖于flex directions。简单的说:flexbox是布局模块,而不是一个简单的属性,它包含父元素(flex container)和子元素(flex items)的属性。
flexbox布局属性全解析
强大且灵活的flexbox布局,让广大的前端开发者省去了解决盒子浮动所带来的苦恼。在如今手机端开发成为主流时代的,这种布局尤为重要,下面我们一起看看flexbox布局中各种属性所发挥的作用。
1、display(flex container)属性
这个属性是在父元素中设置的,当父元素设置了该属性,那么默认其中的子元素横向布局,就和浮动布局一般,下面来看代码:
点击我看演示效果哦。
2、flex-direction(flex container)属性
这个属性在父元素中定义,作用是改变子元素的布局方向,主要有以下几个属性值:
下面贴一部分代码:
更详细戳我看效果啊,具体实现请看demo中的网页源代码。
3、order(flex items)属性
这个属性是定义在子元素中,作用是改变子元素在布局流中的位置。在父元素定义了布局方式为flex时,各个子元素的默认order值为0,当子元素order值设置为负值时向前排序,设置为正值向后排序,设置为0时为正常排序,下面请看代码:
点击这里看效果哦。
4、flex-wrap(flex container)属性
这个属性定义在父元素中,它的作用是设置子元素在页面缩小时,到底是在一行显示还是换行显示,主要有以下几个属性值:
下面贴核心代码,默认源代码请到项目源地址或者网页上查看,不说第二次了
点击我查看效果哦
5、flex-flow(flex container)属性
这个属性定义在父元素中,它是flex-direction和flex-wrap这两个属性的缩写版本,但是在这场景下,flex-direction的属性值只能为row或者row-reverse,下面列举3种组合:
还有几种组合方式,大家可以去尝试一下,在这里不全部举出,下面贴出某一段核心代码:
点击我查看效果哦
6、justify-content(flex container)属性
这个属性定义在父元素中,它的作用是让子元素以怎样的方式横向布局显示,主要有下面几个属性值:
下面贴出某一段核心代码:
点击我查看效果哦
7、align-content(flex container)属性
这个属性定义在父元素中,十分怪异的一个属性,它有以下几个使用的前提:
属性值与justify-content类似,相比只是多了个stretch。下面贴出某段核心代码:
点击我查看效果哦
8、align-items(flex container)属性
这个属性定义在父元素中,是一个十分常用的属性,它的作用是改变子元素纵向布局的方式,主要有以下几个属性值:
下面贴出某段核心代码:
点击我查看效果哦
9、align-sef(flex items)属性
这个属性定义在子元素中,它的作用是改变某个子元素在纵轴方向的布局方式,主要有以下几个属性值:
下面贴出某段核心代码:
点击我查看效果哦
10、flex-grow(flex-items)属性
这个属性定义在子元素中,是非常实用的一个属性,它的作用是让子元素以几倍宽度拉伸,属性值的类型为number,下面贴出全部代码:
点击我查看效果哦
11、flex-shrink(flex items)属性
这个属性定义在子元素中,它的作用就是让子元素在页面缩小时宽度如何变化,属性值为number,默认值是1。当值为2时,说明页面缩小时,该子元素将相对缩小两倍;当值为0时,页面缩小时,该子元素宽度不会发生改变。下面请看全部代码:
点击我查看效果哦
12、flex-basis(flex items)属性
这个属性定义在子元素中,设置弹性盒元素的初始长度,默认值为auto,下面贴代码:
如果把类名为item2的内容换成别的,你们看看会出现什么情况?点击我查看上述代码效果哦
13、flex(flex items)属性
这个属性定义在子元素中,是flex-grow、flex-shrink、flex-basis这三个属性的缩写。默认值为“0 1 auto”,下面请看一段代码:
点击我查看效果哦
尾声
终于把flexbox布局的那些玩意探究的差不多了,真的是累,花了近一整天的时间,不过收获却是巨大的,之前对flexbox布局还是迷迷糊糊的,经过这次的总结和探究,算是进一步深入理解了。对flexbox布局的完全掌握我认为还是得经常将它运用在项目之中,多踩踩兼容的坑,同时也能将它熟记于心。