Непрозрачность фона div, не затрагивая содержащийся элемент в IE 8?
Я хочу установить Opacity из div-фона, не затрагивая содержащийся элемент в IE 8. У вас есть какое-либо решение и не отвечайте, чтобы установить 1 X 1.png изображение и установить непрозрачность этого изображения, потому что я использую динамическую непрозрачность и цвет admin может изменить это
Я использовал это, но не работал в IE 8
#alpha {
filter: alpha(opacity=30);
-moz-opacity: 0.3;
-khtml-opacity: 0.3;
opacity: 0.3;
}
и
rgba(0,0,0,0.3)
также.
Ответы
Ответ 1
Стиль opacity
влияет на весь элемент и все внутри него. Правильный ответ на это - использовать вместо этого цвет фона rgba.
CSS довольно прост:
.myelement {
background: rgba(200, 54, 54, 0.5);
}
... где первые три цифры являются красными, зелеными и синими значениями для вашего цвета фона, а четвертым является значение альфа-канала, которое работает так же, как значение opacity
.
Смотрите эту страницу для получения дополнительной информации: http://css-tricks.com/rgba-browser-support/
С другой стороны, это не работает в IE8 или ниже. На странице, на которую я ссылался, также перечислены некоторые другие браузеры, в которых она не работает, но они все очень старые; все браузеры, используемые в настоящее время, за исключением IE6/7/8, будут работать с цветами rgba.
Хорошей новостью является то, что вы можете заставить IE работать и с этим, используя взломанный CSS3Pie. CSS3Pie добавляет ряд современных функций CSS3 к более старым версиям IE, включая цвета фона rgba.
Чтобы использовать CSS3Pie для фона, вам нужно добавить конкретное объявление -pie-background
в свой CSS, а также стиль PIE behavior
, поэтому ваша таблица стилей будет выглядеть следующим образом:
.myelement {
background: rgba(200, 54, 54, 0.5);
-pie-background: rgba(200, 54, 54, 0.5);
behavior: url(PIE.htc);
}
Надеюсь, что это поможет.
[EDIT]
Для чего стоит, как уже упоминалось, вы можете использовать стиль IE filter
с ключевым словом gradient
. Решение CSS3Pie действительно использует эту же технику за кулисами, но устраняет необходимость бесполезного взаимодействия с фильтрами IE, поэтому ваши таблицы стилей намного чище. (он также добавляет целую кучу других приятных функций, но это не относится к этому обсуждению)
Ответ 2
просто, только вы делаете это, чтобы дать
background: rgba(0,0,0,0.3)
& для IE используйте этот фильтр
background: transparent;
zoom: 1;
filter: progid:DXImageTransform.Microsoft.gradient(startColorstr=#4C000000,endColorstr=#4C000000); /* IE 6 & 7 */
-ms-filter: "progid:DXImageTransform.Microsoft.gradient(startColorstr=#4C000000,endColorstr=#4C000000)"; /* IE8 */
вы можете сгенерировать свой фильтр rgba здесь http://kimili.com/journal/rgba-hsla-css-generator-for-internet-explorer/
Ответ 3
opacity
в родительском элементе устанавливает его для всего дерева sub DOM
Вы не можете установить непрозрачность для определенного элемента, который не будет каскадом для потомков. Это не так, как работает CSS opacity
.
Что вы можете сделать, так это иметь два родственных элемента в одном контейнере и установить прозрачное одно позиционирование:
<div id="container">
<div id="transparent"></div>
<div id="content"></div>
</div>
тогда вы должны установить прозрачный position: absolute/relative
, чтобы его содержимое было передано над ним.
rgba
может делать прозрачность фона цветными фонами
rgba
настройка цвета на элементе background-color
, конечно же, будет работать, но это ограничит использование только цвета в качестве фона. Никаких изображений, которых я боюсь. Конечно, вы можете использовать градиенты CSS3, но если вы укажете цвета остановки градиента в rgba
. Это также работает.
Но имейте в виду, что rgba
может не поддерживаться вашими требуемыми браузерами.
Функциональные возможности диалогового диалога без предупреждения
Но если вы замаскируете всю страницу, это обычно делается путем добавления отдельного div
с этим набором стилей:
position: fixed;
width: 100%;
height: 100%;
z-index: 1000; /* some high enough value so it will render on top */
opacity: .5;
filter: alpha(opacity=50);
Затем, когда вы показываете контент, он должен иметь более высокий z-index
. Но эти два элемента не связаны с братьями и сестрами. Они просто отображаются так, как должны быть. Один над другим.
Ответ 4
Возможно, есть более простой ответ, попробуйте добавить любой цвет фона, который вам нравится в коде, например background-color: #fff;
#alpha {
background-color: #fff;
opacity: 0.8;
filter: alpha(opacity=80);
}
Ответ 5
Как насчет этого подхода:
<head>
<style type="text/css">
div.gradient {
color: #000000;
width: 800px;
height: 200px;
}
div.gradient:after {
background: url(SOME_BACKGROUND);
background-size: cover;
content:'';
position:absolute;
top:0;
left:0;
width:inherit;
height:inherit;
opacity:0.1;
}
</style>
</head>
<body>
<div class="gradient">Text</div>
</body>
Ответ 6
Попробуйте установить z-индекс выше в содержащемся элементе.
Ответ 7
Это влияет на все дочерние div, когда вы используете функцию непрозрачности с позициями, отличными от абсолютных. Таким образом, еще один способ добиться этого - не ставить divs друг в друга, а затем использовать абсолютную позицию для div. Не используйте любой цвет фона для верхнего div.