Flexbox是一个用于网页布局的CSS标准。通过使用一些flexbox属性,我们可以跳出传统块状布局的束缚,轻松设计出我们需要的布局。使用Flexbox可以使你的网站和应用支持响应式,在不同屏幕大小的设备都能获得良好的视觉效果。下面给大家分享5个解决了传统CSS布局难点的Flexbox小技巧。
1、创建等高的列
这个任务看上去不难,但实际操作起来你会发现它很费事。设置min-height?然并卵。因为一旦某一列的内容比其他列要多,那么这一列就会被撑起来,其他列明显会比它矮一截。用flexbox来解决这个问题轻而易举。用flexbox创建的列默认是等高的,我们只需要定义一个flex模型并设置好flex-direction和align-items属性即可。
<div class="flexbox-container"> <div><h3>Column 1</h3></div> <div><h3>Column 2</h3></div> </div>
.flexbox-container { display: -ms-flex; display: -webkit-flex; display: flex; padding: 20px; background:#eee; } .flexbox-container > div { width: 50%; padding: 10px; background:#fff; } .flexbox-container > div:first-child { margin-right: 20px; }
效果图:
2、元素的动态排序
过去,如果我们需要动态地给元素进行排序,我们需要通过JavaScript来实现。然而利用flexbox之后,我们通过设置CSS属性即可实现这一功能。这个属性叫做order。顾名思义,它可以给flex子元素设置显示顺序,不论他们在html文件中的顺序如何,他们都会遵循order属性的值来调整顺序。order的值表示优先级。元素的order值越小,优先级越高。
HTML:
<div class="container"> <div class="blue"></div> <div class="red"></div> <div class="green"></div> </div>
CSS:
.container{ display: flex; } .blue{ order: 3; } .red{ order: 2; } .green{ order: 1; }
3、水平和垂直居中
垂直居中一直令前端开发者头疼不已。解决方案五花八门,很多并不是用于布局的元素和属性都被用上了。用了flexbox后,居中问题再也难不倒我们了。Flex的布局中包含主轴和侧轴两个方向轴(可以理解为X轴和Y轴),我们只需要保持子元素在主轴和侧轴上都居中即可将其置于父容器的中心位置。
HTML:
<div class="container"> <div></div> </div>
CSS:
.container{ display: flex; justify-content: center; align-items: center; }
4、创建响应式的栅格系统
多数开发者利用一些CSS框架来创建响应式栅格系统。除了最受欢迎的Bootstrap以外还有上百种库可以帮助开发者创建强大的栅格系统。他们有着很好的实现效果,但是有很多功能我们虽然没有用到却不得不和栅格系统一同引入我们的项目。如果你是一个热衷于DIY的开发者,并且不想仅仅因为栅格系统而去引入各种第三方库的话,你不妨试试flexbox。
Flexbox创建的栅格系统中每一行的元素都放在一个设置了display:flex样式的父容器中。容器中元素的大小通过flex属性来设置。flex的大小是根据设备自适应的,因此在不同大小的设备上都能获得很好的效果。
HTML:
<div class="container"> <div class="col-1">...</div> <div class="col-2">...</div> <div class="col-1">...</div> </div>
CSS:
.container{ display: flex; } .col-1{ flex: 1; } .col-2{ flex: 2; }
5、创建一个固定的页脚
flexbox可以很好地解决这个问题。我们只需要将页脚添加到特定的flex容器中即可保证它永远固定在页面底部。将display:flex属性应用到body元素上可以保证整个页面都应用flexbox的属性,同时页面的主要内容和页脚各自作为body中的一个子元素。这样调整他们的位置就很easy了。
HTML:
<body> <div class="main">...</div> <footer>...</footer> </body>
CSS:
html{ height: 100%; } body{ display: flex; flex-direction: column; height: 100%; } .main{ flex: 1 0 auto; } footer{ flex: 0 0 auto; }