Полупрозрачный цветной слой поверх фонового изображения? - PullRequest
178 голосов
/ 07 февраля 2012

У меня есть DIV, и я хотел бы поместить шаблон в качестве фона.Этот шаблон серый.Поэтому, чтобы сделать его немного более приятным, я бы хотел нанести легкий прозрачный цветной «слой» поверх.Ниже я попробовал, но это не сработало.Есть ли способ нанести цветной слой поверх фонового изображения?

Вот мой CSS:

background: url('../img/bg/diagonalnoise.png');
background-color: rgba(248, 247, 216, 0.7);

Ответы [ 11 ]

266 голосов
/ 06 июня 2014

Я знаю, что это действительно старая тема, но она отображается вверху в Google, так что вот еще один вариант.

Это чистый CSS и не требует никакого дополнительного HTML.

box-shadow: inset 0 0 0 1000px rgba(0,0,0,.2);

Существует удивительное количество применений функции box-shadow.

184 голосов
/ 08 февраля 2012

Вот оно:

.background {
    background:url('../img/bg/diagonalnoise.png');
    position: relative;
}

.layer {
    background-color: rgba(248, 247, 216, 0.7);
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}

HTML для этого:

<div class="background">
    <div class="layer">
    </div>
</div>

Конечно, вам нужно определить ширину и высоту для класса .background, если внутри него нет других элементов

103 голосов
/ 13 сентября 2014

Из CSS-хитрости ... есть один шаг, чтобы сделать это без z-индексации и добавления псевдоэлементов - требуется линейный градиент, который, я думаю, означает, что вам нужна поддержка CSS3

.tinted-image {
  background-image: 
    /* top, transparent red */
    linear-gradient(
      rgba(255, 0, 0, 0.45), 
      rgba(255, 0, 0, 0.45)
    ),
    /* your image */
    url(image.jpg);
}
39 голосов
/ 23 апреля 2015

Вы также можете использовать линейный градиент и изображение: http://codepen.io/anon/pen/RPweox

.background{
  background: linear-gradient(rgba(0,0,0,.5), rgba(0,0,0,.5)),
    url('http://www.imageurl.com');
}

Это потому, что функция линейного градиента создает изображение, которое добавляется в фоновый стек. https://developer.mozilla.org/en-US/docs/Web/CSS/linear-gradient

23 голосов
/ 08 февраля 2012

Вам понадобится оберточный элемент с изображением bg и в нем элемент содержимого с цветом bg:

<div id="Wrapper">
  <div id="Content">
    <!-- content here -->
  </div>
</div>

и css:

#Wrapper{
    background:url(../img/bg/diagonalnoise.png); 
    width:300px; 
    height:300px;
}

#Content{
    background-color:rgba(248,247,216,0.7); 
    width:100%; 
    height:100%;
}
20 голосов
/ 11 января 2014

Попробуй это. У меня работает.

.background {
    background-image: url(images/images.jpg);
    display: block;
    position: relative;
}

.background::after {
    content: "";
    background: rgba(45, 88, 35, 0.7);
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    z-index: 1;
}

.background > * {
    z-index: 10;
}
12 голосов
/ 19 ноября 2014

Я использовал это как способ применения цветовых оттенков, так и градиентов к изображениям, чтобы упростить стилизацию динамического наложения текста для удобочитаемости, когда вы не можете контролировать цветовые профили изображения.Вам не нужно беспокоиться о z-index.

HTML

<div class="background-image"></div>

SASS

.background-image {
  background: url('../img/bg/diagonalnoise.png') repeat;
  &:before {
    content: '';
    position: absolute;
    top: 0;
    left: 0;
    right: 0;
    bottom: 0;
    background: rgba(248, 247, 216, 0.7);
  }
}

CSS

.background-image {
  background: url('../img/bg/diagonalnoise.png') repeat;
}

.background-image:before {
    content: '';
    position: absolute;
    top: 0;
    bottom: 0;
    right: 0;
    left: 0;
    background: rgba(248, 247, 216, 0.7);
  }

Надеюсь, это поможет

5 голосов
/ 27 августа 2013

См. Мой ответ на https://stackoverflow.com/a/18471979/193494 для всестороннего обзора возможных решений:

  1. с использованием нескольких фонов с линейным градиентом,
  2. нескольких фонов с сгенерированным PNGили
  3. стилизация: после псевдоэлемента в качестве вторичного фонового слоя.
2 голосов
/ 05 декабря 2017

Вы можете использовать полупрозрачный пиксель, который вы можете сгенерировать, например, здесь , даже в base64 Вот пример с белым 50%:

background-image: url(data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAEAAAABCAQAAAC1HAwCAAAAC0lEQVR42mP8Xw8AAoMBgDTD2qgAAAAASUVORK5CYII=),
url(../img/leftpanel/intro1.png);
background-size: cover, cover;
  • без загрузки

  • без лишних html

  • Я думаю, загрузка должна быть быстрее, чем тень от ящика или линейный градиент

2 голосов
/ 23 февраля 2015

Почему так сложно? Ваше решение было почти правильным, за исключением того, что намного проще сделать узор прозрачным, а цвет фона - сплошным . PNG может содержать прозрачные пленки. Так что используйте Photoshop, чтобы сделать рисунок прозрачным, установив слой на 70% и сохранив изображение. Тогда вам нужен только один селектор. Работает кросс-браузер.

CSS:

.background {
   background: url('../img/bg/diagonalnoise.png');/* transparent png image*/
   background-color: rgb(248, 247, 216);
}

HTML:

<div class="background">
   ...
</div> 

Это основные. Ниже приведен пример использования, где я переключился с background на background-image, но оба свойства работают одинаково.

body { margin: 0; }
div {
   height: 110px !important;
   padding: 1em;
   text-transform: uppercase;
   font-family: Arial, Helvetica, sans-serif;
   font-weight: 600;
   color: white;
   text-shadow: 0 0 2px #333;
}
.background {
   background-image: url('https://www.transparenttextures.com/patterns/arabesque.png');/* transparent png image */
   }
.col-one {
  background-color: rgb(255, 255, 0);
}
.col-two {
  background-color: rgb(0, 255, 255);
}
.col-three {
  background-color: rgb(0, 255, 0);
}
<div class="background col-one">
 1. Background
</div> 
<div class="background col-two">
 2. Background
</div> 
<div class="background col-three">
 3. Background
</div> 

ПОЖАЛУЙСТА, ПОДОЖДИТЕ МИНУТУ! Это займет некоторое время, чтобы загрузить внешние шаблоны.

Этот сайт кажется довольно медленным ...

...