В CSS overflow:hidden
устанавливается для родительских контейнеров, чтобы позволить ему расширяться с высотой их плавающих дочерних элементов.
Но есть еще одна интересная особенность в сочетании с margin: auto
...
Если ПРЕДЫДУЩИЙ брат является плавающим элементом, он фактически будет отображаться рядом с ним. То есть, если родственный элемент является, float:left
тогда контейнер с float:none overflow:hidden
будет отображаться справа от родственного брата, без новой строки - точно так же, как если бы он плавал в обычном потоке. Если предыдущий брат - float:right
это контейнер, он появится слева от него. Изменение размера этого контейнера точно покажет, что он центрирован между плавающими элементами. Скажем, если у вас есть два предыдущих брата и сестры, один float:left
другой float:right
, контейнер появится посередине между ними.
Так вот проблема ...
Как сохранить такой макет БЕЗ маскировки детей?
Поиск в Интернете дает мне возможность узнать, как clear:both
расширять контейнер ... но я не могу найти альтернативного решения для сохранения левого / правого центрирования предыдущего ребенка. Если вы создадите контейнер, overflow:visible
он внезапно проигнорирует поток макета плавающих элементов и окажется слоистым поверх плавающего элемента.
Итак, вопрос :
Мне нужен контейнер, overflow:hidden
чтобы сохранить макет ...
как я могу сделать так, чтобы дети не были замаскированы? Мне нужно, чтобы ребенок был абсолютно позиционирован относительно родителя вне контейнера.
ИЛИ
Как мне сделать overflow:visible
так, чтобы я мог абсолютно позиционировать дочерний элемент относительно родителя вне контейнера ... ЕЩЁ СОХРАНИТЬ родственный поток float-like-layout-flow?
overflow:hidden
у всех. Применение clearfix к родительскому div не позволяет всем дочерним компонентам "содержаться" на той же высоте, что и родительский.Ни один из опубликованных ответов не помог мне. Однако настройка
position: absolute
дочернего элемента работала.источник
position: fixed
или абсолютное позиционирование относительно чего-то за пределами родительского объектаvisibility: hidden
, он будет видимым. Однако вам часто нужно (хотите) расположить его относительно родителя, чтобы он был более устойчивым к изменениям кода. Тогда эти решения не являются альтернативой.Это старый вопрос, но я сам с ним столкнулся.
У меня есть полурешения, которые работают ситуативно для первого вопроса («Дети, видимые в переполнении: скрытый родитель»)
Если родительский div не обязательно должен быть position: relative, просто установите для дочерних стилей значение visibility: visible.
Если родительский div должен быть position: relative, я нашел единственный способ показать дочерние элементы - position: fixed. К счастью, это сработало для меня в моей ситуации, но я могу представить, что это не сработает в других.
Вот дерьмовый пример, просто отправьте его в HTML-файл для просмотра.
<div style="background: #ff00ff; overflow: hidden; width: 500px; height: 500px; position: relative;"> <div style="background: #ff0000;position: fixed; top: 10px; left: 10px;">asd <div style="background: #00ffff; width: 200px; overflow: visible; position: absolute; visibility: visible; clear:both; height: 1000px; top: 100px; left: 10px;"> a</div> </div> </div>
источник
left
. Использованиеmargin-left
вместо этого даст тот же эффект, поэтому мне больше не нужно было использовать относительное положение.Для других, если clearfix не решает эту проблему для вас, добавьте поля к неплавающему брату, которые совпадают с шириной (ами) плавающего брата (ов).
источник