目标
我想创建一个网页模板卡和桌面棋盘游戏中使用的其他对象。许多游戏包括一种“符号字体”,即一组符号,在游戏的上下文中有意义,与文本一起使用。因此,我的最终目标是能够**在背景图像上放置多个文本字段,并在该文本中包含多色自定义符号。
我想,我所尝试的技术需要一些类似于支持表情符号的技术。
我已经成功地在<span>
的内部HTML中呈现了自定义符号。然而,我想呈现的符号与文本内联,可以定位在一个图像。如何做到这一点?
我尝试过的
1.我在Inkscape中画了一个自定义符号,保存为32x32svg
文件。它是一个半黄半蓝的圆圈。
1.我把符号上传到icomoon并下载了一个字体包。Icomoon生成.tff
、.svg
和.woff
字体文件。它还生成了一些示例html和css。
1.我将HTML和CSS缩减为一个非常小的(不)工作示例:demo.html
<!doctype html>
<html>
<head>
<meta charset="utf-8">
<title>Symbol font demo</title>
<link rel="stylesheet" href="style.css">
</head>
<body>
<p>This code</p>
<xmp>
<div>
<span class="my-fontcircle"><span class="path1"></span><span class="path2"></span></span>
</div>
</xmp>
<p>Produces this</p>
<div>
<span class="my-fontcircle"><span class="path1"></span><span class="path2"></span></span>
</div>
<p>This code</p>
<xmp>
<div font-family: "my-font">Let's use our symbol in line: </div>
</xmp>
<p>Produces this</p>
<div font-family: "my-font">Let's use our symbol in line: </div>
</body>
</html>
style.css
@font-face {
font-family: 'my-font';
src:
url('fonts/my-font.ttf?81gy7') format('truetype'),
url('fonts/my-font.woff?81gy7') format('woff'),
url('fonts/my-font.svg?81gy7#my-font') format('svg');
font-weight: normal;
font-style: normal;
font-display: block;
}
[class^="my-font"], [class*=" my-font"] {
/* use !important to prevent issues with browser extensions that change fonts */
font-family: 'my-font' !important;
speak: never;
font-style: normal;
font-weight: normal;
font-variant: normal;
text-transform: none;
line-height: 1;
/* Better Font Rendering =========== */
-webkit-font-smoothing: antialiased;
-moz-osx-font-smoothing: grayscale;
}
.my-fontcircle .path1:before {
content: "\e900";
color: rgb(251, 236, 0);
}
.my-fontcircle .path2:before {
content: "\e901";
margin-left: -1em;
color: rgb(0, 129, 255);
}
结果如下:
正如我们所看到的,当我们使用css类方法时,这个符号出现了,但是它没有呈现在文本中。我们怎样才能使符号显示与文本内联?
2条答案
按热度按时间i5desfxk1#
首先,我不确定为什么你不能在你的初始实现中将文本定位在背景图像上,并在文本中包含多色的自定义符号,除非有一些限制,比如HTML转义,你想在哪里使用你的图标。
<span>
是一个内联元素,使用一些对齐样式(首先尝试使用inline-flex
和justify-content: center;
),它应该可以正常工作。存在用于定心元素的资源负载。我已经把一个例子与一个不同的图标库:.
您的主要问题似乎是您使用了一个自定义HTML实体,在您的示例中是

。我是否可以正确地假设您希望基于您的CSScontent: "\e900";
进行此操作?我的简短研究表明,为了使其工作,您需要扩展XHTML,而在您的示例中我没有看到这一点。这可能是图标未按预期呈现的原因。epfja78i2#
如果你不需要替换常见的emoji unicode字符(例如
😀
=> smiley),你可以编写一个简单的图标注入脚本。工作原理
您正在定义一个包含所有符号源及其标识符的对象:
类似于fontAwesome和其他图标库API,您可以通过为占位符元素设置可读/不言自明的标识符来指定图标类型。
在本例中,我使用了一个数据属性而不是类名,以避免类名冲突和前缀的需要(例如:
fa-icon-mame
)。现在我们可以用实际的图标替换占位符:
您还可以采用这种方法来注入内联SVG。
然而,如果图标包含渐变、蒙版或剪辑路径,您可能会遇到麻烦。
要避免这些问题,您可以使用Danny '365CSI' Engelman's
<load-file>
本地Web组件将图标附加为shadow DOM元素。