在现在 div 大行其道的时代,table 这个标签似乎很少被人提及,到处都是 div+css 布局的书以及博客文章,但其实 table 以及连带的其他表格标签依然在的网页排版中占很重要的地位,特别是后台展示数据的时候表格运用是否熟练就显得很重要,一个清爽简约的表格布局能够把繁杂的数据表现得很有条理,虽然 div 布局也可以做到,但是总没有表格来得方便。平时也经常接触到表格,现在总结一下表格的一些属性和样式,以及学习构思一些表格的样式,以便以后不时之需。
一、标签
元素定义表头
|
元素定义表格单元
二、表格标签及标签属性 (1)
CSS:
1 table{2 width: 300px;3 border:1px solid #000;4 }5 table td,table th{6 border:1px solid #000;7 } 没有显式加 table-layout 这个属性时是默认为 automatic 值,此时由于 testinglongstring 内容比较长,表格自动调整列的宽度,效果如下:
table 标签加了 table-layout:fixed 属性后,浏览器直接渲染表结构(相当于显示没有内容的表),太长的内容会覆盖到其他表格,效果如下:
--------------------------------------------------------------吃完栗子--------------------------------------------------------------
而往往我们希望既保持我们要的列宽度,同时确保内容不会这样覆盖到其他表格单元单元(针对英文)。这里就要涉及到另外两个 css 属性了: 1、word-wrap:normal(default)| break-word(只在允许的断字点换行 | 在长单词或 URL 地址内部进行换行) 这里主要用到 break-word 属性值。 2、work-break:normal(defaut)| break-all | keep-all(默认的换行规则 | 允许在单词内换行 | 只能在半角空格或连字符处换行) 这里主要用到 break-all 属性值。 用到的两个 css 属性的属性值作用类似,但有些区别,break-word 只有在单个单词都超过外围宽度的时候才会断单词;break-all 则是把每个行填满,然后行尾不管是单词还是空格都断为下一行,个人优选 word-wrap 属性,可以减少断单词的几率,毕竟不得已才断单词,断了后会影响单词内容表达。具体辨析可以看 《 你真的了解word-wrap和word-break的区别吗?》讲得比较详细。
--------------------------------------------------------------举个栗子-------------------------------------------------------------- 沿用上例的 HTML 结构,举 word-wrap 属性的例子: CSS:
1 table { 2 width: 300px; 3 border: 1px solid #000; 4 table-layout: fixed; 5 word-wrap:break-word; 6 } 7 table td, 8 table th { 9 border: 1px solid #000;10 }11 .odd{12 width: 120px;13 } 表现如下:
--------------------------------------------------------------吃完栗子--------------------------------------------------------------
(2)、 、align:属性规定内容的水平对齐方式,用 css 属性 text-align 代替。 valign:( top|middle|bottom|baseline ),规定 tbody 元素中内容的垂直对齐方式,默认是 middle。相当于 css 的 vertical-align 属性,这里 bottom 和 baseline 在 w3shcool 上还有一些 辨析,不过只是对于不同字号的英文内容来说有点用处。 还有 char,charoff 属性几乎是用不到的,所以不列举了。 注意 : 1、、 标签内部必须拥有 2、 标签不管放在 3、、 4、设置 和 (3)tr align,valign:同(2) (4)td,th abbr:规定单元格中内容的缩写版本。不会在普通的 web 浏览器中造成任何视觉效果方面的变化。屏幕阅读器可以利用该属性。 headers:规定表头与单元格相关联。不会在普通浏览器中产生任何视觉变化。屏幕阅读器可以利用该属性。 scope:定义将表头单元与数据单元相关联的方法。不会在普通浏览器中产生任何视觉变化。屏幕阅读器可以利用该属性。 align,valign:同(2)。需要留意的是 th 默认是居中属性的,而且 th 内的字体是加粗的。 nowrap:规定表格单元格中的内容不换行。用 white-space: nowrap 代替 colspan:规定单元格可横跨的列数。比较常用,相当于 word 中的合并横向的单元格。 rowspan:规定单元格可横跨的行数。比较常用,相当于 word 中的合并垂直方向的单元格。 (5)caption align:(top | bottom | left | right ),规定 caption 元素的对齐方式,默认居中。 align 的浏览器支持并不好,只有 top 和 bottom 属性值支持是统一的,left 和 right 在不同浏览器中的表现也不一样,所以这两个属性值当然不用,而 css 属性 caption-side 刚好就只有 top 和 bottom,故完全可以用 css 属性 caption-side 代替 align。至于要实现 left 和 right 的效果,给 caption 加 margin 属性或者 padding 属性或者用其他标签实现都不难 。 c ss 属性 caption-side:top | bottom | inherit(表格标题定位在表格之上 | 表格标题定位在表格之下 | 继承父属性) (6)col,colgroup 能够用的属性主要是以下三个: span:规定列组应该横跨的列数。默认一列,即对表格的一列设置样式。 width:col 元素的宽度。 background:设置背景色,要通过 css 样式来设置。 说到列,要重新提一下前面的 table-layout 属性,下面举例子说明 col 对这个属性的影响。 --------------------------------------------------------------举个栗子-------------------------------------------------------------- HTML: CSS: 设置 120px 的列宽度后,中间列(.even)的宽度不够,但是浏览器会帮你计算并为中间内容空出足够宽度: 设置了 table-layout 属性的 fixed 值后就完全按照自己的意思来渲染了: --------------------------------------------------------------吃完栗子-------------------------------------------------------------- (7)border-collapse | border-spacing | empty-cells 这几个 css 属性,基本只会用在表格上。 border-collapse:separate(defaul)| collapse | inherit (边框会被分开 | 边框会合并为一个单一的边框 | 继承父属性) border-spacing:length length(定义一个 length 参数,那么定义的是水平和垂直间距。定义两个 length 参数,那么第一个设置水平间距,而第二个设置垂直间距) empty-cells:show(defaul)| hide | inherit (在空单元格周围绘制边框 | 不绘制 | 继承父属性) 注意: border-spacing 和 empty-cells 属性只有在 border-collapse 为 separate 是才有效的。 --------------------------------------------------------------举个栗子-------------------------------------------------------------- HTML: CSS: 表现如下: --------------------------------------------------------------吃完栗子-------------------------------------------------------------- 三、表格 css 样式 (1)单线边框 HTML: (方法一) CSS: (方法二)CSS: 效果如下: (2)列和行的高亮 在复杂的多行多列的表格中,鼠标停留的行或列高亮能够带来更优的体验,下面讲讲这方面的应用。 1、行的高亮 行的高亮实现比较简单,可以使用 css 的 :hover 伪类实现,即 tr:hover 即可实现,后面的表格例子会出现。 2、列的高亮 列的高亮用 css 似乎没有什么实现的方法,故还是用 JavaScript 实现。 <1>原生 JavaScript 原生 JavaScript 实现比较麻烦, A Complete Guide to the Table Element 文章介绍了一种原生 js 代码的写法。不过代码的兼容性不是很好,IE10 以下的版本就无法支持了(替换 addClass() 和 removeClass() 方法后在 IE9 下也可以用)。下面是我自己写的原生 JavaScript 实现方法,不过也只能支持 IE9+,IE8 及以下的 IE 浏览器要加兼容性代码: JavaScript: <2>引用Jquery 使用 Jquery 框架实现方便很多,而且能够兼容 IE5.5+。好久没写 Jquery,选择器不是很熟,所以参考了一下 html5及css3对table表格高亮当前行列的多浏览器兼容写法 中的代码,其中 high_light css 类中定义高亮的颜色: 四、清爽简约的表格 下面给出一些简约的实用的表格样式,留作备用。 (1)不带竖线的表格 HTML: CSS: 效果如下: (2)不带横线的表格 HTML: < 沿用例 1)的 HTML > CSS: 效果如下: (3)带背景表格 1、HTML: < 沿用例 1)的 HTML > CSS: 效果如下: 2、HTML: < 沿用例 1)的 HTML > CSS: 效果如下: 3、HTML: CSS: 效果如下: 4、适用于表现简单后台数据的表格 HTML: CSS: 效果如下: 这里也只是列举比较基本的表格实例,加圆角、背景图等等在不同情况下可以获得更好的视觉效果,以后如果有看到更好的例子会继续补充。表格在现在的使用中已不像以前那么广了,基本只有在表现数据的时候才会用到,所以我并没有太深入地去了解表格的表现原理, 这里涉及 的知识都比较基础,而且只是冰山一角, 想要进一步了解的可以去看看 HTML 4.01 和 CSS 2.01关于 table 的文档(文末有附链接)。写这篇博文的时候也发现了其他一些有趣的关于表格的应用与拓展,比如响应式的表格、表格搜索、表格排序等等,再加进来博文就太长了(为自己太懒找个借口......),等有空的时候再来了解总结一下吧。 水平有限,错误欢迎指正。原创博文,转载请注明出处。 参考文档: HTML4.01 . http://www.w3.org/TR/html401/struct/tables.html CSS2.1 . Tables 参考文章: R. Christie . Top 10 CSS Table Designs W3Cfuns . 参透Html表格 Chris Coyier . A Complete Guide to the Table Element(译文:白牙 . 表格元素的 完全指南) 漫游 . html5及css3对table表格高亮当前行列的多浏览器兼容写法 无双 . 你真的了解word-wrap和word-break的区别吗? 本文是由用户编写整理,所有内容的版权归原作者所有。如果侵犯了您的权益,请联系我删除 |
---|