在线表格 设计 html5,如何制作一个响应式的HTML5表格

前段时间在网上看到了一个老外写的一个HTML5响应式表格效果,它的CSS代码用SASS写的,有许多重复的data属性。我们这里改进一下他的代码,解决一下他写的不好的地方。要看到本例的响应式表格效果,浏览器要缩放到小于600像素的大小。HTML结构如下:

FilmYearHonor

My Neighbor Totoro1988Blue Ribbon Award (Special)Princess Mononoke1997Nebula Award (Best Script)Spirited Away2001Academy Award (Best Animated Feature)Howl’s Moving Castle2004Hollywood Film Festival (Animation OTY)

注意代码中的data属性,每一个单元格的data属性都与表格的header相对应。

CSS样式

表格基本的CSS样式如下:

table#miyazaki caption {

font-size: 2rem; color: #444;

margin: 1rem;

background-image: url(miyazaki.png), url(miyazaki2.png);

background-size: contain;

background-repeat: no-repeat;

background-position: center left, center right;

}

table#miyazaki {

border-collapse: collapse;

font-family: Agenda-Light; font-weight: 100;

background: #333; color: #fff;

text-rendering: optimizeLegibility;

border-radius: 5px;

}

table#miyazaki thead th { font-weight: 600; }

table#miyazaki thead th, table#miyazaki tbody td {

padding: .8rem; font-size: 1.4rem;

}

table#miyazaki tbody td {

padding: .8rem; font-size: 1.4rem;

color: #444; background: #eee;

}

table#miyazaki tbody tr:not(:last-child) {

border-top: 1px solid #ddd;

border-bottom: 1px solid #ddd;

}

下面是响应式表格的CSS代码:

@media screen and (max-width: 600px) {

table#miyazaki caption { background-image: none; }

table#miyazaki thead { display: none; }

table#miyazaki tbody td { display: block; padding: .6rem; }

table#miyazaki tbody tr td:first-child { background: #333; color: #fff; }

table#miyazaki tbody td:before {

content: attr(data-th); font-weight: bold;

display: inline-block; width: 6rem;

}

}

media query代码中隐藏表格的头部单元,并且将每一个单元格的data-th作为标签显示在单元格内容的前面。每一行的第一个单元格都设置了特别的背景色和前景色,使之更为清晰。

扩展

你现在可以缩放浏览器来看看效果,非常不错。但是上面的代码是不可扩展的:要添加一个新行必须手动为每个单元格添加一个data-th属性。要想做到自动化,可以在服务器端实现,如PHP。也可以通过javascript来实现它。

首先,将整个表格都进行简化:

FilmYearHonor

My Neighbor Totoro1988Blue Ribbon Award (Special)Princess Mononoke1997Nebula Award (Best Script)Spirited Away2001Academy Award (Best Animated Feature)Howl’s Moving Castle2004Hollywood Film Festival (Animation OTY)

然后在文档的底部添加下面的javascript代码:

var headertext = [];

var headers = document.querySelectorAll("#miyazaki th"),

tablerows = document.querySelectorAll("#miyazaki th"),

tablebody = document.querySelector("#miyazaki tbody");

for(var i = 0; i < headers.length; i++) {

var current = headers[i];

headertext.push( current.textContent.replace( /\r?\n|\r/,"") );

}

for (var i = 0, row; row = tablebody.rows[i]; i++) {

for (var j = 0, col; col = row.cells[j]; j++) {

col.setAttribute("data-th", headertext[j]);

} }

上面的代码的意思是:获取每一个

中的文本内容,然后分别剔除它们的回车和换行符。然后将这些文本分别添加到适当的单元格的data属性上,添加的规则与CSS样式的规则相一致。(使用setAttribute要比dataset要好,后者只有在IE 11中得到支持。)

到此,这个HTML5响应式表格就完成了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值