Наведение указателя мыши на переход CSS в Safari осветляет определенный цвет шрифта - PullRequest
20 голосов
/ 30 октября 2011

В моем CSS я определил переход для класса.По какой-то причине, когда я нахожу курсор над классом с переходом, transition-duration по какой-то причине изменяет цвет шрифта в другом месте (заполнители форм и определенные ссылки).(Насколько я могу судить, это происходит только в Safari.)

Вот jsFiddle, который показывает, о чем я говорю:

http://jsfiddle.net/EJUhd/

Кто-нибудь знаетпочему это происходит и как я могу это предотвратить?

Ответы [ 7 ]

35 голосов
/ 16 марта 2012

Я боролся с подобной проблемой. Для меня случайные ссылки по всей странице стали явно жирными (явно что-то связанное с OSX и сглаживанием в Safari, поскольку Chrome (в Windows 7 и OSX), а также та же версия Safari в Windows работали нормально.

Решение не очевидно, и в зависимости от того, что вы делаете, может быть неоптимальным, но добавление этой строки кода решило проблему:

-webkit-transform: translateZ(0);

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

Вы добавляете это в нормальное состояние , а не : анимированное состояние: hover.

img { -webkit-transform: translateZ(0); }

В отличие от:

img:hover { /* not here */ }

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

2 голосов
/ 16 марта 2013

Нет более релевантной темы, которую я нашел для проблемы, с которой я столкнулся, но это связано с вышеупомянутой проблемой.Таким образом, может быть полезным для некоторых.

В двух словах: у меня есть контейнер (всплывающее окно), некоторые элементы внутри.Появление происходит следующим образом: фон контейнера исчезает до темноты из-за непрозрачности, а элемент внутри увеличивается (например, приближается к нам сзади).Все отлично работает везде, но не в Safari (Mac / Win / iPhone).Safari «изначально» показывает мой контейнер, но мигает странным образом (появляется крошечная короткая вспышка).

Только добавление -webkit-transform: translateZ (0);(в контейнер !!!) помогло.

.container {
    -webkit-transform: translateZ(0); /* <-- this */
}

.container section {
    -webkit-transform: translateZ(0) scale(.92); /* <-- and I added translate here as well */
    -webkit-transition: -webkit-transform .4s, opacity .3s;
    opacity:0;
}

.container.active section {
    -webkit-transform:translateZ(0) scale(1);
    -webkit-transition: -webkit-transform .3s, opacity .3s;
    opacity:1;
}

Но, говоря о переходах, была также следующая часть кода:

.container {
    ...
    top:-5000px;
    left:-5000px;
    -webkit-transition: opacity .5s, top 0s .5s, left 0s 5s, width 0s 5s, height 0s 5s;
}
.container.active {
    -webkit-transition: opacity .5s;
    top:0;
    left:0;
    width:100%;
    height:100%;
}

, учитывая, что я хочу показать / скрыть всплывающее окно, используя только CSSпереключение (а также чтобы заставить его исчезнуть, вместо этого просто «display: none»).

так, каким-то образом при появлении Safari (очевидно) наследовал свойства перехода, кроме «opacity», даже если я их перегружал только-webkit-transition: непрозрачность .5s;

Итак, добавление следующего решило проблему:

.container {
    ...
    -webkit-transition: opacity .5s, top 0s 0s, left 0s 0s, width 0s 0s, height 0s 0s;
}
2 голосов
/ 10 ноября 2011

Благодаря приведенной выше идентификации сглаживания, а также справке из приведенных ниже статей я изменил свой код, включив в него translate3d(0,0,0), и проблема исчезла:

    -webkit-transition-duration: .17s, .17s translate3d(0,0,0);

Переход не так гладок, как раньше, но это тема для другого вопроса.

Сглаживание Wonky Text при вращении с помощью webkit-transform в Chrome

http://johanbrook.com/design/css/a-fix-for-antialiasing-issues-in-webkit-browsers/

http://www.webkit.org/blog/386/3d-transforms/

2 голосов
/ 09 ноября 2011

Я не могу начать объяснять вам, почему он это делает, но Safari не меняет цвет вашего текста, он по-разному сглаживает текст во время перехода.Края текста становятся более гладкими, а сам текст становится тоньше.Это становится особенно очевидным, если вы увеличиваете скрипку с помощью специальных инструментов.При меньших размерах смещение вокруг кнопки рядом с текстом формы также изменяется.(Возможно ли, что Safari перерисовывает некоторые вещи или переориентирует их на субпиксельный уровень во время переходов? Кто-нибудь объяснит это, пожалуйста, это сводит меня с ума сейчас!)

Потому что я понятия не имею, почему этои в этом случае это могут быть не самые лучшие решения:

В зависимости от того, что вы преобразуете, замена преобразования CSS на анимацию javascript, вероятно, исправит это.
Например, в вашей скрипке проблематакже произошло с преобразованием масштаба, но не с аналогичной функцией анимации jQuery.

Кажется, что есть некоторые оттенки и стили, в которых изменение сглаживания менее очевидно (по крайней мере, в скрипте), поэтому вы также можете попробовать по-разному стилизовать заполнители и другой полученный текст.
(Этопоток может помочь с стилизацией заполнителей, если вы идете по этому пути: Измените цвет заполнителя ввода HTML5 с помощью CSS )

0 голосов
/ 27 октября 2014

Для вращение () возможно, это нормально, но для scale () Это не сработало -webkit-transform: translateZ(0); формула.

Я использовал:

-webkit-font-smoothing: antialiased;
0 голосов
/ 07 июня 2013

Существует похожая проблема с использованием transition и translate3d. Иногда любой элемент на странице со стилями :hover показывает свое поведение при наведении. У меня есть эта проблема с помощью ползунка. Поместите -webkit-transform: translateZ(0); в элемент :hover, и его поведение будет нормальным.

0 голосов
/ 30 октября 2012

У меня была та же проблема, но при переходе некоторый текст стал сглаженным. это происходит только в привязанном тексте, который расположен относительно e с z-индексом внутри элемента и с самим z-index. если я удаляю все позиции и индексирую, проблема исчезает.

...