Прозрачность CSS только для цвета фона, а не для текста на нем?

Могу ли я назначить свойство opacity только свойству background объекта div, а не тексту на нем?

Я пробовал:

background: #CCC;
opacity: 0.6;

но это не меняет прозрачности.


person Jay    schedule 27.02.2011    source источник
comment
Для кроссбраузерного метода см. Предыдущий ответ, который я дал: stackoverflow.com/questions/4792090/ Это в основном rgba, но работает везде.   -  person thirtydot    schedule 27.02.2011
comment
Этот вопрос был задан в январе - stackoverflow.com/questions / 637921 /   -  person slifty    schedule 27.02.2011
comment
Второй же январь задал вопрос здесь: stackoverflow.com/questions/4790563/   -  person danicotra    schedule 30.10.2016


Ответы (11)


Похоже, вы хотите использовать прозрачный фон, и в этом случае вы можете попробовать использовать _ 1_ функция:

rgba(R, G, B, A)

R (красный), G (зеленый) и B (синий) могут быть либо <integer>s, либо <percentage>s, где число 255 соответствует 100%. A (альфа) может быть <number> между 0 и 1 или <percentage>, где число 1 соответствует 100% (полная непрозрачность).

Пример RGBa

background: rgba(51, 170, 51, .1)    /*  10% opaque green */ 
background: rgba(51, 170, 51, .4)    /*  40% opaque green */ 
background: rgba(51, 170, 51, .7)    /*  70% opaque green */ 
background: rgba(51, 170, 51,  1)    /* full opaque green */ 

Небольшой пример, показывающий, как можно использовать rgba.

По состоянию на 2018 год практически каждый браузер поддерживает синтаксис rgba.

person Tim Cooper    schedule 27.02.2011
comment
@adam Просто чтобы вы знали, это не будет работать в IE. - person Hussein; 27.02.2011
comment
Черт ... почему IE всегда портит веселье ?! - person Haikal Nashuha; 11.01.2013
comment
Он отлично работает в IE9 +; o) - person Martin Overgaard; 27.02.2013
comment
это не работает в Mozilla Firefox - person hserusv; 10.08.2013
comment
цвет фона: rgba (54, 25, 25, .5); также работает Chrome, Mozilla, IE 10 - person nAkhmedov; 24.09.2013
comment
упоминание об отказе от rgb действительно здорово! - person Hariharan Anbazhagan; 19.12.2013
comment
css3pie реализует эту функцию css3 для старых браузеров, таких как IE8 и IE9 (а также многих других, например, закругленных углов и градиентов), см. css3pie.com/forum/viewtopic.php?f=4&t=1133 - person Adrien Be; 14.02.2014
comment
Что, если фон является изображением, и вы хотите настроить его непрозрачность, не затрагивая всех его дочерних элементов? - person 0112; 02.12.2014
comment
Да, использование rgba () работает в большинстве случаев, но было бы неплохо, если бы в css было свойство background-opacity:, потому что, когда background-color: устанавливается динамически (на лету) в качестве входных данных для функции настроек в панели внешнего вида администратора, которая была закодирована для использования только rgb (), и вы не хотите переопределять это в своем CSS, потому что тогда динамический ввод в вашей функции не будет работать. В этом случае единственный способ добавить непрозрачность - изменить html. Если бы было свойство background-opacity, то никаких модификаций html-кода не потребовалось бы ... - person Damian Green; 22.11.2015
comment
любой другой способ использовать это с шестнадцатеричными кодами? - person Smakosh; 07.02.2019
comment
Если вы используете SASS, transparentize позволяет вам повторно использовать переменные цвета RGB и при этом применять непрозрачность: codepen.io/ timharbour / pen / cBLqi - person Jonathan Rys; 20.07.2020

Самый простой способ сделать это - использовать 2 div, 1 с фоном и 1 с текстом:

#container {
  position: relative;
  width: 300px;
  height: 200px;
}
#block {
  background: #CCC;
  filter: alpha(opacity=60);
  /* IE */
  -moz-opacity: 0.6;
  /* Mozilla */
  opacity: 0.6;
  /* CSS3 */
  position: absolute;
  top: 0;
  left: 0;
  height: 100%;
  width: 100%;
}
#text {
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
}
<div id="container">
  <div id="block"></div>
  <div id="text">Test</div>
</div>

person Kostas    schedule 27.02.2011
comment
следующее свойство - position: absolute; должен быть в классе #text, чтобы эффект сработал. - person smile.al.d.way; 20.03.2013
comment
Но это не будет хорошей идеей, если у нас есть другой блок с абсолютным позиционированием, положение которого зависит от родительского относительного элемента #container. - person Vel Murugan S; 23.07.2013
comment
А что произойдет, если вам нужно, чтобы ваше #block opac фоновое размещение определялось вашим текстом? Например: при наведении курсора на промоблок появляется текст размером в половину промоблока. Слой #block не реагирует на высоту текста. - person Ben Sewards; 24.10.2014
comment
Мне нравится этот ответ, чем возиться с rgba, так как он лучше поддерживается. Но почему #text должно быть абсолютным? Если #block установлен в абсолютном положении, он не будет влиять на другие элементы на странице. - person gdbj; 06.01.2017

Только для пользователей Less:

Если вам не нравится устанавливать цвета с помощью RGBA, а лучше с помощью HEX, есть решения.

Вы можете использовать миксин вроде:

.transparentBackgroundColorMixin(@alpha,@color) {
  background-color: rgba(red(@color), green(@color), blue(@color), @alpha);
}

И используйте это так:

.myClass {
    .transparentBackgroundColorMixin(0.6,#FFFFFF);
}

Фактически это то, что также предоставляет встроенная функция Less:

.myClass {
    background-color: fade(#FFFFFF, 50%);
}

См. Как сделать Я конвертирую шестнадцатеричный цвет в rgba с помощью компилятора Less?

person Sebastien Lorber    schedule 26.06.2014
comment
ЛЮБЛЮ ЭТО РЕШЕНИЕ ‹3‹ 3 мой первый миксин, это мощная штука - person Michael; 22.01.2020

Моя уловка - создать прозрачный .png с этим цветом и использовать background:url().

person user1542894    schedule 17.02.2013
comment
Это лучшее решение, если вы имеете дело с устаревшими браузерами, IMO. - person Erik Reppen; 18.12.2014

Это будет работать с каждым браузером

div {
    -khtml-opacity: .50;
    -moz-opacity: .50;
    -ms-filter: ”alpha(opacity=50)”;
    filter: alpha(opacity=50);
    filter: progid:DXImageTransform.Microsoft.Alpha(opacity=0.5);
    opacity: .50;
}

Если вы не хотите, чтобы прозрачность влияла на весь контейнер и его дочерние элементы, проверьте этот обходной путь. Для этого у вас должен быть абсолютно позиционированный ребенок с относительно позиционированным родителем. Непрозрачность CSS, не влияющая на дочерние элементы

Проверьте рабочую демонстрацию на странице Непрозрачность CSS. Не влияет на "детей"

person Hussein    schedule 27.02.2011
comment
Это влияет на передний план. ОП просил только фон. - person DSoa; 14.07.2015
comment
@DSoa любое решение только для фона? но используя rgb и alpha в разных строках css - person Sushan; 11.11.2020

У меня такая же проблема. Мне нужен 100% прозрачный цвет фона. Просто используйте этот код; у меня отлично сработало:

rgba(54, 25, 25, .00004);

Вы можете увидеть примеры на левой части этой веб-страницы (область контактной формы).

person user2178930    schedule 17.03.2013
comment
Если вы действительно хотите 100% прозрачность, почему вы не используете rgba(54, 25, 25, 0);? Большинство современных браузеров не округляют до 15-го знака после запятой, но визуальная разница между 99,996% прозрачности и просто 100% прозрачностью, скорее всего, минимальна. - person Ryan; 20.07.2017

Отличный способ сделать это - действительно использовать CSS 3.

Создайте класс ширины div - например, суперсайзер вверху страницы:

Затем установите следующие свойства CSS:

  .supersizer {
    background: url("http://fc06.deviantart.net/fs70/f/2012/099/d/f/stackoverflow_16x16_icon_by_muntoo_stock-d4vl2v4.png") no-repeat center center fixed;
    width: 100%;
    height: 100%;
    position: fixed;
    z-index: -1;
    opacity: 0.5;
    -webkit-background-size: cover;
    -moz-background-size: cover;
    -o-background-size: cover;
    background-size: cover;
    top: 0;
  }
<div class="supersizer"></div>

person Wolfgang Zotter    schedule 19.03.2014

Для всех, кто сталкивается с этой веткой, вот скрипт под названием thatsNotYoChild.js, который я только что написал, который автоматически решает эту проблему:

http://www.impressivewebs.com/fixing-parent-child-opacity/

По сути, он отделяет дочерние элементы от родительского элемента, но сохраняет элемент в том же физическом месте на странице.

person Louis L.    schedule 22.03.2013

Самое простое решение - создать 3 divs. Один будет содержать два других, один с прозрачным фоном и один с содержимым. Сделайте относительную позицию первого div'а и установите для того, у кого прозрачный фон, отрицательное значение z-index, затем отрегулируйте положение содержимого, чтобы оно поместилось на прозрачном фоне. Таким образом, у вас не будет проблем с абсолютным позиционированием.

person Balsa    schedule 18.01.2013
comment
Каждый из 3-х div должен быть настроен на относительное позиционирование, чтобы затем их можно было перемещать и настраивать внутри родительского div, а также родительский div (при необходимости) перемещать в контексте всей страницы. Div с прозрачным фоном и Div с содержимым не должны содержать друг друга. Они должны быть родными в первом дивизионе. - person Balsa; 18.01.2013

Использовать:

background:url("location of image"); // Use an image with opacity

Этот метод будет работать во всех браузерах.

person Neeraj    schedule 03.02.2014
comment
Я не думаю, что ОП хотел использовать изображение, хотя в нем не говорится об этом. Я не голосовал за это, просто пытался уточнить. - person Christian; 21.02.2014

Вы не можете. У вас должен быть отдельный div, который является просто этим фоном, чтобы вы могли применить только непрозрачность к нему.

Я пробовал сделать это недавно, и, поскольку я уже использовал jQuery, я обнаружил, что следующее меньше всего проблем:

  1. Создайте два разных div. Они будут братьями и сестрами, не связанными друг с другом или чем-то еще.
  2. Задайте для text div сплошной цвет фона, потому что это будет значение по умолчанию без использования JavaScript.
  3. Используйте jQuery, чтобы получить высоту text div и применить ее к background div.

Я уверен, что есть какой-то способ CSS-ниндзя, чтобы все это сделать, используя только поплавки или что-то в этом роде, но у меня не хватило терпения понять это.

person sdleihssirhc    schedule 27.02.2011
comment
background: rgba(54, 25, 25, .5); должно быть тот ниндзя css, о котором вы говорите. :) - person Ruchan; 10.12.2013