如何在不影响元素的 ::before 或 ::after 的情况下更改元素的字体系列?

How to change an element's font-family without affecting it's ::before or ::after?

提问人:Jeff 提问时间:4/2/2022 最后编辑:Jeff 更新时间:4/3/2022 访问量:848

问:

许多网站使用元素上的选择器通过客户端下载的字体文件加载图标,例如::before

div {
    font: 14px/1 FontAwesome;
}

div::before {
    content: "\f1c8";
}

不幸的是,以下规则也适用于元素的伪元素,这会破坏图标显示:::before

div {
    font-family: sans-serif !important;
}

来源)是不可能的,那么你将如何去定位一个元素,但不是?:not(::before)::before

这工作得很好,但它错过了元素内的文本(如果有的话):

div:not([class*="fa-"]) {
    font-family: sans-serif !important;
}

这甚至可能是不可能的。请不要使用JavaScript。

css font-awesome 伪元素

评论

0赞 Temani Afif 4/2/2022
以伪元素为目标以显式定义其字体
0赞 Sigurd Mazanti 4/2/2022
您可以直接使用 Font Awesome 提供的字体系列定义元素的字体,如下所示: 有一段时间没有使用 Font Awesome 了,所以我没有确切的声明,而是类似的东西。font-family: "Font Awesome 5;
0赞 Jeff 4/2/2022
@TemaniAfif在下面发布您的答案,这很有效:::before{font-family: FontAwesome}

答:

2赞 christiansany 4/2/2022 #1

如果不再次覆盖之前和之后,这是不可能的

div {
  font-family: sans-serif;
}

div::before,
div::after {
  font-family: serif;
}

或者,您可以完全在另一个元素中使用该图标。

<span class="fa-something"></span>
<span>Text here</span>

还有一个旁注:) 请将 textelements 用于文本,而不是 divs(span 也不是文本元素,它只是一个没有任何语义信息的内联元素)

评论

0赞 Jeff 4/2/2022
我很欣赏这些信息。请注意,我不是需要修改的网站的作者。我的 css 编辑是通过 userCSS 注入到我的客户端中的。
1赞 Jeff 4/2/2022 #2

在上面@Termani的帮助下,这就是我解决将我的首选字体注入网站的问题,同时对通过网络字体文件加载的大多数网站图标造成最小的损害:

::before, ::after {
    font-family: FontAwesome, "Font Awesome", "Font Awesome 5 Pro",
    "Font Awesome 5 Free", "Material Icons", "Material-Design-Iconic-Font",
    Flaticon, "CBSi Fantasy icomoon", CBSi_Fantasy_icomoon, icon-moon,
    icomoon, ui-icons, icons, NewYorkIcons, sans-serif !important;
}

毫无疑问,开发人员还使用其他名称,因此当我偶然发现它们时,列表会增长。font-family

如果我找到更好的解决方案,我会更新这个答案。

评论

0赞 christiansany 4/2/2022
所以,基本上我的解决方案:P