Ответ 1
Как утверждали другие, rgba()
и opacity
работают по-другому:
-
rgba()
влияет на одно свойство, напримерcolor
,background-color
илиborder-color
, элементов, нацеленных на CSS, и только этих элементов -
opacity
влияет на все свойства (весь внешний вид) целевых элементов вместе со всеми их дочерними элементами дерева DOM.
Тем не менее, многие эффекты могут быть достигнуты с использованием любого из них и производительности/совместимости , поэтому этот вопрос не является бессмысленным.
Из моего опыта использование и особенно анимация свойства opacity
- это самый простой способ вызвать знаменитый сглаживание сглаживания текста в браузерах webkit (особенно Safari, Перемещение по переходу CSS в Safari облегчает цвет шрифта). Это связано с тем, что opacity
затрагивает не одну, а целую иерархию элементов, и браузеры иногда не могут правильно отличить, какие элементы перерисовываются. При использовании rgba()
таких проблем не возникает.
Кроме того, многие версии Opera, включая почти текущий v12.11, создают серьезные графические сбои с некоторыми сценариями использования opacity
. Смешивание непрозрачности с текстом, фоном изображения и тенями текста, а затем прокруткой страницы или div - это самый простой способ воспроизвести проблему. Аналогичная проблема возникла для меня в версии iOS версии Safari. Опять же, никаких проблем с rgba()
.
Это происходит по какой-то причине. С точки зрения рендеринга при использовании rgba()
для color
/background-color
/border-color
мы явно указываем браузеру, какие элементы DOM и какие графические слои элементов затронуты. Это делает намного проще для браузеров, чтобы выяснить, когда им нужно перерисовать. Кроме того, сужение области эффекта является гарантией повышения производительности, которое я подтвердил, попробовав оба варианта и заметив, что веб-сайт с использованием rgba()
вместо opacity
чувствовал себя более гладко, особенно в Safari и Opera.
Конечно, такие вещи, как затухающие изображения, не могут быть достигнуты, если rgba()
(mask-image
недостаточно поддерживается), но для задач, таких как простой прозрачный текст или фон, rgba()
представляется лучшим выбором. Тем более, если вы смешиваете с анимацией CSS3.
О, и не забудьте всегда включать резервную копию при использовании rgba()
:
.el {
color: rgb(0, 0, 0);
color: rgba(0, 0, 0, 0.5);
}