Можно ли, используя только CSS, сделать background
элемент полупрозрачным, но содержимое (текст и изображения) этого элемента непрозрачным?
Я хотел бы сделать это без текста и фона в качестве двух отдельных элементов.
При попытке:
p {
position: absolute;
background-color: green;
filter: alpha(opacity=60);
opacity: 0.6;
}
span {
color: white;
filter: alpha(opacity=100);
opacity: 1;
}
<p>
<span>Hello world</span>
</p>
Похоже, что дочерние элементы подвержены непрозрачности своих родителей, так же opacity:1
как и относительно opacity:0.6
родительского элемента.
p
непрозрачность была,.6
аspan
непрозрачность была,.5
тогда истинная непрозрачность текста в промежутке была бы0.3
.opacity:.5
для родителя иopacity:2
для дочернего элемента?opacity:2;
является недействительным CSS . Значениеopacity
свойства должно быть в пределах включенного диапазона [0,1].Ответы:
Либо используйте полупрозрачное изображение PNG, либо используйте CSS 3:
Вот статья из css3.info, Непрозрачность, RGBA и компромисс (2007-06-03).
источник
background-color: rgba(#000, .5);
В Firefox 3 и Safari 3 вы можете использовать RGBA, как упоминал Георг Шолли .
Малоизвестная хитрость заключается в том, что вы можете использовать его и в Internet Explorer, используя градиентный фильтр.
Первое шестнадцатеричное число определяет альфа-значение цвета.
Полное решение всех браузеров:
Это из прозрачности фона CSS, не затрагивая дочерние элементы, через RGBa и фильтры .
Скриншоты доказательства результатов:
Это при использовании следующего кода:
источник
Это лучшее решение, которое я мог придумать, НЕ используя CSS 3. И, насколько я вижу, оно отлично работает на Firefox, Chrome и Internet Explorer.
Поместите контейнер
div
и двух дочернихdiv
элементов на одном уровне, один для содержимого, один для фона. А используя CSS, автоматически изменяйте размер фона, чтобы он соответствовал содержанию, и фактически помещайте фон сзади, используя z-index.источник
:after
и избежать дополнительной разметки?Для простого полупрозрачного цвета фона лучше всего подходят вышеуказанные решения (изображения CSS3 или bg). Однако, если вы хотите сделать что-то более изощренное (например, анимацию, несколько фонов и т. Д.) Или если вы не хотите полагаться на CSS3, вы можете попробовать «технику панели»:
Техника работает с использованием двух «слоев» внутри элемента внешней панели:
На
position: relative
панели важно; он говорит заднему слою соответствовать размеру панели. (Если вам нужно, чтобы<p>
тег был абсолютным, измените панель с a<p>
на a<span>
и оберните все это в абсолютно абсолютную позицию<p>
тег .)Основное преимущество этой техники перед аналогичными перечисленными выше состоит в том, что панель не обязательно должна быть определенного размера; как написано выше, он будет соответствовать полной ширине (нормальная компоновка блочных элементов) и только так высоко, как содержимое. Внешний элемент панели может иметь любой размер, если вы пожелаете, при условии, что он прямоугольный (т.е. встроенный блок будет работать; обычный старый встроенный не будет).
Кроме того, это дает вам много свободы для фона; вы можете поместить в задний элемент действительно что угодно, и это не повлияет на поток контента (если вам нужно несколько полноразмерных подслоев, просто убедитесь, что они также имеют положение: абсолютное, ширина / высота: 100%, и сверху / снизу / влево / вправо: авто).
Один из вариантов, позволяющий регулировать вставку фона (с помощью верхних / нижних / левых / правых) и / или закрепления фона (с помощью удаления одной из пар левых / правых или верхних / нижних пар), - использовать вместо этого следующий CSS:
Как написано, это работает в Firefox, Safari, Chrome, IE8 + и Opera, хотя IE7 и IE6 требуют дополнительного CSS и выражений, IIRC, и в последний раз, когда я проверял, второй вариант CSS не работает в Opera.
На что нужно обратить внимание:
<div>
s вместо<span>
s, чтобы упростить ваш CSS.Более полная демонстрация, демонстрирующая гибкость этой техники, используя ее в тандеме
display: inline-block
, а также с обоимиauto
& конкретнымиwidth
с /min-height
с:А вот живая демонстрация широко используемой техники:
источник
width:
&height:
properties имеют общую линию, потому что они представляют собой один и тот же тип конструкции и лучше понимаются как двумерная форма, а не пара одномерных ограничений. Кроме того, некоторые строки содержат в себе достаточное количество, потому что это повторяющийся контент, который не так важен, чтобы хвастаться.Лучше использовать полупрозрачный
.png
.Просто откройте Photoshop , создайте
2x2
пиксельное изображение ( выбор1x1
может вызвать ошибку Internet Explorer! ), Залейте его зеленым цветом и установите непрозрачность на вкладке «Слои» на 60%. Затем сохраните его и сделайте его фоновым изображением:Работает круто, конечно, кроме прекрасного Internet Explorer 6 . Доступны лучшие исправления, но вот быстрый взлом:
источник
Существует хитрость для минимизации разметки: используйте псевдоэлемент в качестве фона, и вы можете установить его непрозрачность, не затрагивая основной элемент и его дочерние элементы:
DEMO
Вывод:
Соответствующий код:
Браузер поддерживает Internet Explorer 8 и более поздние версии.
источник
Самый простой способ - использовать полупрозрачное фоновое изображение PNG .
Вы можете использовать JavaScript, чтобы он работал в Internet Explorer 6, если вам нужно.
Я использую метод, описанный в прозрачных PNG в Internet Explorer 6 .
Кроме этого, вы можете подделать его с помощью двух соседних элементов - сделать один полупрозрачным , а затем расположить другой абсолютно сверху .
источник
Этот метод позволяет вам иметь изображение на заднем плане, а не только сплошной цвет, и его можно использовать для обеспечения прозрачности других атрибутов, таких как границы. Прозрачные изображения PNG не требуются.
Используйте
:before
(или:after
) в CSS и присвойте им значение непрозрачности, чтобы оставить элемент в исходной непрозрачности. Таким образом, вы можете использовать: before, чтобы создать искусственный элемент и придать ему прозрачный фон (или границы), который вы хотите, и переместить его за контент, который вы хотите сохранить непрозрачным.z-index
.Пример ( скрипка ) (обратите внимание, что
DIV
класс withdad
предназначен только для обеспечения некоторого контекста и контраста с цветами, этот дополнительный элемент на самом деле не нужен, а красный прямоугольник смещен немного вниз и вправо, чтобы оставить видимым фон позадиfancyBg
элемент):с этим CSS:
В этом случае
.fancyBg:before
есть свойства CSS, которые вы хотите иметь с прозрачностью (красный фон в этом примере, но может быть изображением или границами). Он позиционируется как абсолютный, чтобы переместить его.fancyBg
(используйте нулевые значения или то, что больше подходит для ваших нужд).источник
Проблема в том, что текст на самом деле имеет полную непрозрачность в вашем примере. Он имеет полную непрозрачность внутри
p
тега, ноp
тег просто полупрозрачен.Вы можете добавить полупрозрачное фоновое изображение PNG вместо того, чтобы реализовывать его в CSS, или разделить текст и разделить на два элемента и переместить текст по полю (например, отрицательное поле).
Иначе это будет невозможно.
Как упоминал Крис: если вы используете PNG-файл с прозрачностью, вы должны использовать обходной путь JavaScript, чтобы заставить его работать в надоедливом Internet Explorer ...
источник
Почти все эти ответы предполагают, что дизайнеру нужен сплошной цвет фона. Если дизайнер на самом деле хочет фотографию в качестве фона, единственное реальное решение на данный момент - это JavaScript, подобный плагину jQuery Transify, упомянутому в другом месте. .
Нам нужно присоединиться к обсуждению в рабочей группе CSS и дать им атрибут background-opacity! Он должен работать рука об руку с функцией нескольких фонов.
источник
Вот как я это делаю (это может быть не оптимально, но работает):
Создайте то,
div
что вы хотите быть полупрозрачным. Дайте ему класс / идентификатор. Оставьте это пустым , и закройте это. Задайте ему высоту и ширину (скажем, 300 на 300 пикселей). Дайте ему непрозрачность 0,5 или как вам нравится, и цвет фона.Затем непосредственно под этим div создайте другой div с другим class / id. Создайте абзац внутри, где вы разместите свой текст. Задайте
div
положение: относительное и верхнее-295px
( отрицательное 295 пикселей). Дайте ему z-индекс 2 для хорошей меры и убедитесь, что его непрозрачность равна 1. Создайте абзац по своему усмотрению, но убедитесь, что размеры меньше, чем у первого,div
чтобы он не переполнялся.Вот и все. Вот код:
Это работает в Safari 2.x, но я не знаю о Internet Explorer.
источник
:before
:after
Вот плагин jQuery, который будет обрабатывать все для вас, Transify ( Transify - плагин jQuery для простого применения прозрачности / непрозрачности к фону элемента ).
Время от времени я сталкивался с этой проблемой, поэтому решил написать что-то, что облегчит жизнь. Сценарий занимает менее 2 КБ, и для его работы требуется всего одна строка кода, а также он будет обрабатывать анимацию прозрачности фона, если хотите.
источник
Некоторое время назад я писал об этом в Cross Browser Background Transparency With CSS .
Причудливый Internet Explorer 6 позволит вам сделать фон прозрачным и сохранить текст поверх полностью непрозрачным. Для других браузеров я предлагаю использовать прозрачный файл PNG.
источник
Непрозрачность фона, а не текста есть некоторые идеи. Либо используйте полупрозрачное изображение, либо наложите дополнительный элемент.
источник
Если вы парень из Photoshop , вы также можете использовать:
Или:
источник
Чтобы сделать фон элемента полупрозрачным, но иметь непрозрачный контент (текст и изображения) элемента, вам нужно написать код CSS для этого изображения и добавить один атрибут
opacity
с минимальным значением.Например,
// Чем меньше значение, тем больше оно будет прозрачным, иначе значение будет меньше прозрачности.
источник
CSS 3 имеет простое решение вашей проблемы. Использование:
Здесь
rgba
обозначает красный, зеленый, синий и альфа-значение. Значение зеленого получается из-за 255, а полупрозрачность получается из альфа-значения 0,5.источник
Если вы используете меньше , вы можете использовать
fade(color, 30%)
.источник
цвет фона: rgba (255, 0, 0, 0.5); как уже упоминалось выше, это лучший ответ. Сказать, что использовать CSS 3 даже в 2013 году непросто, поскольку уровень поддержки различных браузеров меняется с каждой итерацией.
Пока
background-color
поддерживается всеми основными браузерами (не новы в CSS 3) [1], альфа-прозрачность может быть непростой задачей, особенно с Internet Explorer до версии 9 и с цветом рамки в Safari до версии 5.1. [2]Использование чего-то вроде Compass или SASS может реально помочь в производстве и кроссплатформенной совместимости.
[1] W3Schools: свойство CSS background-color
[2] Блог Нормана: Контрольный список поддержки браузера CSS3 (октябрь 2012 г.)
источник
Вы можете решить эту проблему для Internet Explorer 8 с помощью (ab), используя синтаксис градиента. Цветовой формат - ARGB. Если вы используете препроцессор Sass, вы можете конвертировать цвета с помощью встроенной функции ie-hex-str ().
источник
Вы можете использовать чистый CSS 3 :,
rgba(red, green, blue, alpha)
гдеalpha
вы хотите уровень прозрачности. Нет необходимости в JavaScript или jQuery.Вот пример:
источник
http://jsfiddle.net/x2ukko7u/ ?
источник
Вы можете сделать это с
rgba color code
помощью CSS, как в следующем примере.источник
Есть более простое решение - наложить оверлей поверх изображения на тот же элемент div. Это не правильное использование этого инструмента. Но работает как обаяние, чтобы сделать это наложение с использованием CSS.
Используйте тень от вставки, как это:
Это все :)
источник
Вы можете использовать RGBA
(red, green, blue, alpha)
в CSS . Что-то вроде этого:Так что просто делать что-то подобное будет работать в вашем случае:
источник
На мой взгляд, лучший способ использовать цвет фона с непрозрачностью, как показано ниже. Если мы используем это, то мы не потеряем непрозрачность для других элементов, таких как тестовый цвет, рамка и т. Д.
Используйте цвет фона с непрозрачностью
источник
Я обычно использую этот класс для своей работы. Это очень хорошо.
источник
Это работало для меня, когда я использовал формат,
#AARRGGBB
поэтому тот, который работал для меня, был#1C00ff00
. Попробуйте, потому что я видел, что это работает для некоторых и не работает для кого-то еще. Я использую это в CSS.источник
Вы можете использовать значение непрозрачности, добавленное к шестнадцатеричному значению:
В этом примере
aa
непрозрачность. Непрозрачность00
означает прозрачный иff
означает сплошной цвет.Непрозрачность является необязательной, поэтому вы можете использовать шестнадцатеричное значение как всегда:
Вы также можете использовать старый способ с
rgba()
:И
background
сокращение, если вы хотите убедиться, что фон не имеет других стилей, таких как изображения или градиенты:Из спецификации Mozilla ( https://developer.mozilla.org/en-US/docs/Web/CSS/background-color ):
источник
Вы можете использовать цвет RGB с непрозрачностью, например цветовой код в RGB (63, 245, 0), добавить непрозрачность (например, 63, 245, 0, 0,5), а также заменить RGB на RGBA.
A
должен быть использован для непрозрачности.источник