У меня есть два DIV, которые мне нужно расположить точно друг над другом. Однако, когда я это делаю, форматирование оказывается запутанным, потому что содержащий DIV действует так, как будто нет высоты. Я думаю, что это ожидаемое поведение, position:absolute
но мне нужно найти способ расположить эти два элемента друг над другом и растянуть контейнер при растяжении содержимого:
Верхний левый край .layer2
должен быть точно выровнен с верхним левым краемlayer1
<!-- HTML -->
<div class="container_row">
<div class="layer1">
Lorem ipsum...
</div>
<div class="layer2">
More lorem ipsum...
</div>
</div>
<div class="container_row">
...same HTML as above. This one should never overlap the .container_row above.
</div>
/* CSS */
.container_row {}
.layer1 {
position:absolute;
z-index: 1;
}
.layer2 {
position:absolute;
z-index: 2;
}
position: absolute
тогда не совсем подходящий стиль.position:absolute
не кажется правильным. Какой будет правильный стиль?.layer1
и.layer2
элементы имеют известный размер?Ответы:
Прежде всего, вам действительно следует включать позицию в абсолютно позиционированные элементы, иначе вы столкнетесь со странным и сбивающим с толку поведением; вы, вероятно, захотите добавить
top: 0; left: 0
в CSS оба ваших абсолютно позиционированных элемента. Вы также хотите иметьposition: relative
на ,.container_row
если вы хотите абсолютно позиционируемые элементы должны быть расположены по отношению к их родителям , а не тело документа :Ваша проблема в том, что
position: absolute
удаляет элементы из обычного потока :Это означает, что абсолютно позиционированные элементы никак не влияют на размер их родительского элемента, и ваш первый
<div class="container_row">
будет иметь нулевую высоту.Таким образом, вы не можете делать то, что пытаетесь сделать с абсолютно позиционированными элементами, если не знаете, какой они будут высоты (или, что то же самое, вы не можете указать их высоту). Если вы можете указать высоту, то вы можете установить одинаковую высоту для,
.container_row
и все выровняется; вы также можете поставитьmargin-top
второй,.container_row
чтобы оставить место для абсолютно позиционированных элементов. Например:источник
position: absolute
необходимости. Пожалуйста, проверьте: stackoverflow.com/a/51949049/1736186На самом деле это возможно без
absolute
указания положения и любой высоты. Все, что вам нужно сделать, это использоватьdisplay: grid
родительский элемент и поместить потомков в одну строку и столбец.Пожалуйста, проверьте пример ниже, основанный на вашем HTML. Я добавил только
<span>
и несколько цветов, чтобы Вы могли видеть результат.Вы также можете легко изменить
z-index
каждый из дочерних элементов, чтобы управлять его видимостью (какой из них должен быть наверху).источник
display: grid
семь лет назад не существовало :)flex
, который теперь имеет гораздо лучшую поддержку браузеров.Отличный ответ: «мю слишком коротка». Я искал то же самое, и после прочтения вашего сообщения я нашел решение, которое соответствовало моей проблеме.
У меня было два элемента одинакового размера, и я хотел их сложить. Поскольку все они имеют одинаковый размер, я мог сделать
только на последнем элементе. Таким образом, первый элемент вставляется правильно, «подталкивая» высоту родителей, а второй элемент размещается сверху.
Надеюсь, что это поможет другим людям, пытающимся сложить 2+ элемента с одинаковой (неизвестной) высотой.
источник
position: aboslute
использовать другой .Вот еще одно решение, использующее display: flex вместо position: absolute или display: grid.
источник
Я должен был установить
Container_height = Element1_height = Element2_height
Используйте z-index, чтобы установить, какой из них будет наверху.
источник
Вот несколько многоразовых CSS, которые сохранят высоту каждого элемента без использования
position: absolute
:Первый элемент в вашем
stack
- это фон, а второй - передний план.источник
Из-за того, что абсолютное позиционирование удаляет элементы из потока документов: absolute не подходит для работы. В зависимости от точного макета, который вы хотите создать, вам удастся использовать отрицательные поля, position: relative или, возможно, даже transform: translate. Покажите нам образец того, чем вы хотите заниматься, и мы можем помочь вам лучше.
источник
Конечно, проблема в том, чтобы вернуть себе рост. Но как это сделать, если вы заранее не знаете высоту? Что ж, если вы знаете, какое соотношение сторон вы хотите придать контейнеру (и сохранить его отзывчивым), вы можете вернуть свою высоту, добавив отступы к другому дочернему элементу контейнера, выраженному в процентах.
Вы даже можете добавить фиктивный элемент
div
к контейнеру и установить что-то вроде того,padding-top: 56.25%
чтобы дать фиктивному элементу высоту, пропорциональную ширине контейнера. Это вытолкнет контейнер и придаст ему соотношение сторон, в данном случае 16: 9 (56,25%).Padding и margin используют процент от ширины, вот и весь фокус.
источник
После долгих испытаний я убедился, что исходный вопрос уже верен; отсутствует всего пара настроек:
container_row
должны иметьposition: relative;
position: absolute; left:0;
container_row
должен быть дополнительный стиль:height:x; line-height:x; vertical-align:middle;
text-align:center;
может также помочь.источник