Подтвердить что ты не робот

Почему дочерние элементы не могут переопределить непрозрачность родителя с большим значением?

Как мы знаем, дочерние элементы не могут теперь переопределить свойство opacity своего родителя. Свойство opacity родителя всегда вступает в силу.

Это имеет смысл, когда ребенок пытается переопределить (переопределить с меньшим значением) непрозрачность родителя. Но как насчет того, что ребенок пытается переопределить его с большей стоимостью? Разве это не должно быть разрешено? Почему у полупрозрачного родителя нет непрозрачного ребенка? Может ли кто-нибудь поделиться мыслями о том, почему такое ограничение было принято в рамках дизайна CSS?

Было бы очень полезно, если кто-то может пролить свет на теоретические причины этого. Я по существу пытаюсь выяснить, почему-не может этого сделать (не обходные пути, о которых уже говорили много раз). Я уверен, что это то, что многие новички SO'ers, как я, хотели бы знать.

4b9b3361

Ответ 1

Я никогда не видел, чтобы это было "переопределение" или "недооценка". Это вопрос относительной непрозрачности. Если у родителя есть непрозрачность 0.5, у ребенка тоже есть это (в отношении родительского стекового контекста). У ребенка может быть собственное значение непрозрачности между 0 и 1, но оно всегда будет относиться к непрозрачности родителя. Поэтому, если у дочернего элемента также есть opacity: 0.5, будет 0.25 непрозрачность некоторого родительского брата с непрозрачностью 1.

spec рассматривает его как альфа-маску, где непрозрачность может быть удалена. Элемент либо непрозрачен, либо имеет некоторую степень прозрачности (что-то < 1):

Непрозрачность можно рассматривать как операцию постобработки. Понятно, что после того, как элемент (включая его потомки) отображается в заставку RGBA, параметр непрозрачности указывает, как смешивать внеэкранный рендеринг с текущим композитным рендерингом.

а затем:

Если объект является элементом контейнера, то эффект выглядит так, как если бы содержимое элемента контейнера было смешано с текущим фоном с использованием маски, где значение каждого пикселя маски равно <alphavalue>

Что касается того, почему это было реализовано таким образом, я не думаю, что это было намеренно в смысле "запрещайте это". Возможно, этот подход был выбран для более простого вычисления, и только позже была признана фактическая потребность в чем-то другом (тогда были введены rgba color и background-color - и я могу ошибаться в отношении временной шкалы здесь).