使用 html 标签 table 时,布局的方式很容易忘记,很多新手在调整表格的样式时浪费了不少的时间,其他只要记住一些常用的技巧,就可以应付大部分的表格使用场景。
1、表格常用的范式,该模式也适用于直接应用 div + css 进行表格布局
html 代码
<table class="table">
<tr class="row">
<td class="cell">张三</td>
<td class="cell">李四</td>
<td class="cell">王五</td>
</tr>
<tr class="row">
<td class="cell">张三</td>
<td class="cell">李四</td>
<td class="cell">王五</td>
</tr>
</table>
<!-- 与上面的效果是一样的 -->
<div class="table">
<div class="row">
<div class="cell">张三</div>
<div class="cell">李四</div>
<div class="cell">王五</div>
</div>
<div class="row">
<div class="cell">张三</div>
<div class="cell">李四</div>
<div class="cell">王五</div>
</div>
</div>
css 样式代码
.table {
border-collapse: collapse; /* 表格的边框合并为一个单一的边框 */
border-spacing: 0; /* 设置相邻单元格的边框间的距离为 0 */
display: table;
border: 1px solid #ccc;
margin: 5px;
/* display: table 时 padding 会失效 */
}
.row {
display: table-row;
border: 1px solid #ccc;
/* display: table-row 时 margin、padding 同时失效 */
}
.cell {
display: table-cell;
border: 1px solid #ccc;
padding: 10px;
width: 100px;
text-align: center;
/* display: table-cell 时 margin 会失效 */
}
2、使用 col 对各的列宽进行单独控制
html 代码如下
<table width="100%" border="1">
<colgroup>
<col width="100" /> <!-- width 规定列的宽度 pixels / % / relative_length -->
<col width="200" />
<col width="100" />
</colgroup>
<thead>
<tr>
<th>ISBN</th>
<th>Title</th>
<th>Price</th>
</tr>
</thead>
<tbody>
<tr>
<td>3476896</td>
<td>My first HTML</td>
<td>$53</td>
</tr>
<tr>
<td>2489604</td>
<td>My first CSS</td>
<td>$47</td>
</tr>
</tbody>
</table>
3、table 表头分组
效果如下:
源码:
<table>
<thead>
<tr>
<td></td>
<th colspan="4">部门情况</th>
<th colspan="4">外包情况</th>
</tr>
<tr>
<td></td>
<th>人数</th>
<th>计划饱和度</th>
<th>绝对饱和度</th>
<th>相对饱和度</th>
<th>人数</th>
<th>计划饱和度</th>
<th>绝对饱和度</th>
<th>相对饱和度</th>
</tr>
</thead>
<tbody>
<tr>
<th>
<a href="#">信息系统开发</a>
</th>
<td>30</td>
<td>100%</td>
<td>100%</td>
<td>100%</td>
<td>5</td>
<td>100%</td>
<td>100%</td>
<td>100%</td>
</tr>
<tr>
<th>
<a href="#">业务系统开发</a>
</th>
<td>30</td>
<td>100%</td>
<td>100%</td>
<td>100%</td>
<td>5</td>
<td>100%</td>
<td>100%</td>
<td>100%</td>
</tr>
<tr>
<th>
<a href="#">支撑系统开发</a>
</th>
<td>30</td>
<td>100%</td>
<td>100%</td>
<td>100%</td>
<td>5</td>
<td>100%</td>
<td>100%</td>
<td>100%</td>
</tr>
</tbody>
</table>
4、table 固定头部、固定左则的列、固定右边的列如何实现?
实现思路:
可以参考归 element-UI 中的 table 组件,主要是通过创建几个相同的 col 控制的表格然后使用绝对定位 / 使用 css3 到原始表格上作为遮罩来实现看上去固定表头、固定左列或者固定右列的效果。(注意:如果想只通过固定 thead 来实现表头固定,滚动时会有 bug)
下面实现一个固定标题的表格:
源码如下:
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>修改代码,右边会自动显示结果</title>
<!--适应移动端-->
<meta name="viewport" content="width=device-width, initial-scale=1">
<!--css样式-->
<style>
table {
border: 1px solid #ccc;
border-collapse: collapse;
width: 800px;
}
table td,
table th {
border: 1px solid #ccc;
padding: 10px;
}
.content {
width: 400px;
overflow: auto;
background: #fff;
}
.title {
font-size: 20px;
padding: 10px 0;
width: 400px;
background-color: #efefef;
}
.sub-title {
font-size: 18px;
width: 380px;
background-color: #efefef;
}
</style>
<!--引用jquery库-->
<script src="https://libs.baidu.com/jquery/1.11.3/jquery.min.js"></script>
</head>
<body>
<div class="container">
<div class="content">
<legend class="title">
<span class="title__no">1、</span>
<span class="title__text">我是固定的大标题,滚动滚动条我也不变</span>
</legend>
<table cellpadding="0">
<thead>
<tr>
<th align="left">列1 列1列1列1列1列1列1列1列1列1</th>
<th align="left">列2 列2列2列2列2列2列2列2列2列2</th>
<th align="left">列3 列3列3列3列3列3列3列3列3列3</th>
<th align="left">列4 列4列4列4列4列4列4列4列4列4</th>
</tr>
</thead>
<tbody>
<tr>
<td align="left" colspan="4">
<div class="sub-title">1.1 我是固定的子标题,滚动滚动条我也不变</div>
</td>
</tr>
<tr>
<td align="left">
<div>1.1 内容</div>
</td>
<td align="left">
<div>1.1 内容</div>
</td>
<td align="left">
<div>1.1 内容</div>
</td>
<td align="left">
<div>1.1 内容</div>
</td>
</tr>
<tr>
<td align="left" colspan="4">
<div class="sub-title">1.2 我是固定的子标题,滚动滚动条我也不变</div>
</td>
</tr>
<tr>
<td align="left">
<div>内容内容内容内容内容内容内容内容内容内容</div>
</td>
<td align="left">
<div>内容内容内容内容内容内容内容内容内容</div>
</td>
<td align="left">
<div>内容内容内容内容内容内容内容内容</div>
</td>
<td align="left">
<div>内容内容内容内容内容内容内容内容内容内容</div>
</td>
</tr>
<tr>
<td align="left" colspan="4">
<div class="sub-title">1.3 我是固定的子标题,滚动滚动条我也不变</div>
</td>
</tr>
<tr>
<td align="left">
<div>内容内容内容内容内容内容</div>
</td>
<td align="left">
<div>内容内容内容内容内容</div>
</td>
<td align="left">
<div>内容内容内容内容内容内容</div>
</td>
<td align="left">
<div>内容内容内容内容内容内容内容内容</div>
</td>
</tr>
</tbody>
</table>
</div>
<script type="text/javascript">
$(document).ready(function() {
var $els = $('.content');
$els.each(function() {
var This = $(this);
var $titles = This.find('.title, .sub-title');
This.parent().css('position', 'relative');
$titles.each(function() {
var _this = $(this);
var offset = _this.position();
var width = _this.width();
var newEl = _this.clone();
_this.css('opacity', '0');
newEl.attr('style', 'display: block !important;width: ' + width + 'px;word-break: break-all;white-space: normal;position:absolute;');
newEl.offset({
top: offset.top,
left: offset.left
});
This.parent().append(newEl);
});
});
});
</script>
</body>
</html>
5、关于 thead、tbody、tfoot
如果您使用 thead、tfoot 以及 tbody 元素,您就必须使用全部的元素。它们的出现次序是:thead、tfoot、tbody,这样浏览器就可以在收到所有数据前呈现页脚了
6、table 列等宽样式设置
table {
table-layout: fixed;
display: table;
}
参考引用:
https://www.cnblogs.com/cowboybusy/p/10530547.html
https://www.w3school.com.cn/tags/tag_colgroup.asp