25

Как уменьшить непрозрачность фона элемента с помощью CSS?

22

Описание проблемы:

Возможно ли с помощью только CSS сделать так, чтобы фон элемента был полупрозрачным, а содержимое (текст и изображения) оставалось непрозрачным?

Я хотел бы достичь этого эффекта без необходимости разделять текст и фон на два отдельных элемента.

При попытке реализовать это, я использовал следующий код:

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 для span оказывается относительным к opacity: 0.6 у родительского элемента.

Есть ли способ реализовать нужный эффект, не разделяя содержимое и фон?

5 ответ(ов)

1

Это лучшее решение, которое я смог придумать, без использования CSS 3. Оно отлично работает в Firefox, Chrome и Internet Explorer, насколько я могу судить.

Создайте контейнер div и два дочерних div на одном уровне: один для содержимого, другой для фона. С помощью CSS автоматически подгоните размер фона под содержимое и разместите фон за содержимым, используя z-index.

.container {
  position: relative;
}
.content {
  position: relative;
  color: White;
  z-index: 5;
}
.background {
  position: absolute;
  top: 0px;
  left: 0px;
  width: 100%;
  height: 100%;
  background-color: Black;
  z-index: 1;
  /* Эти три строки нужны для прозрачности во всех браузерах. */
  -ms-filter: "progid:DXImageTransform.Microsoft.Alpha(Opacity=50)";
  filter: alpha(opacity=50);
  opacity: .5;
}
<div class="container">
  <div class="content">
    Здесь содержимое.
    <br/>Фон должен увеличиваться, чтобы соответствовать размеру.
  </div>
  <div class="background"></div>
</div>

Таким образом, фон будет иметь необходимую прозрачность и правильно адаптироваться под размер содержимого.

0

Проблема в том, что в вашем примере текст действительно имеет полную непрозрачность. Он полностью непрозрачен внутри тега p, но сам тег p полупрозрачный.

Вы можете добавить полупрозрачное изображение в формате PNG в качестве фона вместо реализации этого с помощью CSS, либо разделить текст и блок на два элемента и сместить текст над фоном (например, с помощью отрицательного отступа).

В противном случае это будет невозможно.

Как уже упоминал Крис: если вы используете PNG-файл с прозрачностью, вам придется применить обходной путь с использованием JavaScript, чтобы это работало в "непослушном" Internet Explorer...

0

Вот как я делаю это (возможно, это не самый оптимальный способ, но он работает):

Создайте div, который вы хотите сделать полупрозрачным. Присвойте ему класс или ID. Оставьте его пустым и закройте. Установите фиксированную высоту и ширину (например, 300 пикселей на 300 пикселей). Установите для него прозрачность 0.5 или любое другое значение, которое вам нравится, и задайте фоновый цвет.

Затем, непосредственно под этим div, создайте другой div с другим классом или ID. Внутри него создайте абзац, в который вы поместите свой текст. Задайте первому div свойство position: relative и top: -295px (это отрицательные 295 пикселей). Установите ему z-index равным 2 для надёжности и убедитесь, что его прозрачность равна 1. Стилизуйте ваш абзац по своему вкусу, но убедитесь, что его размеры меньше, чем у первого div, чтобы он не выходил за его пределы.

Вот и всё. Вот код:

.trans {
  opacity: 0.5;
  height: 300px;
  width: 300px;
  background-color: orange;
}
.trans2 {
  opacity: 1;
  position: relative;
  top: -295px;
}
.trans2 p {
  width: 295px;
  color: black;
  font-weight: bold;
}
<body>
  <div class="trans">
  </div>
  <div class="trans2">
    <p>
      текст текст текст
    </p>
  </div>
</body>

Это работает в Safari 2.x, но насчет Internet Explorer не могу сказать.

0

CSS3 предоставляет простое решение вашей проблемы. Используйте:

background-color: rgba(0, 255, 0, 0.5);

Здесь rgba обозначает красный, зеленый, синий и альфа-канал. Зеленый цвет получается за счет значения 255, а полупрозрачность достигается с помощью альфа-значения 0.5.

0

Чтобы сделать фон элемента полупрозрачным, при этом сохранив содержимое (текст и изображения) полностью непрозрачным, необходимо использовать CSS. Вам нужно написать стиль для элемента и добавить свойство opacity с нужным значением.

Например:

.image {
   position: relative;
   background-color: cyan;
   opacity: 0.7;
}

Имейте в виду, что чем меньше значение opacity, тем более прозрачным будет фон. Значение 0 означает полную прозрачность, а 1 — полную непрозрачность. Таким образом, для эффекта полупрозрачного фона лучше выбирать значения, находящиеся между 0 и 1.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь