gpt4 book ai didi

css - 模拟绝对定位 div 的正常流

转载 作者:行者123 更新时间:2023-11-28 08:52:57 25 4
gpt4 key购买 nike

请引用this fiddle .

我需要 #blue div 的顶部与 #red 标题的底部保持固定距离(例如 2em)。换句话说,当 #red header 的垂直尺寸增加时,#blue div 应该“下推”(即由于视口(viewport)变窄导致菜单要包装的元素)。

我更喜欢纯 CSS 的解决方案,但如果有人能证实我的感觉,这不能仅靠 CSS 来完成,那么我也需要并感谢关于我应该 Hook 哪些 jQuery 函数的建议,以及哪些 DOM 事件。

注意事项:

  • 除了当前 #blue div 是(有效地)垂直放置在距离灰色 #page 顶部固定距离之外,其他布局按原样工作 分区。这意味着随着 #red header 变高,#red 延伸到 #blue div“后面”,而不是“向下推”它。

  • HTML 是受约束的,除了 #green#blue div 的顺序可以颠倒(在 #main 分区)。

  • #blue 相对于 #page 定位,而不是按照 #red header 之后的逻辑流定位,因为我要求定位它的 #green 同胞:#green 的顶部 必须# 的顶部保持固定的位置页

    我通过使 #green 定位实现了这一点(正确或错误)相对于白色边框的 #main div,它在其中实现水平位置,#main依次定位绝对在 #page 内实现固定的垂直位置。

    这当然对 #blue 的位置有影响。我只是不确定是否有办法将这个 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;
}

最佳答案

为什么不忘记相对定位,让 #green 从页面顶部绝对定位?

 #page {
...
position:relative;
}

#green {
...
position: absolute;
left: 50%;
top:0.5em;
}

关于css - 模拟绝对定位 div 的正常流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15313331/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com