Страницы

Поиск по вопросам

Показаны сообщения с ярлыком font-face. Показать все сообщения
Показаны сообщения с ярлыком font-face. Показать все сообщения

среда, 13 марта 2019 г.

Почему scss так компилирует переменные?

Этот вопрос касается Icomoon в целом.
Не могу разобраться почему scss так компилит символы, но они работают, если в пути к шрифту указан не только шрифт, но и кэш шрифта.
Связанный вопрос: что это за кэш?
$icomoon-font-path: "fonts" !default; $icon-bell: "\e900"; $icon-like: "\e901"; $icon-paceholder: "\e902"; $icon-search: "\e903"; $icon-star: "\e904"; $icon-vision: "\e905"; $icon-vision-off: "\e906"; $icon-angle-left: "\e907"; $icon-angle-right: "\e908"; $icon-arrow-right: "\e909"; $icon-angle-bottom: "\e90a"; $icon-chat-angle-bottom: "\e90b"; $icon-chat-angle-top: "\e90c";
@import "variables"; @font-face { font-family: 'Icomoon'; src: url('#{$icomoon-font-path}/Icomoon.eot?r3waic'); src: url('#{$icomoon-font-path}/Icomoon.eot?r3waic#iefix') format('embedded-opentype'), url('#{$icomoon-font-path}/Icomoon.ttf?r3waic') format('truetype'), url('#{$icomoon-font-path}/Icomoon.woff?r3waic') format('woff'), url('#{$icomoon-font-path}/Icomoon.svg?r3waic#Icomoon') format('svg'); font-weight: normal; font-style: normal; } [class^="icon-"], [class*=" icon-"] { /* use !important to prevent issues with browser extensions that change fonts */ font-family: 'Icomoon' !important; speak: none; 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; } .icon-bell { &:before { content: $icon-bell; } } .icon-like { &:before { content: $icon-like; } } .icon-paceholder { &:before { content: $icon-paceholder; } } .icon-search { &:before { content: $icon-search; } } .icon-star { &:before { content: $icon-star; } } .icon-vision { &:before { content: $icon-vision; } } .icon-vision-off { &:before { content: $icon-vision-off; } } .icon-angle-left { &:before { content: $icon-angle-left; } } .icon-angle-right { &:before { content: $icon-angle-right; } } .icon-arrow-right { &:before { content: $icon-arrow-right; } } .icon-angle-bottom { &:before { content: $icon-angle-bottom; } } .icon-chat-angle-bottom { &:before { content: $icon-chat-angle-bottom; } } .icon-chat-angle-top { &:before { content: $icon-chat-angle-top; } }


Ответ

Sass при компиляции utf-8 юникод файлов - переводит подобные вашим последовательности в юникод-символы. Почему вы видите квадраты вместо символов в редакторе? Потому что в вашем моноширинном шрифте эти символы не отрисованы. Но они отрисованы в шрифте Icomoon, который подключается на сайте, и там в итоге символы корректно отображаются.
Резюмируя: Это нормальное поведение, и по поводу скомпилированных символов беспокоиться не стоит.
Однако, если вдруг ваши файлы хранятся в ASCII-кодировке - Sass все равно будет компилировать символы в них, хотя по логике - не должен. На гитхабе уже 3 года висит открытый тикет по теме. Можно почитать, но разумный способ решения - перевести свои стили в utf-8-кодировку.

вторник, 12 марта 2019 г.

Помогите с кроссбраузерностью иконок

Так отображается в хроме,
@font-face { font-family: 'Material Icons'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/materialicons/v28/2fcrYFNaTjcS6g4U3t-Y5ewrjPiaoEww8AihgqWRJAo.woff) format('woff'); } .material-icons { font-family: 'Material Icons'; font-weight: normal; font-style: normal; line-height: 1.9; letter-spacing: normal; text-transform: none; white-space: nowrap; word-wrap: normal; direction: ltr; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; } .jub-icon-mask.icon-huge { width: 128px; height: 128px; line-height: 128px; padding: 0; text-align: center; font-size: 64px; box-sizing: content-box; border-radius: 50%!important; } .jub-icon-mask.bg-blue { background-color: #2196F3; color: rgba(255, 255, 255, .87); } i { font-size: 64px; font-weight: 300; }

cloud_done

А так в safari,как исправить?


Ответ

В новых сафари отображается нормально, для старых браузеров используйте код, как указано в мануале
Вместо:
cloud_done
Вставьте:

Ваш пример:
@font-face { font-family: 'Material Icons'; font-style: normal; font-weight: 400; src: url(https://fonts.gstatic.com/s/materialicons/v28/2fcrYFNaTjcS6g4U3t-Y5ewrjPiaoEww8AihgqWRJAo.woff) format('woff'); } .material-icons { font-family: 'Material Icons'; font-weight: normal; font-style: normal; line-height: 1.9; letter-spacing: normal; text-transform: none; white-space: nowrap; word-wrap: normal; direction: ltr; text-rendering: optimizeLegibility; -webkit-font-smoothing: antialiased; } .jub-icon-mask.icon-huge { width: 128px; height: 128px; line-height: 128px; padding: 0; text-align: center; font-size: 64px; box-sizing: content-box; border-radius: 50%!important; } .jub-icon-mask.bg-blue { background-color: #2196F3; color: rgba(255, 255, 255, .87); } i { font-size: 64px; font-weight: 300; }


пятница, 26 октября 2018 г.

Что это за кэш?

На сайте Icomoon сделать иконочный шрифт и в исходниках в пути к шрифту было это "?r3waic".
Подскажите пожалуйста что это за кэш? Что будет если без него использовать шрифт и вообще как правильно поступить в верстке.
@font-face { font-family: 'Icomoon'; src: url('#{$icomoon-font-path}/Icomoon.eot?r3waic'); src: url('#{$icomoon-font-path}/Icomoon.eot?r3waic#iefix') format('embedded-opentype'), url('#{$icomoon-font-path}/Icomoon.ttf?r3waic') format('truetype'), url('#{$icomoon-font-path}/Icomoon.woff?r3waic') format('woff'), url('#{$icomoon-font-path}/Icomoon.svg?r3waic#Icomoon') format('svg'); font-weight: normal; font-style: normal; } [class^="icon-"], [class*=" icon-"] { /* use !important to prevent issues with browser extensions that change fonts */ font-family: 'Icomoon' !important; speak: none; 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; }
Итог: Мне нужно понять как использовать этот кэш.


Ответ

Все из-за того, как в браузерах работает кеш.
Icomoon - генерируемый шрифт с иконками. Представьте ситуацию, когда в уже используемый у себя на сайте пак вы добавляете пару иконок. Добавили, сгенерировали файлы шрифтов, обновили их на хостинге. Но названия файлов остались те же (Icomoon.ttf и т.д.).
Что же будет, если в стилях будут прямые ссылки на файлы?
@font-face { font-family: 'Icomoon'; src: url('#{$icomoon-font-path}/Icomoon.eot'); src: url('#{$icomoon-font-path}/Icomoon.eot#iefix') format('embedded-opentype'), url('#{$icomoon-font-path}/Icomoon.ttf') format('truetype'), url('#{$icomoon-font-path}/Icomoon.woff') format('woff'), url('#{$icomoon-font-path}/Icomoon.svg#Icomoon') format('svg'); font-weight: normal; font-style: normal; }
Браузер скачает Icomoon.ttf и закеширует. После добавления пары иконок файлы вы обновили, но название файла не изменилось. И ссылки на них не изменились. Браузер это видит - и использует старые кешированные версии файлов.
Как дать браузеру понять, что файлы изменились? Варианта два:
Менять имена файлов (так, например, работают ассеты в Ruby on Rails); Добавлять к ссылкам случайный параметр, который менять вместе с файлами.
У вас - второй случай. Параметр r3waic - случайно сгенерированная строка. При перегенерации шрифтов сайт Icomoon должен выдать вам новые стили с новым псевдослучайно сгенерированным параметром, например с vf41cd
В итоге ссылки на файлы "изменятся", и браузер скачает новые версии файлов, вместо того, чтобы взять старые из кеша.

понедельник, 15 октября 2018 г.

В подключенном шрифте не показывается конкретный символ

По какой причине может не отображаться в подключенном шрифте конкретный символ? В моем случае это неразрывный пробел  . Использую локально подключенный шрифт "Futuris". При добавлении обычного пробела показывается разрыв между словами. Но при добавлении неразрывного пробела (даже нескольких) именно в жирном начертании разрыва не отображается. Подключаю вот таким образом:
@font-face { font-family: 'Futuris'; src: url('Futuris-Bold.eot'); src: url('Futuris-Bold.woff2') format('woff2'), url('Futuris-Bold.woff') format('woff'), url('Futuris-Bold.ttf') format('truetype'), url('Futuris-Bold.svg#Futuris-Bold') format('svg'), url('Futuris-Bold.eot?#iefix') format('embedded-opentype'); font-weight: 700; font-style: normal; } h2 { font-family: 'Futuris', sans-serif; font-weight: 700; }

а бб ввв


К сожалению, не смогла сделать пример воспроизводимым здесь, так как сюда загрузить шрифт нельзя. Подозреваю, что можно вручную как-то исправить файл шрифта, например - *.ttf добавив туда пробел, но не знаю как это сделать правильно. Может быть существует способ повесить стиль на спецсимвол?
Воспроизводимый пример

UPD: Если можно удалить символ с помощью FontForge, то получается можно и добавить, но где и как в таблице найти неразрывный пробел?


Ответ

Скачала бесплатную программу FontForge. Открыла проблемный шрифт в формате *.ttf. Нашла символ неразрывного пробела, его номер в юникоде: U+00A0

Жму на символ, смотрю. Действительно, ширины у этого символа нет:

Добавляю ширину, сохраняю шрифт:

Конвертируем получившийся Futuris-Bold.sfd в нужные форматы. Работает. Единственный момент, нужно подобрать ширину неразрывного пробела, чтобы он не отличался от ширины разрывного.