经过一些调查,我没有找到这个问题的答案。有这个但它并没有真正回答我的问题。我想在CSS中"删除"整个HTML表格行,而不仅仅是其中的文本。这是否可能?从我链接的示例中,似乎tr样式甚至在Firefox浏览器中也不起作用。(无论如何,text-decoration只适用于文本)
经过一些调查,我没有找到这个问题的答案。有这个但它并没有真正回答我的问题。我想在CSS中"删除"整个HTML表格行,而不仅仅是其中的文本。这是否可能?从我链接的示例中,似乎tr样式甚至在Firefox浏览器中也不起作用。(无论如何,text-decoration只适用于文本)
是的,没错!
CSS:
table {
border-collapse: collapse;
}
td {
position: relative;
padding: 5px 10px;
}
tr.strikeout td:before {
content: " ";
position: absolute;
top: 50%;
left: 0;
border-bottom: 1px solid #111;
width: 100%;
}
HTML:
<table>
<tr>
<td>Stuff</td>
<td>Stuff</td>
<td>Stuff</td>
</tr>
<tr class="strikeout">
<td>Stuff</td>
<td>Stuff</td>
<td>Stuff</td>
</tr>
<tr>
<td>Stuff</td>
<td>Stuff</td>
<td>Stuff</td>
</tr>
</table>
#111
更改为您想要的颜色。 - dbinott我的回答(以下内容)说这是不可能的。我错了,正如@NicoleMorganErickson所指出的那样。请查看她的回答(并点赞!)以了解如何实现它。简而言之,您可以使用:before
伪类创建一个元素,在内容上方绘制跨越单元格中央的边框:
table { border-collapse:collapse } /* Ensure no space between cells */
tr.strikeout td { position:relative } /* Setup a new coordinate system */
tr.strikeout td:before { /* Create a new element that */
content: " "; /* …has no text content */
position: absolute; /* …is absolutely positioned */
left: 0; top: 50%; width: 100%; /* …with the top across the middle */
border-bottom: 1px solid #000; /* …and with a border on the top */
}
不,仅使用CSS和您的语义化表格标记是不可能实现的。如@JMCCreative所建议的,可以通过任何数量的方式在行上方定位一条线来实现视觉效果。color
、background-color
、font-style:italic
和/或text-decoration:line-through
的组合使整行明显地不同于其他行。(我个人会将文本“淡化”,使其变成比普通文本更接近背景的颜色,并加粗倾斜)
tr {
background-image: url('data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAYAAAAfFcSJAAAADUlEQVQIW2NkYGCQBAAAIwAbDJgTxgAAAABJRU5ErkJggg==');
background-repeat: repeat-x;
background-position: 50% 50%;
}
我使用http://www.patternify.com/生成1x1像素的图片链接。
在最近的 Bootstrap 4.3 ServiceNow Angular.js 项目中,我发现自己需要进行一些更改,于是采用了以下类似 Revoman 的 CSS:
tr.strikeout td.strike-able:before {
content: " ";
position: absolute;
display: inline-block;
padding: 12px 10px;
left: 0;
border-bottom: 2px solid #d9534f;
width: 100%;
}
我喜欢Nicole Morgan Erickson的答案,但是如果您完全实现他的解决方案可能会导致副作用。我进行了一些小的调整以确保这个问题不出错,如下所示... 这样我们就不会在每个表或每个td上全局修改此CSS。
我还想在行上放一个按钮来划掉该行,但是为了可见性,我不想划掉带有按钮的列。我只想划掉其余的行。 为此,我使每个想要能够显示删除线的列也必须声明这样的类。在这个迭代中,您需要将表标记为可删除,还需要将每个td标记为可删除;但是您通过不影响任何非可删除表格来获得安全性,并控制要删除哪些列。
CSS:
table.strike-able {
border-collapse: collapse;
}
table.strike-able tr td {
position: relative;
padding: 3px 2px;
}
table.strike-able tr th {
position: relative;
padding: 3px 2px;
}
table.strike-able tr.strikeout td.strike-able:before {
content: " ";
position: absolute;
top: 50%;
left: 0;
border-bottom: 2px solid #d9534f;
width: 100%;
}
使用方法:
<table class="strike-able" id="Medications" data-item-count="@Model.Medications.Count">
<tr>
<th>
Some Column
</th>
<th>
Command Column
</th>
</tr>
<tr class="strikeout">
<td class="strike-able"></td>
<td>Button that Toggles Striking Goes Here (active)</td>
</tr>
<tr>
<td class="strike-able"></td>
<td>Button that Toggles Striking Goes Here</td>
</tr>
</table>
编辑:正如@Mathieu M-Gosselin在评论中指出的那样,这实际上是将线放在文本后面。话虽如此,如果你的线与文本颜色相同或者你使用的字体比较小,这仍然可以很好地工作。
值得一提的是,这是一种在纯CSS中实现的非常有效的方法,而不需要使用伪元素。您可以通过调整background-size
来改变删除线的粗细。
table {
border-collapse: collapse;
}
td {
width: 100px
}
.strikethrough {
background: repeating-linear-gradient(
180deg,
red 0%,
red 100%
);
background-size: 100% 2px;
background-position: center;
background-repeat: no-repeat;
}
<table>
<tr>
<td>Foo</td>
<td>Bar</td>
<td>Baz</td>
</tr>
<tr class="strikethrough">
<td>Foo Strike</td>
<td>Bar Strike</td>
<td>Baz Strike</td>
</tr>
</table>
@NicoleMorganErickson,我喜欢你的答案,但是我无法使删除线仅影响已应用的行。此外,我需要应用多行,因此我将您的解决方案改为单个类。
CSS:
tr.strikeout td:before {
content: " ";
position: absolute;
display: inline-block;
padding: 5px 10px;
left: 0;
border-bottom: 1px solid #111;
width: 100%;
}
是的,你可以这样做。在你创建的行的第一个单元格中,创建一个包含 HR 的 div。将该 div 浮动到左侧,并将其宽度指定为其包含元素的百分比,在本例中为表格单元格。它将跨越该行中的表格单元格,甚至可以超出表格的宽度。
这对我很有效:
<style>
.strikeThrough {
height:3px;
color:#ff0000;
background-color:#ff0000;
}
.strikeThroughDiv {
float:left;
width:920%;
position:relative;
top:18px;
border:none;
}
</style>
<table width="900" border="1" cellspacing="0" cellpadding="4">
<tr valign="bottom">
<td>
<div class="strikeThroughDiv"><hr class="strikeThrough"/></div>
One
</td>
<td>
<label for="one"></label>
<input type="text" name="one" id="one" />
</td>
<td>
<label for="list"></label>
<select name="list" id="list">
<option value="One">1</option>
<option value="Two">2</option>
<option value="Three" selected>3</option>
</select>
</td>
<td>
Four
</td>
<td>
Five
</td>
</tr>
</table>
要控制线条的宽度,您必须指定包含 HR 元素的表格单元格的宽度。对于样式化 HR 元素,他们建议不要将其高度设为小于 3px。
<table>
<tbody style="text-decoration: line-through">
-- Various table body stuff
</tbody> </table>
不确定,但似乎有其他答案提到了简单明了的纯CSS解决方案...
@Ben Slade的答案是所有答案中最接近的,但还是...
只需在您的CSS中使用text-decoration: line-through
!添加相应的类,然后使用<tr class="strikethrough">
!
.strikethrough {
text-decoration: line-through;
}
table,
th,
td {
border: 1px solid black;
}
<table>
<tr>
<th>Company</th>
<th>Contact</th>
<th>Country</th>
</tr>
<tr class="strikethrough">
<td>Centro comercial Moctezuma</td>
<td>Francisco Chang</td>
<td>Mexico</td>
</tr>
<tr>
<td>Alfreds Futterkiste</td>
<td>Maria Anders</td>
<td>Germany</td>
</tr>
</table>