android - CSS 引用手机的表情符号字体?

标签 android html css unicode fonts

我想在我的网页中使用这个特定的表情符号 🔍 - 🔍

在 Android 上,浏览器将 Unicode 字形识别为表情符号并显示。

enter image description here

在桌面上它呈现为 Unicode 后备字符 - 一个带有数字的小方 block 。

因此,使用 Symbola、Quivira 或任何其他带有正确符号的字体,我可以解决这个问题。

@font-face {
    font-family: 'quiviraregular';
    src: url('fonts/quivira.woff2') format('woff2');
}

body{
 font-family:sans-serif,quiviraregular;
}

但是,现在 Android 显示字体中的符号,不是表情符号。

有什么方法可以设置 font-family 声明,以便 Android(和 iPhone)将使用其内置颜色 Emoji 而所有其他浏览器将使用提供的符号字体?

最佳答案

Modernizr 具有用于表情符号支持的(非核心)功能检测。如果您创建自己的 build of Modernizr with cssclasses and emoji您可以使用添加到 html 标签的 .no-emoji 类来拥有不同的 font-family

body {
    font-family: sans-serif;
}

.no-emoji body {
    font-family: sans-serif, emojisymbols;
}

我创建了一个 jsFiddle 如果您有表情符号支持,则显示绿色背景,红色背景和 Kenichi Kaneko's EmojiSymbols字体如果没有表情符号支持。不幸的是,我只能看到 EmojiSymbols 字体在 Windows 7 + Firefox 上工作,但这可能会给你一个开始。

根据评论更新

要查看支持检测特定字符的可能性,让我们看一下 Modernizr 的功能检测 source code for emoji support :

define(['Modernizr', 'createElement', 'test/canvastext'], function( Modernizr, createElement ) {
  Modernizr.addTest('emoji', function() {
    if (!Modernizr.canvastext) return false;
    var node = createElement('canvas'),
    ctx = node.getContext('2d');
    ctx.fillStyle = '#f00';
    ctx.textBaseline = 'top';
    ctx.font = '32px Arial';
    ctx.fillText('\ud83d\udc28', 0, 0); // U+1F428 KOALA
    return ctx.getImageData(16, 16, 1, 1).data[0] !== 0;
  });
});

它的工作原理是创建一个 canvas 元素,渲染 🐨 考拉表情符号并检查特定像素的红色 channel 值,我假设该像素的每个再现中都存在。

您可以扩展此功能以检查是否支持参数列表中的所有表情符号,如果不支持则使用表情符号字体回退。我认为最好的解决方案是在同一个 Canvas 中渲染每个表情符号,并检查每个表情符号的边界框内是否至少有一个像素着色。我不确定如何呈现不受支持的表情符号,可能需要检测到这一点。

P.S. 因为我假设在后备表情符号字体之前指定表情符号的默认字体应该足以解决这个问题,我假设这些表情符号不存在于默认字体?

关于android - CSS 引用手机的表情符号字体?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27688046/

相关文章:

android - 在 Android 中创建自定义布局

html - 钱能买到的最好的 WYSIWYG HTML 编辑器是什么?

javascript - tumblr:如何让我的帖子停在某个边缘?

javascript - DuckDuckGo 如何根据我是否访问过页面显示图标?

android - transformClassesWithJarMergingForDebug - 重复条目 android/support/v4

android - 运行 Proguard 后损坏或丢失矢量绘图

html - IE11 DOM Explorer 红色下划线 - 为什么?

jquery - 将鼠标悬停在其子元素上时,如何保持父元素的背景颜色不变?

javascript - Fancybox 样式不起作用

Android,如何取消闹钟? alarmManager.cancel 不工作