Другие ответы, которые предлагают z-index, имеют проблему, если поместить в контекст, в моем случае изображение исчезло за основным div. Предотвращение этого включает установку z-index: 1;
(и нестатического положения) для всех элементов-предков, что является проблематичным и может привести к поломке существующего макета.
Я нашел чистое решение, которое не требует прикосновения ко всем элементам предка.
Я наконец-то понял это с помощью Понимание z-index - контекст стекирования
HTML
Разметка остается такой:
<div class="box-shadow">
<img src="/images/graphic.jpg" />
</div>
Задача состоит в том, чтобы поместить div-оболочку и изображение в единый контекст стека. Для этого вы должны применить стили к элементу parent .
Контекст стека CSS
Согласно связанной статье, следующие элементы создают контекст стека:
- корневой элемент (HTML),
- позиционируется (абсолютно или относительно) со значением z-index, отличным от "auto",
- гибкий элемент со значением z-index, отличным от «auto»,
- элементов со значением непрозрачности меньше 1. (См. Спецификации для непрозрачности),
- элементы со значением преобразования, отличным от "none",
- элементы со значением режима смешивания, отличным от «нормального»,
- элементы с изоляцией, установленной на «изолировать»,
- на мобильных WebKit и Chrome 22+, position: fixed всегда создает новый контекст стека, даже если z-index равен «auto»
- указание любого атрибута выше в завещании, даже если вы сами не пишете
Если мы сосредоточимся на параметрах, которые имеют смысл для этого варианта использования, у нас есть эти альтернативы, если исходный элемент элемента .box-shadow
равен #parent
:
1. Позиционирование и z-индекс:
Вот что я бы выбрал, если это возможно:
#parent {
position: relative;
z-index: 0;
}
2. Непрозрачность
Если родительский элемент должен иметь другой атрибут позиции или добавление z-index имеет нежелательные побочные эффекты, вы можете использовать значение непрозрачности, равное почти 1, чтобы оно не имело видимого эффекта, но все равно создает контекст суммирования:
#parent {
opacity: 0.999;
}
Наконец, тень CSS
Затем вы можете наложить тень на div и переместить изображение позади него с z-index:
.box-shadow {
box-shadow: 0 0 10px 6px white inset;
}
.box-shadow img {
display: block;
position: relative;
z-index: -1;
}