Переопределить непрозрачный текст в прозрачном div с CSS

Я пытаюсь сделать текст внутри прозрачного div без прозрачности, иначе быть полностью черным:

<div style="opacity:0.6;background:#3cc;">
    <p style="background:#000;opacity:1">This text should be all black</p>
</div>

Можно ли использовать только CSS?

Заранее спасибо

Ответы

Ответ 1

Самый простой способ - создать фон родительского div с opacity/alpha:

div  {
    background: #fff; /* for browsers that don't understand the following rgba rule */
    background-color: rgba(255,255,255,0.5); /* rgb, white, with alpha at 0.5 */
}

Это, однако, не совместимо с IE.

Для совместимости с IE >= 7 вы можете использовать:

div  {
    background-image: url('path/to/partially_transparent.png');
    background-position: 0 0;
    background-repeat: repeat;
}

Я помню, что IE < 7 имеет запатентованный фильтр, но, боюсь, я не могу вспомнить, как это работает. Поэтому я пропустил какую-либо попытку описать/показать его. Если я смогу найти полезную ссылку, я добавлю ее позже.

Как отмечено easwee, непрозрачность наследуется содержащимися элементами, поэтому вы не можете ее переопределить, и именно поэтому я предпочитаю использовать подход background-color/background-image.

Ответ 2

Дочерние элементы наследуют непрозрачность. Что вы можете сделать, так это позиционировать <p> за пределами непрозрачного div и установить отрицательный запас, чтобы переместить его над ним.

Я часто сталкивался с этой проблемой и обычно решал ее так. Проблема заключается только в том, что у вас есть динамический контент, и div должен расширяться.

Ответ 3

Есть ли фон в сплошном цвете? Если это так, вы также можете использовать RGBa, чтобы выбрать прозрачный цвет фона для div, который не унаследован его дочерними элементами. Прочтите RGBa Browser Support для получения дополнительной информации, обходной путь для IE и другой решение.

Если фон div не является сплошным, вы можете использовать прозрачный PNG в качестве фона. Не забудьте использовать AlphaImageLoader в IE6 (и 5.5).