У меня есть 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>
Уловка, которая работает, заключается в размещении блока № 2 с position: absolute
вместо position: relative
. Обычно мы помещаем position: relative
во внешнее поле (здесь поле № 2), когда мы хотим, чтобы внутренний блок (здесь поле № 3) с position: absolute
располагался относительно внешняя коробка. Но помните: чтобы установить ящик №3 относительно бокса №2, нужно просто расположить ящик №2. С этим изменением мы получаем:
И вот полный код с этим изменением:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
<style type="text/css">
/* Positioning */
#box1 { overflow: hidden }
#box2 { position: absolute }
#box3 { position: absolute; top: 10px }
/* Styling */
#box1 { background: #efe; padding: 5px; width: 125px }
#box2 { background: #fee; padding: 2px; width: 100px; height: 100px }
#box3 { background: #eef; padding: 2px; width: 75px; height: 150px }
</style>
</head>
<body>
<br/><br/><br/>
<div id="box1">
<div id="box2">
<div id="box3"/>
</div>
</div>
</body>
</html>
Я добавил более подробную информацию об этом на Абсолютно позиционируемое поле внутри поля с переполнением: автоматически или скрыто .
Не существует волшебного решения отображения чего-либо вне скрытого контейнера с переполнением.
Аналогичного эффекта можно добиться, имея абсолютно позиционированный div, который соответствует размеру своего родителя, разместив его внутри текущего относительного контейнера (div, который вы не хотите зажимать, должен находиться вне этого div):
#1 .mask {
width: 100%;
height: 100%;
position: absolute;
z-index: 1;
overflow: hidden;
}
Имейте в виду, что если вам нужно зажимать содержимое только по оси x (что, похоже, и есть ваш случай, поскольку вы задали только ширину div), вы можете использовать overflow-x: hidden
.
Я не вижу способа сделать это как есть. Думаю, вам нужно удалить overflow:hidden
из div#1 и добавить другой div внутри div#1 (т.е. как брат div#2) для размещения вашего неопределенного "содержимого" и добавить overflow:hidden
к нему вместо этого. Я не думаю, что overflow можно (или нужно) отменить.
Если во внешнем блоке div (зеленом поле) не отображается другой контент, почему бы не поместить его в другой блок, давайте назовем его «содержание»
. Скрыть переполнение в этом новом внутреннем блоке div, но оставить видимым переполнение в зеленом поле.
Единственная загвоздка в том, что вам тогда придется повозиться, чтобы убедиться, что div содержимого не мешает расположению красного прямоугольника, но похоже, что вы сможете исправить это с небольшой головной болью.
<div id="1" background: #efe; padding: 5px; width: 125px">
<div id="content" style="overflow: hidden;">
</div>
<div id="2" style="position: relative; background: #fee; padding: 2px; width: 100px; height: 100px">
<div id="3" style="position: absolute; top: 10px; background: #eef; padding: 2px; width: 75px; height: 150px"/>
</div>
</div>