Ваша разметка не содержит никакой ссылки (<a>
), но единственный элемент в вашем CSS, к которому вы применили position:absolute
, это .bbb a
(с различными модификаторами), но это ни к чему не относится.
Давайте пройдемся по основам: чтобы отобразить 2 элемента один поверх другого (что, по общему признанию, является тем, чего вы хотите достичь), вам необходимо:
- родитель с
position:relative
- один дочерний элемент без
position
или с position:relative
(это будет составлять поток документов: заполнит и определит размер родительского элемента и, косвенно, также изменит размер другого элемента).
- другой дочерний элемент с
position:absolute;
+ top
, left
, width
и height
(в качестве альтернативы вы можете заменить width:100%;height:100%
на bottom:0;right:0
), что, таким образом, сопоставит себя с размерами родителя , который, в свою очередь, берет свои размеры из нормального потока (который содержит только другой дочерний элемент). Этот элемент, будучи абсолютно позиционированным, не является частью нормального потока.
relative-parent {
position: relative;
font-size: 3rem;
}
normal-child {
height: 180px;
background-color: red;
color: white;
}
absolute-child {
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
background-color: white;
color: red;
/* hide absolute child */
opacity: 0;
border: 1px solid red;
transition: opacity .3s;
}
relative-parent:hover absolute-child {
/* show absolute child on parent hover */
opacity: 1;
}
relative-parent,
normal-child,
absolute-child {
width: 100%;
display: flex;
align-items: center;
justify-content: center;
}
/* all indented rules are irrelevant
I basically added them to style the example */
<relative-parent>
<normal-child>Normal child</normal-child>
<absolute-child>Absolute child</absolute-child>
</relative-parent>
Выше приведен общий принцип. Все правила оформления (неважные) были отступлены, поэтому те, о которых я говорил выше, оставались выдающимися.
Вся конструкция берет свой размер от размера потока, который является нормально позиционированным дочерним элементом (в примере: height: 180px; width: 100%
. Если вы измените этот элемент, вы также измените родительский и другой дочерний элементы).
Неважно, какие элементы вы используете (они могут быть даже пользовательскими, как я их сделал, при условии, что вы дадите им значение уровня блока или flexbox для display
). Если вы используете <div>
в качестве родительского элемента и <img>
s в качестве дочернего, вы должны указать один в родительском потоке display:block
.
Если вы примените вышеуказанный принцип без каких-либо ошибок валидации, он будет работать в разных браузерах. Это уровень CSS 1.