以下是 Jason Jacobson 的客座文章,他是明尼阿波利斯创业公司 LeadPages® 的高级工程师。Jason 展示了一些我之前不知道的功能:将字符串转换为图标。这需要使用图标字体,我 通常推荐使用 SVG 来创建图标,但这并不妨碍它成为一个值得了解的真正的 CSS 技巧!
伪元素(例如 ::before
和 ::after
)在创建网站时对我帮助很大,因此我想出了一个方法,可以将它们与连字图标结合使用,从而创建更易读和易于维护的代码。
连字图标?是的!这就是 Google 的 Material Icons 的工作原理。

但是,您无需在 HTML 中使用文本,而是可以使用伪元素。也就是说,使用 CSS 中的 content
属性将字符串注入到任何元素中。假设您有以下 HTML 代码
<button data-icon="delete">Remove this item</button>
我们可以将字符串附加到该元素上(“delete”),如下所示
[data-icon]::before {
content: attr(data-icon);
}
然后,我们可以通过神奇的连字的力量,将该文本转换为图标。当字体家族设置为支持连字图标的字体(例如 Material Icons)时,此操作会自动执行。
首先,您需要使该图标字体可用
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
伪元素图标的完整 CSS 代码如下所示
[data-icon]::before {
content: attr(data-icon);
font-family: 'Material Icons';
font-weight: normal;
font-style: normal;
font-size: 1em;
display: inline-block;
vertical-align: middle;
width: 1em;
height: 1em;
line-height: 1;
text-transform: none;
letter-spacing: normal;
word-wrap: normal;
white-space: nowrap;
direction: ltr;
* Support for all WebKit browsers. */
-webkit-font-smoothing: antialiased;
* Support for Safari and Chrome. */
text-rendering: optimizeLegibility;
/* Support for Firefox. */
-moz-osx-font-smoothing: grayscale;
/* Support for IE. */
font-feature-settings: 'liga';
}
注意:我们需要使用 font-feature-settings
属性才能使此功能在 Internet Explorer 中正常工作。
如何显示一个列表,其中包含一个选中的项目?
<ul class="list">
<li>One</li>
<li data-icon="check">Two</li>
<li>Three</li>
<li>Four</li>
</ul>
查看 CSS-Tricks 的 Pen Pen #01(@css-tricks)在 CodePen 上。
您还可以将其用于显示与集成或表单相关的用户状态。
<ul class="list">
<li data-icon="error">Int One</li>
<li data-icon="check">Int Two</li>
<li data-icon="error">Int Three</li>
<li data-icon="error">Int Four</li>
</ul>
查看 CSS-Tricks 的 Pen 连字图标 – 错误指示器(@css-tricks)在 CodePen 上。
请注意,对于到目前为止的所有示例,我都没有添加任何额外的 CSS 或 HTML 代码来获取新的图标。
这是一个按钮的示例,它具有 :hover
和 :active
状态。我添加了另一个属性来处理成功图标。这可以通过 JavaScript 来完成,但由于这是 CSS-Tricks,所以我选择了纯 CSS 方法。
查看 CSS-Tricks 的 Pen Pen #03(@css-tricks)在 CodePen 上。
很棒的文章。连字的使用(滥用?呵呵)非常巧妙。以下是一些相关阅读材料,供感兴趣(或像我一样感到困惑)的人参考:http://alistapart.com/article/the-era-of-symbol-fonts
文章引用
感谢分享。
起初,我感到困惑,因为我阅读了文档 https://ggdocs.cn/material-design-icons/
这段话让我明白了。
“此示例使用了一种称为连字的排版功能,该功能允许仅使用其文本名称即可呈现图标字形。替换由 Web 浏览器自动完成,并提供比等效的数字字符引用更易读的代码。”
很棒的功能!
但是浏览器兼容性和支持是痛点。
这是否仅适用于我使用 Material Icons 的情况?
连字 = 可以通过其文本名称调用的 SVG 集合。
svg(内联)不会缓存在浏览器中。您可以使用 svg,但 IE 11 及以下版本不支持。
我不会浪费时间在连字上,至少现在不会。
前端开发的问题在于,很少有新技术最终会变得有成效/有用。
React.js 在 2015 年风靡一时。仅仅一年后,前端开发人员就开始查看他们看起来像狗食的 React 代码,并挠着头思考哪里出了问题。
连字是一种用于替换一组字形的字形。通常,其目的是“修复”字形冲突(尽管冲突不是成为连字的必要条件)。例如:大多数衬线字体中的“fi”连字用于解决字母“f”的顶部与“i”的点尴尬地重叠的问题;大多数字体通过平滑地连接这两个字形来解决此问题。这是一个独立于 SVG 的概念,并且已经存在了几个世纪。如果您仔细观察,一本高质量的书籍可能包含连字。我不确定您是从哪里获得 SVG 和 React.js 这些东西的。