col:关于colgroup和col标签的介绍,使用其达到固定表头的效果 2024-05-03 01:11:36 0 0 今天摸鱼的时候看阮神的博客,里面介绍了position的用法,最后一部分介绍了一个新的定位属性sticky,其中有一个固定表头的案例,我发现案例里面的固定表头只能用于那种占据整个页面的那种大表,但是我们常用的表格通常是只在一部分区域使用,于是查了一下固定表头的实现,在其中一种实现方法中发现了colgroup和col标签,回想起element-ui的表格组件也用了这两个标签,属实好奇,百度后决定记录一下。 目录1、colgroup和col2、colgroup和col标签的区别3、使用colgroup和col标签做固定表头 1、colgroup和col 通常我们对table标签里面的某一列设置宽度时,都是使用伪类选择器nth-child对对应列的td的宽度进行设置。这样写起来未免麻烦,而且在代码量比较大的情况下,要找到这个样式进行修改也不是那么容易,而且语义不够明确。这时我们就可以用一个替代品来解决这个问题,没错,就是她俩:colgroup和col。 这两个标签使用起来非常简单,就是用来控制table的列的样式,col即column(列)的开头三个字母,group有集体的意思,于是我们可以很自然的猜想col需要放在colgroup的里面。我们首先看个案例:<table><colgroup style="width: 100px;background-color: red;"></colgroup><colgroup style="width: 200px;background-color: green;"></colgroup><tr><td>王小波</td><td>李银河</td></tr><tr><td>钱钟书</td><td>杨绛</td></tr><tr><td>梁思成</td><td>林徽因</td></tr></table> 效果如下: 可见第一列的宽度都被设置成了100px,背景色为红色,第二列的宽度为200px,背景色为绿色。上面的代码还可以这么写:<table><colgroup><col style="width: 100px;background-color: red;" ><col style="width: 200px;background-color: green;" ></colgroup><tr><td>王小波</td><td>李银河</td></tr><tr><td>钱钟书</td><td>杨绛</td></tr><tr><td>梁思成</td><td>林徽因</td></tr></table> 可以得到相同的效果。colgroup和col均有5个属性,但是只有span属性被html5支持,其余都被废弃了。span的作用是跨列,即将样式赋予从当前列到跨越的所有列。如下:<table><colgroup><col style="width: 100px;background-color: red;" span="2" ></colgroup><tr><td>王小波</td><td>李银河</td></tr><tr><td>钱钟书</td><td>杨绛</td></tr><tr><td>梁思成</td><td>林徽因</td></tr></table> 效果如下: colgroup的用法相同,效果也一样。 注:colgroup标签必须在table中使用且必须位于 caption 元素之后,thead、tbody、tfoot、tr 元素之前。col标签通常用于colgroup中使用,且在 HTML 中,<col> 标签没有结束标签。在XHTML中,<col> 标签必须被正确的关闭。 2、colgroup和col标签的区别 目前尚未找到两者的区别,但是个人认为,如果要给表格设置公共样式,例如固定列宽,可以使用colgroup,如果表格每一列的样式不一致,则可以使用col,因为col的样式会覆盖colgroup的样式。个人更推荐使用col,因为利于后期维护。且语义更明确。 3、使用colgroup和col标签做固定表头 下面是转载的文飞的代码。 html部分<div style="width: 800px;"> <div class="table-head"> <table> <colgroup> <col style="width: 80px;" /> <col /> </colgroup> <thead> <tr> <th>序号</th> <th>内容</th> </tr> </thead> </table> </div> <div class="table-body"> <table> <colgroup> <col style="width: 80px;" /> <col /> </colgroup> <tbody> <tr> <td>1</td> <td>我只是用来测试的</td> </tr> <tr> <td>2</td> <td>我只是用来测试的</td> </tr> <tr> <td>3</td> <td>我只是用来测试的</td> </tr> <tr> <td>4</td> <td>我只是用来测试的</td> </tr> <tr> <td>5</td> <td>我只是用来测试的</td> </tr> <tr> <td>6</td> <td>我只是用来测试的</td> </tr> <tr> <td>7</td> <td>我只是用来测试的</td> </tr> <tr> <td>8</td> <td>我只是用来测试的</td> </tr> <tr> <td>9</td> <td>我只是用来测试的</td> </tr> <tr> <td>10</td> <td>我只是用来测试的</td> </tr> <tr> <td>11</td> <td>我只是用来测试的</td> </tr> <tr> <td>12</td> <td>我只是用来测试的</td> </tr> <tr> <td>13</td> <td>我只是用来测试的</td> </tr> <tr> <td>14</td> <td>我只是用来测试的</td> </tr> <tr> <td>15</td> <td>我只是用来测试的</td> </tr> </tbody> </table> </div> </div> css部分.table-head { padding-right: 17px; background-color: #999; color: #000; } .table-body { width: 100%; height: 300px; overflow-y: scroll; } .table-head table, .table-body table { width: 100%; } .table-body table tr:nth-child(2n+1) { background-color: #f2f2f2; } 这里主要是通过colgroup和col控制列宽,使得表头列宽和内容部分列宽一致。 以上。 收藏(0)