将 CSS 样式应用于特定元素之前或之后的文本内容
Apply CSS styling to text content either before or after a specific element
给定以下 HTML 标记:
<li class="lrn-text-word-wrap" tabindex="-1" data-selector="suggested-tag">
12345: <strong>Han</strong> Solo
</li>
是否可以仅 css 应用样式 来删除 12345:
文本内容?
我无法控制标记,因此无法在那里进行更改,真的不想求助于 JS。
我在这里想要实现的是使用 CSS 只显示单词“Han Solo”而不是“12345:Han Solo”
<strong>
标签只包含“Han”的原因是这是自动完成的一部分,用户输入的是“Hans”。标记显示匹配结果,突出显示用户键入的文本,即很好,但我需要能够隐藏“关键”部分。
我整理了以下 SCSS,但这只允许 <strong>
文本保留,而我们还需要显示 <strong>
之后的所有内容。
[data-selector='suggested-tag'] {
font-size: 0px
strong {
font-size: 12px;
}
}
或者,如果有办法 select 通过 CSS 仅文本节点,这可能就足够了。
任何关于如何解决这个问题的建议都将非常受欢迎!
您可以尝试使用网格布局并将第一列设置为 0 并将 background
设置为 strong
元素以隐藏从第一列溢出的内容。
说明:网格会将文本的每一部分包裹在一个虚拟单元格中。如果 html 个标签位于文本中,它将产生同样多的部分。
您的示例将生成 3 个单元格,1 个虚拟单元格用于站在 <strong>
标签前面的文本,第二个元素将是 <strong>
标签本身,第三个(虚拟)将是文本站在 <strong>
标签后面。
思路如下:
ul,
li {
margin: 0;
padding: 0;
list-style:none;
}
li.grid {
display: grid;
grid-template-columns: 0 repeat(2, minmax(3em, max-content));
justify-content: start;
background: lightgray;
}
.grid strong {
background: inherit;
padding:0 0.2em;
text-align: right
}
<ul>
<li class="grid"> 12345: <strong>Han</strong> Solo</li>
<li> 12345: <strong>Han</strong> Solo</li>
</ul>
编辑下面评论的案例
... We know that there will always be a :
...
届时将需要 Javascript 即时删除不需要的文本部分。
举个例子。
let lis = document.querySelectorAll('ul li');
[...lis].forEach((txtCntnt) => {
let content= txtCntnt.innerHTML;
content = content.substring(content.indexOf(":") + 1);
txtCntnt.innerHTML=content;
});
strong{color:purple}
<ul>
<li> 12345 keep that han hu!: Han<strong> Sol</strong>o</li>
<li> 12345 of any lenght: <strong>Han</strong> Solo</li>
</ul>
给定以下 HTML 标记:
<li class="lrn-text-word-wrap" tabindex="-1" data-selector="suggested-tag">
12345: <strong>Han</strong> Solo
</li>
是否可以仅 css 应用样式 来删除 12345:
文本内容?
我无法控制标记,因此无法在那里进行更改,真的不想求助于 JS。
我在这里想要实现的是使用 CSS 只显示单词“Han Solo”而不是“12345:Han Solo”
<strong>
标签只包含“Han”的原因是这是自动完成的一部分,用户输入的是“Hans”。标记显示匹配结果,突出显示用户键入的文本,即很好,但我需要能够隐藏“关键”部分。
我整理了以下 SCSS,但这只允许 <strong>
文本保留,而我们还需要显示 <strong>
之后的所有内容。
[data-selector='suggested-tag'] {
font-size: 0px
strong {
font-size: 12px;
}
}
或者,如果有办法 select 通过 CSS 仅文本节点,这可能就足够了。
任何关于如何解决这个问题的建议都将非常受欢迎!
您可以尝试使用网格布局并将第一列设置为 0 并将 background
设置为 strong
元素以隐藏从第一列溢出的内容。
说明:网格会将文本的每一部分包裹在一个虚拟单元格中。如果 html 个标签位于文本中,它将产生同样多的部分。
您的示例将生成 3 个单元格,1 个虚拟单元格用于站在 <strong>
标签前面的文本,第二个元素将是 <strong>
标签本身,第三个(虚拟)将是文本站在 <strong>
标签后面。
思路如下:
ul,
li {
margin: 0;
padding: 0;
list-style:none;
}
li.grid {
display: grid;
grid-template-columns: 0 repeat(2, minmax(3em, max-content));
justify-content: start;
background: lightgray;
}
.grid strong {
background: inherit;
padding:0 0.2em;
text-align: right
}
<ul>
<li class="grid"> 12345: <strong>Han</strong> Solo</li>
<li> 12345: <strong>Han</strong> Solo</li>
</ul>
编辑下面评论的案例
届时将需要... We know that there will always be a
:
...
Javascript 即时删除不需要的文本部分。
举个例子。
let lis = document.querySelectorAll('ul li');
[...lis].forEach((txtCntnt) => {
let content= txtCntnt.innerHTML;
content = content.substring(content.indexOf(":") + 1);
txtCntnt.innerHTML=content;
});
strong{color:purple}
<ul>
<li> 12345 keep that han hu!: Han<strong> Sol</strong>o</li>
<li> 12345 of any lenght: <strong>Han</strong> Solo</li>
</ul>