基于CSS属性display:table的表格布局的使用

项目改造中遇到DIV+CSS实现的table,新需求需要在表格使用单元格合并,网上调查返现CSS display:table实现的table表格,没有单元格的属性和样式,经过一番思考,曲折现实了单元格的合并,即采用正行嵌套一个单独的display:table的DIV,然后在嵌套的表格DIV内部通过控制行列数和行列的高度,实现单元格合并。个人建议全新实现使用<table> HTML标签即可

一、CSS display属性的表格布局相关属性的解释:

  • table    此元素会作为块级表格来显示(类似 <table>),表格前后带有换行符。
  • table-row-group    此元素会作为一个或多个行的分组来显示(类似 <tbody>)。
  • table-header-group    此元素会作为一个或多个行的分组来显示(类似 <thead>)。
  • table-footer-group    此元素会作为一个或多个行的分组来显示(类似 <tfoot>)。
  • table-row    此元素会作为一个表格行显示(类似 <tr>)。
  • table-column-group    此元素会作为一个或多个列的分组来显示(类似 <colgroup>)。
  • table-column    此元素会作为一个单元格列显示(类似 <col>)
  • table-cell    此元素会作为一个表格单元格显示(类似 <td> 和 <th>)
  • table-caption    此元素会作为一个表格标题显示(类似 <caption>)

二、示例代码

1、普通表格

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="UTF-8">
 5 <title>display普通表格</title>
 6 <style type="text/css">
 7 .table, .table * {margin: 0 auto; padding: 0;font-size: 14px;font-family: Arial, 宋体, Helvetica, sans-serif;}
 8 .table {display: table; width: 80%; border-collapse: collapse;}
 9 .table-tr {display: table-row; height: 30px;}
10 .table-th {display: table-cell;font-weight: bold;height: 100%;border: 1px solid gray;text-align: center;vertical-align: middle;background-color:#E5E5E5;}
11 .table-td {display: table-cell; height: 100%;border: 1px solid gray; text-align: center;vertical-align: middle;}
12 </style>
13 </head>
14 <body>
15     <div class="table">
16         <div class="table-tr">
17             <div class="table-th">省份/直辖市</div>
18             <div class="table-th">GDP(亿元)</div>
19             <div class="table-th">增长率</div>
20         </div>
21         <div class="table-tr">
22             <div class="table-td">广东</div>
23             <div class="table-td">72812</div>
24             <div class="table-td">8.0%</div>
25         </div>
26         <div class="table-tr">
27             <div class="table-td">河南</div>
28             <div class="table-td">37010</div>
29             <div class="table-td">8.3%</div>
30         </div>
31         <div class="table-tr">
32             <div class="table-td">江苏</div>
33             <div class="table-td">70116</div>
34             <div class="table-td">8.5%</div>
35         </div>
36     </div>
37 </body>
38 </html>

运行效果

2、列合并实现表格

实现思路:基于display:table的表格实现,没有<table>的rowspan和colspan单元格合并的实现,所以曲折实现,将表格每行单独嵌套一个独立的表格,这样在嵌套的独立表格内部,单元格合并就能通过控制嵌套表格的行数和列数以及单元格的宽高来实现

 1 <!DOCTYPE html>
 2 <html>
 3 <head>
 4 <meta charset="UTF-8">
 5 <title>基于display列合并表格</title>
 6 <style type="text/css">
 7 .table, .table * {margin: 0 auto; padding: 0;font-size: 14px;font-family: Arial, 宋体, Helvetica, sans-serif;}
 8 .table {display: table; width: 80%; border-collapse: collapse;}
 9
10 .table-tr {display: table-row; height: 30px;}
11 .table-th {display: table-cell;font-weight: bold;height: 100%;border: 1px solid gray;text-align: center;vertical-align: middle;background-color:#E5E5E5;}
12 .table-td {display: table-cell; height: 100%;}
13
14 .sub-table {width: 100%;height: 100%;display: table;}
15 .sub-table-tr {display: table-row; height: 100%;}
16 .sub-table-td {display: table-cell; height: 100%;border: 1px solid gray; text-align: center;vertical-align: middle;}
17
18 </style>
19 </head>
20 <body>
21
22 <div class="table">
23     <div class="table-tr">
24         <div class="table-td">
25             <div class="sub-table">
26                 <div class="sub-table-tr">
27                     <div class="table-th" style="width: 40%;">省份/直辖市</div>
28                     <div class="table-th" style="width: 30%;">GDP(亿元)</div>
29                     <div class="table-th" style="width: 30%;">增长率</div>
30                 </div>
31             </div>
32         </div>
33     </div>
34     <div class="table-tr">
35         <div class="table-td">
36             <div class="sub-table">
37                 <div class="sub-table-tr">
38                     <div class="sub-table-td" style="width: 40%;">广东</div>
39                     <div class="sub-table-td" style="width: 30%;">72812</div>
40                     <div class="sub-table-td" style="width: 30%;">8.0%</div>
41                 </div>
42             </div>
43         </div>
44     </div>
45     <div class="table-tr">
46         <div class="table-td">
47             <div class="sub-table">
48                 <div class="sub-table-tr">
49                     <div class="sub-table-td" style="width: 40%;">河南</div>
50                     <div class="sub-table-td" style="width: 30%;">37010</div>
51                     <div class="sub-table-td" style="width: 30%;">8.3%</div>
52                 </div>
53             </div>
54         </div>
55     </div>
56     <div class="table-tr">
57         <div class="table-td">
58             <div class="sub-table">
59                 <div class="sub-table-tr">
60                     <div class="sub-table-td" style="width: 40%;">江苏</div>
61                     <div class="sub-table-td" style="width: 30%;">70116</div>
62                     <div class="sub-table-td" style="width: 30%;">8.5%</div>
63                 </div>
64             </div>
65         </div>
66     </div>
67     <div class="table-tr">
68         <div class="table-td">
69             <div class="sub-table">
70                 <div class="sub-table-tr">
71                     <div class="sub-table-td" style="width: 70%;">各省/直辖市GDP平均增长率</div>
72                     <div class="sub-table-td" style="width: 30%;">8.26%</div>
73                 </div>
74             </div>
75         </div>
76     </div>
77 </div>
78 </body>
79 </html>

运行效果

3、行合并表格

行合并的实现思路:与列合并的实现思路类似,将有单元格合并的列单独嵌套一个display为table的DIV,高度=单行高*单元格合并数目的倍数,同行的其他列同样均单独嵌套DIV,实例代码如下

  1 <!DOCTYPE html>
  2 <html>
  3 <head>
  4 <meta charset="UTF-8">
  5 <title>基于display的行合并表格</title>
  6 <style type="text/css">
  7 .table, .table * {margin: 0 auto; padding: 0;font-size: 14px;font-family: Arial, 宋体, Helvetica, sans-serif;}
  8 .table {display: table; width: 80%; border-collapse: collapse;}
  9
 10 .table-tr {display: table-row; height: 30px;}
 11 .table-th {display: table-cell;font-weight: bold;height: 100%;border: 1px solid gray;text-align: center;vertical-align: middle;background-color:#E5E5E5;}
 12 .table-td {display: table-cell; height: 100%;}
 13
 14 .sub-table {width: 100%;height: 100%;display: table;}
 15 .sub-table-tr {display: table-row; height: 100%;}
 16 .sub-table-td {display: table-cell; height: 100%;border: 1px solid gray; text-align: center;vertical-align: middle;}
 17
 18 </style>
 19 </head>
 20 <body>
 21
 22 <div class="table">
 23     <div class="table-tr">
 24         <div class="table-td">
 25             <div class="sub-table">
 26                 <div class="sub-table-tr">
 27                     <div class="table-th" style="width: 40%;">省份/直辖市</div>
 28                     <div class="table-th" style="width: 30%;">GDP(亿元)</div>
 29                     <div class="table-th" style="width: 30%;">增长率</div>
 30                 </div>
 31             </div>
 32         </div>
 33     </div>
 34     <div class="table-tr">
 35         <div class="table-td">
 36             <div class="sub-table">
 37                 <div class="sub-table-tr">
 38                     <div class="sub-table-td" style="width: 40%;">广东</div>
 39                     <div class="sub-table-td" style="width: 30%;">72812</div>
 40                     <div class="sub-table-td" style="width: 30%;">8.0%</div>
 41                 </div>
 42             </div>
 43         </div>
 44     </div>
 45     <div class="table-tr" style="height:60px;">
 46         <div class="table-td">
 47             <div class="sub-table">
 48                 <div class="sub-table-tr">
 49                     <div class="sub-table-td" style="width: 40%; border: none;">
 50                         <div class="sub-table">
 51                             <div class="sub-table-tr" style="height:50%;">
 52                                 <div class="sub-table-td" style="width: 100%; height:50%;">
 53                                     河南
 54                                 </div>
 55                             </div>
 56                             <div class="sub-table-tr" style="height:50%;">
 57                                 <div class="sub-table-td" style="width: 100%; height:50%;">
 58                                     江苏
 59                                 </div>
 60                             </div>
 61                         </div>
 62                     </div>
 63                     <div class="sub-table-td" style="width: 30%;border: none;">
 64                         <div class="sub-table">
 65                             <div class="sub-table-tr" style="height:50%;">
 66                                 <div class="sub-table-td" style="width: 100%; height:50%;">
 67                                     37010
 68                                 </div>
 69                             </div>
 70                             <div class="sub-table-tr" style="height:50%;">
 71                                 <div class="sub-table-td" style="width: 100%; height:50%;">
 72                                     70116
 73                                 </div>
 74                             </div>
 75                         </div>
 76
 77                     </div>
 78
 79                     <div class="sub-table-td" style="width: 30%;border: none;">
 80                         <div class="sub-table">
 81                             <div class="sub-table-tr">
 82                                 <div class="sub-table-td" style="width: 100%;">
 83                                     8.4%
 84                                 </div>
 85                             </div>
 86                         </div>
 87                     </div>
 88                 </div>
 89             </div>
 90         </div>
 91     </div>
 92     <div class="table-tr">
 93         <div class="table-td">
 94             <div class="sub-table">
 95                 <div class="sub-table-tr">
 96                     <div class="sub-table-td" style="width: 70%;">各省/直辖市GDP平均增长率</div>
 97                     <div class="sub-table-td" style="width: 30%;">8.26%</div>
 98                 </div>
 99             </div>
100         </div>
101     </div>
102 </div>
103 </body>
104 </html>

运行效果:

END

时间: 2024-12-11 10:58:14

基于CSS属性display:table的表格布局的使用的相关文章

一段代码弄清楚CSS属性display和visibility的差别

CSS如果想要将DOM元素隐藏,有2种做法:将display属性设置成none,或者将visibility属性设置成hidden.下面的html代码没有设置display和visibility属性. <div id="outA" style="width:400px; height:400px; background:#CDC9C9;position:relative;"> <div id="outB" style="

用CSS实现“表格布局”

当我们进行浮动布局时,会发现存在着非浮动元素与浮动元素的底部难以对齐的情况,这就是浮动布局的缺陷.因此,过去的前端工作者曾利用<table>以实现"表格布局".因为表格中同一行的单元格行高总是一致的,所以"表格布局"可以避免"浮动布局"时出现的"底部对不齐"情况,下面是经典的利用<table>实现"双栏布局"的框架: <table> <tr> <td&g

CSS属性 table 的 border-collapse 边框合并

说明 该CSS属性用来设定表格的行和列的边框是合并成单边框,还是分别有各自的边框 separate 缺省值.边框分开,不合并.collapse 边框合并.即如果相邻,则共用同一个边框. 虽然在DIV+CSS 时代 table 的权重越来越低,但是有时候,还是局部地方table 还是挺好用的 特别是制表方面,还是table 比较的方便.当然,制表肯定少不了边框,但是如果你直接在td上加边框,就会出现一种情况,table 的外围一周是单线,里面都是双线. 你也可以通过其他分开设置的方法实现全部单线,

CSS属性中Display与Visibility的不同

大多数人很容易将CSS属性display和visibility混淆,它们看似没有什么不同,其实它们的差别却是很大的.visibility属性用来确定元素是显示还是隐藏,这用visibility="visible|hidden"来表示,visible表示显示,hidden表示隐藏.当visibility被设置为"hidden"的时候,元素虽然被隐藏了,但它仍然占据它原来所在的位置.例: <script language="JavaScript"

HTML表格布局实际使用详解

现在,表格<table>一般不再用于网页整体的布局.不过,在面对某些特定的设计,如表单输入.数据呈现时,表格则可能是最恰当的选择. 关于表格的直观印象,就是由多个单元格(cell)整齐排列而成的元素,可以明确看出行(row)和列(column).这可以联想到Excel,由Excel在数据处理和统计上的地位,就可以理解网页中表格的意义. 简单来说,能直观感受到多个元素是以行和列的概念排列时,用表格会让你轻松很多.如caniuse.com中应用表格的例子: 表格布局计算 使用表格很简单,但有时候表

display:table和display:table-cell的妙用

display的table和table-cell一般情况下用的不多,所以很少有人去关注它,但他们两个联手起来会给你惊喜! 这里抛出这样一个问题,如下,让块里的多行文字垂直居中?一说到垂直居中就会想到,单行文字垂直居中line-height等于height:块级元素垂直居中,position定位或者flex布局.但这里我介绍display:table和table-cell是如何让多行文字垂直居中的.虽然感觉用的不多,但是在某些时候还是挺管用的,如下 直接上代码: html: <div class=

使用display:table 做多菜單切換

</pre><p>做成這種效果<img src="" alt="" /></p><p><img src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAhIAAAA/CAYAAAC1kCF+AAAIjklEQVR4Ae2cz4oUPRDAez9GvIs32cuuh30NH2KvwvcGXgWFAgWvvsEH3n0GX8OLXvaueFrEw3

基于display:table的CSS布局

当IE8发布时,它将支持很多新的CSS display属性值,包括与表格相关的属性值:table.table-row和table-cell,它也是最后一款支持这些属性值的主流浏览器.它标志着复杂CSS布局技术的结束,同时也给了HTML表格布局致命一击.最终,使用CSS布局来制作出类似于table布局的栅格将会变得十分迅速和简单.网页元素应用上那些与表格相关的display属性值后,能够模仿出与表格相同的特性.我将会在该文中给大家演示这种方法给CSS布局带来的巨大影响. 使用CSS表格 CSS表格

CSS display:table属性用法- 轻松实现了三栏等高布局

display:table:此元素会作为块级表格来显示(类似 <table>); display:table-cell属性指让标签元素以表格单元格的形式呈现,类似于td标签.目前IE8+以及其他现代浏览器都是支持此属性的,但是IE6/7只能对你说sorry了,这一事实也是大大制约了display:table-cell属性在实际项目中的应用,但是现在是移动端的天下了,ie 说拜拜吧~ 与其他一些display属性类似,table-cell同样会被其他一些CSS属性破坏,例如float, posi