О сайтостроении, музыке и путешествиях

Кроссбраузерные полупрозрачные блоки с использованием opacity

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

Я попытался нагуглить какое-нибудь решение, но ничего вразумительного не обнаружил. Попадались только вопросы «как?». В результате написал так: в блок с произвольным содержимым подкладываю в самый конец <div ="bg"></div>.

Вы можете посмотреть живой пример. Фоном может быть как монотонный цвет, так и какое-нибудь изображение.

Итого: сам блок полупрозрачный, а содержимое не тронуто и не просвечивает. То, что надо.

Если вы боретесь за валидность CSS кода, то просто вынесите «костыли для IE» в Conditional comments и решите, какие из CSS правил будут задавать opacity. В примере указанны -moz и -khtml opacity — они пригодятся для поддержки старых браузеров. Думаю в 90% случаев вам они не потребуются и хватит просто opacity из CSS3.

UPD 04.02.2009: Если полупрозрачным фоном будет монотонный цвет, то есть способ лучше, чем описано выше. Использование data:uri и background:rgba() дает новый красивый вариант.