Можно ли установить непрозрачность фонового изображения, не влияя на непрозрачность дочерних элементов?
пример
Все ссылки в нижнем колонтитуле должны иметь собственную маркировку (фоновое изображение), а непрозрачность пользовательской маркировки должна составлять 50%.
HTML
<div id="footer">
<ul>
<li><a href="#">Link 1</a></li>
<li><a href="#">Link 2</a></li>
<li><a href="#">Link 3</a></li>
<li><a href="#">Link 4</a></li>
<li><a href="#">Link 5</a></li>
</ul>
</div>
CSS
#footer ul li {
background: url(/images/arrow.png) no-repeat 0 50%;
}
Что я пробовал
Я попытался установить непрозрачность элементов списка на 50%, но затем непрозрачность текста ссылки также составляет 50% - и, похоже, нет способа сбросить непрозрачность дочерних элементов:
#footer ul li {
background: url(/images/arrow.png) no-repeat 0 50%;
/* will also set the opacity of the link text */
opacity: 0.5;
}
Я также попытался использовать rgba, но это не влияет на фоновое изображение:
#footer ul li {
/* rgba doesn't apply to the background image */
background: rgba(255, 255, 255, 0.5) url(/images/arrow.png) no-repeat 0 50%;
}
Ответы:
Вы можете использовать CSS
linear-gradient()
сrgba()
.источник
Перенесите изображение в редактор изображений, уменьшите прозрачность, сохраните его в формате .png и используйте вместо этого.
источник
Это будет работать с каждым браузером
Если вы не хотите, чтобы прозрачность влияла на весь контейнер и его дочерние элементы, проверьте этот обходной путь. Вы должны иметь абсолютно позиционированного ребенка с относительно позиционированным родителем.
Проверьте демо на http://www.impressivewebs.com/css-opacity-that-doesnt-affect-child-elements/
источник
position:relative;
и img вposition:absolute;
НЕ позволяет мне переопределить унаследованную непрозрачность в img, и я не могу использовать абсолютное позиционирование для самих <li> (это беспорядок ;-). В Javascript я пыталсяimgs[i].style.opacity = '1';
, но это также не работает, чтобы переопределить унаследованную непрозрачность. Если я правильно понимаю, я также не могу использовать rgba, потому что мне нужно влиять на сами imgs, а не только на цвет фона. У кого-нибудь есть рекомендации для меня?Если вы используете изображение в качестве маркера, вы можете рассмотреть псевдоэлемент: before.
источник
*zoom: expression( … );
(см . Псевдоэлементы css и до того, как взломать псевдоэлементы css для IE 7 ), но IE7, наконец, становится пассивным.Вы можете поместить изображение в div: after или div: before и установить непрозрачность для этого «виртуального div»
находится здесь http://css-tricks.com/snippets/css/transparent-background-images/
источник
Hack с непрозрачностью 0,99 (меньше 1) создает контекст z-index, поэтому вы можете не беспокоиться о глобальных значениях z-index. (Попробуйте удалить его и посмотрите, что произойдет в следующей демонстрации, где родительский упаковщик имеет положительный z-индекс.)
Если у вашего элемента уже есть z-индекс, то вам этот хак не нужен.
Демонстрация этой техники .
источник
К сожалению, на момент написания этого ответа, прямого способа сделать это не существует. Тебе надо:
источник
Другой вариант - это CSS Tricks, который вставляет псевдоэлемент с точным размером исходного элемента прямо за ним, чтобы имитировать непрозрачный фоновый эффект, который мы ищем. Иногда вам нужно будет установить высоту для псевдоэлемента.
источник
Свойству «filter» требуется целое число в процентах непрозрачности вместо double, чтобы работать в IE7 / 8.
PS: я публикую это как ответ, так как для редактирования требуется как минимум 6 измененных символов.
источник
Чтобы по-настоящему настроить вещи, я рекомендую размещать соответствующие настройки в оболочках, ориентированных на браузер. Это было единственное, что сработало для меня, когда я не мог заставить IE7 и IE8 «хорошо играть с другими» (так как сейчас я работаю в софтверной компании, которая продолжает их поддерживать).
У меня может быть избыточность в приведенном выше коде - если кто-то хочет убрать его дальше, не стесняйтесь!
источник
-moz-border-radius
Firefox 13 иborder-radius
теперь просто ищет стандартное свойство). IE7 и IE8 - это разные истории, но это всего лишь IE :-p-khtml-opacity
потому что он не понимает медиа-запрос, делая его бесполезным 2) IE более стабилен, чем вы думаете; он не «взорвется» только потому, что вы добавляете не-IE префиксы к правилу, которое применяется к IE. Проблема, в то время как вы столкнулись с этим, должна была прийти из других мест.Если вам нужно установить непрозрачность только для маркера, почему бы вам не установить альфа-канал непосредственно в изображение? Кстати, я не думаю, что есть способ установить непрозрачность фонового изображения с помощью css без изменения непрозрачности всего элемента (и его дочерних элементов тоже).
источник
Просто чтобы добавить к вышесказанному ... вы можете использовать альфа-канал с новыми атрибутами цвета, например. rgba (0,0,0,0) хорошо, так что это черный, но с нулевой непрозрачностью, так что в качестве родителя это не повлияет на ребенка. Это работает только на Chrome, FF, Safari и .... Я худой O.
конвертировать ваши шестнадцатеричные цвета в RGBA
источник
background-image
запросом OP.Я нашел довольно хороший и простой учебник по этой проблеме. Я думаю, что он прекрасно работает (и хотя он поддерживает IE, я просто говорю своим клиентам использовать другие браузеры):
Прозрачность фона CSS, не затрагивая дочерние элементы, через RGBa и фильтры
Оттуда вы можете добавить поддержку градиента и т. Д.
источник
Вы можете попробовать этот код. Я думаю, что это будет работать. Вы можете посетить демо
источник