表格在网页中常常使用,在过去,表格的尺寸只要适合于普通的计算机屏幕即可。但在现在,表格还必须适应于各种小型手持设备和便携设备,比如平板电脑,再比如智能手机。
本文的所有代码均来自于http://css-tricks.com/responsive-data-tables/,如果您对其中的任何技术细节存在疑问,请以原文为准。
2011年所流行的一个网页设计领域词汇,叫做“Responsive Web Design”,翻译有很多,比如“适应性网页设计”或者“自适应网页设计”。这是因为随着智能手机和平板电脑的流行,访问网页的设备尺寸变得越来越难以捉摸,一个统一的网页元素尺寸,已经无法适应于如此繁多的屏幕尺寸了。
在这个问题上,绝大多数网页元素已经由设备的浏览器负责调整,比如按钮、单选框等等,但诸如表格这样的网页元素,浏览器并不能够自适应,因其所承载的信息较为复杂,人工智能还不足以决断。
幸运的是,我们还有 CSS @media 这一手端进行手工调整。
HTML
First Name | Last Name | Job Title |
---|---|---|
James | Matman | Chief Sandwich Eater |
The | Tick | Crimefighter Sorta |
在HTML上,我们并没有什么魔术,这是一个非常普通的表格代码。
适用于大屏幕的CSS
/* 适用于大屏幕的CSS设置 */ table { width: 100%; border-collapse: collapse; } /* Zebra striping */ tr:nth-of-type(odd) { background: #eee; } th { background: #333; color: white; font-weight: bold; } td, th { padding: 6px; border: 1px solid #ccc; text-align: left; }
唔,到这儿我们还是没有什么绝招,好戏在后面呢。
为小型设备定制的CSS
/* 针对屏幕宽度小于760px的设备专门优化的CSS */ @media only screen and (max-width: 760px), (min-device-width: 768px) and (max-device-width: 1024px) { /* 拆解掉原先的表格样式 */ table, thead, tbody, th, td, tr { display: block; } /* 隐藏表头 */ thead tr { position: absolute; top: -9999px; left: -9999px; } tr { border: 1px solid #ccc; } td { /* 模拟行的显示 */ border: none; border-bottom: 1px solid #eee; position: relative; padding-left: 50%; } td:before { /* 模拟表头 */ position: absolute; /* Top/left values mimic padding */ top: 6px; left: 6px; width: 45%; padding-right: 10px; white-space: nowrap; } /* 其它表格信息 */ td:nth-of-type(1):before { content: "First Name"; } td:nth-of-type(2):before { content: "Last Name"; } td:nth-of-type(3):before { content: "Job Title"; } td:nth-of-type(4):before { content: "Favorite Color"; } td:nth-of-type(5):before { content: "Wars of Trek?"; } td:nth-of-type(6):before { content: "Porn Name"; } td:nth-of-type(7):before { content: "Date of Birth"; } td:nth-of-type(8):before { content: "Dream Vacation City"; } td:nth-of-type(9):before { content: "GPA"; } td:nth-of-type(10):before { content: "Arbitrary Data"; } }
这里的CSS是专为小型设备而定制的,将原先的表格分拆,仅仅变换为两列以适应屏幕。这当中一个重要的技巧,就是把表格的原有样式必须打破,使其以块模型来显示,籍此避免掉水平的滚动(因为原先的表格样式是不会自动弯折换行的)。
IE怎么办
令人头疼的IE又出现了。这次的问题在于,IE(包括IE 9和IE 10预览版)自身并不支持将表格的样式转化为块模型,即display:block
不起作用。
不过IE 9和10都支持CSS @media,因此我们需要对IE进行一下特殊处理:
然而,老版本的IE不支持CSS @media,我们只能借助其它的JavaScript补偿脚本来实现了,比如css3-mediaqueries-js。
更好的方案?
除了本文所描述的方案之外,针对表格在小型设备上的显示,是否还有更好的解决方案呢?答案是不一定。表格本身并不复杂,但不同的数据的“关键点”并不相同,一个对A表格有效的方案,或许对B表格并不合适。所以,在这个问题上,我们需要网页开发者对自己的网页内容有足够的认识,以根据不同的情况采用不同的方案来调整。
Pingback: 通过 CSS @MEDIA 制作感知屏幕尺寸的表格 | Anglei