【发布时间】:2014-07-02 10:51:59
【问题描述】:
我正在开发一个网页,发现 FontAwesome 是一种非常简洁的方式来为事物添加漂亮的图标,但是默认情况下,字体下载会被 Firefox 的 NoScript plugin 阻止。
这对于普通字体来说不是问题,但 FontAwesome 使用的 unicode 字符故意超出了大多数字体的通常可打印范围,因此将字体堆栈添加到 CSS(例如:font-family: FontAwesome, sans-serif;)将无法正常工作图标只是呈现为六角方块。
我意识到我可以调整 NoScript 以允许字体下载,但这并不是所有用户的理想解决方案 - 我宁愿页面优雅地降级。
当然,使用 Javascript/jQuery 很容易做到这一点,但当然,如果是 NoScript 进行阻塞,那也无济于事,而且如果用户不这样做,它就会失败测试没有启用 javascript。
理想的做法是有一些 CSS 样式/规则作为任何 FontAwesome 对象的后备,用一些基本字符替换它们,甚至不显示任何内容。
对于那些不熟悉 FontAwesome / TL;DR 的人:
所有 FontAwesome 图标都有 CSS 类“fa”:
.fa {
display: inline-block;
font-family: FontAwesome;
font-style: normal;
font-weight: normal;
line-height: 1;
}
FontAwesome 像这样加载自定义字体(我删除了
@font-face {
font-family: "FontAwesome";
font-style: normal;
font-weight: normal;
src: url("../fonts/fontawesome-webfont.eot?#iefix&v=4.0.3") format("embedded-opentype"), url("../fonts/fontawesome-webfont.woff?v=4.0.3") format("woff"), url("../fonts/fontawesome-webfont.ttf?v=4.0.3") format("truetype"), url("../fonts/fontawesome-webfont.svg?v=4.0.3#fontawesomeregular") format("svg");
}
然后一个特定的 FontAwesome 图标将有自己的特定类插入相关的 unicode 字符,例如:
.fa-star:before {
content: "";
}
图标的 HTML 如下所示:
<i class="fa fa-star"></i>
所以这里的问题是: 如果没有加载字体“FontAwesome”,我们需要某种方式,最好是在 CSS 中,以替换、删除或隐藏具有 CSS 类“fa”的项目的内容。
【问题讨论】:
-
我认为这在 CSS 中是不可能的
-
你可以有默认字体系列:sans-serif, FontAwesome;当 css 加载并使用 JS 时,您可以将其转换为 font-family: FontAwesome, sans-serif;因此,如果 JS 被阻止,默认字体将起作用。
-
@Faraz 默认的
sans-serif将如何工作? FontAwesome 使用特殊的 unicode 字符... -
@BenM 这是我的解决方案jsfiddle.net/farazilu/BG5J7
-
@Faraz 你只会得到一个正方形 > jsfiddle.net/BG5J7/4 如果 FontAwesome 没有加载(即当
<noscript>标签被启用时)。
标签: javascript html css font-awesome