神奇的css!居然能够这样玩转表格

这是在对一个博客模板进行移动端适配时遇到的一个场景。html结构以下:css

要解决的问题是如何在不修改任何html代码的状况下,仅仅经过css实现下面的效果:html

1)改变它们的显示顺序,.MainCell显示在前,.LeftCell显示在后(与html结构中的顺序相反)。html5

2)让它们分行显示。 .MainCell与.LeftCell是表格的单元格,它们默认是以列的方式排列在一行显示,若是解决了第1个问题,那就是.MainCell在左,.LeftCell在右;让它们分行方式显示就是.MainCell显示在上面,.LeftCell显示在下面。css3

要解决这2个问题,首先要解决1个选择器的问题 —— 如何在没有id与class的状况下,让添加的样式只针对表格(table)的第2行(tr)生效。布局

css3中有个伪类选择器可解决这个问题,它就是 :nth-child() (参考资料:CSS3 :nth-child()伪类选择器),因而就有了下面的选择器:post

.Framework tr:nth-child(2){
}

接下来解决上面的第1个问题 —— 改变元素的显示顺序。flex

css3中引人了一个新的布局模型 —— flex (弹性盒模型,flexible box的缩写,参考资料:深刻理解CSS弹性盒模型flex)。使用flex布局,能够经过order控制显示顺序(order值小的显示在前面)。url

因而,经过下面的css代码将.LeftCell与.MainCell改成flex布局:spa

.Framework tr:nth-child(2){
    display: flex;
}

要将.MainCell显示在.LeftCell以前,只需给.LeftCell的order设置一个大于0的值(默认是0,值越大显示越后)便可:code

.LeftCell{
    order:1;
}

第1个问题解决。

紧接着解决第2个问题,让.MainCell与.LeftCell分行显示,也就是显示.MainCell以后,换一行显示.LeftCell。

css3中强大的flex布局继续发挥做用,经过flex-wrap能够控制flex布局中元素的换行方式,对于咱们要解决的问题,使用"wrap"便可:

.Framework tr:nth-child(2){
    flex-wrap: wrap;
}

原觉得很棘手的问题,居然在不改任何html的状况下,经过3行css代码完美解决,你说html5/css3不是趋势,谁是趋势?

相关文章
相关标签/搜索