Почему я не могу использовать фоновое изображение и цвет вместе?


179

То, что я пытаюсь сделать, - это показать и то, background-colorи другое background-image, чтобы половина моей части divпокрывала правое теневое фоновое изображение, а другая левая часть - цвет фона.

Но когда я использую background-image, цвет исчезает.


7
Какой у тебя код CSS?
outis

Ответы:


299

Вполне возможно использовать цвет и изображение в качестве фона для элемента.

Вы устанавливаете background-colorи background-imageстили. Если изображение меньше, чем элемент, вам нужно использовать background-positionстиль, чтобы поместить его вправо, и чтобы он не повторялся и не покрывал весь фон, вы используете background-repeatстиль:

background-color: green;
background-image: url(images/shadow.gif);
background-position: right;
background-repeat: no-repeat;

Или используя составной стиль background:

background: green url(images/shadow.gif) right no-repeat;

Если вы используете комбинированный стиль backgroundдля установки обоих по отдельности, будет использоваться только последний, это одна из возможных причин, по которой ваш цвет не виден:

background: green; /* will be ignored */
background: url(images/shadow.gif) right no-repeat;

Нет никакого способа специально ограничить фоновое изображение, чтобы оно покрывало только часть элемента, поэтому вы должны убедиться, что изображение меньше, чем элемент, или что оно имеет какие-либо прозрачные области, чтобы цвет фона был видимым.


3
Как мне заставить это работать. Я хочу использовать background: -webkit-linear-gradient(bottom, rgb(222,222,222) 19%, rgb(201,201,201) 50%, rgb(219,219,219) 80%); AND background-image: url(icon.png) no-repeat right;Как применить градиент и значок изображения. Пожалуйста помоги.
Аниш Наир


2
RE: @AnishNair - background:это сокращение, а затем предполагается, что изображение не указано, и идет поbackground-image
sheriffderek

1
Это то, что вызывало у меня проблемы - спасибо! Если вы используете комбинированный стиль фона, чтобы установить оба по отдельности, будет использоваться только последний, это одна из возможных причин, почему ваш цвет не виден:
GeminiDakota

30

Чтобы подкрасить изображение, вы можете использовать CSS3 backgroundдля укладки изображений и a linear-gradient. В приведенном ниже примере я использую linear-gradientбез фактического градиента. Браузер обрабатывает градиенты как изображения (я думаю, что он на самом деле генерирует растровое изображение и накладывает его на него) и, таким образом, фактически накапливает несколько изображений.

background: linear-gradient(0deg, rgba(2,173,231,0.5), rgba(2,173,231,0.5)), url(images/mba-grid-5px-bg.png) repeat;

Даст миллиметровую бумагу с голубым оттенком, если у вас был png. Обратите внимание, что порядок наложения может работать в обратном направлении к вашей ментальной модели, причем первый элемент находится сверху.

Отличная документация Mozilla, здесь:

https://developer.mozilla.org/en-US/docs/Web/Guide/CSS/Using_multiple_backgrounds

Инструмент для построения градиентов:

http://www.colorzilla.com/gradient-editor/

Примечание - не работает в IE11! Я опубликую обновление, когда узнаю почему, так как это должно быть.



12

И чтобы добавить к этому ответу, убедитесь, что само изображение имеет прозрачный фон.


Хорошее дополнение. Это случилось со мной, когда я использовал .jpg вместо .png
corbin

1
Не размещайте это как ответ лучше как комментарий.
Ихароб Аль Асими

2
Вы видели, когда это ?! Практически основания поколений. Это был дикий запад, никаких правил. Вы, новички, получили все это на золотой тарелке ;-)
Итай Моав -Малимовка

2

Вот пример использования background-imageи background-colorвместе:

.box {
  background-image: repeating-linear-gradient( -45deg, rgba(255, 255, 255, .2), rgba(255, 255, 255, .2) 15px, transparent 15px, transparent 30px);
  width: 100px;
  height: 100px;
  margin: 10px 0 0 10px;
  display: inline-block;
}
<div class="box" style="background-color:orange"></div>
<div class="box" style="background-color:green"></div>
<div class="box" style="background-color:blue"></div>


2

На самом деле есть способ использовать цвет фона с фоновым изображением. В этом случае фоновая часть будет заполнена указанным цветом вместо белого / прозрачного.

Для этого вам нужно установить backgroundсвойство следующим образом:

.bg-image-with-color {
    background: url("example.png") no-repeat, #ff0000;
}

Запишите запятую и код цвета после no-repeat; это устанавливает цвет фона, который вы хотите.

Я обнаружил это в этом видео на YouTube , однако я никоим образом не связан с этим каналом или видео.


1
Я сомневался в этом, был удивлен, что это работает довольно хорошо. Нужно будет искать совместимость для этого, хотя.! +1
Ники Томас

0

Сделайте половину изображения прозрачной, чтобы сквозь него был виден цвет фона.

В противном случае просто добавьте еще один div, занимая 50% вверх контейнера div, и поместите его влево или вправо. Затем примените к нему либо изображение, либо цвет.


Это предполагает, что ваше фоновое изображение было таким же большим, как содержащий div.
г-н евро

0

Gecko имеет странный баг , когда установив background-colorдля htmlселектора будет заметать background-imageкорпусной элемент , даже если bodyэлемент в действительности имеет больший Z-индекс , и вы должны быть в состоянии увидеть тела background-imageвместе сhtml background-color основано исключительно на простой логике.

Ошибка геккона

Избегайте следующего ...

html {background-color: #fff;}
body {background-image: url(example.png);}

Работа вокруг

body {background-color: #fff; background-image: url(example.png);}

0

Привет всем, я попробовал другой способ объединить background-image и background-color вместе:

HTML

<article><canvas id="color"></canvas></article>

CSS

article {
  height: 490px;
  background: url("Your IMAGE") no-repeat center cover;
  opacity:1;
} 

canvas{
  width: 100%; 
  height: 490px; 
  opacity: 0.9;
}

JAVASCRIPT

window.onload = init();

var canvas, ctx;

function init(){
  canvas = document.getElementeById('color'); 
  ctx = canvas.getContext('2d'); 
  ctx.save();  
  ctx.fillstyle = '#00833d'; 
  ctx.fillRect(0,0,490,490);ctx.restore();
}

Пожалуйста, дайте мне знать, если это сработало для вас Спасибо


-3
background:url(directoryName/imageName.extention) bottom left no-repeat; 
background-color: red;

2
Как / почему это отвечает на вопрос? Пожалуйста, уточните, отредактировав свой ответ.
Artjom B.

Две такие строки не нужны. Это можно поставить в одну декларацию. Смотрите другие примеры здесь на странице. background: red url(directoryName/imageName.extention) bottom left no-repeat;
Кут
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.