div
には3つのレベルがあります:
div
with overflow: hidden
。これは、ボックスのサイズを超える場合、そのボックス内のコンテンツ(ここには表示されていません)を切り抜くためです。div
とposition: relative
があります。これの唯一の用途は、次のレベルのためです。div
でposition: absolute
を使用してフローから外しますが、赤div
(ページではなく)を基準にして配置したい)。フローから青いボックスを取り出して、緑のボックスを超えて展開しますが、次のように赤いボックスに対して相対的に配置します。
ただし、以下のコードでは、次のようになります。
そして、赤いボックスのposition: relative
を削除すると、青いボックスは緑のボックスから出ることができますが、赤いボックスに対してはもう配置されません。
次の方法があります:
overflow: hidden
を保持します。テストのためのインラインCSSを備えた完全なソース:
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<body>
<br/><br/><br/>
<div id="1" style="overflow: hidden; background: #efe; padding: 5px; width: 125px">
<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>
</body>
</html>
動作するトリックは、ボックス#2をposition: absolute
ではなくposition: relative
で配置することです。通常、position: relative
を持つ内側のボックス(ここではボックス#3)を外側のボックスに対して配置する場合は、position: absolute
を外側のボックス(ここではボックス#2)に配置します。ただし、ボックス#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#1内に別のdivを(つまりdiv#2の兄弟として)追加して、未指定の「コンテンツ」を保持し、overflow:hidden
を追加する必要があると思います代わりに。私は、オーバーフローがオーバーライドされる可能性があるとは思わない(またはできるはずだ)。
外側のdiv(緑色のボックス)内に表示されていない他のコンテンツがある場合、そのコンテンツを別のdiv内にラップしないで、それを"content"
と呼びましょう。この新しい内部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>