#html #css #animation #fonts
#HTML #css #Анимация #шрифты
Вопрос:
Я изменяю размер div (включая вложенные разделы и другие элементы), когда пользователь наводит на него курсор. Я заметил, что при этом шрифт искажается. Этого не происходит на Mac, но это происходит на компьютерах с Windows. Это код для анимации наведения и соответствующего HTML (я вырезал ненужные части):
CSS: @import url(https://fonts.googleapis.com/css?family=Lato:400,700);
.content-no-btn { transition: all .2s ease-in-out; }
.content-no-btn:hover{ transform: scale(1.05); }
HTML:
<div class="plan">
<div class="plan-inner">
<div class="content-no-btn">
<div class="entry-title first-entry-title">
<h3>H3 here </h3>
<div class="price">$23.99<span></span>
</div>
</div>
</div>
</div>
</div>
В чем может быть проблема?
Комментарии:
1. Пожалуйста, отправьте jsfiddle, который воспроизводит вашу проблему. Кроме того, это происходит только в определенном браузере или во всех браузерах. На Mac вы проверяли его во всех браузерах (я предполагаю, что вы можете использовать Safari)
Ответ №1:
Эта проблема очень хорошо объяснена Золтаном в этом сообщении в блоге. Эта проблема возникает из-за свойства CSS transfrom, из-за которого текст отображается с неровными краями, как показано на рисунке ниже.
(Это изображение взято из блога Золтана)
Этот эффект более заметен в Windows и едва заметен в Mac.
Решение
Существуют различные решения этой проблемы, однако я предпочитаю добавлять преспективу в свойство transfrom.
@import url(https://fonts.googleapis.com/css?family=Lato:400,700);
.content-no-btn { transition: all .2s ease-in-out; }
.content-no-btn:hover{
transform: perspective(1px) scale(1.1);
transform-origin: 0 0;
}
<div class="plan">
<div class="plan-inner">
<div class="content-no-btn">
<div class="entry-title first-entry-title">
<h3>H3 here </h3>
<div class="price">$23.99<span></span>
</div>
</div>
</div>
</div>
</div>
Другим решением является использование SVG-фильтра и свойства backface-visibility
@import url(https://fonts.googleapis.com/css?family=Lato:400,700);
.content-no-btn { transition: all .2s ease-in-out; }
.content-no-btn:hover{
transform: scale(1.1);
transform-origin: 0 0;
/*For chrome or other WebKit/Blink browsers.*/
-webkit-backface-visibility: hidden;
/*For Firefox */
filter: url('data:image/svg xml;utf8,<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"><defs><filter id="gaussian_blur"><feGaussianBlur in="SourceGraphic" stdDeviation="0" /></filter></defs></svg>#gaussian_blur');
}
<div class="plan">
<div class="plan-inner">
<div class="content-no-btn">
<div class="entry-title first-entry-title">
<h3>H3 here </h3>
<div class="price">$23.99<span></span>
</div>
</div>
</div>
</div>
</div>
На моем компьютере с Linux второе решение работает отлично.
Я надеюсь, что это решит вашу проблему.