分类: Html/CSS | 转载请注明: 出自 海玉的博客 
本文地址: http://www.hicss.net/how-to-save-you-my-table/

table曾经在网页开发中占据着举重若轻的地位——布局,即使到了Web2.0我们依旧可以看到其布局的身影。然而技术是不断进步的Div+Css组合方式终究敲开了老式布局的大门刮起了新的一轮布局浪潮。之后而来的就是新仇旧恨,许许多多无论是对table有意见亦或没意见的人也开始了对table笔诛口伐——臃肿的代码、无语义标签、繁杂的书写方式等等。记住,table被创造之初并非是用于布局,而是显示数据。舍弃table布局,并非舍弃table本身。拿什么来拯救你,我的table。

何为table:

table者Html表格也,数据之载体。

下面是一个比较标准的table代码写法:

 1 <table border="0" cellspacing="0" cellpadding="0" width="100%">
 2   <tr>
 3     <th>Month</th>
 4     <th>Date</th>
 5   </tr>
 6   <tr>
 7     <td>AUG</td>
 8     <td>18</td>
 9   </tr>
10 </table>

简单的HTML表格由table元素以及一个或多个tr、th或td元素组成。tr元素定义表格行,th元素定义表头的单元格,td元素定义表格单元格。border属性规定表格边框的宽度,cellpadding规定单元边沿与其内容之间的空白,cellspacing规定单元格之间的空白,这三个属性我们一般手动设置为0避免浏览器差异。width属性规定表格的宽度,因为table宽度是随内部元素的宽度撑起多少而变化,而常用情况下我们希望table是同外部容器等宽,所以常常默认设置100%宽度使之撑满容器。

不得不说的table-layout:fixed属性

table-layout: auto(默认)|fixed。

参数:

auto:默认的自动算法。布局将基于各单元格的内容。表格在每一单元格读取计算之后才会显示出来,速度很慢。
fixed:固定布局的算法。在这算法中,水平布局是仅仅基于表格的宽度,表格边框的宽度,单元格间距,列的宽度,而和表格内容无关。 解析速度快。

fixed布局模型的工作步骤:
1.width属性值不是auto的所有列元素会根据width值设置该列的宽度。
2.表首行中位于该列的单元格width,根据该单元格宽度设置此列的宽度。如果这个单元格跨多列,则宽度在这些列上平均分配。
3.在以上两步之后,如果列的宽度仍为auto,会自动确定其大小,使其宽度尽可能相等。此时,表的宽度设置为表的width值或列宽度之和(取其中较大者)。如果表度度大于其列宽总和,将二者之差除以列数,再把得到的这个宽度增加到每一列上。
这种方法的速度很快,因为所有列宽都由表的第一行定义。首行后所有行中的单元格都根据首行所定义的列宽确定大小。后面这些行中的单元格不会改变列宽。这意味着为这些单元格指定的width值都会被忽略。

一般在做复杂表格html的时候,有时候你会发现,无论怎么调整第一行每列的width,列宽还是会发生出乎于你意料之外的变动(例如一长串英文文本,并且中间无空格分隔的情况你要这列限定宽度,使得过长文字强制换行且不撑破表格,而往往结果是怎么也调整不到合适的宽度),这个时候在万般无奈之下,你可以使用table-layout:fixed。

table疑难杂症之换行

用table显示数据有时候会有一个头疼的地方,即不换行显示某段文字,尤其在表头th中用到地方最多。其实你所头疼的并非换行,而是其背后的浏览器兼容加性使得换行的困难程度大大增。这里,你可以查看攻略强制换行与强制不换行这篇文章得到启示,文中详细讨论了在不同情况下攻略换行的方法。

总体来说在table中换行个人比较推荐的方式为:先为table设定table-layout:fixed,基本上设定完这个属性后基本的换行问题都能够解决而不会出现table中td,th因为里面各个内容的多寡发生抢夺其他td,th宽度的情形发生。这时如果你依旧有强制换行问题,那么在此td中内部加一层div,再利用word-wrap:break-word; word-break:break-all;这俩个CSS方法可以解决换行的问题。

常见而又生疏的几个table标签

thead、tfoot以及tbody

这三个标签是所谓xhtml的产物,主要是使您有能力对表格中的行进行分组。当您创建某个表格时,您也许希望拥有一个标题行,一些带有数据的行,以及位于底部的一个总计行。这种划分使浏览器有能力支持独立于表格标题和页脚的表格正文滚动。当长的表格被打印时,表格的表头和页脚可被打印在包含表格数据的每张页面上。个人认为其主要用途适用于超长表格的显示优化。

thead标签表示HTML表头
表格的头部thead,可以使用单独的样式定义表头,并且在打印时可以在分页的上部打印表头。

thead标签表示HTML页脚
表格的页脚tfoot,可以使用单独的样式定义页脚(脚注或表注),并且在打印时可以在分页的下部打印页脚。

tbody标签表示HTML表体
浏览器显示表格时,通常是完全下载表格后,再全部显示,所以当表格很长时,可以使用tbody分段显示。

注释:如果您使用 thead、tfoot以及tbody元素,您就必须使用全部的元素。它们的出现次序是:thead、tfoot、tbody,这样浏览器就可以在收到所有数据前就可呈现表头和页脚了。您必须在table元素内部使用这些标签,且thead内部必须拥有tr标签。所以书写更为标准的table方式即如下代码:

 1 <table border="0" cellspacing="0" cellpadding="0" width="100%">
 2   <thead>
 3     <tr>
 4       <th>Month</th>
 5       <th>Date</th>
 6     </tr>
 7   </thead>
 8   <tfoot>
 9     <tr>
10       <th>Month Lists</th>
11       <th>Date Lists</th>
12     </tr>
13   </tfoot>
14   <tbody>
15     <tr>
16       <td>AUG</td>
17       <td>18</td>
18     </tr>
19   </tbody>
20 </table>

个人认为这个东西挺鸡肋,取之无用,弃之可惜。小项目可以增加些语义化,但因为曾经遇到过有多个不同表头在同一表格显示的窘境,限制了日后的开发,所以正式项目从可扩展的角度来说情慎用这些标签。

col和colgroup

这俩标签也是xhtml的产物,功能强大,兼容奇差。

col标签为表格中一个或多个列定义属性值。

colgroup标签用于对表格中的列进行组合,以便对其进行格式化。

它们的作用主要就是来控制单元格的宽度了,这样省去单独定义每个单元格的麻烦,过去我们往往是在第一行中的th或者td上定义宽度来规定每列的宽度,而col不但可以定义宽度还能同时定义其他的属性,例如可以通过col来控制几列宽度的总和,还可以控制这列的背景色。但理想是丰满的,现实是骨干的,正如前面所说,功能越大不代表其兼容性也越强,据现有的测试下来,col和colgroup能发挥作用还能保证兼容的应用就只有俩:width和background。对于width,个人宁愿使用常规方式,第一行设置宽度,保证列宽。对于bacground,一般实际中表格大面积使用不同背景的情况也很少见。故个人认为:能不用尽量不用。

何处用table

个人认为,在一个放置数据非常密集且又非常序列化的一个容器里,用table准没错。最常见的例子就是我们常见的购物订单结算页面,上面列有你订单详情:商品名称、单价、购买数量、金额小计、运费等等,最后最下方还会有一个最终订单金额的结果,table在这里可谓是如鱼得水,达到了数据之载体的神效。

以上是对常见的table知识点进行了一次梳理,对常用到得几个地方进行了分析整理。期待看到这篇文章的你能够以正确的态度看待table,使用table。希望本文可以稍稍的挽救你吧,我的table。谢谢。

转载于:https://www.cnblogs.com/xiaozhumaopao/p/4744486.html

拿什么来拯救你,我的table相关推荐

  1. python处理excel大数据-当Excel遇到大数据问题,是时候用Python来拯救了

    与从事分析工作的人交谈,他们会告诉你他们对Excel的爱恨情仇: Excel能做很多事情:当涉及到更大的数据集时,这简直是一种痛苦.数据需要很长时间才能加载,在你意识到机器的内存耗尽之前,整个事情就变 ...

  2. 业务库负载翻了百倍,我做了什么来拯救MySQL架构

    转载自  业务库负载翻了百倍,我做了什么来拯救MySQL架构 作者介绍 杨建荣,竞技世界资深DBA,前搜狐畅游数据库专家,Oracle ACE,YEP成员.拥有近十年数据库开发和运维经验,目前专注于开 ...

  3. [转载]谁来拯救云计算

    原文:http://blog.csdn.net/kanghua/article/details/7232191 谁来拯救云计算 -   云计算的技术路线探讨  BY 康华 引言 当前的"云计 ...

  4. Lenovo 拯救者15ISK硬件升级

    文章目录 1.升级前 1.1.15ISK笔记本配置 1.2.15ISk升级前的状态 2.挑选配件 2.1.选择内存 2.2.选择固态硬盘 3.拆机安装 3.1.拆机安装配件 3.2.安装系统 3.2. ...

  5. table、from、html特性

    table表格 组成: .. 注意: 1.table 用于定义一个表格 2.tr 是定义表格中的一行,必须嵌套在table标签内,table中包含几对tr就有几行表格 3.td 就是单元格,必须嵌套在 ...

  6. HTML学生个人网站作业设计:宠物网站设计——拯救动物 7页

    ⛵ 源码获取 文末联系 ✈ Web前端开发技术 描述 网页设计题材,DIV+CSS 布局制作,HTML+CSS网页设计期末课程大作业 | 宠物网页设计 | 保护动物网页 | 鲸鱼海豚主题 | 保护大象 ...

  7. Windows Azure 解决方案系列: 开发拓展搜索-救援应用程序,拯救更多溺水者

    公告:本博客为微软云计算中文博客的镜像博客.部分文章因为博客兼容性问题,会影响阅读体验.如遇此情况,请访问原博客.   为了降低居高不下的捕鱼业坠海死亡率, Royal National Lifebo ...

  8. IDEA中根据数据库自动生成实体类,并自定义所生成的实体类中的注解 @Table @Id @...

    使用IDEA项目添加Hibernate扩展,生成实体类并配置实体类中的注解 一.使用Hibernate自动生成实体类 1.在项目上右键,选择Add Framework Support找到 Hibern ...

  9. 2021年大数据Flink(三十九):​​​​​​​Table与SQL ​​​​​​总结 Flink-SQL常用算子

    目录 总结 Flink-SQL常用算子 SELECT WHERE ​​​​​​​DISTINCT ​​​​​​​GROUP BY ​​​​​​​UNION 和 UNION ALL ​​​​​​​JOI ...

最新文章

  1. 聊下 git 使用前的一些注意事项
  2. JVM详解之:汇编角度理解本地变量的生命周期
  3. 【POJ - 3694】Network(对dfn求lca 或 缩点+lca 或 边双连通+并查集)
  4. [C++] 栈 和 队列
  5. AngularJS 动态模板
  6. WebStrom如何创建项目,为什么我开始选择HTML5到自定义路径报错
  7. wpf之代码设置背景图片
  8. sizeof和strlen的简单使用方法和区别
  9. BZOJ4373 : 算术天才⑨与等差数列
  10. 2021年5大最佳3D动画软件
  11. Hans Berger脑电图之父的人生摘要
  12. 分块矩阵的逆矩阵的公式记忆方法
  13. 第十二章:互联网-http.cookies: HTTP cookie-Morsel
  14. 软件测试工程师应该具备哪些能力?
  15. MacBook安装Golang Oracle数据库驱动程序
  16. 业务和商业才是技术的驱动力
  17. 开通微信公众号留言功能的开通问题
  18. 芋道 Spring Boot JPA 入门(一)之快速入门
  19. 微信公众号如何接入微信机器人
  20. 人脸识别调研报告2021

热门文章

  1. iOS计算输入字符数
  2. 4.3. postForObject
  3. H5实例教学--微信内嵌视频1(案例浅析)
  4. 2016 ACM/ICPC Asia Regional Shenyang Online
  5. android相关使用工具
  6. ssl单向tomcat配置webservice访问方法
  7. mysqld命令查看数据库目录
  8. 【故障修复】SharePoint Designer 无法登陆网站
  9. bottle+jquery 前后端分离
  10. Raspberry 4B 串口通信