HTML5技术

神奇的css!竟然可以这样玩转表格 - dudu

字号+ 作者:H5之家 来源:H5之家 2016-11-07 10:00 我要评论( )

这是在对一个博客模板进行移动端适配时遇到的一个场景。html结构如下: 要解决的问题是如何在不修改任何html代码的情况下,仅仅通过css实现下面的效果: 1)改变它们的显示顺序,.MainCell显示在前,.LeftCell显示在后(与html结构中的顺序相反)。 2)让它

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

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

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

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

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

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

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

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

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

于是,通过下面的css代码将.LeftCell与.MainCell改为flex布局:

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

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

.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不是趋势,谁是趋势?

 

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • 吉特仓库管理系统- 斑马打印机 ZPL语言的腐朽和神奇 - 贺臣

    吉特仓库管理系统- 斑马打印机 ZPL语言的腐朽和神奇 - 贺臣

    2016-07-21 16:00

  • 先了解这些 Web App ,你可以少走很多弯路 - Willard

    先了解这些 Web App ,你可以少走很多弯路 - Willard

    2016-07-07 10:00

  • 程序员也可以懂一点期望值管理 - 宝玉

    程序员也可以懂一点期望值管理 - 宝玉

    2016-05-21 17:00

  • 不装mono,你的.NET程序照样可以在Linux上运行! - 宇内流云

    不装mono,你的.NET程序照样可以在Linux上运行! - 宇内流云

    2016-04-03 15:00

网友点评