このフィドルを参照してください。
ヘッダー#blue
の下部から一定の距離 (例: 2em) を維持するには、div の上部が必要です。#red
つまり、ヘッダーの垂直方向のサイズが大きくなると、#blue
div を「押し下げる」必要があり#red
ます (つまり、ビューポートが狭くなってメニュー項目が折り返された結果として)。
私は CSS のみのソリューションを好みますが、CSS だけではこれを行うことができないという私の気持ちを誰かが確認できる場合は、どの jQuery 関数をフックする必要があるか、どの DOM イベントにフックするかについてのアドバイスも必要であり、感謝します.
ノート:
それ以外の場合、レイアウトはそのまま機能しますが、現在、
#blue
div は (効果的に) 灰色の div の上部から固定距離だけ垂直に配置されてい#page
ます。これは、#red
ヘッダーが高くなるにつれて、 div を「押し下げる」のではなく#red
「後ろに」拡張することを意味します。#blue
#green
とdiv の順序を#blue
(div 内で) 反転できることを除いて、HTML は制約されます#main
。#blue
は、兄弟を配置する必要があるため、ヘッダーに#page
続く論理フローではなく、に対して相対的に配置されます。#red
#green
#green
#page
水平位置が達成
#green
される白枠の div に対して相対的に配置され、固定された垂直位置を達成するために絶対に配置されることで、これを (正しいか間違っているかに関わらず)達成しました。#main
#main
#page
もちろん、これは の位置に影響を与え
#blue
ます。このdivを他のdivから「ブレイクアウト」して、より「通常の」フローに戻す方法があるかどうかはわかりません。の最終結果 が同じであり、ラップの結果として下に移動し、とは無関係である限り
#green
、私はこのアプローチに制約されません。#page
#green
#blue
#red
#green
あなたの時間は非常に感謝!
HTML:
<body>
<div id="page">page
<header id="red">
<div id="menu-container">
<ul id="nav-menu">
<li class="menu-item">menu</li>
<li class="menu-item">menu</li>
<li class="menu-item">menu</li>
<li class="menu-item">menu</li>
<li class="menu-item">menu</li>
<li class="menu-item">menu</li>
<li class="menu-item">menu</li>
<li class="menu-item">menu</li>
</ul>
</div>
</header>
<div id="main">
<div id="blue"></div>
<div id="green"></div>
</div>
</div>
CSS:
body {
/*arbitrary*/
background-color: black;
padding: 0 1em
}
#page {
/*arbitrary*/
background-color: gray;
border-color:gray;
border-width:1pt;
border-style:dotted;
/* necessary - or at least, the achieved result is */
max-width: 1000px;
min-width: 240px;
margin: 0 auto;
/* both blue and green positioned relatively to this div */
position:relative;
}
header {
/*arbitrary*/
background-color: red;
/* necessary - or at least, the achieved result is */
width: 100%;
}
/* necessary - or at least, the achieved result is */
#menu-container {
width: 50%;
}
ul {
list-style: none;
}
.menu-item {
margin: 0 0.25em 0 0.25em;
display: inline-block;
}
#main {
/*arbitrary*/
border-color:white;
border-width:1pt;
border-style:dotted;
/* necessary - or at least, the achieved result is */
position:absolute;
top: .5em;
width: 100%;
}
#green {
/*arbitrary*/
background-color: green;
height: 15em;
/* necessary - or at least, the achieved result is */
z-index: 100;
width: 40%;
position: relative;
left: 50%;
}
#blue {
/*arbitrary*/
background-color: blue;
height:3em;
/* necessary - or at least, the achieved result is */
width:100%;
/**** here's the problem - top of blue currently 5em below top of grey page.
But I want it 2em below bottom of red header nomatter how tall red header is ****/
position: absolute;
top:5em;
}