以手机、平板等移动设备为平台的浏览行为变得越来越平常,甚至有些人叫嚣 PC 将死。虽然说的有些夸张,但让你的网站布局能够兼容 PC 和移动设备这些需求变得越来越重要。这种网页布局就是 ""(有人喜欢把"Responsive layout"直译成'响应式布局',本人觉得'自适应布局'更本土化)。这种布局的特点是使用 CSS 媒体查询语句 (
),能根据页面宽度,让页面布局自动做相应的调整,而不是采用传统的做法,几种不同的尺寸就做几个相适应的页面。
- @media screen and (...)
今天要说的是自适应布局技术中的一个难题,就是,如何让
元素也能表现出自适应性。按 html5 的说法,
- table
是一个不鼓励使用的 HTML 标记,但现实工作中,我们避免不了的偶尔会用到它。那么,怎样让一个传统的表格也表现出自适应性呢?
- table
网上有很多种解决方案,最常见的是配合 JavaScript。里给出了一个用纯 CSS 实现的,但它需要将一些业务数据写在 CSS 里。而本文这将提到的一种方法也是用纯 CSS 实现表格的自适应布局,而且 CSS 只负责表现,不牵涉业务逻辑和数据。
假设一种需求,用一个表格来展示付款数据。下面是我们使用的表格和数据:
- <table>
- <thead>
- <tr>
- <th>
- 支付
- </th>
- <th>
- 日期
- </th>
- <th>
- 金额
- </th>
- <th>
- 周期
- </th>
- </tr>
- </thead>
- <tbody>
- <tr>
- <td data-label="支付">
- 支付 #1
- </td>
- <td data-label="日期">
- 02/01/2015
- </td>
- <td data-label="金额">
- $2,311
- </td>
- <td data-label="周期">
- 01/01/2015 - 01/31/2015
- </td>
- </tr>
- <tr>
- <td data-label="支付">
- 支付 #2
- </td>
- <td data-label="日期">
- 03/01/2015
- </td>
- <td data-label="金额">
- $3,211
- </td>
- <td data-label="周期">
- 02/01/2015 - 02/28/2015
- </td>
- </tr>
- </tbody>
- </table>
我们将借助的力量。通常, 它们用显示图标类的内容,比如一个箭头,提示,或文字图案 (icon)。它的另外一个神奇的功能是元素属性值显示到 HTML 内容里,
,放在 before/after 伪元素类里。沿着这个思路,我们就能够让
- content: attr(data-label)
在 PC 端表现成网格效果,而在小屏的手机端表现成流式布局。
- table
我们暂以 600px 为小屏幕大屏幕的分界点,下面的 CSS 使用媒体查询语句,在小于 600px 宽的屏幕上,用 CSS 将
上的属性值取出来,放到内容区显示。
- td
- @media screen and(max - width: 600px) {
- table td: before {
- content: attr(data - label);
- float: left;
- text - transform: uppercase;
- font - weight: bold;
- }
- }
在大屏幕上的显示效果是这样:
而到了手机设备上,变成了这样:
下面是一个实际效果演示页面,请调整页面窗口的宽度,当可视区域的宽度小于 600px 时,会触发自适应布局设置的条件,表格变成流式布局:
你也可以分别在 PC 和手机上分别测试这个网页。
完美的实现了自适应布局的效果。
来源: http://www.webhek.com/responsive-tables-in-pure-css