Ответ 1
Я никогда не видел, чтобы это было "переопределение" или "недооценка". Это вопрос относительной непрозрачности. Если у родителя есть непрозрачность 0.5
, у ребенка тоже есть это (в отношении родительского стекового контекста). У ребенка может быть собственное значение непрозрачности между 0
и 1
, но оно всегда будет относиться к непрозрачности родителя. Поэтому, если у дочернего элемента также есть opacity: 0.5
, будет 0.25
непрозрачность некоторого родительского брата с непрозрачностью 1
.
spec рассматривает его как альфа-маску, где непрозрачность может быть удалена. Элемент либо непрозрачен, либо имеет некоторую степень прозрачности (что-то < 1
):
Непрозрачность можно рассматривать как операцию постобработки. Понятно, что после того, как элемент (включая его потомки) отображается в заставку RGBA, параметр непрозрачности указывает, как смешивать внеэкранный рендеринг с текущим композитным рендерингом.
а затем:
Если объект является элементом контейнера, то эффект выглядит так, как если бы содержимое элемента контейнера было смешано с текущим фоном с использованием маски, где значение каждого пикселя маски равно
<alphavalue>
Что касается того, почему это было реализовано таким образом, я не думаю, что это было намеренно в смысле "запрещайте это". Возможно, этот подход был выбран для более простого вычисления, и только позже была признана фактическая потребность в чем-то другом (тогда были введены rgba
color
и background-color
- и я могу ошибаться в отношении временной шкалы здесь).