自从我 第一次发表关于响应式数据表格的文章 以来,已经出现了很多关于此主题的讨论。

最初的想法是放弃表格的网格布局,并将每个单元格都做成一行。 每一行都用伪元素进行标记。 这会创建一个更高的表格,需要更多的垂直滚动,但不需要水平滚动。 在不丢失上下文的情况下浏览数据更容易。 缺点是您可能会丢失数据比较的上下文,因为您不再能够看到同一类型数据的单元格并排显示。
Mobifreaks 发布了一个 非常相似的方法,它使用了相同的布局更改和伪元素标记。 他们使用 HTML5 data-* 属性进行标记,从而无需为不同的表格编写自定义 CSS。 我不认同 SEO 部分,但代码很好。
Derek Pennycuff 借鉴了最初的想法,并 应用了“移动优先”的概念。 它不是从表格标记开始,而是从定义列表标记开始,然后在屏幕足够大时将其强制转换为表格布局。 虽然我喜欢这里的思路,但我并不确定我喜欢实现它的方式。 标记更重,而且(具有讽刺意味的是)我认为它不是语义化的。 表格数据应该用表格标记。 我认为“移动优先”背后的理念是默认情况下保持简单和轻量,而对于更大的屏幕则使用更重和更复杂的方式。 这个演示一开始就比较重,并且一直都很重。
Drew Dyksterhouse 制作了一个演示,它通过测量表格是否比屏幕宽来计算表格应该在哪里断开,然后保存该断点以提高效率。
Scott Jehl 想出了两个巧妙的想法。 一个是从表格中的数据构建图表。 在此演示中,它是一个饼图,比完整的数据表格窄得多,因此更适合小屏幕。

很酷,但显然不是所有表格都能转换为图表。 我还会争辩说数据表格和图表是截然不同的东西。 如果您要费心制作图表,最好也将其显示在更大的屏幕上,因为它以一种有用的替代方式提供了上下文。 或者至少提供一个查看它的选项。
Scott 的另一个想法侧重于大型数据表格可能会将父容器的宽度扩展到小屏幕无法显示的范围。 因此,为了防止这种情况,可以使用媒体查询在小屏幕上隐藏表格,并用一个小型模拟表格和一个查看完整表格的链接来替换它。

Stewart Curry 想出了 仅隐藏不太重要的列 的想法,以适应较小的屏幕。 人们早期对移动特定网站的抱怨之一是,仅仅因为他们使用的是移动设备,并不意味着他们应该获得比使用更大屏幕的用户更差的体验(尤其是在这些设备完全能够处理“完整”网站的情况下)。

我认为 Stewart 的想法很有道理。 使用小屏幕将信息集中到最重要的内容上是很棒的,只是不应该在没有补救措施的情况下隐藏信息。 Filament Group 的 Maggie Costello Wachs 也提出了 在较小的屏幕上隐藏不必要的列 的想法,但也提供了一个下拉菜单,您可以在其中重新启用它们(您可以通过水平滚动查看它们)。

David Bushell 也解决了不更改基本表格格式但仍然解决“太宽”问题的方法。 他的概念 将表格翻转到侧面 并将 overflow-x: auto
应用于 tbody
,这意味着如果数据单元格超出小屏幕,则可以左右滚动,但您始终可以看到标题(就像它们是固定位置一样)。

Brad Czerniak 有一个他称为 Rainbow Tables 的想法,在较小的屏幕上,表格的网格结构被放弃,数据单元格被尽可能地挤在一起,同时仍然保持“行”的结构。 然后,数据不是通过它所在的列来识别,而是通过颜色编码来匹配键。

2012年5月26日更新:Zurb 已 发布了一种新技术。 它专注于使最左侧的列成为“键”列。 在宽屏上,它只是一个普通的列。 在小屏幕上,它会固定/粘贴到左侧,其余列可以滚动。 这允许进行行与行之间的比较。
它类似于 David Bushell 的固定左侧列技术,但可能更健壮一些,因为它利用 JavaScript 进行了一些 DOM 操作和屏幕尺寸测量。 额外的依赖项、更深层次的支持,由您决定。

更新
以下是一些新出现的方法
- Filament Group 将一些最佳模式组合到一个名为 Tablesaw 的“一组响应式表格插件”中。
- Stackable.js
- FooTable
- jQuery-rt-Responsive-Tables
- RWD-Table-Patterns
此外,Jason Grigsby 还撰写了一篇关于 选择解决方案 的文章,该文章基于用户希望对表格执行的操作。
为了使这个问题更难,请考虑您必须从什么标记开始才能使数据在没有任何 CSS 甚至 JavaScript 的情况下工作。 这样一来,它就可以发送到电子邮件和 RSS 等地方,并且可以正常工作。 我尝试在这里解决这个问题。 它很乱,但它有效。
我最喜欢的是你的想法和你选择显示哪些数据的方法。
非常棒的集合和示例。 我最近一直在思考如何解决这个问题。 是要减小字体大小还是要通过 nth-child 剔除列。
饼图示例尤其令人印象深刻。 我一定要尝试一下。 感谢您提供的资源!
我会稍微调整一下你的想法,首先只显示名字和姓氏,然后点击显示该人可用的其余信息,即你点击的行。
如果我考虑如何实现它,可能会使用 jquery 更改高度,并在 overflow-x hidden 中实现。
我认为这不是问题,因为这里的错误前提是您始终必须将内容适应屏幕尺寸。 当试图预测和准备各种屏幕尺寸(尤其是奇怪和尴尬的尺寸)时,这始终,我的意思是始终,是在寻找愚人金。 尤其奇怪和尴尬的尺寸。
人们必须专注于如何使表格数据更容易浏览,而不是给自己设定一些无助于用户的目标,而是用尴尬的 UX 惹恼他。
如果在给定的移动设备上表格不容易浏览,那么可以安全地假设几乎所有其他内容也不容易浏览。 因此,这个人将被迫购买更好的设备,或者他永远不会欣赏像表格缩小这样的努力,因为它不是那种类型的用户。
而更新的移动设备具有硬件和软件功能,使得表格显示不再成为问题。 因此,主要关注点实际上不是表格的宽度或高度,而是一眼就能看清其可读性。
哦,这里没有什么新鲜事:您将列切换为行的部分自 MS-DOS 时代在 FoxPro 中就已经使用过了。
然后我们也有非常大的表格,并且在 80 个字符宽的屏幕上滚动也很好 :)
很棒的文章。 这里有很多有趣的想法组合在一起。
我觉得 Maggie Costello 和 David Bushell 的解决方案在可用性方面是最强的。 在不影响界面设计的情况下,立即提供最重要/相关的数据似乎是在这种情况下获胜的方法。
我真的很欣赏这里将图像与描述相结合的方式。 这使得非常容易理解和掌握文章中提出的概念。
这是一个很酷的 CSS 技巧! 但是我想知道,为什么您使用基于静态网站(Html/Css)的方式来显示动态信息? 有其他 Web 应用程序(例如 CMS)可以通过一些简单的 PHP 代码生成动态报表信息。 考虑一下花费在设置表格样式和输入不断变化的数据上的时间; 因此有了“动态”这个词。
我投票给 David Bushell 的想法。 我认为这是我见过的最好的选择。
很棒的技巧。 祝贺您的网站,我喜欢它!
+1 给 David Bushell 的想法。 根据哪个更长,将列切换为行。
你也可以添加以下代码,为iOS 5用户提供滚动条。
overflow: scroll;
-webkit-overflow-scrolling: touch;
我知道每个表格根据你的数据及其显示目的都会有所不同……但总的来说,David Bushell的解决方案非常棒!在iPhone上的体验非常完美。
感谢您提供这些有益的示例!!!太棒了
太棒了,直到今天我才知道很多关于这些响应式表格的事情……再次感谢!
很棒的总结。我真的很喜欢漂亮的表格!;)
这个直接加到我的书签里了。现在如果我还能找到一个项目来实现它就好了。每个页面元素都需要能够响应,而无需使用js
超级技巧!祝贺你的网站=)
为什么人们祝贺你的网站?我错过了什么吗?
很棒的教程,设计也很棒
非常好的总结,我会收藏起来。响应式网页设计是现在构建新网站的唯一方法,但处理像这样的现实世界问题是我们所有人都在逐渐适应的事情。创建响应式的作品集网站很容易,但创建复杂的数据驱动的东西则是另一回事,大型网站上不同元素的众多不同布局是一段时间内会让我头疼的事情。很棒的东西,谢谢。
我通过jQuery将所有表格选择器替换为DIV,解决了IE显示块的问题。我使用了你的CSS,我认为这是一个很好的解决方案。
http://www.useyourfred.com/2012/01/js-in-my-sexy-responsive-data-tables/
希望这有帮助!
我尝试过你的想法,但在我的网站上显示非常少……呼呼……看看http://lintas5.com/
+1 给David Bushel的解决方案。看起来很完美。
同意David Bushel的解决方案。它太棒了。迫不及待想尝试一下。
我还没有看到的一个版本是组织一个比较表,其标准在第一列而不是标题中,并且按列而不是按行读取数据。
你好,
我喜欢这里整个总结,它表明我们正在走向一个明确的解决方案。我想看到的是你的最初想法,而不是垂直滚动查看所有数据,而是使用css3和:target创建选项卡,每个选项卡都是一个行集的出现。你得到了什么?带有选项卡[1] [2] [3]……其余数据的单个数据视图。
我真的不知道这是否可行,也许值得一试。有谁愿意尝试吗?
哇!这就是我需要的。它有WP插件吗?
毫无疑问,这是响应式主题平滑集成的问题。表格数据是真实数据,在许多网站上都很普遍,我希望能找到一种方法让它在移动视口中工作。
如果我们可以以某种方式将它视为多窗格元素并在窗格之间滚动,就像使用jQuery Tools Scrollable插件那样,这对针对智能手机来说会很好。
嘿,Chris
一直喜欢你的帖子。
仅供参考 - 我在iOS 5.0.1/移动Safari上遇到了响应式表格方法的问题。当表格大约有40行时,Safari会直接关闭。
Android 2.x 运行良好。
我进行了一些毫无结果的尝试,以为它与脚本相关,但最终将其追溯到thead tr absolute with top/left -9999px。将其删除并设置为display:none,问题就解决了。
将其设置为display:none将使其对屏幕阅读器隐藏。
有不同的技术可以在视觉上隐藏元素,同时确保它们在所有设备上都可访问。
使用Chris的技术,Safari的性能可能会因视口而下降。在您编写本文时,Safari严重依赖于使用绝对定位的元素。尝试使用较小的百分比定位移动设备。尝试-100em(停止使用像素!这不是2003年)看看性能是否有所提高。
你好..
只是想让你注意另一种有趣的方法……(虽然不是纯CSS)
http://filamentgroup.com/lab/responsive_design_approach_for_complex_multicolumn_data_tables/
这是一篇非常棒的文章!!!感谢发布!
Zurb 的实现特别适合平板电脑和小桌面分辨率。但是,他们的代码没有优化。他们在 jQuery 中查询两个伪选择器。这是一个大忌。(没有冒犯,各位)。
我对 jQuery 有点生疏,但我可以通过限制其中一个伪选择器以本机 JS 呈现来加快代码速度
而不是
copy.find('td:not(:first-child), th:not(:first-child)').css('display', 'none').addClass('hidden visuallyhidden');
这样做
copy.find('td, th').not(':first-child').css('display','none').addClass('hidden visuallyhidden');
再说一次,我对 jQuery 有点生疏,但你想要/需要的是类似 $var.find('td,th').not().first()…… 或 first().not()…… 无论如何……
其他人可能会插话。
根据经验,在 jQuery 中使用伪选择器很方便,但你的里程数会大幅下降。
我爱这篇文章!我认为这个领域需要大量研究,例如,能够打开其他表格列的想法是一个好主意,但我希望为任何有时间扩展它的人提供一个演示(仅供概念验证)。它使用你的表格列悬停概念,并且适用于现代智能手机(以4s为基线)、iPad和PC。
http://codepen.io/Lewiscowles1986/full/iLdDx
不好的地方是
使用固定定位
需要额外的控制逻辑来防止显示/可用性错误/问题
在小型设备上看起来很大
优点
所有数据随时可用,无论其形式因素如何
使用垂直导航与水平方面
允许基本/主列
主要是CSS(在PoC中只有不到25行的jQuery)
没有使用!important,因此您可以强制执行自己的视图
支持常见的表格元素,例如可切换的条带、行和列级别的悬停效果以及标题(页脚很容易实现)
好的帖子!很多聪明的想法。不过,我觉得缺少简单的、务实的解决方案。
阅读后,我将此拼凑在一起
http://jonathanstark.com/labs/double-zebra-responsive-tables/
不到20行CSS
不需要javascript
干杯!
jonathanstark
很有趣,但在IE9中不起作用。真正的响应式设计应该向后兼容,并且在移动设备上也能很好地工作。但我确实喜欢水平滚动,就像下面Kelly Cook的示例一样。(即使在兼容模式下,Kelly,IE9也能正常工作!做得好!)我认为你的和Kelly的结合,以及Maggie允许用户打开和关闭列的概念,以便用户可以专注于他们当时需要的确切数据,可能是最好的方法。现在我们只需要找到一个可以合并这些技术的并且可访问的示例,我认为我们将拥有一个真正的赢家。
感谢这篇文章。在尝试了所有提出的解决方案后,我仍然对结果不满意。我决定创建我最喜欢的上述解决方案部分的混合,并提出了以下内容:http://kellycook.github.io/responsive-tables/。
它使用了你的原始解决方案,但没有使用CSS显示伪表格标题,而是使用了Mobifreak的data-label概念。然后我在表格周围添加了一个包装器并为其提供了overflow: auto,以便lte IE9浏览器获得水平滚动。再次感谢!!
这触及到我寻求关于“设备无关”网页方法答案的核心:如何在满足最大比例用户需求的同时,回答设计和可用性方面的问题?我想每个项目的验证都能让开发人员和设计师做出明智的决策,但我们并不总是拥有这种奢侈。其他人是如何在这些选项之间做出选择的呢?
制作一个可以在所有设备上查看的响应式表格非常困难,无论这个教程是否可以用于博客模板,因为我使用的是博客的标准模板。
http://joshnh.com/weblog/getting-responsive-tables-to-behave/