Как вы можете видеть в CSS ниже, я хочу child2
позиционировать себя раньше child1
. Это потому, что сайт, который я сейчас разрабатываю, должен также работать на мобильных устройствах, где он child2
должен быть внизу, так как он содержит навигацию, которую я хочу, под контентом на мобильных устройствах. - Почему бы не 2 шедевры? Это единственные 2, divs
которые переставлены во всем HTML, так что 2 мастер-страницы для этого незначительного изменения являются излишним.
HTML:
<div id="parent">
<div class="child1"></div>
<div class="child2"></div>
</div>
CSS:
parent { position: relative; width: 100%; }
child1 { width: auto; margin-left: 160px; }
child2 { width: 145px; position: absolute; top: 0px; bottom: 0px; }
child2
имеет динамическую высоту, поскольку разные дочерние сайты могут иметь больше или меньше элементов навигации.
Я знаю, что элементы с абсолютным позиционированием удаляются из потока, поэтому другие элементы игнорируются.
Я попытался установить overflow:hidden;
родительский div, но это не помогло, как и clearfix
.
Моим последним прибежищем будет JavaScript, чтобы переместить их divs
соответственно, но сейчас я попробую и посмотрю, существует ли способ сделать это не на JavaScript.
источник
Ответы:
Вы сами ответили на вопрос: «Я знаю, что элементы с абсолютным позиционированием удаляются из потока, поэтому другие элементы игнорируются». Таким образом, вы не можете установить рост родителей в соответствии с абсолютно позиционированным элементом.
Вы либо используете фиксированную высоту, либо вам нужно привлечь JS.
источник
Хотя растяжение до элементов с использованием
position: absolute
невозможно, часто существуют решения, в которых вы можете избежать абсолютного позиционирования, получая тот же эффект. Посмотрите на эту скрипку, которая решает проблему в вашем конкретном случае http://jsfiddle.net/gS9q7/Хитрость заключается в том, чтобы изменить порядок элементов, перемещая оба элемента: первый справа, второй слева, поэтому второй появляется первым.
Наконец, добавьте clearfix к родителю , и вы сделали (см скрипки для полного решения).
Обычно, если элемент с абсолютной позицией расположен в верхней части родительского элемента, велика вероятность, что вы найдете обходной путь, плавая элемент.
источник
Feeela прав, но вы можете получить родительское
div
сокращение или расширение до дочернего элемента, если вы измените своеdiv
позиционирование следующим образом:Это должно работать для вас.
источник
Существует довольно простой способ решить эту проблему.
Вам просто нужно продублировать содержимое child1 и child2 в относительных div с отображением: none в родительском div. Скажите child1_1 и child2_2. Поместите child2_2 сверху, а child1_1 снизу.
Когда ваш jquery (или любой другой) вызывает абсолютный div, просто установите соответствующий относительный div (child1_1 или child2_2) с помощью display: block AND visibility: hidden. Относительный ребенок все еще будет невидимым, но сделает div родителей выше.
источник
В чистом JavaScript вам просто нужно получить высоту вашего
static position
дочернего элемента,.child1
используя метод getComputedStyle (), а затем установить это значениеpadding-top
для получения того же самого дочернего элемента, используя свойство HTMLElement.style .Проверьте и запустите следующий фрагмент кода для практического примера того, что я описал выше:
источник
Этот вопрос был задан в 2012 году до flexbox. Правильный способ решения этой проблемы с использованием современного CSS - с помощью медиазапроса и гибкого обращения к колонкам для мобильных устройств. Нет абсолютного позиционирования не требуется.
https://jsfiddle.net/tnhsaesop/vjftq198/3/
HTML:
CSS:
источник
У меня была похожая проблема. Чтобы решить эту проблему (вместо вычисления высоты iframe, используя тело, документ или окно), я создал div, который оборачивает все содержимое страницы (например, div с id = "page"), а затем я использовал его высоту.
источник
Я придумал другое решение, которое я не люблю, но выполняет свою работу.
В основном дублируют дочерние элементы таким образом, что дубликаты не видны.
CSS:
Если эти дочерние элементы содержат небольшую разметку, влияние будет небольшим.
источник
Вот пример JS:
---------- jQuery JS пример --------------------
источник
Есть очень простой взлом, который решает эту проблему
Вот коды и окно, иллюстрирующее решение: https://codesandbox.io/s/00w06z1n5l
HTML
CSS
вы можете поиграть с позицией hack div, чтобы повлиять на положение ребенка.
Вот фрагмент кода:
источник
Есть лучший способ сделать это сейчас. Вы можете использовать свойство bottom.
источник
Это очень похоже на то, что предложил @ChrisC. Он не использует элемент с абсолютным позиционированием, а относительный. Может быть, может работать на вас
И твой css вот так:
https://jsfiddle.net/royriojas/dndjwa6t/
источник
Также рассмотрим следующий подход:
CSS:
Кроме того, так как вы пытаетесь изменить положение div, рассмотрите css grid
источник
Абсолютные представления позиционируют себя против ближайшего предка, который не является статически позиционированным (
position: static
), поэтому, если вы хотите, чтобы абсолютное представление позиционировалось относительно данного родителя, установите для родительского элементаposition
значение,relative
а для дочернегоposition
-absolute
источник
Попробуйте это, это сработало для меня
Это установит дочернюю высоту к родительской высоте
источник