2009-03-12 4 views
356

Как сделать прозрачность кросс-браузера (включая Internet Explorer 6) на фоне div, пока текст остается непрозрачным?Непрозрачность фонового цвета, но не текст

Мне нужно сделать это, не используя никакую библиотеку, такую ​​как jQuery и т. Д. (Но если вы знаете о библиотеке, которая делает это, я бы хотел знать, чтобы я мог посмотреть на их код).

ответ

549

Используйте 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/

+0

Есть ли вероятность, что режим IE7 в IE9 отличается от IE7? Я спрашиваю, потому что этот код там не работает. Но если мы используем только три последних правила (без 'background-color: rgb (0, 0, 0);') - все просто отлично – Donotello

+7

Я пробовал это решение, и он не работал в IE8, потому что IE8 правильно применяет цвет фона.Я просто взял резервную копию для других браузеров (вот что, старые версии firefox?). Разъясняется здесь: http://stackoverflow.com/questions/4508191/ie8-gradient-filter-not-working-if-a-background-color-exists/6300452#6300452 стр. @ Режим Donotello ie7 в ie9 определенно не является точным на 100%. Я использую CMS, который требует IE7/8, а режим совместимости в IE9 разбивает на него всевозможные вещи. – robertpateii

+1

В связанной статье говорится, что для IE (по крайней мере, версии 8) вам необходимо условно установить «background: transparent». – Blazemonger

31

Я использую альфа-прозрачные PNG для этого:

div.semi-transparent { 
    background: url('semi-transparent.png'); 
} 

Для IE6, вы должны были бы использовать PNG фикс (1, 2), хотя.

+39

Pure CSS> Фоновые изображения –

+9

@MarcySutton IMO не всегда, определенно нет. Если вы посмотрите на ответ, обозначенный как ответ, вы поймете, почему. Сколько часов мы должны тратить на кросс-браузерную совместимость. Таким образом, когда вы абсолютно можете, (конечно, не всегда), вы можете использовать фоновые изображения. Как я уже сказал, JMO. –

+2

Исправление PNG 1 удивительно! Метод принятия ответа не работает на моем IE6. –

14

Я создал этот эффект в своем блоге Landman Code.

Что я сделал

#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>

Важно, что каждая прокладка/запас и содержание должно быть одинаковым в обоих .Background как .Foreground.

11

Расслабляющий ваше требование работать в IE6 и устаревших браузеров вы можете использовать :: до и дисплей: встроенный блок

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/

Он будет работать на любом современном браузере

+0

не будет работать с переполнением. http://jsfiddle.net/KVyFH/256/ – TomSawyer

0

Tha nks @ davy-landmann для https://stackoverflow.com/a/638064/417153. Вот что я искал! Тот же эффект с меньшим количеством кода:

@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; 
    } 
    } 
Смежные вопросы