Intereting Posts
Исключить обновление игры для cocos2d-x v2.0 Состояние экрана CardView Click не работает Активность просочилась IntentReceiver, которая была первоначально зарегистрирована здесь. Вам не хватает приглашения на unregisterReceiver ()? Как TeamViewer делает скриншоты и позволяет удаленное управление без root? Отметьте выбранным пользователем, как указано в FriendPicker (Facebook SDK для Android) Что это предупреждение: Игнорирование атрибута InnerClasses для анонимного внутреннего класса, который не связан с атрибутом EnclosingMethod Отправка электронной почты из приложения для Android Исключено исключение из цикла «Невозможно нарисовать переработанные растровые изображения» с Picasso Как установить значение по умолчанию для ListPreference Могу ли я получить запись таблицы маршрутизации в Android? Сохранение и перезагрузка ListView с использованием общих настроек Как зарегистрировать намерение, которое будет обнаружено другими приложениями? Заставка показывает пустой белый экран при выполнении AsyncTask Как я могу использовать cursorLoader в ViewPager? Как сохранить объект класса в android sharedPreference?

Ссылка CSS на шрифт Emoji телефона?

Я хочу использовать этот конкретный эмози на моей веб-странице 🔍 – 🔍

На Android браузер распознает символ Unicode как Emoji и отображает его.

Введите описание изображения здесь

На рабочем столе он отображается как символ возврата Unicode – маленький квадрат с числами в.

Итак, используя Symbola, Quivira или любой другой шрифт с правильными символами, я могу это исправить.

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

Однако теперь Android отображает символ из шрифта, а не Emoji.

Есть ли способ установить объявление семейства font-family чтобы Android (и iPhone) использовал встроенный цвет Emoji, и все остальные браузеры будут использовать предоставленный символ шрифта?

Modernizr имеет (не ядро) функцию обнаружения для поддержки emoji. Если вы создадите собственную сборку Modernizr с помощью cssclasses и emoji, вы можете использовать класс .no-emoji который добавлен в тег html чтобы иметь другую font-family .

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

Я создал jsFiddle, который показывает зеленый фон, если у вас есть поддержка emoji , а красный фон и шрифт EmojiSymbols от Kenichi Kaneko, если у вас нет поддержки emoji . К сожалению, я мог видеть только шрифт EmojiSymbols в Windows 7 + Firefox, но это может дать вам начало.

Обновление по комментариям

Чтобы увидеть, что можно обнаружить, поддерживается определенный символ, давайте взглянем на исходный код обнаружения функций Modernizr для поддержки emoji :

 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 , рендеринга 🐨 koala emoji и проверки значения красного цвета канала определенного пикселя, который, как я предполагаю, существует в каждом представлении этого эмози.

Вы можете расширить эту функцию, чтобы проверить, поддерживаются ли все emoji в списке параметров, и если не использовать резервную копию шрифта emoji. Я думаю, что лучшим решением было бы сделать каждый эможи в том же холсте и проверить, есть ли по крайней мере один пиксель, расположенный внутри ограничивающей рамки каждого emoji. Я не знаю, как визуализируется неподдерживаемый emoji, возможно, это необходимо для обнаружения этого.

PS Как я предполагаю, для определения этого шрифта должно быть достаточно указать шрифт по умолчанию, из которого следует emoji перед запасным шрифтом emoji, насколько я могу предположить, что эти emoji не существуют в стандартном шрифте?

Один из подходов состоял бы в том, чтобы использовать media-queries для целевых устройств без собственной поддержки (например, настольных ПК) и применять собственное font-family , например (очень широко, вы хотите уточнить ниже)

 // target devices with 'larger than mobile' screen size...and apply the emoji 'polyfill' @media only screen and (min-device-width: 768px){ body{ font-family:quiviraregular; } } 

Я взял ответ @ ckuijjer и побежал с ним. Я обнаружил, что позиция 16,16 не была надежной в IE11. У позиции 14,16 были проблемы с FireFox. Но пока позиция 12,16 работала везде, где я ее пробовал (IE11, Edge, FF42 +, Chrome, Windows7, Windows10, OSX10.11).

 export default class EmojiUtils { static checkEmoji(char) { var node = document.createElement('canvas'); var ctx = node.getContext('2d'); ctx.fillStyle = '#f00'; ctx.textBaseline = 'top'; ctx.font = '32px Arial'; ctx.fillText(char, 0, 0); return ctx.getImageData(12, 16, 1, 1).data[0] !== 0; } static checkColor() { var node = document.createElement('canvas'); var ctx = node.getContext('2d'); ctx.fillStyle = '#000'; ctx.textBaseline = 'top'; ctx.font = '32px Arial'; ctx.fillText('\uD83D\uDD34', 0, 0); var data = ctx.getImageData(16, 16, 1, 1).data; return data[0] > data[1]; } static polyfillEmoji() { if (!EmojiUtils.checkColor()) { require('emojione/font.css'); } else { if (!EmojiUtils.checkEmoji('\uD83D\uDD7A')) { //Dancing man Unicode 9.0 require('emojione/font-versioned.css'); } } } } 

Затем мне просто нужно вызвать EmojiUtils.polyfillEmoji() когда страница загружается.

Я добавил к моему телу font-family: "EmojiOneColor", "EmojiOneColor-9", sans-serif;

font.css:

 @font-face { font-family: 'EmojiOneColor'; font-style: normal; font-weight: 400; src: local('EmojiOneColor'), local('EmojiOne Color'), url(emojione-svg.woff); unicode-range: U+0020, U+0023, U+002A, U+0030-0039, U+00A9, U+00AE, U+200D, U+203C, U+2049, U+20E3, U+2122, U+2139, U+2194-2199, U+21A9-21AA, U+231A-231B, U+2328, U+23CF, U+23E9-23F3, U+23F8-23FA, U+24C2, U+25AA-25AB, U+25B6, U+25C0, U+25FB-25FE, U+2600-2604, U+260E, U+2611, U+2614-2615, U+2618, U+261D, U+2620, U+2622-2623, U+2626, U+262A, U+262E-262F, U+2638-263A, U+2648-2653, U+2660, U+2663, U+2665-2666, U+2668, U+267B, U+267F, U+2692-2694, U+2696-2697, U+2699, U+269B-269C, U+26A0-26A1, U+26AA-26AB, U+26B0-26B1, U+26BD-26BE, U+26C4-26C5, U+26C8, U+26CE-26CF, U+26D1, U+26D3-26D4, U+26E9-26EA, U+26F0-26F5, U+26F7-26FA, U+26FD, U+2702, U+2705, U+2708-270D, U+270F, U+2712, U+2714, U+2716, U+271D, U+2721, U+2728, U+2733-2734, U+2744, U+2747, U+274C, U+274E, U+2753-2755, U+2757, U+2763-2764, U+2795-2797, U+27A1, U+27B0, U+27BF, U+2934-2935, U+2B05-2B07, U+2B1B-2B1C, U+2B50, U+2B55, U+3030, U+303D, U+3297, U+3299, U+FE0F, U+1F004, U+1F0CF, U+1F170-1F171, U+1F17E-1F17F, U+1F18E, U+1F191-1F19A, U+1F1E6-1F1FF, U+1F201-1F202, U+1F21A, U+1F22F, U+1F232-1F23A, U+1F250-1F251, U+1F300-1F321, U+1F324-1F393, U+1F396-1F397, U+1F399-1F39B, U+1F39E-1F3F0, U+1F3F3-1F3F5, U+1F3F7-1F4FD, U+1F4FF-1F53D, U+1F549-1F54E, U+1F550-1F567, U+1F56F-1F570, U+1F573-1F57A, U+1F587, U+1F58A-1F58D, U+1F590, U+1F595-1F596, U+1F5A4-1F5A5, U+1F5A8, U+1F5B1-1F5B2, U+1F5BC, U+1F5C2-1F5C4, U+1F5D1-1F5D3, U+1F5DC-1F5DE, U+1F5E1, U+1F5E3, U+1F5E8, U+1F5EF, U+1F5F3, U+1F5FA-1F64F, U+1F680-1F6C5, U+1F6CB-1F6D2, U+1F6E0-1F6E5, U+1F6E9, U+1F6EB-1F6EC, U+1F6F0, U+1F6F3-1F6F6, U+1F910-1F91E, U+1F920-1F927, U+1F930, U+1F933-1F93A, U+1F93C-1F93E, U+1F940-1F945, U+1F947-1F94B, U+1F950-1F95E, U+1F980-1F991, U+1F9C0; } 

шрифт-versioned.css:

 @font-face { font-family: 'EmojiOneColor-9'; font-style: normal; font-weight: 400; src: local('EmojiOneColor'), local('EmojiOne Color'), url(emojione-svg.woff); unicode-range: U+1F57A, U+1F5A4, U+1F6D1-1F6D2, U+1F6F4-1F6F6, U+1F919-1F91E, U+1F920-1F927, U+1F930, U+1F933-1F93A, U+1F93C-1F93E, U+1F940-1F945, U+1F947-1F94B, U+1F950-1F95E, U+1F985-1F991, U+1F57A, U+1F5A4, U+1F6D1-1F6D2, U+1F6F4-1F6F6, U+1F919-1F91E, U+1F920-1F927, U+1F930, U+1F933-1F93A, U+1F93C-1F93E, U+1F940-1F945, U+1F947-1F94B, U+1F950-1F95E, U+1F985-1F991, U+1F57A, U+1F919-1F91C, U+1F91E, U+1F926, U+1F930, U+1F933-1F939, U+1F93D-1F93E; } 

Это имеет то преимущество, что если хром изначально имеет цвет emojis, он будет загружать только символы Unicode 9. Загруженные будут черно-белыми из-за ограничений в хроме. На других системах с черно-белым родным emoji он загружает весь шрифт emoji. unicode-range на этой версии все еще гарантирует, что шрифт загружается только в том случае, если на странице существует эмуляция (возможно кратковременное tofu при первой загрузке).