Несколько фоновых изображений и фонового цвета
Предположим, что я хочу отображать стрелку в CSS, которая должна иметь голову, хвост и гибкую ширину, чтобы он мог содержать текст. Я могу, конечно, создать несколько div, чтобы получить то, что я хочу, но как это можно сделать в CSS3?
Я могу использовать несколько фоновых изображений:
div.arrow{
background: url('arrowtail.png') left no-repeat, url('arrowhead.png') right no-repeat;
}
html:
<div class="arrow">This text is on a transparent background</div>
Это дает мне div
с головой стрелки и хвостом и прозрачным средним сектором.
Не представляется возможным указать цвет в средней части.
Только с одним фоновым изображением вы можете сделать это:
div.arrow{ background: red url('some_image.png') no-repeat; }
Я знаю, что это выполнимо многими способами, но действительно ли свойство background-color действительно потеряно из сокращенного определения?
Ответы
Ответ 1
Нет, это не совсем потеряно из сокращенной декларации. Вы все же можете указать цвет фона, но только для последнего (среднего) уровня (независимо от того, помещаете ли вы изображение):
div.arrow {
background: url('arrowtail.png') left no-repeat,
url('arrowhead.png') right no-repeat,
red;
}
Обратите внимание, что для вашего сценария ваши изображения могут иметь полностью непрозрачные фоны. Цвет фона будет отображаться под любыми прозрачными пикселями ваших изображений.
jsFiddle demo
Объявление background-color
отдельно, однако, может быть намного лучше для вашего сценария, поскольку оно позволяет использовать разные цвета на основе тех же фоновых изображений (если вы хорошо с прозрачными пикселями на частях ваших изображений, которые должны быть заполнены цвет фона CSS):
div.arrow {
background: url('arrowtail.png') left no-repeat,
url('arrowhead.png') right no-repeat;
}
/* Assuming your red arrow has this ID */
#red {
background-color: red;
}
jsFiddle demo
Ответ 2
Я считаю использование нескольких фоновых изображений проблематичным для таких вещей. Считаете ли вы использование элементов: before и: after? Я написал быстрый пример:
<style>
.arrow { display:block; margin:0; padding:0; width:200px; height:45px; line-height:45px; text-align:center; background:#ddd; }
.arrow:before { float:left; display:block; margin:0; padding:0; width:25px; height:45px; background:#ccc; content:''; }
.arrow:after { float:right; display:block; margin:0; padding:0; width:25px; height:45px; background:#ccc; content:''; }
</style>
<div class="arrow">This text is on a transparent background</div>
Просто замените цвет фона в: перед и: после объявлений на нужные вам стрелки.