【发布时间】:2021-10-16 23:43:29
【问题描述】:
是否可以使用 CSS 隐藏第一个字母之后的所有字母?
dt:not(::first-letter) {
display: none;
}
【问题讨论】:
标签: css css-selectors
是否可以使用 CSS 隐藏第一个字母之后的所有字母?
dt:not(::first-letter) {
display: none;
}
【问题讨论】:
标签: css css-selectors
可以,但是您的 CSS 错误。以下版本有效(至少在 Chrome 中)。它使dt 不可见,并为第一个字母定义了一个覆盖以使其再次可见。
我也对display 进行了同样的尝试,但正如预期的那样,这不起作用。 visibility: hidden 隐藏内容,但保留元素,而display: none 将其从流中移除,并且使子元素(在本例中为第一个字母)无法再次可见。
我也添加了悬停,因此您可以悬停字母以查看 dt 的其余部分。
dt {
visibility: hidden;
}
dt::first-letter {
visibility: visible;
}
/* Hover the first letter to see the rest */
dt:hover {
visibility: visible;
}
Hover to see the rest:
<dt>Lorum ipsum is a weird text</dt>
<dt>Foo bar</dt>
一个副作用是文本所覆盖的区域仍然被声明。也许这不是问题,但如果是,您将需要其他解决方案。一种可能性是也使dt 0 的字体大小。这样,文本是如此之小以至于没有空间。当然,如果它还包含图像也无济于事。
由于它似乎不起作用,这里是使用字体大小的替代方法。不太理想,但希望它仍然可以解决您的问题。
dt {
font-size: 0;
}
dt::first-letter {
font-size: 1rem;
}
/* Hover the first letter to see the rest */
dt:hover {
font-size: 1em;
}
Hover to see the rest:
<dt>Lorum ipsum is a weird text</dt>
<dt>Foo bar</dt>
【讨论】:
dt 应该被阻止,但即使我将display: block 添加到它,它也无济于事。
rem 错字,此时行为与第一个。
rem 不是错字。这是根-em。您必须为第一个字母指定字体大小,因为它不能使用dt 的0。我使用了rem,这是文档的基本 em 大小,但您也可以使用一些 px 值。如果您使用em,它与dt 元素的字体大小相关。由于该字体大小为0,1em 也是 0,因此字母不会显示。这就是为什么这个解决方案并不理想:你必须在这里设置一些固定的字体大小。据我所知,没有办法只使用“原始”尺寸。
我想你可以试试这个:
.twitter{
display: block;
color: transparent;
}
.twitter:first-letter{
color: #000;
}
<div id="socialMedia">
<a class="twitter">Twitter</a>
</div>
<div id="socialMedia">
<a class="twitter">Google</a>
</div>
另见fiddle
【讨论】:
您不能将:not 与伪元素选择器一起使用(请参阅this)。
你可以做的是以另一种方式思考:透明化整个事物,然后用::first-letter 着色。因为后者具有更高的特异性,它会覆盖透明设置,从而达到你想要的结果。
【讨论】:
基于 Waruna 的答案的替代方案,使用 color 而不是基于布局的属性。主要优点是它适用于我测试过的所有浏览器(Firefox、Chrome 和 M$ Edge,但应该适用于所有浏览器),并且不会导致任何视觉故障(如第二个解决方案中的“基线跳跃像素”)接受的答案),因为它使用了一个完全可视的属性。
原始 CSS 的问题是您不能在 :not 中使用伪元素 (::blah)。您必须将其扩展为逆逻辑,因此您不需要 :not
dt {
color: transparent;
}
dt::first-letter {
color: black;
}
/* For testing */
dt:hover {
color: black;
}
<dt>Hello World!</dt>
【讨论】:
color: transparent 隐藏并使用color: black 显示"
user-select: none
聚会有点晚了,但我找到了这个可以帮助某人的解决方案
width: 1ch;
overflow: hidden;
它可能不适用于所有字体,但它应该。它非常适合等宽字体,因为ch 是字体中 O 字母的大小,所以如果你的前两个字母比 O 短,它会正常工作,否则你可能需要稍微调整一下。
更改 ch,您可以拥有前 2、3、4 个 .... 字母 :)
【讨论】:
试试这个....
.newline1::first-letter {
font-size: 200%;
color: #8A2BE2;
}
.newline2::first-letter {
/*color: transparent;*/
font-size: 0px;
}
<div class="newline1">
Test Stackoverflow.com
</div>
<div class="newline2">
Test Stackoverflow.com
</div>
.newline1::first-letter {
font-size: 200%;
color: #8A2BE2;
}
.newline2::first-letter {
color: transparent;
}
<div class="newline1">
Test Stackoverflow.com
</div>
<div class="newline2">
Test Stackoverflow.com
</div>
【讨论】: