Для простого полупрозрачного цвета фона лучше всего подходят приведенные выше решения (изображения CSS3 или bg). Однако, если вы хотите сделать что-то более интересное (например, анимацию, несколько фонов и т. Д.), Или если вы не хотите полагаться на CSS3, вы можете попробовать «технику панелей»:
.pane, .pane > .back, .pane > .cont { display: block; }
.pane {
position: relative;
}
.pane > .back {
position: absolute;
width: 100%; height: 100%;
top: auto; bottom: auto; left: auto; right: auto;
}
.pane > .cont {
position: relative;
z-index: 10;
}
<p class="pane">
<span class="back" style="background-color: green; opacity: 0.6;"></span>
<span class="cont" style="color: white;">Hello world</span>
</p>
Этот метод работает с использованием двух «слоев» внутри элемента внешней панели:
- один («задний»), который соответствует размеру элемента панели, не влияя на поток содержимого,
- и один («продолжение»), который содержит содержимое и помогает определить размер панели.
position: relative
на панели важен; он сообщает заднему слою, чтобы он соответствовал размеру панели. (Если вам нужно, чтобы тег <p>
был абсолютным, измените панель с <p>
на <span>
и заключите все это в тег <p>
с абсолютной позицией.)
Основное преимущество этого метода перед аналогичными, перечисленными выше, заключается в том, что панель не обязательно должна быть определенного размера; как указано выше, он будет соответствовать всей ширине (нормальный макет блочных элементов) и будет соответствовать только содержимому. Размер элемента внешней панели может быть любым, если он имеет прямоугольную форму (т.е. встроенный блок будет работать, а обычный встроенный - нет).
Кроме того, это дает вам много свободы для фона; вы можете поместить что угодно в задний элемент и не повлиять на поток контента (если вам нужно несколько полноразмерных подслоев, просто убедитесь, что у них также есть position: absolute, width / height: 100%, и вверху / внизу / слева / справа: авто).
Один из вариантов, позволяющий регулировать вставку фона (через верх / низ / лево / право) и / или закрепление фона (путем удаления одной из пар слева / справа или сверху / снизу), заключается в использовании вместо этого следующего CSS:
.pane > .back {
position: absolute;
width: auto; height: auto;
top: 0px; bottom: 0px; left: 0px; right: 0px;
}
Как написано, это работает в Firefox, Safari, Chrome, IE8 + и Opera, хотя IE7 и IE6 требуют дополнительных CSS и выражений, IIRC, и в прошлый раз, когда я проверял, второй вариант CSS не работает в Opera.
На что следует обратить внимание:
- Плавающие элементы внутри слоя cont не будут содержаться. Убедитесь, что они очищены или содержатся иным образом, иначе они выскользнут из-под дна.
- Поля размещаются на элементе панели, а отступы - на элементе cont. Не используйте противоположное (поля на продолжении или отступ на панели), иначе вы обнаружите странности, такие как страница всегда немного шире, чем окно браузера.
- Как уже упоминалось, все должно быть блочным или строчно-блочным. Не стесняйтесь использовать
<div>
вместо <span>
, чтобы упростить свой CSS.
Более полная демонстрация, демонстрирующая гибкость этой техники за счет использования ее в тандеме с display: inline-block
, а также с auto
и конкретными width
s / min-height
s:
.pane, .pane > .back, .pane > .cont { display: block; }
.pane {
position: relative;
width: 175px; min-height: 100px;
margin: 8px;
}
.pane > .back {
position: absolute; z-index: 1;
width: auto; height: auto;
top: 8px; bottom: 8px; left: 8px; right: 8px;
}
.pane > .cont {
position: relative; z-index: 10;
}
.debug_red { background: rgba(255, 0, 0, 0.5); border: 1px solid rgba(255, 0, 0, 0.75); }
.debug_green { background: rgba(0, 255, 0, 0.5); border: 1px solid rgba(0, 255, 0, 0.75); }
.debug_blue { background: rgba(0, 0, 255, 0.5); border: 1px solid rgba(0, 0, 255, 0.75); }
<p class="pane debug_blue" style="float: left;">
<span class="back debug_green"></span>
<span class="cont debug_red">
Pane content.<br/>
Pane content.
</span>
</p>
<p class="pane debug_blue" style="float: left;">
<span class="back debug_green"></span>
<span class="cont debug_red">
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.<br/>
Pane content.
</span>
</p>
<p class="pane debug_blue" style="float: left; display: inline-block; width: auto;">
<span class="back debug_green"></span>
<span class="cont debug_red">
Pane content.<br/>
Pane content.
</span>
</p>
<p class="pane debug_blue" style="float: left; display: inline-block; width: auto; min-height: auto;">
<span class="back debug_green"></span>
<span class="cont debug_red">
Pane content.<br/>
Pane content.
</span>
</p>
А вот живая демонстрация широко используемой техники:
К сожалению, нет, CSS3 нацелен на исправление этого с помощью нового цветового модуля, он позволит вам указывать альфа-значение всякий раз, когда вы указываете цвет. w3.org/TR/css3-color
Фактически, непрозрачность дочерних элементов равна , умноженной на непрозрачность родительского элемента, а не отменяется. Так, например, если непрозрачность
p
была.6
, а прозрачностьspan
была.5
, то истинная непрозрачность текста в диапазоне была бы0.3
.Это живой пример того, чего мы достигли в этом ответе? codepen.io/pablofiumara/pen/EIFaH
Думаю, да, но поскольку это полупрозрачный фон, вам даже не нужен фильтр / непрозрачность: codepen.io/anon/pen/ksJug
для МЕНЬШЕГО - coderhelper.com/questions/15250708/…
связанные coderhelper.com/questions/4997493/…
@chharvey, что должно произойти, если я определю
opacity:.5
для родительского элемента иopacity:2
для дочернего элемента?@ Александр, я рад, что вы задали этот вопрос. Математически можно было бы предположить, что дочерний элемент вернется к непрозрачности, равной 1. Однако
opacity:2;
- это недопустимый CSS. Значение свойстваopacity
должно быть в пределах включающего диапазона [0,1].вы можете использовать
background: rgb(#, #, #,
* Число с плавающей запятой от 0 до 1 *);
Это создаст непрозрачность для вашего фона, если вы хотите просто использовать цвет.