Текст размывается при использовании перехода и масштабирования Chrome и FireFox

когда я использую как transition и transform, анимации не очень гладкие как на chrome и на firefox. Он размывается, когда вы наводите на него курсор. Единственным браузером, на котором это нормально, является IE.

Chome/FireFox (обратите внимание на текст, когда начинается анимация, он начинает размываться. Когда он заканчивается, он возвращается к гладким буквам.)
enter image description here

Желаемый результат (работает в IE)
enter image description here

Как сделать эти анимации также гладкими на chrome и firefox?

Snippet:

как только переход завершен, элемент должен снова сфокусироваться. То, что теперь выглядит на chrome и firefox.

button {
  background-color: cornflowerblue;
  border: 1px solid cornflowerblue;
  font-weight: bold;
  font-size: 14px;
  color: #fff;
  padding: 10px;
  border-radius: 3px;
  transition: all .33s ease-in-out;
}

button:hover {
  transform: scale(1.1);
  transition: all .33s ease-in-out;
}
<button>Hover me</button>

Ответ 1

Вы можете добиться очень близкого эффекта, используя относительные единицы шрифта (em) и увеличивая размер шрифта элемента при наведении.

button {
  font-size: .875em; /* =14/16 or whatever your base font size is */
  padding: .625em; /* =10/16 */
  border-radius: .1875em; /* =3/16 */
}

button:hover {
  font-size: 1em; /* close enough to 1.1x */
}

Обратите внимание, что это, как правило, считается менее эффективным, чем использование преобразований, по крайней мере, пытайтесь расположить элемент таким образом, чтобы вокруг него было меньше перетоков.

Chrome 64 в Windows 10:

Chrome Windows

button {
  background-color: cornflowerblue;
  border: 1px solid cornflowerblue;
  font-weight: bold;
  font-size: .875em; /* =14/16 or whatever your base font size is */
  color: #fff;
  padding: .625em; /* =10/16 */
  border-radius: .1875em; /* =3/16 */
  transition: all .33s ease-in-out;
  transform: translateX(-50%) translateY(-50%);
}

button:hover {
  font-size: 1em; /* close enough to 1.1x */
  transition: all .33s ease-in-out;
}
<span style="position: relative; left: 2.5em; top: 1em;">
  <button>Hover me</button>
</span>

Ответ 2

Мне удалось удалить размытие на Firefox с помощью:

Скрытая видимость обратной ссылки устраняет проблему, поскольку она упрощает анимацию только перед объектом, тогда как по умолчанию используется фронт и спина.

backface-visibility: hidden;

или (или оба)

TranslateZ также работает, так как это взлом для добавления аппаратного ускорения в анимацию.

transform: translateZ(0);

Ответ 3

Вы можете попробовать, если перспектива может исправить вашу проблему, она фиксирует текст в нем по оси z, а не по технической причине.

button {
  background-color: cornflowerblue;
  border: 1px solid cornflowerblue;
  font-weight: bold;
  font-size: 14px;
  color: #fff;
  padding: 10px;
  border-radius: 3px;
  transition: all .33s ease-in-out;
  -webkit-perspective: 1;
  perspective: 1;
}

button:hover {
  transform: scale(1.1);
  transition: all .33s ease-in-out;
}
<button>Hover me</button>

Ответ 4

Самый лучший и пока единственный способ, который удаляет эффект размытия, заключается в том, чтобы сначала уменьшить масштаб элемента, а затем масштабировать его до его первоначального размера. Вот пример:

button {
  background-color: cornflowerblue;
  border: 1px solid cornflowerblue;
  font-weight: bold;
  font-size: 16px;
  color: #fff;
  padding: 20px;
  border-radius: 3px;
  transition: all .33s ease-in-out;
  transform:scale(0.7);
}

button:hover {
  transform : perspective(1px) scale(1);
  transition: all .33s ease-in-out;
}
<button>Hover me</button>