Непрозрачность фонового цвета, но не текст
Как сделать прозрачность кросс-браузера (включая Internet Explorer 6) на фоне div
, пока текст остается непрозрачным?
Мне нужно сделать это, не используя какую-либо библиотеку, такую как jQuery и т.д. (Но если вы знаете о библиотеке, которая это делает, я бы хотел знать, поэтому я могу посмотреть на их код).
Ответы
Ответ 1
Использовать rgba!
.alpha60 {
/* Fallback for web browsers that don't support RGBa */
background-color: rgb(0, 0, 0);
/* RGBa with 0.6 opacity */
background-color: rgba(0, 0, 0, 0.6);
/* For IE 5.5 - 7*/
filter:progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000);
/* For IE 8*/
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#99000000, endColorstr=#99000000)";
}
В дополнение к этому, вы должны объявить background: transparent
для веб-браузеров IE, предпочтительно, используя условные комментарии или аналогичные!
через http://robertnyman.com/2010/01/11/css-background-transparency-without-affecting-child-elements-through-rgba-and-filters/
Ответ 2
Я использую альфа-прозрачный PNG для этого:
div.semi-transparent {
background: url('semi-transparent.png');
}
Для IE6 вам нужно использовать исправление PNG (1, 2).
Ответ 3
Я создал этот эффект в своем блоге Код Landman.
То, что я сделал, было
#Header {
position: relative;
}
#Header H1 {
font-size: 3em;
color: #00FF00;
margin:0;
padding:0;
}
#Header H2 {
font-size: 1.5em;
color: #FFFF00;
margin:0;
padding:0;
}
#Header .Background {
background: #557700;
filter: alpha(opacity=30);
filter: progid: DXImageTransform.Microsoft.Alpha(opacity=30);
-moz-opacity: 0.30;
opacity: 0.3;
zoom: 1;
}
#Header .Background * {
visibility: hidden; // hide the faded text
}
#Header .Foreground {
position: absolute; // position on top of the background div
left: 0;
top: 0;
}
<div id="Header">
<div class="Background">
<h1>Title</h1>
<h2>Subtitle</h2>
</div>
<div class="Foreground">
<h1>Title</h1>
<h2>Subtitle</h2>
</div>
</div>
Ответ 4
Рассматривая требования к работе с IE6 и устаревшими браузерами, вы можете использовать:: before и display: inline-block
div
{
display: inline-block;
position: relative;
}
div::before
{
content: "";
display: block;
position: absolute;
z-index: -1;
width: 100%;
height: 100%;
background:red;
opacity: .2;
}
Демо на http://jsfiddle.net/KVyFH/172/
Он будет работать в любом современном браузере
Ответ 5
Спасибо @davy-landmann за fooobar.com/info/2106/....
Это то, что я искал! Тот же эффект с кодом LESS:
@searchResultMinHeight = 200px;
.searchResult {
min-height: @searchResultMinHeight;
position: relative;
.innerTrans {
background: white;
.opacity(0.5);
min-height: @searchResultMinHeight;
}
.innerBody {
padding: 0.5em;
position: absolute;
top: 0;
}
}