Z -индекс с предшествующим псевдоэлементом

#css #z-index #pseudo-element

#css #z-индекс #псевдо-элемент

Вопрос:

Я создал элемент ‘header’ с элементом before-pseudo. псевдоэлемент должен находиться за родительским элементом. Все работает отлично до того момента, пока я не присвою своему «заголовку» z-индекс.

Что я хочу: желтый «заголовок» на переднем плане, красный псевдоэлемент на заднем плане и простой z-индекс 30 для желтого элемента «заголовка».

 header { 
    background: yellow;
    position:relative;
    height: 100px;
    width: 100px;
    z-index:30; /*This is the problem*/
}

header::before { 
    content:"Hide you behind!";
    background: red;
    position:absolute;
    height: 100px;
    width: 100px;
    top:25px;
    left:25px;
    z-index:-1;
}
  

Вы можете проверить мою проблему по этой ссылке (http://jsfiddle.net/tZKDy /) и вы видите проблему, когда устанавливаете / удаляете z-индекс для элемента ‘header’.

Комментарии:

1. «Что я хочу: желтый»заголовок» на переднем плане, красный псевдоэлемент на заднем плане и простой z-индекс 30 для желтого элемента»заголовка».» … «Все работает отлично до того момента, пока я не присвою «моему заголовку» z-индекс», похоже, то, что вы хотите, происходит при применении z-индекса. что не так с применяемым z-индексом?

Ответ №1:

Псевдоэлемент ::before помещается внутри элемента заголовка.

Спецификация CSS:

Псевдоэлементы :before и :after взаимодействуют с другими блоками, как если бы они были реальными элементами, вставленными только внутри связанного с ними элемента.

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

Я предлагаю вам просто предшествовать элементу заголовка другим элементом, чтобы он правильно складывался по умолчанию. Пример.

Комментарии:

1. К сожалению, пример не работает: в CSS отсутствует закрывающая фигурная скобка в первом правиле. Я разветвил и исправил это.

2. Я думаю, что это не очень хорошее решение, потому что я не вижу смысла в использовании относительного абсолютного позиционирования, хотя на самом деле они не расположены относительно. Добавление left:50px , например, нарушает его.

Ответ №2:

Я использовал z-index:-1 (введите описание ссылки здесь)

 a {
    position: relative;
    z-index: 1;
    text-align: center;
    display: table-cell;
    vertical-align: middle;
}

a::before {
    content: "";
    position: absolute;
    top: 0;
    bottom: 0;
    left: 0;
    right: 0;
    background-color: yellow;
    z-index: -1;    
}
  

Комментарии:

1. Добро пожаловать в Stack Overflow. Ваш ответ выглядит так, как будто он использует препроцессор CSS, предположительно SCSS, но в исходном вопросе используется только CSS. Не могли бы вы уточнить в своем ответе или отформатировать его как CSS?

2. Это работает только в отношении узлов внутри целевого элемента (например, текста). Элемент before по-прежнему всегда будет перекрывать фон целевого элемента (например, вы не можете наложить элемент before градиентом на фоновом изображении).