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

Я хочу добавить немного блеска элементу на веб-странице. Я бы предпочел, чтобы мне не нужно было добавлять дополнительный html на страницу. Я хочу, чтобы изображение отображалось перед элементом, а не позади него. Как лучше всего это сделать?


person Himmators    schedule 30.09.2012    source источник
comment
Фиксированы ли размеры элемента?   -  person Rob W    schedule 30.09.2012
comment
Да. Больше символов, чтобы позволить мне комментировать.   -  person Himmators    schedule 30.09.2012
comment
Я пытаюсь заставить его работать с псевдоэлементом :after сейчас...   -  person Himmators    schedule 30.09.2012


Ответы (4)


Чтобы получить «изображение переднего плана» без дополнительного HTML-кода, вы можете использовать псевдоэлемент (::before / :before) плюс CSS pointer-events. Последнее свойство необходимо для того, чтобы пользователь мог щелкнуть по слою «как будто его не существует».

Вот пример (с использованием цвета с альфа-каналом 50%, чтобы вы могли видеть, что реальные элементы действительно могут быть сфокусированы): http://jsfiddle.net/JxNdT/

​<div id="cont">
Test<br>
<input type="text" placeholder="edit">
</div>​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​​
​#cont {
    width: 200px;
    height: 200px;
    border: 1px solid #aaa; /*To show the boundaries of the element*/
}
#cont:before {
    position: absolute;
    content: '';
    background: rgba(0,0,0, 0.5); /*partially transparent image*/
    width: 200px;
    height: 200px;
    pointer-events: none;
}
​

PS. Я выбрал псевдоэлемент ::before, потому что это естественно приводит к правильному позиционированию. Если я выберу ::after, то я должен добавить position:relative; к реальному элементу (#cont) и top:0;left:0; к псевдоэлементу (::after).


ППС. Чтобы получить эффект переднего плана для элементов без фиксированного размера, необходим дополнительный элемент. Для этого элемента оболочки требуются position:relative;display:inline-block; стилей. Установите width и height псевдоэлемента на 100%, и псевдоэлемент растянется до ширины и высоты элемента-обертки. Демонстрация: http://jsfiddle.net/JxNdT/1/.

person Rob W    schedule 30.09.2012
comment
отличный материал! Поскольку изображение уже имеет альфа-прозрачность, мне не понадобится фоновый элемент, а кроме того, я просто скопирую и вставлю! - person Himmators; 30.09.2012
comment
Просто любопытно, есть ли подобное решение, если размер элемента не является статическим? - person Himmators; 30.09.2012
comment
@KristofferNolgren Вам нужна оболочка с position:relative;display:inline-block;), затем используйте 100% для width и height в псевдоэлементе. Псевдоэлемент будет растягиваться до ширины и высоты элемента-обертки. Демонстрация: jsfiddle.net/JxNdT/1 - person Rob W; 30.09.2012
comment
@RobW Вам не нужна оболочка, и вы можете растянуть абсолютно позиционированный псевдоэлемент :after со всеми свойствами trbl, установленными на 0; см. обновленную скрипту: jsfiddle.net/JxNdT/2 - person FelipeAls; 30.09.2012
comment
@FelipeAls Отлично! Я даже не рассматривал такой вариант. - person Rob W; 30.09.2012
comment
+1 за творческий подход, и хотя это отлично работает в Chrome под IE-8, цвет по-прежнему отображается за содержимым. Если я найду решение для старых браузеров, я опубликую его здесь. - person Reahreic; 05.11.2014
comment
@Reahreic ты нашел решение? - person Crashalot; 10.01.2019
comment
Хорошее решение! На самом деле мне пришлось использовать z-index, чтобы он полностью работал, но я думаю, это было связано с моей ситуацией. - person Mike; 12.03.2020

Вы можете использовать этот css

#yourImage
{
z-index: 1; 
}

ПРИМЕЧАНИЕ

Установите индекс z-index больше, чем z-index элемента, поверх которого вы помещаете изображение.

Если вы не указали z-index, то 1 сделает всю работу.

Вы также можете установить z-index в -1, в этом случае изображение всегда будет в background!

person Anirudha    schedule 30.09.2012
comment
Свойство z-index работает только с позиционированными (absolute, relative или fixed) элементами. - person gearsdigital; 30.09.2012

Если вам нужен бело-прозрачный передний план

Это для будущих посетителей, таких как я, которые рассматривают возможность добавления бело-прозрачного переднего плана к элементу, чтобы, например, сообщить, что он скрыт/отключен. Вы часто можете достичь своей цели, просто понизив opacity ниже 1:

.is-hidden {
    opacity: 0.5;
}
visible
<span class="is-hidden">hidden</span>
visible

person Bart S    schedule 27.09.2016

Изящное решение: box-sizing + padding-left, см. больше на css-трюки

Где-то в вашем HTML:

<img id="test_replacement" src="test.png" alt="test" />

CSS для замены изображения (при наведении)

#test_replacement {
    width: 200px; //must be the size of your image (and the replacement one)
    height: 200px; //idem
    display: block;
}
#test_replacement:hover {
    box-sizing: border-box;
    background-image: url('somewhere/other_image.png');
    padding-left: 200px; //at least the size of the width
}
person Community    schedule 25.10.2019