以下是 Tim Pietrusky 的客座文章。Tim 知道此网站长期以来一直提倡使用字体作为图标,并且有自己一些有趣的用例需要分享。在创建演示时,为了方便自己,他创建了一项免费的图标字体托管服务。这也可以作为社区的一份不错礼物。我让他来告诉大家吧……
图标字体很棒
- 您可以用 CSS 对它们进行各种处理,而它们毫不在意
- 它们在任何显示器或分辨率下看起来都很好
- 对于任何大小的图标集,只有一个 HTTP 请求
让我们看看图标字体的 5 个典型用例。
开始之前
为了使示例代码简洁易读,我们不会使用任何供应商前缀。我们将使用动画、过渡和变换等功能,所有这些功能都需要供应商前缀才能确保最佳的浏览器支持。您如何处理供应商前缀由您决定。
正如您将在示例中看到的,我使用了图标字体托管服务 weloveiconfonts.com。这是我自己的项目。事情是这样的:我想写一篇关于图标字体的文章,并搜索免费的图标字体托管服务,但没有找到。所以我创建了这项服务以便能够撰写这篇文章。
1. CSS 加载器
有很多 很棒的、纯粹的 CSS 加载器,您甚至可以在 cssload.net 上创建自己的加载器。另一种方法是使用 图标字体。您可以使用看起来像加载符号的字符,并使用 CSS 对其进行动画处理。
这是基本的 HTML。前三个加载器是 div.wrapper
的子元素,并且是单个元素。第四个 (div.complex
) 是两个图标的组合。
<div class="wrapper">
<span class="fontelico-spin1"></span>
<span class="fontelico-spin3"></span>
<span class="fontelico-spin5"></span>
</div>
<div class="complex">
<span class="fontelico-emo-devil"></span>
<span class="fontelico-spin4"></span>
</div>
将图标字体 Fontelico 导入到您的 CSS 中
@import url(http://weloveiconfonts.com/api/?family=fontelico);
[class*="fontelico-"]:before {
font-family: 'fontelico', sans-serif;
}
将名为 load
的动画添加到元素,它会使它们旋转(从 0deg
到 360deg
),稍微放大和缩小,并更改颜色。
/* Normal (left) */
span {
float: left;
text-align: center;
margin: 0 5em;
animation: load 1.337s infinite ease-out reverse;
}
/* Fast (center) */
.wrapper span:nth-child(2) {
animation: load .5s infinite linear;
}
/* Steps (right) */
.wrapper span:nth-child(3) {
animation: load 1.25s infinite steps(18, end) forwards;
}
@keyframes load {
0% {
transform: rotate(0) scale(1, 1);
color: rgba(0, 0, 0, .5);
}
10% { color: rgba(0, 120, 0, .5); }
20% { color: rgba(0, 120, 120, .5); }
30% { color: rgba(120, 120, 0, .5); }
40% { color: rgba(0, 0, 120, .5); }
50% {
transform: rotate(180deg) scale(1.85, 1.85);
color: rgba(120, 0, 0, .5);
}
100% {
transform: rotate(360deg) scale(1, 1);
color: rgba(0, 0, 0, .5);
}
}
最后一个加载器 (div.complex
) 组合了两个图标,并将它们堆叠在一起。第一个子元素是恶魔元素(使用名为 rotate
的动画),第二个子元素是旋转图标(使用名为 scale
的动画)。
.complex span:nth-child(1),
.complex span:nth-child(2) {
position: absolute;
margin: 0;
width: 1em;
height: 1em;
}
/* Devil icon */
.complex span:nth-child(1) {
animation: load 1.25s infinite steps(18, end) forwards;
}
/* Spin icon */
.complex span:nth-child(2) {
font-size: 3em;
left: -.35em;
top: -.35em;
color: rgba(0, 0, 0, .3);
animation: devil 3s infinite linear reverse forwards;
}
@keyframes devil {
0% {
transform: scale(-1.85, 1.85);
}
50% {
transform: scale(1.85, -1.85);
}
100% {
transform: scale(-1.85, 1.85);
}
}
演示 在 CodePen 上
2. SocialCount 遇见样式
人们喜欢在他们的网站上使用社交分享按钮,以便访客更容易传播信息。但是,当您结合使用 Facebook、Twitter 和 Google+ 时,您将面临 309KB 的空缓存加载大小。这就是 SocialCount jQuery 插件 的用武之地。SocialCount 具有渐进增强、延迟加载和移动友好等特性。
默认样式很简单,包含按钮的 iframe 很小。让我们用一些花哨的 CSS 来增强这些按钮。
这是使用 SocialCount 标记生成器 创建的 HTML。只是一个包含链接和图标的无序列表。
<ul
class="socialcount"
data-url="http://www.google.com/"
data-counts="true"
data-share-text="Google is a search engine">
<li class="facebook">
<a href="https://#/sharer/sharer.php?u=http://www.google.com/" title="Share on Facebook">
<span class="count entypo-thumbs-up"></span>
</a>
</li>
<li class="twitter">
<a href="https://twitter.com/intent/tweet?text=http://www.google.com/" title="Share on Twitter">
<span class="count entypo-twitter"></span>
</a>
</li>
<li class="googleplus">
<a href="https://plus.google.com/share?url=http://www.google.com/" title="Share on Google Plus">
<span class="count entypo-gplus"></span>
</a>
</li>
</ul>
将图标字体 Entypo 导入到您的 CSS 中
@import url(http://weloveiconfonts.com/api/?family=entypo);
[class*="entypo-"]:before {
font: 2.5em/1.9em 'entypo', sans-serif;
}
我们将通过以下方式覆盖 SocialCount 提供的默认样式:
- 添加过渡
- 缩放 iframe
- 在按钮上设置自定义背景
.socialcount {
> li {
width: 33%;
border-radius: 0;
transition: all .3s ease-in-out;
cursor: pointer;
&:hover [class*="entypo-"]:before {
opacity: 0;
}
}
iframe {
transform: scale(1.65, 1.65);
}
.button {
top: 50%;
margin: -.75em 0 0 0;
height: 2em;
}
.facebook {
background: rgba(59, 89, 152, .7);
}
&.like .facebook iframe {
width: 8em;
}
.twitter {
background: rgba(0, 172, 237, .7);
}
.googleplus {
background: rgba(172, 0, 0, .7);
}
}
演示 在 CodePen 上
3. 增强的列表
以下三个示例均基于此简单的 HTML。
<div>
<h2>Title</h2>
<ul class="style">
<li data-text="">Text</li>
<li data-text="">Text</li>
<li data-text="">Text</li>
</ul>
</div>
将图标字体 Font Awesome 导入到您的 CSS 中
@import url(http://weloveiconfonts.com/api/?family=fontawesome);
[class*="fontawesome-"]:before {
font-family: 'FontAwesome', sans-serif;
}
添加列表、列表元素、伪元素和按钮的默认样式。我们不使用类来在列表元素上设置图标,而是更改元素的 content
属性,从而创建一个伪元素。
ul {
list-style: none;
padding: 0;
li {
position: relative;
min-height: 2em;
padding: .3em .3em .3em 1.5em;
transition:
background .3s ease-in-out,
color .3s ease-in-out,
box-shadow .1s ease-in-out,
height .25s ease-in-out
;
button {
position: absolute;
left: 1.45em;
bottom: .35em;
opacity: 0;
height: 0;
border: none;
font-size: .8em;
cursor: pointer;
transition: all .4s ease-in-out;
}
&:before {
position: absolute;
top: .425em;
font-family: 'FontAwesome', sans-serif;
margin: 0 .35em 0 -1.35em;
vertical-align: bottom;
}
&:hover {
button {
opacity: 1;
height: 2em;
}
&:before {
color: rgba(255, 255, 255, 1);
right: 0;
transform: scale(2.5, 2.5) translate(-.25em, .15em);
}
&:after {
position: absolute;
content: attr(data-text);
}
}
}
}
3.1 您喜欢的东西
第一个示例非常简单。使用心形代替默认列表样式,并使用特殊的悬停效果:图标移到右侧,::after
伪元素获取 data-attribute data-text 的文本。
.love {
li {
&:before {
/* fontawesome-heart */
content: "\f004";
}
&:before,
&:after {
color: rgba(220, 20, 20, .6);
}
&:hover {
background: rgba(220, 20, 20, .6);
&:after {
width: 2em;
right: .445em;
}
}
}
}
3.2 下载
这是一个带有扩展标记的自定义下载列表:每个列表元素都有一个链接和一个按钮。按钮默认隐藏,并在悬停时显示。
.downloads {
li {
border-bottom: .15em solid rgba(0, 0, 0, .3);
&:before {
/* fontawesome-download-alt */
content: "\f019";
color: rgba(50, 50, 50, .5);
}
&:hover {
background: rgba(0, 140, 0, .7);
height: 4em;
&:after {
right: .35em;
}
&:before {
color: rgba(255, 255, 255, .2);
}
}
}
}
3.3 您的帐户
用户菜单的 UI 概念。当您将鼠标悬停在列表元素上时,图标将移到右侧,并且阴影框会填充整个背景。每个列表元素都有自己的图标,基于 :nth-child
选择器和 content
属性。
.account {
padding: .75em;
border: .15em solid rgba(0, 0, 0, .2);
background-color: rgba(0, 0, 0, .7);
background-image: radial-gradient(center, ellipse cover, rgba(104,104,104,0.6) 0%,rgba(23,23,23,0.7) 100%);
box-shadow: inset 0 0 .35em 0 rgba(0, 0, 0, .2);
color: rgba(255, 255, 255, .6);
backface-visibility: hidden;
li {
cursor: pointer;
&:nth-child(1):before {
/* fontawesome-heart-empty */
content: "\f08a";
}
&:nth-child(2):before {
/* fontawesome-glass */
content: "\f000";
}
&:nth-child(3) {
margin-bottom: 1em;
&:before {
/* fontawesome-comment */
content: "\f075";
}
}
&:nth-child(4) {
margin-bottom: .5em;
&:before {
/* fontawesome-cog */
content: "\f013";
}
}
&:nth-child(5):before {
/* fontawesome-signout */
content: "\f08b";
}
&:hover {
color: rgba(255, 255, 255, 1);
padding-left: 1.5em;
box-shadow: inset 0 0 0 10em rgba(255, 255, 255, .5);
&:before {
color: rgba(255, 255, 255, 1);
transform: none;
}
}
}
}
所有三种列表类型的演示 在 CodePen 上
4. Emocons.js jQuery 插件
Emojons.js 是一个 jQuery 插件,它搜索元素内容中的特定字符序列。所有匹配项都将替换为 span 和相应图标的 HTML 类。例如,一个聊天应用程序
<div class="chat">
:D :) ;) :'( :o :/ :( B) :P :|
:beer: :devil: :shoot: :coffee: :thumbsup: :angry: :ueber-happy:
</div>
然后在您的元素上调用 Emocons.js 插件方法
$('.chat').emocons();
聊天中的所有元素现在都转换为类似这样的内容
<span class="fontelico-emo-grin go" title=":D"></span>
将图标字体 Fontelico 导入到您的 CSS 中
@import url(http://weloveiconfonts.com/api/?family=fontelico);
[class*="fontelico-"]:before {
font-family: 'fontelico', sans-serif;
}
当 Emocons.js 将字符串转换为表情符号时,它会将类 go
(调用动画)添加到 span 元素。
.go {
animation: hey .55s 1 linear;
}
@keyframes hey {
0% {
transform: scale(1, 1);
}
50% {
transform: scale(1.85, -1.85);
}
100% {
transform: scale(1, 1);
}
}
一些表情符号会获得特殊的样式(例如颜色更改)或通过 ::after
伪元素添加一些内容。
.fontelico-emo-devil {
color:rgba(180, 0, 0, .9);
}
.fontelico-emo-beer:after {
box-shadow:
-.475em .75em 0 .275em rgba(220, 220, 0, 1),
-.185em .675em 0 .175em rgba(220, 220, 0, 1)
;
}
.fontelico-emo-coffee:after {
box-shadow:
-.475em .78em 0 .235em rgba(222, 184, 135, 1),
-.215em .715em 0 .155em rgba(222, 184, 135, 1)
;
}
.fontelico-emo-shoot:after {
border-radius: .15em;
box-shadow: .315em .525em 0 .1em rgba(0, 0, 0, 1);
}
.fontelico-emo-angry:after {
border-radius: .15em;
box-shadow: -.695em .455em 0 .085em rgba(0, 220, 0, .6);
z-index: 2;
}
演示 在 CodePen 上
5. 视差电影 #1337
最后一个示例仅供娱乐。它只是一个实验,旨在使用一个图标字体创建无限视差电影。HTML 由许多元素组成以创建场景
- 设置:天空、地面、夜晚和太阳
- 固定元素:自行车
- 动画元素:树木、长颈鹿、购物车、建筑物和直升机坪
<div class="night"></div>
<div class="wrapper">
<div class="sun">
<div class="maki-fast-food"></div>
</div>
<div class="sky"></div>
<span class="maki-bicycle"></span>
<span class="maki-tree-1" data-child="1"></span>
<span class="maki-tree-1" data-child="2"></span>
<span class="maki-tree-1" data-child="3"></span>
<span class="maki-giraffe"></span>
<span class="maki-grocery-store"></span>
<span class="maki-commerical-building" data-child="1"></span>
<span class="maki-commerical-building" data-child="2"></span>
<span class="maki-heliport"></span>
<div class="ground"></div>
</div>
将图标字体 Maki 导入到您的 CSS 中
@import url(http://weloveiconfonts.com/api/?family=maki);
[class*="maki-"] {
position: absolute;
margin: 0;
color: #fff;
font-size: 2em;
}
[class*="maki-"]:before{
font-family: 'maki', sans-serif;
}
*:after {
position: absolute;
top: 0;
right: 0;
content: '';
z-index: -1;
width: 0;
height: 0;
}
包装器将整个场景旋转 -3deg
。
.wrapper {
height: 140%;
width: 120%;
transform: rotate(-3deg) translate(-10%, -15%);
}
当太阳落下时,夜晚升起。
.night {
position: absolute;
z-index: 5;
width: 100%;
height: 100%;
animation: night 45s infinite forwards;
}
@keyframes night {
0%, 30%, 100% {background:rgba(0, 0, 0, 0);}
55% {background: rgba(0, 0, 0, .6);}
}
天空和地面都使用相同的background-position
动画,但速度不同。
.sky {
position: relative;
z-index: 0;
background: url(http://subtlepatterns.subtlepatterns.netdna-cdn.com/patterns/bedge_grunge.png);
height: 50%;
width: 100%;
animation: rollin-bg 25s linear infinite forwards;
}
.ground {
position: absolute;
z-index: 1;
background: url(http://subtlepatterns.subtlepatterns.netdna-cdn.com/patterns/blackorchid.png);
height: 50%;
width: 100%;
animation: rollin-bg 7s linear infinite forwards;
}
@keyframes rollin-bg {
0% { background-position: 100%; }
100% { background-position: 0; }
}
在圆形路径上移动元素这是一篇来自Lea Verou的精彩文章,这里用来为汉堡包太阳制作动画。
.sun {
position: absolute;
z-index: 1;
left: 50%;
top: 10%;
width: 2em;
height: 2em;
font-size: 4em;
line-height: 1;
animation: circle 45s linear infinite;
transform-origin: 50% 3.85em;
}
.sun [class*="maki-"] {
color: rgba(240, 180, 0, .2);
text-shadow: 0 0 .35em rgba(240, 240, 0, .7);
}
.sun > div {
animation: inner-circle 45s linear infinite;
}
@keyframes circle {
from { transform: rotate(0deg); }
to { transform: rotate(360deg); }
}
@keyframes inner-circle {
from { transform: rotate(0deg); }
to { transform: rotate(-360deg); }
}
这是唯一一个没有动画的元素。但它应该看起来像在移动。
.maki-bicycle {
left: 50%;
z-index: 4;
margin: -.85em 0 0 -.5em;
color: rgba(30, 30, 140, .95);
}
这里有一些动画元素,它们都使用相同的滚动动画,但速度不同。
.maki-tree-1[data-child="1"] {
margin: -1em 0 0 5%;
z-index: 5;
animation: rollin 5s linear infinite;
font-size: 2.4em;
color: rgba(0, 110, 0, .8);
}
.maki-tree-1[data-child="2"] {
margin: -1em 0 0 85%;
z-index: 2;
animation: rollin 12s linear infinite;
font-size: 1.6em;
color: rgba(0, 110, 0, .5);
}
.maki-tree-1[data-child="3"] {
margin: -1em 0 0 25%;
z-index: 2;
animation: rollin 17s linear infinite;
font-size: 1.2em;
color: rgba(0, 110, 0, .3);
}
.maki-giraffe {
margin: .25em 0 0 5%;
z-index: 6;
animation: rollin 12s linear infinite reverse;
font-size: 10em;
color: rgba(255, 255, 10, .9);
}
.maki-giraffe:after {
right: -3em;
content: '\e82a \e82a \e82a \e82a \e82a';
font: .2em 'Maki', sans-serif;
letter-spacing: .2em;
width: 3em;
color: rgba(0, 0, 0, .6);
box-shadow:
0 .45em 0 .75em rgba(255, 255, 255, .4),
1em .35em 0 .75em rgba(255, 255, 255, .4),
2.25em .25em 0 1.05em rgba(255, 255, 255, .4)
;
border-radius: 50%;
transform: translate(2.3em, .55em) rotateY(-180deg);
}
.maki-grocery-store {
margin: -.35em 0 0 5%;
z-index: 5;
animation: rollin 22s linear infinite;
font-size: 4em;
color: rgba(220, 0, 10, .7);
}
.maki-commerical-building[data-child="1"] {
margin: -1em 0 0 5%;
z-index: 3;
animation: rollin 6s linear infinite;
font-size: 7em;
color: rgba(120, 0, 120, .8);
}
.maki-commerical-building[data-child="2"] {
margin: -1em 0 0 5%;
z-index: 2;
animation: rollin 14s linear infinite;
font-size: 4em;
color: rgba(0, 120, 120, .4);
}
.maki-heliport {
margin: -3.5em 0 0 2em;
z-index: 1;
color: rgba(30, 30, 30, .45);
font-size: 1.25em;
animation: rollin 26s linear infinite reverse 2s;
}
@keyframes rollin {
0% {margin-left:105%}
100% {margin-left:-15%;}
}
进一步阅读
感谢您的时间!当然,这并不是您可以使用图标字体做到的全部。不要害怕自己去尝试。
- 图标字体使用的HTML查看文章 / Pictos关于使用图标字体的文章
- 使用unicode-range的无标记图标字体
- Animicons:使用图标字体的精灵动画
- 多色字体图标
- IcoMoon / Fontello
- Font Squirrel @font-face 生成器
- 扁平化图标和图标字体的完整列表
哇。这部电影很棒!但是,我找不到任何现实世界的应用场景……
就像文章中所说,“最后一个例子只是为了好玩” :D 我只能想到某种视觉艺术节,以及这部电影作为墙上的投影 :D
太棒了,Tim!
我也非常喜欢
unicode–range
与PUA中设置的图标字体结合使用的可能性。我相信这种方法将成为未来使用内联图标的巨大优势,无需作者进行生成的content技巧和额外的周围标记。
干杯,伙计!
你如何处理IE9+、Windows和ClearType渲染?IE9+上的字体渲染非常不同,我所有的图标字体在ClearType浏览器中看起来都错位了。还有其他人遇到这个问题吗?
你可以使用一些技巧……
-webkit-font-smoothing: antialiased
或在图标上使用轻微的text-shadow
(例如.the-icon { text-shadow: 0 1px 1px rgba(255,255,25,0.50)}
)在我看来,这些建议都是为了弥补制作不良的图标而采用的hack(参见Ben Dunkle @EmpireOfLight,也就是WordPress的图标制作人)也可能存在这种情况,即渲染的图标实际上是一个制作得很糟糕的图标,从未设计好在像素网格上正确渲染。
@Dennis Gaebel 我尝试了你的所有技巧,它在Windows中(当它们很小的时候)仍然渲染得很糟糕。
@Eliazer
好吧……
-webkit-font-smoothing
肯定不会在IE上工作,text-shadow
只会对IE10+起作用,但最有可能的是,图标在小尺寸下显示不正确的问题是,它从未在像素网格上为你的目标小尺寸进行设计。图标字体的绝佳用例!电影特别棒!图标字体很棒,这就是我编制(无耻的自夸)的原因
最全面的免费图标网络字体索引
图标字体万岁!:)
好东西!我使用了类似的技术来创建无像素媒体播放器。为了让事情更快速,我使用了base64编码字体。
你可以在此处阅读:http://blog.appsfuel.com/2012/11/06/icon-fonts-and-how-to-create-a-pixelfree-audio-player/
我个人不喜欢滥用字体来实现这个目的。我一直使用Firefox,并将其设置为始终强制使用我自己的字体,因为网络上有太多笨蛋试图让我使用他们难以阅读的可怕字体选择。但是,这使得图标字体在我的菜单中显示为“k 主页 9 论坛 Q 代码片段 p 图库……”,这只是令人困惑和难看(尤其是在它们不充当执行操作的热键时)。
如果你想要可缩放的图像,请使用SVG。它们像图标字体一样与分辨率无关,允许多种颜色,并且降级效果更佳。我发现的唯一问题涉及使用SVG进行精灵图的支持,其中单个下载获取所有图标,但随后会被裁剪。
胡说八道,胡说八道。
说真的。你有点像那些禁用JavaScript的“技术大师”,仅仅是因为在1995年有人制作了一些他们不喜欢的东西。
出于多种原因,图标字体优于基于图像的图标,其中页面下载速度就是其中之一。
例如,假设我有20个图标,这可能意味着对20个20KB文件发出20个HTTP请求。如果我将它们组合成一个精灵图,它可能就是300KB。
对于同一组,字体可能只有30KB——因此,你的加载时间理论上只有10%。
Andy,
是的,我有点像老派的科技极客,我确实倾向于关闭JS,原因有很多,尽管我会使用NoScript/NotScript/ScriptNo选择性地启用它,用于不滥用它的网站(我可以一只手数出我的白名单网站)或通过使用原始浏览器会话访问。大多数drive-by网络漏洞利用可以通过使用脚本阻止程序来缓解,这一点在安全公告中反复提到。它也使我的网络体验不那么烦人,因为我可以在自己的条件下使用网络。由于CPU使用率降低而带来的额外电池续航时间只是一个附带好处。也就是说……
你声明“图标字体优于基于图像的图标”,但你没有说明你是在谈论光栅图像(gif/jpg/png)还是矢量图像。我同意你关于图标字体优于基于光栅图像的图标的观点,就像你提到的20个HTTP请求或300KB图像下载的成本。
但是,我的主要观点是关于矢量图像(SVG)与图标字体,其中SVG提供
– 语义优势,因为它实际上只是一张图像,而不是依赖于在正确字体中显示的伪内容的插入
– 多种颜色
– 如果你的字体/图像服务器/CDN出现故障,视觉中断较少——屏幕上不会出现随机字母;它只会做浏览器在图像不可用时所做的事情(无论是从流中删除还是显示占位符损坏图像图标)
– 相当的大小(对于可比内容,压缩的.SVG与图标字体相当)
SVG的唯一缺点来自支持(特别是旧版IE),尤其是在用作精灵图时进行剪裁方面。
再见。
禁用JavaScript?这是1999年吗?我认为你的不信任是不必要的,但这只是我的观点。如果我们都采取这种心态,我们现在仍然会使用表格进行布局。
使用图标字体的方法有很多,有些比其他的更有语义。至于“CDN”宕机,你可以打包你的字体并将其嵌入到你的网站中。如果你的网站可用,你的字体也就可用。你关于SVG的论点是合理的,但在现实世界中,我们支持IE,因此对于大多数项目来说,这不是一个可行的解决方案。
Merne,
欢迎你认为我的不信任是不必要的,但扫描漏洞列表通常会显示,如果禁用了JS,许多漏洞利用就会失效。如果你听取任何安全机构的意见(我推荐Security Now播客),大多数人都会说,在你的机器上运行任意代码是一种风险。是的,这可能是一个微不足道的风险。但是,NoScript允许我选择性地允许/信任哪些网站在我的机器上运行代码。此外,我的浏览体验快得多,因为我不必让30个标签页上的网站都尝试运行它们的各种脚本。
我不确定你是如何从那里跳到“仍然使用表格进行布局”。CSS和JS是完全独立的。
至于SVG,人们总是可以使用http://code.google.com/p/svgweb/在IE中提供功能。
@Tim Chase 我100%同意你的观点。我也更愿意完全禁用网络字体,只使用本地可用的字体。越来越多的网站试图使用花哨的字体,这些字体在设计师使用的屏幕上可能看起来很棒,但在我的显示器上往往模糊不清且完全无法阅读。
此外,在所有关于语义的讨论中(抨击表格布局等),建议使用图标字体来显示图标的做法是极其虚伪的。
你之前在另一篇关于图标字体的文章中也提到了这一点。
阅读那篇文章。观看视频。它解释了可访问性和回退问题。如果你电脑上出现模糊问题,而且不喜欢它们,没关系,但如果你正确使用,使用它们本身并没有什么不好。
Chris,
由于任何字形都可以分配给任何字符(假设你控制着字体定义),在你的网站案例中,我倾向于使用 HTML 访问键与图标字体结合使用,这样,如果图标字体没有加载,显示的非字体图标化字符也会具有一定的价值。在你的网站案例中,而不是 Firefox 显示给我的“k HOME 9 Forums Q Snippets p Galleries…”,你可以将你的访问键映射,以便“H”转到“主页”,而“H”字形是你的“主页”字形。论坛和代码片段也一样,然后让你的论坛和代码片段字形分别映射到“F”和“S”。这样,当字体没有加载时(无论是由于用户代理覆盖了 CSS(就像我上面在我的根评论中提到的那样),不同的域名字体服务阻止了(Firefox 故意阻止来自不同域名的字体作为安全措施),还是服务器/网络问题干扰),至少那些(以前)随机的字母会具有一定的语义价值。
当然,在某些地方可以使用图标字体而不会造成干扰,但也很容易以侵入用户体验的方式使用它们。
-Tim
刚刚注意到,自从我最初回复的帖子(我从中复制了“k HOME 9 Forums…”部分),看起来“k”现在显示为一个复选标记。无论如何,我的担忧仍然存在。:-)
哇!图标字体和 CSS 的集成非常酷,感谢你提供图标字体的托管!
哇!这很酷。
我肯定要使用这些字体,但你能解释一下你的 CDN 或正常运行时间吗?因为我不想破坏我的网站。
顺便说一句,Windows 9 (666TB) ROFL。
@Chris,我们仍然面临一个主要问题,当这些图标变得非常小的时候,它们在 Windows 机器上渲染效果很糟糕……
我甚至检查了你的演示,尝试在 PC 上向下滑动大小..
毕竟,有没有什么解决方案?
嗨,Chris,你总是很棒。 :)
今年早些时候,一位同事向我介绍了 Icomoon(你在“进一步阅读”部分列出了它),并且直到最近 2-3 个月才有机会使用它。哇 - 它非常棒。喜欢它易于使用,可以添加自己的图标,甚至可以保存不同的集合。
顺便说一句,很棒的帖子!
太棒了,令人印象深刻。感谢你分享这种不错的动画方式。请继续努力 :)
谢谢这些,尤其是社交计数和增强列表示例。迫不及待地想在一个项目中使用它们。我个人渴望有一天我再也不用切图了。
很棒的教程,非常棒!
很棒的文章!!谢谢:D
哇!这是一篇很棒的文章。我一直在寻找类似案例 3 的东西。谢谢!
优秀的总结,Chris。谢谢。
非常好的示例,增强的列表对我来说最有趣,我只有一个问题,关于 3.3 你的帐户案例。使用哪种技术在悬停时显示“获取文件”。在 HTML 中,你获得了此文件。我不明白是什么意思。提前感谢你的解释。
“按钮”(获取此文件)默认情况下是隐藏的(height: 0; opacity: 0;)。当你将鼠标悬停在列表元素上时,按钮会显示出来(height: 2em; opacity: 1;)。
图标字体很棒!但我有一件事不太清楚 - 垂直居中。
将 CSS 设置为“vertical-align: middle;”效果不佳。图标上方显然有一些额外的空间(大约 2-4px),这让我很抓狂!我该如何消除它?
以下是我要表达意思的示例
http://jsfiddle.net/yQJ2z/
任何建议将不胜感激。
是的。这是一项不错的技术,但结果不佳。
啊,这在三星 Wawe 2 上不起作用(在 Opera Mini 和 Delphin 上)
那里有一些很棒的想法。
我几乎完全开始使用图标字体,而不是费心使用糟糕的小 png。一旦你设置好字体,更改图标并动态尝试不同的事物就变得非常容易。
这些小示例给了我一些想法!
我在我为客户制作的一个 After Effects 视频中使用了 Font Awesome 的象形文字。我喜欢矢量图形在我的视网膜 MacBook 上完美显示。感谢你提供的另一个很棒的课程!
哪一个更好,“font-awesome”图标还是分组的图标图像“css-sprite”?
“Myntra.com”使用 CSS-SPrite 作为 ICON,所以我的问题是哪一个更可取。