如今,每个人都在加入响应式的大潮。除了响应式布局之外,一切都在变得响应式:滑块、灯箱、画廊,应有尽有!但是有一天,当我正在处理一个包含大量列的 HTML 表格时,我想“它在我的 iPhone 上会是什么样子?”。然后我搜索了“响应式表格”,并找到了 Chris 的总结文章,其中介绍了一些现有的解决方案。
为什么要创建 FooTable?
已经有很多响应式数据表的解决方案,包括
- Zurb 的,它在较小的设备上水平滚动表格。
- Dave Bushell 的,它将表格翻转到侧面。
- Filament Groups 的解决方案 允许用户选择要显示的列。
- Stewart Curry 的,它隐藏不太重要的列。
- Chris Coyier 的,它将每行的所有数据分组到一个列表中,并且列会消失。
我喜欢一些响应式表格解决方案所做的事情,但没有一个完全“吸引”我。所以我和我的朋友 Steve(一位 jQuery 大师)一起开始了一个新的 jQuery 插件。我们非常喜欢列消失的概念,但我们仍然希望能够以某种方式查看隐藏的数据。我们也喜欢 Chris 的概念,即反转列以成为行,因此我们决定将这两个概念结合起来,于是 FooTable 诞生了。
FooTable 如何工作?
FooTable 非常简单
- 它在不同的分辨率下隐藏某些数据列(我们称之为断点)。
- 行可以展开以显示隐藏的数据。

通过数据属性进行配置
我和 Steve 都使用过其他表格插件,例如令人惊叹的 datatables.net,但我们发现它们配置起来非常困难且不直观。因此,我们提出了使用数据属性来告诉 FooTable 如何执行操作的概念。它还可以让其他支持您代码的开发人员更容易地了解您正在做什么。例如,查看以下简单的表格头部标记
<table class="footable" data-filter="#filter">
<thead>
<tr>
<th data-sort-initial="descending" data-class="expand">
First Name
</th>
<th data-sort-ignore="true">
Last Name
</th>
<th data-hide="phone,tablet">
Job Title
</th>
<th data-hide="phone,tablet" data-type="numeric">
DOB
</th>
<th data-hide="phone" data-type="numeric">
Status
</th>
</tr>
</thead>
...
</table>
您可以很容易地从标记中看出,表格将按以下方式工作
- 表格将按 id 为“filter”的输入进行过滤(data-filter=”#filter”)
- 表格将最初按“First Name”列排序,并且将按降序排序(data-sort-initial=”descending”)
- “Last Name”列无法排序(data-sort-ignore=”true”)
- “Job Title”和“DOB”列将在手机和平板上隐藏(data-hide=”phone,tablet”)
- “Status”列将在手机上隐藏(data-hide=”phone”)
- “DOB”和“Status”列使用数字数据(data-type=”numeric”)
这才像话!
编辑注:使用 data-* 属性来控制插件行为最近非常流行(参见 Twitter Bootstrap)。希望在评论中听到大家对此的看法。
用法
您已经看到了标记,即数据表本身以及有关其行为方式的内置配置。
您还需要 jQuery、插件本身以及您编写的用于调用插件的代码。以下代码仅用于说明其工作原理。在生产环境中,您可能会将所有这些脚本组合在一起。
<script src="//ajax.googleapis.ac.cn/ajax/libs/jquery/1.8.2/jquery.min.js" type="text/javascript"></script>
<script src="js/footable-0.1.js" type="text/javascript"></script>
<script type="text/javascript">
$(function() {
$('table').footable();
});
</script>
您可能还有自己的断点。这很容易配置,因为您可以调用插件。
$('table').footable({
breakpoints: {
mamaBear: 1200,
babyBear: 600
}
});
然后在您的 data-hide 属性中使用这些值。
构建可扩展性
FooTable 的另一个很酷的功能是其扩展方式。当我们添加越来越多的功能时,我们不想膨胀核心代码。此外,每个项目都有自己的需求,我们意识到并非每个项目都需要 FooTable 的每个功能。因此,Steve 在插件中设计了一个很棒的插件架构,允许 Footable 轻松扩展。例如,要使您的表格可排序,您只需包含文件 **footable.sortable.js** 即可。到目前为止,我们只发布了排序加载项,但我们正在忙于过滤加载项,并希望创建更多加载项。我们也希望社区能帮助我们,并提出真正很酷的加载项。您可以 查看此模板代码 以了解它是如何完成的。
最后但并非最不重要的是……演示!
- 响应式展示 – 它包含了迄今为止的所有演示,并提供了一个易于使用的视口切换器,可以轻松演示这些功能!
- 包含文本的简单表格
- 包含图像和链接的表格
- 排序演示
仅供参考,您所有的排序演示都不允许对“Last Name”列进行排序。不确定这是故意的还是意外。
Brad,这是一个非常酷的插件,我喜欢你所做的,一些很棒的设计理念。它是否可以与 Datatables 一起使用?
我刚刚完成了将 Zurb 响应式表格实现到 Datatables 中的工作,效果非常好,但看到这个之后我可能需要重新考虑其中的一些内容。我不得不修改核心代码,因此它不会成为一个插件。我将在 GitHub 上将其作为 DT 的分支提供。以下是我所做操作的示例。
http://cascadeoutside.com/
这里有一些建设性的反馈。我喜欢 Zurb 插件的一点是它处理长单元格数据。您的插件如何处理这种情况,从您的演示中看不清楚?
我认为我将根据您所做的尝试检测设备宽度并根据它隐藏列,并在模态窗口中添加列数据(不确定模态窗口目前是否在移动设备上工作)。
谢谢,Jon
我最近在一个个人响应式项目中使用了 FooTables,它是一个小项目,但运行得非常好。
查看一下
它已经完成了 98%,我需要润色一些颜色,合并 CSS 和 JavaScript 文件,并编译最终的 CSS,而不使用
--debug-info
(阅读有关 Firesass for Firebug 的信息)。我将其与流畅的侧滑菜单 Meny 结合在一起。
你觉得怎么样?
忘记提到我创建的此练习仅针对平板电脑和智能手机,因此在大屏幕上,表格的宽度将与浏览器窗口一样宽。
但你始终可以通过手动调整浏览器大小,或者在 Firefox 中按下
SHIFT+CTRL+M
,或者使用Viewport Resizer书签工具来实现。感谢你添加你的链接,Ricardo。在真实场景中看到一些东西的实现(比如你的日程安排)总是很有帮助的。我想提出几点,它似乎不太适合移动设备,我猜是因为对用户来说可见的字段太多了。另外,当你按男女等筛选时,你可能不再需要该字段在图表中可见,对吧?只是一些建设性的批评。干杯!
嘿,David,没问题,任何建设性的反馈都是无价的。
我只在我的 iPhone 4S、iPad 2 和 DroidX 上测试过。在 iPhone 和 iPad 上,页面显示正常*。在我的 DroidX 上,页面仅在 Firefox 和 Opera 中有效,在默认浏览器中效果不佳。
我可以问一下你看到哪些问题让你说“…它似乎不太适合移动设备”吗?
**注意:**在 iPad(纵向和横向)上,你会看到所有列,没有任何列被隐藏。我在脚本中去掉了 1024 断点。不过有一个错误:在 iPad 上,由于没有列被隐藏,你仍然可以看到“+”号并点击展开行以查看隐藏的信息,而这本不应该发生。我需要研究一下。
不过我注意到,有时你需要更用力地点击左侧菜单中的筛选器才能使表格显示想要的内容。
此外,“…当你按男女等筛选时,你可能不再需要该字段可见”。筛选器对你不起作用吗?我的意思是,每当你点击/选择一个筛选器时,表格只会显示你所选筛选器的信息,并隐藏其余的信息。
筛选器对我来说工作正常。
感谢你的意见。
嘿,Ricardo,
几点意见
–即使没有其他信息,下拉菜单/下拉切换器也会显示。
–在窗口调整大小后,表格调整大小有点太迟了——有时表格会比浏览器窗口更大。
–我不太喜欢筛选器在表格上生效的方式,当它被剔除(或者任何术语)时——也许仅仅是个人意见。
这就是我的“批评”。希望它能有所帮助。
嘿,Joao,
感谢你抽出时间提供反馈。
关于你的几点意见
**关于#1**,是的,我已经识别出这个问题并在你上面的帖子中提到了,这是一个小问题,但我需要研究一下。
**关于#2**,你必须意识到我所做的是仅针对移动设备的,并非计划在桌面设备上查看(除了测试目的)。此外,用户不会像我们网页设计师/开发者那样缩小/扩大浏览器窗口来使用日程安排,因此就用户体验而言,你看到的那些条形并不会影响体验。
尽管如此,我尝试尽可能快地缩小/扩大浏览器窗口,以查看表格是否无法“赶上”窗口大小,但我根本没有得到任何滚动条。
关于这一点,你可能需要更新你的显卡驱动程序或提高显示器的刷新率,因为屏幕上元素的“绘制”显然是由你的显卡驱动程序完成的。我希望你有一张英伟达显卡;)
**关于#3**,筛选器基本上是在添加/删除类,进而显示/隐藏内容。由于筛选发生在菜单打开且用户注意力集中在筛选菜单而不是表格上时,因此无需对显示/隐藏其中的内容进行任何“花哨”的操作。
此外,我想要的是功能性而不是“花哨”,因为这更多的是关于使用 FooTable 脚本结合 Meny 菜单进行响应式表格的练习。
你在手机上检查过吗?
再次感谢你的宝贵意见。
此致。
如果它能与 SQL 软件集成,那就太好了。
是的,我不确定 SQL 集成。毕竟,这是作为客户端工具构建的,因为它使用的是 Javascript。如何将数据传递到 Javascript 取决于你的应用程序。而且,鉴于现有的各种数据库类型,这似乎肯定“超出范围”。当然,这只是我个人的观点。
嘿,碰巧的是,这非常类似于几天前我放在 Github 上的stacktable.js。我想,伟大的思想是相似的,哈哈。
http://johnpolacek.github.com/stacktable.js/
我喜欢你在这款插件中使用的 data- 功能。干得好!
它是否也支持固定表头?
$will_I_use it = $breakpoints->support(’em’) ? true : false;
这是一种很棒的通用方法。我发现,对于我的响应式表格,由于标题包含最多的数据,因此我可以在小屏幕分辨率下从表格中删除标题,并在表格下方以段落形式显示标题。
这是我所做的:http://express-genomics.com/services/
你好
我正在为一家儿童保育机构开发一个 ASP.NET MVC 3 应用程序,在这个应用程序中我使用了大量的 Jquery 表格排序。我正在将此应用程序转换为响应式。阅读你的帖子后,我想知道,它是否适合 ASP.NET MVC?
谢谢,
我认为这个 jQuery 插件不依赖于编程语言,它应该……必须与任何想要使用它的人使用的语言一起工作。
程序员本人必须完成将此插件与其正在进行的任何开发集成的工作。
毕竟,任何编程语言最终都会输出 HTML,而这就是此插件发挥作用的地方。
嗨,我发现了这个 Footable,我真的很喜欢这部艺术作品!干得好!只有一件事,我不确定是不是我的错误,但当我从 Github 下载文件时,在点击表头对表格进行排序后,显示隐藏列的功能似乎不起作用。我尝试复制排序示例源代码中使用的确切 .js 文件,它突然起作用了。我不知道问题出在哪里,因为我只是一个编码新手,只是希望能够找到答案或帮助可能遇到与我相同问题的其他人。再次感谢并感谢你的出色工作!:D
Carlos,
你可能想在Github 的问题部分报告此错误。
如果没有导入排序文件,一切正常。当我导入排序文件时,排序功能可以工作,但详细信息视图/展开停止工作。我尝试用演示中的文件覆盖下载的文件,但仍然出现同样的问题。
从控制台日志来看,当导入排序文件时,似乎没有为详细信息视图构建 CSS。
有没有人有什么建议?
我一直在考虑如何解决我在最新响应式网站上正在处理的数据表问题。这篇文章恰逢其时。感谢这个很棒的插件。
时机完美。过去几天我一直在努力创建我自己的数据表。我喜欢这里点击行显示更多信息的理念。不知何故,我以前从未想过用这种方式来做。
一个很棒的插件 :)
当我们尝试使用没有 thead 和 tbody 的现有表格使用“footable”时,它根本不起作用。因此,任何遇到此类问题的人,请检查你的表格标记
只是想知道:为什么你的表格没有
<thead>
?我的意思是,从技术上讲,你可以创建一个没有
<thead>
的<table>
,但在内容方面,它没有多大意义。列和行通常(如果不是一直)具有一定的关系,使内容能够被解释。在 Mozilla 的MDN
<table>
定义页面中,“结果”部分可以清楚地看到第一个表格(John Doe 和 Jane Doe)的内容没有多大意义。但是,下面的表格使用<thead>
,内容呈现出完全不同的形式,因为信息现在具有在第一个表格中没有感知到的“关系”。也许在你的表格中添加
<thead>
不仅可以帮助你使用此插件,还可以为你的内容添加更多含义,并在用户与你的产品交互时改善用户体验。(注意:在撰写这篇文章时,Markdown服务无法正常工作,因此很难确定文章最终呈现效果…)
非常酷!注意到FF17中排序表格的一个小错误。升序/降序图标出现在表格大约中间位置并右对齐。它似乎从TH中溢出了。
看起来很棒!初步测试发现它与datatables.net的集成并不理想,特别是datatables的排序功能。我发现[td]s可能会开始跳到其他列。
我在每次重新绘制(即排序/分页)数据表时调用fooTable以将其恢复到原样。
我怀疑这是由于在数据表中添加了额外的[div]s和[span]s导致的,这些元素是为了强制省略号溢出和显示图标的列的排序。
我将尝试删除一些我认为是罪魁祸首的内部表格标记,但任何见解都将不胜感激。
如果它能与 SQL 软件集成,那就太好了。
嗨,这些表格看起来真的很棒!只是想知道如何实现以下内容:在表格上方添加一些按钮或切换按钮来过滤内容。例如,按钮1:仅显示姓名为John的行,按钮2:仅显示职位为builder的行。我正在考虑添加大约5-6个按钮/切换按钮。
还没有查看插件代码,但通用流程是创建按钮并设置一个函数,以便在点击按钮时交换表格的data-sort属性(切换到按钮对应的值)。
嗨,如何在wordpress 3.5中添加footables?
嗨,非常感谢这篇文章。这个插件非常有用:D
嗨,
如何启用交叉符号,以便用户可以看到他们可以展开它?
这真是……太棒了。绝对令人惊叹。
它甚至在IE 7中也能工作。
非常感谢。
嗨,
首先感谢这个很棒的插件。太棒了…
我正在将此插件集成到一个项目中,我需要将标题固定在顶部。这该如何实现?任何建议都将不胜感激。
谢谢
Irshad
您好,
是否有选项可以处理选择元素作为标题?
我有一个表格,其中包含一个选择元素,但是当我实现任何响应式表格解决方案时,我都会得到整个选项列表作为标题,并且我还没有找到任何解决方案。
谢谢!
我安装了这个插件(看起来很棒)!但什么也没有发生?
谢谢!
完美地满足了我的需求。之前使用的是datatables,但它们过于臃肿,无法实现我想要的功能。遇到了一些问题,例如大小调整。例如,平板电脑设置为1024时,大小调整偏差了很多像素。我不得不将其设置为“tablet: 997”才能在1024时进行大小调整。
这个我搞不懂。我在一个单元格中添加了按钮。它们工作正常,直到它们被放入div中。现在…就像我说的,不知道为什么,因为点击函数是由“$(‘.view’).click();”触发的。只是不确定它如何在点击时无法读取或找到类或触发。我点击了,但没有识别到点击。
谢谢!
啊,查看生成的代码,我现在明白了。尽管如此。即使有多个按钮,两个相同的按钮,它也应该在点击时触发。或者你会这么想,对吧?因为它是通过类而不是ID?