本文介绍: 除了使用HTML的table元素外,我们可以通过display: table/inlinetable;设置元素内部布局类型表格布局。并结合tablecelltablerow相关CSS属性可以实现HTML中table系列元素的效果具有表头、表尾、行、单元格概念,让元素以表格的形式进行布局

一、简介

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

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

浏览器兼容性

在这里插入图片描述

二、系列属性

1、table系列display属性值
所有案例都以下面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-headergroup;
7、display: table-footergroup;
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;的元素)相对于表格的位置,该属性的属性值有两种:

2、bordercollapse

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

<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

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

<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)的垂直对齐方式。该属性的属性值有:

<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文档

原文地址:https://blog.csdn.net/weixin_45092437/article/details/133694782

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任

如若转载,请注明出处:http://www.7code.cn/show_44902.html

如若内容造成侵权/违法违规/事实不符,请联系代码007邮箱suwngjj01@126.com进行投诉反馈,一经查实,立即删除

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注