在 table 中隐藏绝对伪元素
Hide absolute pseudo-element within a table
我有一个价格table,我无法访问它的内容,我只能通过CSS修改它。
原价table在同一个单元格中有原价和折扣价,只是用第一个数字的删除线来区分。类似的东西:
2,502,13
我设法通过对报价子类应用不同的样式并使用 |
字符和 [=15= 应用 :before
伪元素制作分隔线来将它们分开] 显示参数。
它完美运行。
表格通常最多有 20-25 行。由于间距原因,他们有一个 max-height
和一个垂直滚动条,以便在内容过多的情况下查看隐藏的行。在这些情况下,由于第二个图的 :before
元素的 position:absolute
,分隔线在 table.
末尾下方仍然可见
我试过几次修改都没有解决。将位置更改为 relative
会覆盖多个伪元素的显示选项。还有其他选择吗?
table {border-collapse: collapse;
width: fit-content;
margin: 4rem auto 3rem;
max-height: 205px;
overflow-y: auto;
display: block;
border-top: 2px solid #35D0CD;
border-bottom: 2px solid #35D0CD;
}
th {background:black; color:white; position: sticky; top:0;}
td {border: 2px;
border-style: solid;
border-color: #35D0CD;
padding: 0 2rem;
text-align:center;
}
bdi {color:blue; text-decoration: line-through;
}
span {padding-left:4rem; color:red}
span:before {content: "|";
margin-left: -2rem;
font-size: 2rem;
color: #35D0CD;
line-height: 0%;
position: absolute;
transform: scale(0.2, 1);
margin-top: 0.65rem;}
<div>
<table>
<tr><th>Price</th></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
</table>
</div>
问题
您是正确的,|
是因为 absolute
而暴露的,但如果 line-height
不是 0
,这可能不会成为问题,因为其中所有 |
都被垂直推出,font-size 是默认 font-size
的两倍
主要变化
- 已移除
absolute
- 除第一个
<td>
外,每个 <td>
都是弹性容器
- 所有
<bdi>
、<span>
和 <span>::before
都是 inline-block
s
- 在
<span>::before
上将 line-height: 0
更改为 0.65
- 将
<span>::before
padding-bottom
调整为 0.5ch
以缩小顶部的差距。
table {
border-collapse: collapse;
display: block;
width: fit-content;
margin: 4rem auto 3rem;
max-height: 162px;
border-top: 2px solid #35D0CD;
border-bottom: 2px solid #35D0CD;
overflow-y: scroll;
}
td {
display: flex;
padding: 0 2rem;
border: 1px;
border-style: solid;
border-color: #35D0CD;
text-align: center;
}
bdi {
display: inline-block;
margin-right: -4.25ch;
padding-top: 0.15ch;
color: blue;
text-decoration: line-through;
vertical-align: text-bottom;
}
span {
display: inline-block;
padding-left: 4rem;
color: red;
vertical-align: text-bottom;
}
span:before {
content: "|";
display: inline-block;
padding-right: 2.5ch;
padding-bottom: 0.5ch;
font-size: 1.45rem;
line-height: 0.65;
color: #35D0CD;
}
tr:first-of-type td {
display: table-cell;
text-align: center
}
<div>
<table>
<tr><td>Price</td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
</table>
</div>
我有一个价格table,我无法访问它的内容,我只能通过CSS修改它。
原价table在同一个单元格中有原价和折扣价,只是用第一个数字的删除线来区分。类似的东西:
2,502,13
我设法通过对报价子类应用不同的样式并使用 |
字符和 [=15= 应用 :before
伪元素制作分隔线来将它们分开] 显示参数。
它完美运行。
表格通常最多有 20-25 行。由于间距原因,他们有一个 max-height
和一个垂直滚动条,以便在内容过多的情况下查看隐藏的行。在这些情况下,由于第二个图的 :before
元素的 position:absolute
,分隔线在 table.
我试过几次修改都没有解决。将位置更改为 relative
会覆盖多个伪元素的显示选项。还有其他选择吗?
table {border-collapse: collapse;
width: fit-content;
margin: 4rem auto 3rem;
max-height: 205px;
overflow-y: auto;
display: block;
border-top: 2px solid #35D0CD;
border-bottom: 2px solid #35D0CD;
}
th {background:black; color:white; position: sticky; top:0;}
td {border: 2px;
border-style: solid;
border-color: #35D0CD;
padding: 0 2rem;
text-align:center;
}
bdi {color:blue; text-decoration: line-through;
}
span {padding-left:4rem; color:red}
span:before {content: "|";
margin-left: -2rem;
font-size: 2rem;
color: #35D0CD;
line-height: 0%;
position: absolute;
transform: scale(0.2, 1);
margin-top: 0.65rem;}
<div>
<table>
<tr><th>Price</th></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
</table>
</div>
问题
您是正确的,|
是因为 absolute
而暴露的,但如果 line-height
不是 0
,这可能不会成为问题,因为其中所有 |
都被垂直推出,font-size 是默认 font-size
主要变化
- 已移除
absolute
- 除第一个
<td>
外,每个<td>
都是弹性容器 - 所有
<bdi>
、<span>
和<span>::before
都是inline-block
s - 在
<span>::before
上将 - 将
<span>::before
padding-bottom
调整为0.5ch
以缩小顶部的差距。
line-height: 0
更改为 0.65
table {
border-collapse: collapse;
display: block;
width: fit-content;
margin: 4rem auto 3rem;
max-height: 162px;
border-top: 2px solid #35D0CD;
border-bottom: 2px solid #35D0CD;
overflow-y: scroll;
}
td {
display: flex;
padding: 0 2rem;
border: 1px;
border-style: solid;
border-color: #35D0CD;
text-align: center;
}
bdi {
display: inline-block;
margin-right: -4.25ch;
padding-top: 0.15ch;
color: blue;
text-decoration: line-through;
vertical-align: text-bottom;
}
span {
display: inline-block;
padding-left: 4rem;
color: red;
vertical-align: text-bottom;
}
span:before {
content: "|";
display: inline-block;
padding-right: 2.5ch;
padding-bottom: 0.5ch;
font-size: 1.45rem;
line-height: 0.65;
color: #35D0CD;
}
tr:first-of-type td {
display: table-cell;
text-align: center
}
<div>
<table>
<tr><td>Price</td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
<tr><td><bdi>2,50</bdi><span>2,13</span></td></tr>
</table>
</div>