我如何控制(跨所有设备和浏览器)字符是显示为表情符号版本还是文本版本?
How can I control (across all devices and browsers) whether a character is displayed as the emoji version or text version?
下方(以及此 live demo here)是生成这 2 个屏幕截图的 HTML。第一个是 Chrome Windows 10,第二个是 Chrome iOS 12。
请注意,Win 10 正确地将底行中的所有字符变平并涂成红色。但是在第一行,它错误地 not 样式化了 ⚠️,即使在其他地方(也在 Win 10 上)我看到它正确显示为黄色,例如 here。
另请注意,iOS 12 正确设置了所有表情符号的样式,但 未 将前 2 个字符 (︎ ︎) 变平并涂成红色。
我如何控制(跨所有设备和浏览器)字符是显示为表情符号版本还是文本版本?
这不是其他问题的重复,因为(正如您从 HTML 中看到的那样)我已经知道文本变体选择器 ︎
,并且我已经尝试了很多不同的本地字体(例如 https://emojisymbols.com)和 Google 字体。
- How to prevent Unicode characters from rendering as emoji in HTML from JavaScript?
- https://apple.stackexchange.com/q/347993/53510
<link href="https://fonts.googleapis.com/css?family=Raleway&display=swap" rel="stylesheet">
<div style='text-align: right; font-family: "Raleway"; margin: auto; display: inline-block; font-size: 22px;'>
emojis 🌄
💬
⌛
⚡
⚠
<div style="color: red;">
using text variation selector
🌄︎
💬︎
⌛︎
⚡︎
⚠︎
</div>
</div>
简短的回答是你不能。文本变体选择器通常不适用于所有字符;只有那些在标准中明确定义的序列才有效。 Chrome on Windows 实际上违反了第一个示例中的标准,因为 和 没有变化序列。没有 Unicode 机制来阻止这些字符表现得像表情符号; <U+1F304, U+FE0E>
必须 与 U+1F304
单独显示相同。
所有允许变体选择器的表情符号字符都列在我网站上的数据文件 emoji-variation-sequences.txt, and I also curate a visual table 中,以便于访问。
然而,即使对于那些支持变体选择器的字符,也不能保证它们真的有效。例如,较旧的 Android 手机无法将许多表情符号显示为 text-style,因为它们只是缺少这样做所需的字体。
如果要确保通用 text-style 显示,您将需要提供自己的字体来覆盖系统默认值。
旁注:虽然您的 Windows 示例将变体选择器弄错了,但它实际上 确实 正确处理了 ⚠,因为该字符本应 text-style默认不同于所有其他的。如果您需要 emoji-style 显示,您必须像这样附加表情符号变体选择器 U+FE0F
:⚠️。对于 ⌛ 和 ⚡ 这不是必需的(但可能),因为它们是 emoji-default.
下方(以及此 live demo here)是生成这 2 个屏幕截图的 HTML。第一个是 Chrome Windows 10,第二个是 Chrome iOS 12。
请注意,Win 10 正确地将底行中的所有字符变平并涂成红色。但是在第一行,它错误地 not 样式化了 ⚠️,即使在其他地方(也在 Win 10 上)我看到它正确显示为黄色,例如 here。
另请注意,iOS 12 正确设置了所有表情符号的样式,但 未 将前 2 个字符 (︎ ︎) 变平并涂成红色。
我如何控制(跨所有设备和浏览器)字符是显示为表情符号版本还是文本版本?
这不是其他问题的重复,因为(正如您从 HTML 中看到的那样)我已经知道文本变体选择器 ︎
,并且我已经尝试了很多不同的本地字体(例如 https://emojisymbols.com)和 Google 字体。
- How to prevent Unicode characters from rendering as emoji in HTML from JavaScript?
- https://apple.stackexchange.com/q/347993/53510
<link href="https://fonts.googleapis.com/css?family=Raleway&display=swap" rel="stylesheet">
<div style='text-align: right; font-family: "Raleway"; margin: auto; display: inline-block; font-size: 22px;'>
emojis 🌄
💬
⌛
⚡
⚠
<div style="color: red;">
using text variation selector
🌄︎
💬︎
⌛︎
⚡︎
⚠︎
</div>
</div>
简短的回答是你不能。文本变体选择器通常不适用于所有字符;只有那些在标准中明确定义的序列才有效。 Chrome on Windows 实际上违反了第一个示例中的标准,因为 和 没有变化序列。没有 Unicode 机制来阻止这些字符表现得像表情符号; <U+1F304, U+FE0E>
必须 与 U+1F304
单独显示相同。
所有允许变体选择器的表情符号字符都列在我网站上的数据文件 emoji-variation-sequences.txt, and I also curate a visual table 中,以便于访问。
然而,即使对于那些支持变体选择器的字符,也不能保证它们真的有效。例如,较旧的 Android 手机无法将许多表情符号显示为 text-style,因为它们只是缺少这样做所需的字体。
如果要确保通用 text-style 显示,您将需要提供自己的字体来覆盖系统默认值。
旁注:虽然您的 Windows 示例将变体选择器弄错了,但它实际上 确实 正确处理了 ⚠,因为该字符本应 text-style默认不同于所有其他的。如果您需要 emoji-style 显示,您必须像这样附加表情符号变体选择器 U+FE0F
:⚠️。对于 ⌛ 和 ⚡ 这不是必需的(但可能),因为它们是 emoji-default.