
HTML结构如下:
<table id="miyazaki">
<caption>The Films of Miyazaki</caption>
<thead>
<tr><th>Film<th>Year<th>Honor
<tbody>
<tr>
<td data-th="Film">My Neighbor Totoro
<td data-th="Year">1988
<td data-th="Honor">Blue Ribbon Award (Special)
<tr>
<td data-th="Film">Princess Mononoke
<td data-th="Year">1997
<td data-th="Honor">Nebula Award (Best Script)
<tr>
<td data-th="Film">Spirited Away
<td data-th="Year">2001
<td data-th="Honor">Academy Award (Best Animated Feature)
<tr>
<td data-th="Film">Howl’s Moving Castle
<td data-th="Year">2004
<td data-th="Honor">Hollywood Film Festival (Animation OTY)
</table>
注意代码中的data属性,每一个单元格的data属性都与表格的header相对应。
CSS样式
表格基本的CSS样式如下:
table#miyazaki caption {
font-size: 2remcolor: #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-Lightfont-weight: 100
background: #333color: #fff
text-rendering: optimizeLegibility
border-radius: 5px
}
table#miyazaki thead th { font-weight: 600}
table#miyazaki thead th, table#miyazaki tbody td {
padding: .8remfont-size: 1.4rem
}
table#miyazaki tbody td {
padding: .8remfont-size: 1.4rem
color: #444background: #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: blockpadding: .6rem}
table#miyazaki tbody tr td:first-child { background: #333color: #fff}
table#miyazaki tbody td:before {
content: attr(data-th)font-weight: bold
display: inline-blockwidth: 6rem
}
}
media query代码中隐藏表格的头部单元,并且将每一个单元格的data-th作为标签显示在单元格内容的前面。每一行的第一个单元格都设置了特别的背景色和前景色,使之更为清晰。
扩展
你现在可以缩放浏览器来看看效果,非常不错。但是上面的代码是不可扩展的:要添加一个新行必须手动为每个单元格添加一个data-th属性。要想做到自动化,可以在服务器端实现,如PHP。也可以通过javascript来实现它。
首先,将整个表格都进行简化:
<table id="miyazaki">
<caption>The Films of Hayao Miyazaki</caption>
<thead>
<tr><th>Film<th>Year<th>Honor
<tbody>
<tr>
<td>My Neighbor Totoro
<td>1988
<td>Blue Ribbon Award (Special)
<tr>
<td>Princess Mononoke
<td>1997
<td>Nebula Award (Best Script)
<tr>
<td>Spirited Away
<td>2001
<td>Academy Award (Best Animated Feature)
<tr>
<td>Howl’s Moving Castle
<td>2004
<td>Hollywood Film Festival (Animation OTY)
</table>
然后在文档的底部添加下面的javascript代码:
<script>
var headertext = []
var headers = document.querySelectorAll("#miyazaki th"),
tablerows = document.querySelectorAll("#miyazaki th"),
tablebody = document.querySelector("#miyazaki tbody")
for(var i = 0i <headers.lengthi++) {
var current = headers[i]
headertext.push( current.textContent.replace( /\r?\n|\r/,"") )
}
for (var i = 0, rowrow = tablebody.rows[i]i++) {
for (var j = 0, colcol = row.cells[j]j++) {
col.setAttribute("data-th", headertext[j])
} }
</script>
上面的代码的意思是:获取每一个<th>中的文本内容,然后分别剔除它们的回车和换行符。然后将这些文本分别添加到适当的单元格的data属性上,添加的规则与CSS样式的规则相一致。(使用setAttribute要比dataset要好,后者只有在IE 11中得到支持。)
给你写了个简单的课程表样式的表格看一下
<style type="text/css">
table { border-collapse:collapsetext-align:centervertical-align:middle}
table tr{ height:25px}
table td{ width:100px}
.bg1{ background:#ccc}
table tr:hover{ background:#09C}
.bg2{ background:#999}
.t1,.t2,.t3,.t4,.b1,.b2,.b3,.b4,.tab{ display:blockoverflow:hidden}
.t1,.t2,.t3,.b1,.b2,.b3{ height:1px}
.t2,.t3,.t4,.b2,.b3,.b4,.tab{ border-left:2px solid #f6fborder-right:2px solid #f6f}
.t1,.b1{ margin:0 5pxbackground: #F6F}
.t2,.b2{ margin:0 3pxborder-width:2px}
.t3,.b3{ margin:0 2px}
.t4,.b4{ height:2pxmargin:0 1px}
.tab{ height:130pxbackground:#F7F8F9}
.tab_width{ width:700pxmargin:0 autocursor:pointer}
</style>
<div class="tab_width">
<b class="t1"></b><b class="t2"></b><b class="t3"></b><b class="t4"></b>
<div class="tab">
<table>
<tr>
<td>星期一</td>
<td>星期二</td>
<td>星期三</td>
<td>星期四</td>
<td>星期五</td>
<td>星期六</td>
<td>星期日</td>
</tr>
<tr class="bg1">
<td>国学</td>
<td>数学</td>
<td>英语</td>
<td>多媒体</td>
<td>体育</td>
<td>毛概</td>
<td>实验</td>
</tr>
<tr class="bg2">
<td>国学</td>
<td>数学</td>
<td>英语</td>
<td>多媒体</td>
<td>体育</td>
<td>毛概</td>
<td>实验</td>
</tr>
<tr class="bg1">
<td>国学</td>
<td>数学</td>
<td>英语</td>
<td>多媒体</td>
<td>体育</td>
<td>毛概</td>
<td>实验</td>
</tr>
<tr class="bg2">
<td>国学</td>
<td>数学</td>
<td>英语</td>
<td>多媒体</td>
<td>体育</td>
<td>毛概</td>
<td>实验</td>
</tr>
</table>
</div>
<b class="b4"></b><b class="b3"></b><b class="b2"></b><b class="b1"></b>
</div>
提问者评价
谢谢了···
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)