搜索
首页web前端html教程HTML的表格布局

HTML的表格布局

Jun 09, 2018 pm 05:10 PM
html表格

这篇文章主要介绍了HTML表格布局实际使用详解,是HTML入门学习中的基础知识,需要的朋友可以参考下

什么时候会用到表格

现在,表格f5d188ed2c074f8b944552db028f98a1一般不再用于网页整体的布局。不过,在面对某些特定的设计,如表单输入、数据呈现时,表格则可能是最恰当的选择。

关于表格的直观印象,就是由多个单元格(cell)整齐排列而成的元素,可以明确看出行(row)和列(column)。这可以联想到Excel,由Excel在数据处理和统计上的地位,就可以理解网页中表格的意义。

简单来说,能直观感受到多个元素是以行和列的概念排列时,用表格会让你轻松很多。如caniuse.com中应用表格的例子:
2015728173924594.png (470×175)

表格布局计算

使用表格很简单,但有时候表格最终为每一个格子呈现的状态,可能不是你想要的。比如说某些格子出现了换行,然后整个表格就因为换行看起来十分不美观。尤其是用于数据呈现的表格,宽度分配是一个很重要的话题,你可能需要为每一列格子可能呈现的数据情况,对表格的总宽度做精打细算。

这是因为,表格在布局上有自己的特性,它会遵循一定的原理,通过计算,确定出它的实际布局。接下来,本文以实际的表格测试示例,探讨表格是如何计算自己的布局的。
初始声明

本文只针对应用表格最常见的方法,而不会列出所有的情况。不同浏览器对表格的部分概念的解析有差异,但布局计算是基本一致的(如果有差异,会单独提及)。

接下来用的测试表格都会以这样的外观呈现(内容取自零之轨迹):
2015728173942365.jpg (535×183)

同时,表格都会设置border-collapse:collapse;和border-spacing:0;。这也是应用表格的最常用做法,Normalize.css把这部分用作了初始化定义。
两种算法

定义在f5d188ed2c074f8b944552db028f98a1元素上的css属性table-layout,将决定表格在布局计算时应用的算法。它有两种值,auto和fixed。在通常情况下,都使用默认值auto。

这两种算法的差异在于表格的宽度布局是否与表格中的数据内容有关。本文会分别讨论在这两种取值时,表格的布局计算原理。
自动表格布局-auto

自动表格布局的特点是,表格的宽度布局与表格中的所有数据内容有关,它需要在获取所有表格内容后才能确定最终的宽度布局,然后再一起显示出来。

如此看来,要点就是“内容相关”了。如果表格定义了固定宽度(这里是500px),而所有的单元格都不定义宽度(只讨论css定义宽度),会如何呢?来看结果:
2015728174002286.jpg (538×116)

上面这个表格中,空白的部分是写了 空格。经过比较,可以发现以下几点:

    第2列和第3列宽度相同。
    第1列的宽度和后面任意一列的宽度比似乎是2:1。
    加上边框和内边距,所有列的宽度总合,等于表格定义的宽度。

每个单元格都没有定义宽度,所以宽度布局完全由具体的内容数据(文本信息)决定的。如何解释这样的结果呢?可以先直观地推测这样的逻辑:

    第1步,从每一列中选取文字内容最多(理解为不换行的情况下,文本所占据的宽度最宽)的,作为“代表”。
    第2步,比较各列的“代表”的宽度,然后按照它们的宽度比例关系,为它们分配表格的总宽度,包括边框和内边距。

参照上面的逻辑,再来反观一下前面的表格,是不是挺有一些道理?注意,前面说宽度比“似乎”是2:1,这个会是?来看看去掉内边距的版本:
2015728174128545.jpg (558×87)

用前端调试工具具体看一下上面的单元格的宽度,你会发现这个表格和之前不同,比例已经非常接近2:1(是的,还有的这一小点是因为边框,但是没有边框就没法区分列了)。

可见,在分析宽度比例关系的时候,是会把内容宽度和内边距,以及边框都考虑在内的。这也说明,不是衡量文字的数目,而是衡量文字在不换行状态所能占据的宽度(这里的2:1来源于中文汉字是等宽的)。使用内边距自然只是为了做出更美观的表格 :) 。

有宽度定义的时候,又会怎样呢?下面是一个部分单元格有宽度定义的表格:
2015728174212099.jpg (553×142)

它的对应html代码是:

<table class="exhibit_table">  
    <tr>  
        <th>一二</th>  
        <th style="width:200px;"> </th>  
        <th> </th>  
    </tr>  
    <tr>  
        <td style="width:5px;"> </td>  
        <td></td>  
        <td> </td>  
    </tr>  
    <tr>  
        <td> </td>  
        <td style="width:70px;"> </td>  
        <td>一二三四</td>  
    </tr>  
</table>

上面这个表格可以发现以下几点:

    宽度定为5px的单元格,实际呈现宽度是13px,这正好是单个汉字的宽度,同一列的有汉字的单元格则以最小单元格宽度的形式排列文字(所以,换行了)。
    宽度定为200px的单元格,实际呈现宽度是200px,尽管同列还有一个宽度70px的定义。
    没有确切宽度定义的第3列,最后得到了表格在分配完第1列和第2列后全部的剩余宽度。

对此的推断是,存在宽度定义和不存在宽度定义的列都有的情况时:

    如果单元格定义宽度小于其内容的最小排列宽度(和不换行排列方式相反,尽可能多行排列在单元格内时,单元格所需的宽度),则该单元格所在的列,都会以最小排列方式呈现内容。
    如果同一列中,单元格的内容宽度(不换行形式,后文这个词都是这个意思)小于该列中最大的宽度定义,则该列的实际宽度等于该宽度定义。
    不存在宽度定义的列,会先由表格分配宽度给有宽度定义的列之后,再分配给它们(同样,它们之间的比例取决于内容宽度)。

最前边的没有宽度定义的可以看做情况1,这里有的列有宽度定义,有的又没有,可以看做情况2。下面是情况3,即所有的列都有宽度定义时:
2015728174233994.jpg (549×98)

对应html代码:

<table class="exhibit_table exhibit_table_with_no_padding">  
    <tr>  
        <th style="width:50px;"> </th>  
        <th style="width:50px;"> </th>  
        <th style="width:100px;"> </th>  
    </tr>  
    <tr>  
        <td> </td>  
        <td> </td>  
        <td> </td>  
    </tr>  
    <tr>  
        <td> </td>  
        <td> </td>  
        <td> </td>  
    </tr>  
</table>

上面的表格中,去掉了内边距,因此可以清晰地由宽度定义值,得到这3列的宽度比例是2:1:1。这里还有一个条件,就是单元格内的内容宽度不超过宽度定义值。经过测试,IE7及以下在内容超过宽度定义值和其他浏览器表现不同。

从这个表格例子可以知道,如果所有的列都有宽度定义,而这些宽度定义的值的和小于表格的宽度,则表格会在分配完它们宽度定义值所对应的宽度后,继续把剩余宽度,按照它们的宽度比例,也分配给它们。

以上即是对自动表格布局,且表格本身是定义了固定宽度时,3种情况的分析。如果表格本身不定义宽度,还会有更多情况,而且会和表格的包含块(containing block,详情)有关,如果以后有合适机会,再做讨论(所谓文章篇幅有限...)。
固定表格布局-fixed

固定表格布局的特点是,表格的宽度布局和表格中的数据内容无关,只需要接收到表格第一行的信息,就可以确定最终的宽度布局,并开始显示。

固定表格布局是“内容无关”的,而且它强调“第一行”。请看下面这个表格示例:
2015728174250768.jpg (551×165)

对应html代码:

<table class="exhibit_table exhibit_table_fixed">  
    <tr>  
        <th style="width:50px;"></th>  
        <th>一二</th>  
        <th>一二三四</th>  
    </tr>  
    <tr>  
        <td>艾丝蒂尔·布莱特</td>  
        <td width="1000px;"> </td>  
        <td> </td>  
    </tr>  
    <tr>  
        <td style="width:5px;"> </td>  
        <td> </td>  
        <td> </td>  
    </tr>  
</table>

固定表格布局的逻辑要简单很多,表述如下:

    只取第一行的信息,无视第一行之后的所有单元格的内容,及宽度定义
    在第一行中,如果单元格有宽度定义,则先分配它们所需的宽度,然后剩余的宽度平均分配给没有宽度定义的单元格
    第一行的单元格的宽度分配将决定表格的宽度布局,第一行之后的内容不会再改变布局。

还需要注意的时候,使用固定表格布局,则一定要给表格元素定义宽度,如果它的宽度没有定义(也就是auto默认值),浏览器会改用自动表格布局。
结尾声明

与表格有关的其实还有879b49175114808d868f5fe5e24c4e0b、ae20bdd317918ca68efdc799512a9b39、06669983c3badb677f993a8c29d18845、63bd76834ec05ac1f4c0ebbeaafb0994等元素,只是在最常见的用法中,并不需要用到它们。实际上,它们也在表格的布局计算的考虑之内。再加上还有单元格合并的情况,你大概可以想象到表格布局计算其实是多么复杂的东西。

W3C的文档提到,表格的布局计算(自动表格布局)尚没有成为规范。关于W3C对表格布局计算的说明,请参照Table width algorithms。
结语

其实就表格布局计算原理这一点,做这样细致的推断,并没有多少实用性。只是说,在需要解决细节问题的时候,有这些信息做参考的话,会有所帮助,尽管这样的机会不多。

不过,可以就本文的内容,得到一个比较有意义的结论:表格定义宽度,且所有单元格都不定义宽度,那么自动布局的表格会尽可能让你的所有数据都不换行,而如果碰到换行影响美观的情况,说明必须要精简数据或者减小边距,而不是再自行尝试重做宽度分配。

这一次做这种实测和推断,感到针对具体情况细分后再说明,会比一次性系统地完整表述,更容易理解,也许算是语文练习?

以上就是本文的全部内容,希望对大家的学习有所帮助,更多相关内容请关注PHP中文网!

相关推荐:

HTML实现网页动态时钟

Html的a标签中href和onclick用法区别以及优先级别

以上是HTML的表格布局的详细内容。更多信息请关注PHP中文网其他相关文章!

声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
如何验证您的HTML代码?如何验证您的HTML代码?Apr 24, 2025 am 12:04 AM

HTML代码可以通过在线验证器、集成工具和自动化流程来确保其清洁度。1)使用W3CMarkupValidationService在线验证HTML代码。2)在VisualStudioCode中安装并配置HTMLHint扩展进行实时验证。3)利用HTMLTidy在构建流程中自动验证和清理HTML文件。

HTML与CSS和JavaScript:比较Web技术HTML与CSS和JavaScript:比较Web技术Apr 23, 2025 am 12:05 AM

HTML、CSS和JavaScript是构建现代网页的核心技术:1.HTML定义网页结构,2.CSS负责网页外观,3.JavaScript提供网页动态和交互性,它们共同作用,打造出用户体验良好的网站。

HTML作为标记语言:其功能和目的HTML作为标记语言:其功能和目的Apr 22, 2025 am 12:02 AM

HTML的功能是定义网页的结构和内容,其目的在于提供一种标准化的方式来展示信息。1)HTML通过标签和属性组织网页的各个部分,如标题和段落。2)它支持内容与表现分离,提升维护效率。3)HTML具有可扩展性,允许自定义标签增强SEO。

HTML,CSS和JavaScript的未来:网络开发趋势HTML,CSS和JavaScript的未来:网络开发趋势Apr 19, 2025 am 12:02 AM

HTML的未来趋势是语义化和Web组件,CSS的未来趋势是CSS-in-JS和CSSHoudini,JavaScript的未来趋势是WebAssembly和Serverless。1.HTML的语义化提高可访问性和SEO效果,Web组件提升开发效率但需注意浏览器兼容性。2.CSS-in-JS增强样式管理灵活性但可能增大文件体积,CSSHoudini允许直接操作CSS渲染。3.WebAssembly优化浏览器应用性能但学习曲线陡,Serverless简化开发但需优化冷启动问题。

HTML:结构,CSS:样式,JavaScript:行为HTML:结构,CSS:样式,JavaScript:行为Apr 18, 2025 am 12:09 AM

HTML、CSS和JavaScript在Web开发中的作用分别是:1.HTML定义网页结构,2.CSS控制网页样式,3.JavaScript添加动态行为。它们共同构建了现代网站的框架、美观和交互性。

HTML的未来:网络设计的发展和趋势HTML的未来:网络设计的发展和趋势Apr 17, 2025 am 12:12 AM

HTML的未来充满了无限可能。1)新功能和标准将包括更多的语义化标签和WebComponents的普及。2)网页设计趋势将继续向响应式和无障碍设计发展。3)性能优化将通过响应式图片加载和延迟加载技术提升用户体验。

HTML与CSS vs. JavaScript:比较概述HTML与CSS vs. JavaScript:比较概述Apr 16, 2025 am 12:04 AM

HTML、CSS和JavaScript在网页开发中的角色分别是:HTML负责内容结构,CSS负责样式,JavaScript负责动态行为。1.HTML通过标签定义网页结构和内容,确保语义化。2.CSS通过选择器和属性控制网页样式,使其美观易读。3.JavaScript通过脚本控制网页行为,实现动态和交互功能。

HTML:是编程语言还是其他?HTML:是编程语言还是其他?Apr 15, 2025 am 12:13 AM

HTMLISNOTAPROGRAMMENGUAGE; ITISAMARKUMARKUPLAGUAGE.1)htmlStructures andFormatSwebContentusingtags.2)itworkswithcsssforstylingandjavascript for Interactivity,增强WebevebDevelopment。

See all articles

热AI工具

Undresser.AI Undress

Undresser.AI Undress

人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover

AI Clothes Remover

用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool

Undress AI Tool

免费脱衣服图片

Clothoff.io

Clothoff.io

AI脱衣机

Video Face Swap

Video Face Swap

使用我们完全免费的人工智能换脸工具轻松在任何视频中换脸!

热工具

螳螂BT

螳螂BT

Mantis是一个易于部署的基于Web的缺陷跟踪工具,用于帮助产品缺陷跟踪。它需要PHP、MySQL和一个Web服务器。请查看我们的演示和托管服务。

SecLists

SecLists

SecLists是最终安全测试人员的伙伴。它是一个包含各种类型列表的集合,这些列表在安全评估过程中经常使用,都在一个地方。SecLists通过方便地提供安全测试人员可能需要的所有列表,帮助提高安全测试的效率和生产力。列表类型包括用户名、密码、URL、模糊测试有效载荷、敏感数据模式、Web shell等等。测试人员只需将此存储库拉到新的测试机上,他就可以访问到所需的每种类型的列表。

mPDF

mPDF

mPDF是一个PHP库,可以从UTF-8编码的HTML生成PDF文件。原作者Ian Back编写mPDF以从他的网站上“即时”输出PDF文件,并处理不同的语言。与原始脚本如HTML2FPDF相比,它的速度较慢,并且在使用Unicode字体时生成的文件较大,但支持CSS样式等,并进行了大量增强。支持几乎所有语言,包括RTL(阿拉伯语和希伯来语)和CJK(中日韩)。支持嵌套的块级元素(如P、DIV),

SublimeText3汉化版

SublimeText3汉化版

中文版,非常好用

MinGW - 适用于 Windows 的极简 GNU

MinGW - 适用于 Windows 的极简 GNU

这个项目正在迁移到osdn.net/projects/mingw的过程中,你可以继续在那里关注我们。MinGW:GNU编译器集合(GCC)的本地Windows移植版本,可自由分发的导入库和用于构建本地Windows应用程序的头文件;包括对MSVC运行时的扩展,以支持C99功能。MinGW的所有软件都可以在64位Windows平台上运行。