У меня есть 3 уровня div
:
- (Зеленым цветом внизу) Верхний уровень
div
сoverflow: hidden
. Это потому, что я хочу, чтобы некоторый контент (не показанный здесь) внутри этого блока был обрезан, если он превышает размер блока. - (Красным внизу) Внутри у меня есть
div
сposition: relative
. Единственное использование для этого для следующего уровня. - (Выделено синим цветом ниже) Наконец-то
div
я вынимаю из потока,position: absolute
но хочу, чтобы он располагался относительно красногоdiv
(а не на странице).
Я бы хотел, чтобы синий прямоугольник был извлечен из потока и вышел за пределы зеленого прямоугольника, но должен располагаться относительно красного прямоугольника, как показано на рисунке:
Тем не менее, с кодом ниже, я получаю:
И, удалив position: relative
красный флажок, теперь синий прямоугольник может выйти из зеленого прямоугольника, но больше не позиционируется относительно красного прямоугольника:
Есть ли способ:
- Держите
overflow: hidden
на зеленой коробке. - Расширилось ли синее поле за зеленое поле и будет ли оно расположено относительно красного поля?
Полный источник:
#d1 {
overflow: hidden;
background: #efe;
padding: 5px;
width: 125px;
}
#d2 {
position: relative;
background: #fee;
padding: 2px;
width: 100px;
height: 100px;
}
#d3 {
position: absolute;
top: 10px;
background: #eef;
padding: 2px;
width: 75px;
height: 150px;
}
<br/><br/><br/>
<div id="d1" >
<div id="d2" >
<div id="d3"></div>
</div>
</div>
css
overflow
css-position
avernet
источник
источник
position: fixed
будет игнорироватьoverflow:hidden
любой содержащий элемент.Ответы:
Уловка, которая работает, состоит в том, чтобы поместить поле № 2
position: absolute
вместоposition: relative
. Обычно мы помещаемposition: relative
внешний блок (здесь блок № 2), когда хотим, чтобы внутренний блок (здесь блок № 3)position: absolute
располагался относительно внешнего блока. Но помните: для блока № 3 нужно расположить относительно блока № 2, блок № 2 просто необходимо позиционировать. С этим изменением мы получаем:И вот полный код с этим изменением:
источник
position: static
и это работало лучше для меняposition: static
на поле № 2 вместоposition: absolute
.absolute
не обрезает, ноrelative
делает?Не существует волшебного решения для отображения чего-либо за пределами скрытого контейнера.
Подобный эффект может быть достигнут, если иметь абсолютный позиционированный div, который соответствует размеру его родителя, поместив его внутри вашего текущего относительного контейнера (div, который вы не хотите обрезать, должен находиться вне этого div):
Имейте в виду, что если вам нужно только обрезать содержимое по оси x (что, по-видимому, соответствует вашему случаю, поскольку вы только установили ширину div), вы можете использовать
overflow-x: hidden
.источник
Я действительно не вижу способа сделать это как есть. Я думаю, что вам может понадобиться удалить
overflow:hidden
из div # 1 и добавить еще один div в div # 1 (то есть, как родственный элемент для div # 2), чтобы удерживать ваше неуказанное «содержимое» иoverflow:hidden
вместо этого добавить к нему. Я не думаю, что переполнение может быть (или должно быть) переопределенным.источник
Если внутри внешнего элемента div (зеленого поля) не отображается другое содержимое, почему бы не поместить это содержимое в другой элемент div, давайте назовем его
"content"
. Переполнение скрыто в этом новом внутреннем div-элементе, но его переполнение должно отображаться в зеленом поле.Единственная загвоздка в том, что вам придется возиться, чтобы убедиться, что div содержимого не мешает расположению красной рамки, но, похоже, вы сможете исправить это с небольшой головной болью.
источник