当前位置: 首页 > news >正文

CSS 之 table 表格布局

一、简介

​ 除了使用HTML的<table>元素外,我们还可以通过display: table/inline-table; 设置元素内部的布局类型为表格布局。并结合table-celltable-row等相关CSS属性值可以实现HTML中<table>系列元素的效果,具有表头、表尾、行、单元格等概念,让元素以表格的形式进行布局。

​ 该属性只是实现了<table>的布局效果,对于浏览器本身来说两者并不等同。如果使用该属性则不符合标签语义化,也不利于SEO,但优点在于代码相对于<table>的嵌套简洁很多,并且<table>只能在表格内容完全加载后才显示,该属性利用的是普通元素,是逐行进行解析显示的,无需等待全部内容加载完成。

浏览器兼容性:

在这里插入图片描述

二、系列属性

1、table系列display属性值
  • table:设置元素为块级表格元素,类似于HTML的<table>
  • inline-table:设置元素为行内块表格元素,类似于HTML的<table>
  • table-row:设置元素为表格的行,类似于HTML的<tr>
  • table-cell:设置元素为表格的单元格,类似于HTML的<td><th>
  • table-header-group:设置元素为表格的表头行,类似于HTML的<thead>
  • table-footer-group:设置元素为表格的表尾行,类似于HTML的<tfoot>
  • table-row-group:设置元素为表格的主体内容,类似于HTML的<tbody>
  • table-column:设置元素为表格的列,类似于HTML的<col>
  • table-column-group:设置元素为表格的列组,类似于HTML的<colgroup>
  • table-caption:设置元素为表格的标题,类似于HTML的<caption>
所有案例都以下面dom结构为基础:
<div class="table"><div class="row row1"><div class="cell cell1">张三</div><div class="cell cell2">李四</div><div class="cell cell3">王五</div></div><div class="row row2"><div class="cell cell1">张三三</div><div class="cell cell2">李四四</div><div class="cell cell3">王五五</div></div>
</div>
2、display: table;

​ 该属性用于创建一个块级的表格元素,类似于HTML的<table>,可以正常使用paddingmargin属性,如果未给元素设置宽高,则元素的宽高将取决于内容的宽高。

​ 单独为某个元素设置该属性是无效的,需要与table-rowtable-cell等属性结合使用,才能实现表格布局效果。

.table {display: table;padding: 50px;margin: 40px;background: pink;
}
页面效果:

在这里插入图片描述

3、display: inline-table;

​ 该属性用于创建一个行内块的表格元素,类似于HTML的<table>,但是可与其他行内、行内块元素位于一行,如果未给元素设置宽高,则元素的宽高将取决于内容的宽高。

​ 单独为某个元素设置该属性是无效的(行内块的特性是有效的),至少需要与table-rowtable-cell属性结合使用,才能实现表格布局效果。

<style>
.table {display: inline-table;padding: 50px;margin: 40px;background: pink;
}
</style><div class="table">...
</div>
<div style="display: inline-block;background: #ccc;">这是table下面的一个行内块元素
</div>
页面效果:

在这里插入图片描述

4、display: table-row;

​ 该属性用于设置元素为表格布局的行,类似于HTML的<tr>,内部包裹设置display: table-cell;的元素,并必须位于设置display: table/inline-table;的元素内部。

​ 设置该属性的元素,设置paddingmargin是无效的,不会影响内容布局。同时元素设置border属性也是无效的。

​ 单独为某个元素设置该属性是无任何效果的,至少需要与table/inline-tabletable-cell属性结合使用,才能实现表格布局效果。

5、display: table-cell;

​ 该属性用于设置元素为表格的单元格,类似于HTML的<td><th>,被设置display: table-row;的元素包裹,成为一个单元格,且位于设置display: table/inline-table;的元素内部。

​ 设置该属性的元素,设置paddingborder有效的,但设置margin无效。

​ 单独为某个元素设置该属性是无任何效果的,至少需要与table/inline-tabletable-row属性结合使用,才能实现表格布局效果。

.table {display: table;padding: 50px;margin: 40px;background: pink;
}
.row {display: table-row;padding: 5px;margin: 5px;border: 1px solid red;
}
.cell {display: table-cell;padding: 10px;margin: 10px;border: 1px solid #cccccc;
}
页面效果:

在这里插入图片描述

6、display: table-header-group;
7、display: table-footer-group;
8、display: table-row-group;

display: table-header-group;属性用于设置元素为表格的表头行,类似于HTML的<thead>,内部可以包含多个设置display: table-row;的元素和其他普通元素。

display: table-footer-group;属性用于设置元素为表格的表尾行,类似于HTML的<tfoot>,内部可以包含多个设置display: table-row;的元素和其他普通元素。

display: table-header-group;属性用于设置元素为表格的主体内容组,类似于HTML的<tbody>,内部可以包含多个设置display: table-row;的元素和其他普通元素。

​ 设置这些属性的元素,设置floatmarginpaddingwidth是无效的,并且元素的width自适应于内容的宽度。如果设置元素的height大于元素内容的高度,则实际高度为设置的height,反之设置元素的height小于元素内容的高度,则实际高度为内容的高度。

​ 个人感觉这三个属性,更多是为了方便元素分组,增加代码可读性,实际意义不大。

<style>
.table {display: table;background: pink;
}
.row {display: table-row;
}
.cell {display: table-cell;border: 1px solid #cccccc;
}
.header-group {display: table-header-group;width: 200px;height: 10px;margin-left: 50px;padding: 10px;
}
.body-group {display: table-row-group;width: 200px;height: 100px;margin-left: 50px;padding: 10px;
}
.footer-group {display: table-footer-group;width: 200px;height: 10px;margin-left: 50px;padding: 10px;
}
</style><div class="table"><div class="header-group"><div class="row row1"><div class="cell cell1">header张三</div><div class="cell cell2">header李四</div><div class="cell cell3">header王五</div></div><div class="row row1"><div class="cell cell1">header张三</div><div class="cell cell2">header李四</div><div class="cell cell3">header王五</div></div><span>111111</span></div><div class="body-group"><div class="row row2"><div class="cell cell1">body张三三</div><div class="cell cell2">body李四四</div><div class="cell cell3">body王五五</div></div><span>222222</span></div><div class="footer-group"><div class="row row2"><div class="cell cell1">footer张三三三</div><div class="cell cell2">footer李四四四</div><div class="cell cell3">footer王五五五</div></div><span>333333</span></div>
</div>
页面效果:

在这里插入图片描述

9、display: table-column;
10、display: table-column-group;

display: table-column;属性用于设置元素为表格的列,类似于HTML的<col>,属于一个抽象的概念,并不需要写在具体的单元格上,而是写到一个单独的元素上,按照先后顺序对应表格中单元格组成的列,必须位于设置display: table-column-group;的元素内部。

display: table-column-group;属性用于设置元素为表格的列组,类似于HTML的<colgroup>,内部包含多个设置display: table-column;的元素,表示一组列。

​ 设置这俩属性的元素,设置floatmarginpaddingheight是无效的,widthbackground等属性有效,因此通常用来实现对某些列的单元格进行特殊样式操作。

<style>
.table {display: table;background: pink;
}
.row {display: table-row;
}
.cell {display: table-cell;border: 1px solid #cccccc;
}
.column {display: table-column;width: 100px;height: 50px;margin-left: 50px;padding: 10px;
}
.column:nth-child(2) {background: yellow;
}
.column-group {display: table-column-group;width: 100px;height: 50px;margin-left: 50px;padding: 10px;
}
</style><div class="table"><div class="column-group"><!-- 三个列元素 对应 每行的三个单元格 --><div class="column"></div><div class="column"></div><div class="column"></div></div><div class="row row1"><div class="cell">张三</div><div class="cell cell2">李四</div><div class="cell cell3">王五</div></div><div class="row row2"><div class="cell cell1">张三三</div><div class="cell cell2">李四四</div><div class="cell cell3">王五五五</div></div>
</div>
页面效果:

在这里插入图片描述

11、display: table-caption;

​ 该属性用于设置元素为表格的标题模块,类似于HTML的<caption>,同时可以结合caption-side属性实现标题模块相对于表格区域的定位。

<style>
.table {display: table;background: pink;
}
.row {display: table-row;
}
.cell {display: table-cell;border: 1px solid #cccccc;
}
.caption {display: table-caption;caption-side: bottom; /* 默认为top */margin: 10px;padding: 10px;
}
</style><div class="table"><div class="caption">这是表格的标题模块</div><div class="row row1">...</div><div class="row row2">...</div>
</div>
页面效果:

在这里插入图片描述

三、相关属性

1、caption-side

​ 该属性用于设置表格的标题模块(设置display: table-caption;的元素)相对于表格的位置,该属性的属性值有两种:

  • top(默认值):标题模块位于表格上方。
  • bottom:标题模块位于表格的下方。
  • 更多内容可查看:caption-side。
2、border-collapse

​ 该属性用于设置表格内单元格的相邻边框是分开还是合并,属性值有两种:

  • separate(默认值):设置相邻单元格的相邻边框不进行合并,相邻单元格都有自己的边框,因此表格中间的边框宽度将是表格最外侧边框宽度的两倍。而且只有此时可以通过border-spacing属性设置两个边框之间的距离。
  • collapse:设置相邻单元格的相邻边框进行合并,且合并后的边框宽度为单个边框的宽度,两个单元格共用一个边框。
  • 更多内容请查看:border-collapse。
<style>
.table {display: table;background: pink;border-collapse: collapse;
}
.table2 {margin-top: 30px;border-collapse: separate;
}
.table3 {margin-top: 30px;border-collapse: separate;border-spacing: 5px; /* 设置相邻边框之间的间隔 */
}
.row {display: table-row;
}
.cell {display: table-cell;border: 1px solid #cccccc;
}
</style><div class="table"><div class="row row1"><div class="cell cell1">张三</div><div class="cell cell2">李四</div><div class="cell cell3">王五</div></div><div class="row row2"><div class="cell cell1">张三三</div><div class="cell cell2">李四四</div><div class="cell cell3">王五五五</div></div></div><div class="table table2"><div class="row row1"><div class="cell cell1">张三</div><div class="cell cell2">李四</div><div class="cell cell3">王五</div></div><div class="row row2"><div class="cell cell1">张三三</div><div class="cell cell2">李四四</div><div class="cell cell3">王五五五</div></div></div><div class="table table3"><div class="row row1"><div class="cell cell1">张三</div><div class="cell cell2">李四</div><div class="cell cell3">王五</div></div><div class="row row2"><div class="cell cell1">张三三</div><div class="cell cell2">李四四</div><div class="cell cell3">王五五五</div></div></div>
页面效果:

在这里插入图片描述

4、table-layout

​ 该属性用于设置表格的布局算法,也就是如何分配单元格的宽度和调整表格的大小。属性值有两个:

  • auto(默认值):表格及其单元格的宽度会根据内容自动调整大小。
  • fixed:表格和列的宽度是由 tablecol 元素的宽度或第一行中单元格的宽度来设置的,默认一行中的单元格平分本行的宽度,如果有的单元格设置了宽度,则其余单元格平分宽度。下面行中的单元格的内容不会影响单元的宽度,但如果内容过多就很可能会溢出,因此可以结合overflow: hidden;等属性对内容进行截取。
  • 更多内容可查看:table-layout。
<style>.table {display: table;margin-bottom: 30px;background: pink;table-layout: fixed;width: 400px;}.row {display: table-row;}.cell {display: table-cell;/* width: 10px; */border: 1px solid #cccccc;}.table2 .cell1 {width: 30px;}
</style><div class="table"><div class="row row1"><div class="cell cell1">张三</div><div class="cell cell2">李四</div><div class="cell cell3">王五</div></div><div class="row row2"><div class="cell cell1">张三三</div><div class="cell cell2">李四四</div><div class="cell cell3">王五五五</div></div>
</div>
<div class="table table2"><div class="row row1"><div class="cell cell1">张三</div><div class="cell cell2">李四</div><div class="cell cell3">王五</div></div><div class="row row2"><div class="cell cell1">张三三</div><div class="cell cell2">李四四</div><div class="cell cell3">王五五五</div></div>
</div>
页面效果:

在这里插入图片描述

5、vertical-align

​ 该属性用于设置表格的单元格元素(display: table-cell;)的垂直对齐方式,也可用于设置页面中行内元素(inline)、行内块元素(inline-block)的垂直对齐方式。该属性的属性值有:

  • top(默认值):设置单元格的内容与该行的顶部对齐。
  • bottom:设置单元格内容与该行的底部对齐。
  • middle:设置单元格内容在该行内垂直居中。
  • baselinesubsupertext-toptext-bottom等其他属性。
  • 更多内容请查看:vertical-align。
<style>
.table {display: table;margin-bottom: 30px;background: pink;
}
.row {display: table-row;
}
.cell {display: table-cell;height: 200px;border: 1px solid #cccccc;vertical-align: middle; /* 设置内容在行内垂直居中对齐 */
}
</style><div class="table"><div class="row row1"><div class="cell cell1">张三</div><div class="cell cell2">李四</div><div class="cell cell3">王五</div></div><div class="row row2"><div class="cell cell1">张三三</div><div class="cell cell2">李四四</div><div class="cell cell3">王五五五</div></div>
</div>
页面效果:

在这里插入图片描述

四、参考资料

table的MDN文档

相关文章:

CSS 之 table 表格布局

一、简介 ​ 除了使用HTML的<table>元素外&#xff0c;我们还可以通过display: table/inline-table; 设置元素内部的布局类型为表格布局。并结合table-cell、table-row等相关CSS属性值可以实现HTML中<table>系列元素的效果&#xff0c;具有表头、表尾、行、单元格…...

【Kotlin精简】第2章 集合

1 简介 在 Kotlin 中集合主要分为可变集合与只读集合&#xff0c;其中可变集合使用 “Mutable” 前缀 集合类名表示&#xff0c;比如 MutableList、MutableSet、MutableMap 等。而对于只读集合就是和 Java 中集合类名是一致。 Java 中的 List 非 Kotlin 中的 List , 因为 Kot…...

VSCODE+PHP8.2配置踩坑记录

VSCODEPHP8.2配置踩坑记录 – WhiteNights Site 我配置过的最恶心的环境之一&#xff1a;windows上的php。另一个是我centos服务器上的php。 进不了断点 端口配置和xdebug的安装 这个应该是最常见的问题了。从网上下载完php并解压到本地&#xff0c;打开vscode&#xff0c;安装…...

React 状态管理 - Context API 前世今生(下)

New Context API Provider【context的生产者组件】 createContext 创建一个Context对象&#xff0c;订阅了整个Context对象的组件&#xff0c;会从组件树中离自身最近的那个匹配的Provider中读取到当前的context值。Context.Provider 父Context对象返回的Provider组件&#x…...

地下城堡3魂之诗阵容搭配攻略

在地下城堡3魂之诗游戏中&#xff0c;拥有一个合理搭配的阵容非常关键&#xff0c;可以让角色能力发挥最大化。以下是建议的阵容搭配及攻略&#xff1a; 关注【娱乐天梯】&#xff0c;获取内部福利号 1.核心成员(2名) 在阵容中选择两个输出型角色作为核心成员&#xff0c;他们的…...

网工内推 | 技术支持工程师,厂商公司,HCIA即可,有带薪年假

01 华为终端有限公司 招聘岗位&#xff1a;初级技术支持 职责描述&#xff1a; 1、通过远程方式处理华为用户在产品使用过程中各种售后问题&#xff1b; 2、收集并整理消费者声音&#xff0c;提供服务持续优化建议&#xff1b; 3、对服务中发现的热点、难点问题及其他有可能造…...

有 AI,无障碍,AIoT 设备为视障人群提供便利

据世界卫生组织统计&#xff0c;全球共 22 亿人视力受损&#xff0c;包含 2.85 亿视障人群和 3,900 万全盲人群。而且&#xff0c;这一数字将随老龄化加剧不断增加。 虽然视障人群面临着诸多不便&#xff0c;但是针对视障人群的辅助设备却存在成本高、维护困难、操作复杂等问题…...

数据结构学习笔记——数据结构概论

目录 一、数据与数据元素二、数据类型和抽象数据类型三、数据结构的定义&#xff08;一&#xff09;逻辑结构&#xff08;二&#xff09;存储结构&#xff08;物理结构&#xff09;1、顺序存储结构2、链式存储结构3、索引存储结构4、散列存储结构 &#xff08;三&#xff09;数…...

关于 打开虚拟机出现“...由VMware产品创建,但该产品与此版VMwareWorkstateion不兼容,因此无法使用” 的解决方法

文为原创文章&#xff0c;转载请注明原文出处 本文章博客地址&#xff1a;https://hpzwl.blog.csdn.net/article/details/133678951 红胖子(红模仿)的博文大全&#xff1a;开发技术集合&#xff08;包含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬结…...

windows的最佳选项卡式窗口管理器软件TidyTabs

下载&#xff1a; https://jmj.cc/s/z1t3kt?pucodeS1wc https://download.csdn.net/download/mo3408/88420433 TidyTabs是一款Windows应用程序&#xff0c;它可以将多个打开的窗口整理成一个选项卡式的界面&#xff0c;使得用户可以更加方便地切换和管理不同的窗口。 Tidy…...

【Python 千题 —— 基础篇】浮点数转为整数

题目描述 题目描述 给出一个浮点数&#xff0c;请将这个浮点数转换成整数。 输入描述 输入一个浮点数。 输出描述 程序将浮点数转换为整数并输出。 示例 示例 ① 2.333输出&#xff1a; 2代码讲解 下面是本题的代码&#xff1a; # 描述: 给出一个浮点数&#xff0c…...

【Linux--进程间通信】

进程间通信介绍 进程间通信目的 数据传输&#xff1a;一个进程需要将它的数据发送给另一个进程资源共享&#xff1a;多个进程之间共享同样的资源通知事件&#xff1a;一个进程需要向另一个或一组进程发送消息。通知它&#xff08;它们&#xff09;发生了某种事件&#xff08;如…...

Linux C文件操作

文章目录 文件操作函数文件系统调用系统调用与标准函数c的调用的区别文件的读取位置标准c函数系统调用空洞文件 文件的内存映射操作文件目录 linux下的文件操作包括两种&#xff0c;一种是使用C函数&#xff0c;一种是使用系统调用。 gcc 常用来实现c程序的编译gcc filename.c …...

基于Cucumber的行为驱动开发(BDD)实例

本篇介绍 Cucumber 的基本使用&#xff0c; 因为Cucumber是BDD的工具&#xff0c; 所以首先需要弄清楚什么是BDD&#xff0c;而在介绍BDD之前&#xff0c;先看看常见的软件开发方法。 常见的软件开发方法 面向过程开发&#xff08;Procedural Development&#xff09;&#x…...

十六、代码校验(2)

本章概要 前置条件 断言&#xff08;Assertions&#xff09;Java 断言语法Guava 断言使用断言进行契约式设计检查指令前置条件后置条件不变性放松 DbC 检查或非常严格的 DbCDbC 单元测试 前置条件 前置条件的概念来自于契约式设计(Design By Contract, DbC), 利用断言机制…...

安卓 kotlin-supportFragmentManager报红

如果你继承baseActivity 请查看 是不是继承 AppCompatActivity...

linux中安装RocketMQ以及dashboard

前提&#xff1a; 需要安装jdk8 上传下面的文件到服务器中 新建目录 mkdir rocketmq 将下载后的压缩包上传到阿里云服务器或者虚拟机中去&#xff0c;并解压 unzip rocketmq-all-4.9.2-bin-release.zip 配置环境变量 vim /etc/profile 配置内容&#xff1a; export NAM…...

Android kotlin内联函数(inline)的详解与原理

一、介绍 在kotlin中&#xff0c;有一种函数叫内联函数&#xff0c;这种函数标识符是inline&#xff0c;但是好多人对这个函数的理解只停留在八股文中&#xff0c;内容函数的用法和普通函数没有区别&#xff0c;但是在编译原理上是有&#xff0c;对程序的性能有一定的影响。 二…...

林沛满---一个面试建议

在应聘一个技术职位之前&#xff0c;做好充分的准备无疑能大大提高成功率。这里所说的准备并不是指押题&#xff0c;因为有经验的面试官往往准备了海量的题库&#xff0c;押中的概率太低。比如我有位同事的题库里有上百道题&#xff0c;内容涵盖了编程、操作系统、网络、存储……...

CMake教程-第 5 步:安装和测试

CMake教程-第 5 步&#xff1a;安装和测试 1 CMake教程介绍2 学习步骤Step 1: A Basic Starting PointStep 2: Adding a LibraryStep 3: Adding Usage Requirements for a LibraryStep 4: Adding Generator ExpressionsStep 5: Installing and TestingStep 6: Adding Support f…...

移动应用-Android开发基础\核心知识点

Android开发基础 知识点 1 介绍了解2 系统体系架构3 四大应用组件4 移动操作系统优缺点5 开发工具6 配置工具7 下载相关资源8JDK下载安装流程9配置好SDK和JDK环境10 第一个Hello word11 AS开发前常用设置12模拟器使用运行13 真机调试14 AndroidUI基础布局15 加载展示XML布局16…...

Java读取并转换字符串中的浮点数

在写Android接收蓝牙数据的时候&#xff0c;由于传过来的蓝牙数据转换后都为字符串格式&#xff0c;但是需要从其中提取出来浮点数&#xff0c;所以通过查阅资料写出了从字符串中提取并转换为浮点数的方法&#xff0c;特记录下来以供参考。 目录 原始数据内容 提取字符串中的…...

SQL: 索引原理与创建索引的规范

SQL 索引是一种数据结构&#xff0c;用于加速数据库查询操作。它通过在表的列上创建索引&#xff0c;提供了一种快速查找数据的方法&#xff0c;减少了数据库的扫描和比较操作&#xff0c;从而提高了查询性能。索引根据其实现方式可以分为多种类型&#xff0c;如 B-树索引、哈希…...

基于STM32_DS18B20单总线传感器驱动

基于STM32_DS18B20单总线传感器驱动 文章目录 基于STM32_DS18B20单总线传感器驱动前言一、BS18B20&#xff1f;二、原理1.复位与检验2.基本命令3.唯一ROM识别码4.温度转换 三、驱动代码四、注意事项 前言 本文以一款典型的单总线传感器及其驱动——DS18B20为例&#xff0c;简单…...

目标识别项目实战:基于Yolov7-LPRNet的动态车牌目标识别算法模型(三)

前言 目标识别如今以及迭代了这么多年&#xff0c;普遍受大家认可和欢迎的目标识别框架就是YOLO了。按照官方描述&#xff0c;YOLOv8 是一个 SOTA 模型&#xff0c;它建立在以前 YOLO 版本的成功基础上&#xff0c;并引入了新的功能和改进&#xff0c;以进一步提升性能和灵活性…...

springboot线程池创建与使用

/*** author: zcs* Title: TaskPoolConfig* Description: 线程池配置* date: 2023/10/11 17:52*/ Component public class TaskPoolConfig {Bean(name "threadPoolTaskExecutor")public Executor taskExecutor() {ThreadPoolTaskExecutor taskExecutor new ThreadP…...

UDP和TCP特点(部分)对比:

传输层的两个主要协议&#xff1a;TCP 和 UDP UDP和TCP特点&#xff08;部分&#xff09;对比&#xff1a; UDP&#xff1a;无连接&#xff0c; 不可靠传输&#xff0c; 面向数据报&#xff0c; 全双工。 TCP&#xff1a;有连接&#xff0c; 可靠传输&#xff0c; 面向字节流…...

PostMan环境变量、全局变量、动态参数使用

一、环境准备 postmanmoco [{"description": "登录认证","request": {"uri": "/login","method": "post","forms": {"user": "admin","password": "a123…...

服务器数据恢复-服务器硬盘指示灯黄灯闪烁的数据恢复案例

服务器数据恢复环境&#xff1a; 服务器面板上的硬盘指示灯显示黄色是一种警告&#xff0c;提示指示灯对应的服务器硬盘已经被服务器识别出存在故障&#xff0c;硬盘即将下线。如果出现这种情况&#xff0c;建议服务器管理员/运维人员及时用完好的硬盘替换显示黄色指示灯对应的…...

ts 分发

在 TypeScript 中&#xff0c;"分发"&#xff08;distributive&#xff09;是指在条件类型中的联合类型上自动进行类型推断的机制。当使用条件类型操作联合类型时&#xff0c;TypeScript 会自动将联合类型中的每个成员都应用该条件类型。 下面是一个示例&#xff1a…...