Html 是否可能有一个TR元素比它包含的TD元素高得多?
在重构一个动态创建表的例程时,我发现自己正在考虑一种更好的方法来显示(有效的)节分隔符 创建的标记与此类似:Html 是否可能有一个TR元素比它包含的TD元素高得多?,html,css,Html,Css,在重构一个动态创建表的例程时,我发现自己正在考虑一种更好的方法来显示(有效的)节分隔符 创建的标记与此类似: <table> <tr> <td>Column 0</td> <td>Column 1</td> <td>Column 2</td> <td>Column 3</td> <td
<table>
<tr>
<td>Column 0</td>
<td>Column 1</td>
<td>Column 2</td>
<td>Column 3</td>
<td>Column 4</td>
</tr>
<tr>
<td>Column 0</td>
<td>Column 1</td>
<td>Column 2</td>
<td>Column 3</td>
<td>Column 4</td>
</tr>
<tr>
<td colspan="5">Separator Text</td>
</tr>
<tr>
<td>Column 0</td>
<td>Column 1</td>
<td>Column 2</td>
<td>Column 3</td>
<td>Column 4</td>
</tr>
</table>
到目前为止,我所有的努力都与此非常相似:
电流输出
我尝试了以下样式定义的几种变体:
tr.section-start {
display: /* literally every valid value according to Chrome Dev Tools */
flex: /* various values */
height: 4em;
max-height: 4em;
line-height: 1em;
background-color: #0F0; /* used as a highlighter */
}
tr.section-start::before {
content: attr(data-section-text);
}
tr.section-start td {
display: /* literally every valid value according to Chrome Dev Tools */
flex: /* various values */
height: 1em;
max-height: 1em;
line-height: 1em;
border: 1px solid black;
}
问题是,无论我尝试了什么,我都无法让tr.section-start
显示我想要的内容。以下是我想做的:
所需输出
假设我想做的是可能的,我如何在CSS中设计样式来实现我的目标
此外,考虑到我正在重新编写创建表和行的例程,我在标记上很灵活(如果需要更改),但我的任务是使页面符合标准,因此如果标记需要更改,它应该是有效的HTML5。只需将tr设置为更高的高度:
tr.section-start {
line-height: 5em;
}
然后html:
<table>
<thead>...</thead>
<tbody>
<tr class="section-start" data-sectionText="Separator Text">
<td>Column 0</td>
<td>Column 1</td>
<td>Column 2</td>
<td>Column 3</td>
<td>Column 4</td>
</tr>
<tr>
<td>Column 0</td>
<td>Column 1</td>
<td>Column 2</td>
<td>Column 3</td>
<td>Column 4</td>
</tr>
<tr>
<td>Column 0</td>
<td>Column 1</td>
<td>Column 2</td>
<td>Column 3</td>
<td>Column 4</td>
</tr>
</tbody>
<tfoot>...</tfoot>
<caption />
</table>
...
第0列
第1栏
第2栏
第3栏
第4栏
第0列
第1栏
第2栏
第3栏
第4栏
第0列
第1栏
第2栏
第3栏
第4栏
...
是的,你可以像这样完成它。。。至少这是我认为你想要的 唯一的问题是,如果你有bg颜色的细胞,然后它会显示通过边界
。部分开始{
边框顶部:20px实心透明
}
...
第0列
第1栏
第2栏
第3栏
第4栏
第0列
第1栏
第2栏
第3栏
第4栏
第0列
第1栏
第2栏
第3栏
第4栏
第0列
第1栏
第2栏
第3栏
第4栏
...
添加以下样式:
table {
position: relative; /* for absolute-positioned pseudo-elements */
}
td {
padding: 0.5em;
}
tr.section-start::after { /* use ::after instead of ::before */
content: attr(data-sectionText);
position: absolute; /* positioned based on table */
left: 0; /* stretch from start to */
right: 0; /* ... end of the table row */
line-height: 30px; /* height of the section text */
padding: 0 0.5em; /* maintain cell's padding */
}
.section-start td {
padding-top: calc(30px + 0.5em); /* height of the section text + the cell's padding */
}
诀窍是在伪元素之后使用::。::before
伪元素在行首创建一个您不需要的单元格。在行的末尾创建它并不重要,因为您可以根据需要使用CSS移动它
片段:
*{
框大小:边框框;
}
桌子{
位置:相对;/*用于绝对定位元素*/
边界间距:0;
边框:1px纯黑;
}
运输署{
填充:0.5em;
左边框:1px实心#ddd;
边框底部:1px实心#bbb;
}
tr.section-start::after{/*使用::after代替::before*/
内容:attr(数据部分文本);
位置:绝对;/*根据表格定位*/
左:0;/*从起点延伸到终点*/
右:0;/*…表格行的末尾*/
行高:30px;/*节文本的高度*/
背景:ddd;
边框:1px实心#888;
填充:0.5em;
}
.路段起点td{
背景:黄色;
顶部填充:计算(30px+0.5em);/*节文本高度+一些填充*/
}
第0列
第1栏
第2栏
第3栏
第4栏
第0列
第1栏
第2栏
第3栏
第4栏
第0列
第1栏
第2栏
第3栏
第4栏
第0列
第1栏
第2栏
第3栏
第4栏
测试宽度的额外文本
第1栏
第2栏
第3栏
第4栏
这确实会使行更高,但是td
元素会拉伸以填充额外的高度,无论我是否为td
元素指定了行高
。我不确定您还有什么其他样式,但您可以为td
元素提供透明的厚边框,这对你有用吗?如果它让我的输出看起来像标记为期望输出的图像,我很乐意尝试它。。。。我假设alpha为0
的rgba
颜色可以获得透明的边框颜色?我有一个解决方案,但如果表中只有一个部分,它就可以工作。这是否值得发布?@pete您只需为分隔行td设置边框顶部:20px实心透明
,这将为您提供内容向下推的视觉效果,但如果您的单元格具有bg颜色,它将显示通过。添加了一个answer@RickHitchcock所谓节,您是指只有一个tr
,其类为节开始
?还是只喜欢一个t车身
?我需要能够使用tbody
中的部分start
对多行进行分类。非常接近我要查找的内容!谢谢,请投赞成票。是否存在防止受影响行中的td
元素垂直拉伸以填充可用高度的方法?否则,所需的边框
属性会使其看起来非常奇怪…:)在重新检查了您的代码片段(它呈现的正是我想要的方式)之后,我意识到问题在于如何将样式应用到实际的表中。。。显然我今天早上需要更多的咖啡因。谢谢你的回答!哇,这是一个有趣的挑战:)
table {
position: relative; /* for absolute-positioned pseudo-elements */
}
td {
padding: 0.5em;
}
tr.section-start::after { /* use ::after instead of ::before */
content: attr(data-sectionText);
position: absolute; /* positioned based on table */
left: 0; /* stretch from start to */
right: 0; /* ... end of the table row */
line-height: 30px; /* height of the section text */
padding: 0 0.5em; /* maintain cell's padding */
}
.section-start td {
padding-top: calc(30px + 0.5em); /* height of the section text + the cell's padding */
}