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

标签 css css-position

请引用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/

相关文章:

javascript - 带动画过渡的整页图像

javascript - 使用 5-star CSS 解决方案,当屏幕在 330px 线下换行时无法点击第二行

css - 位置 : -webkit-sticky works only uptill the height of the container within a flexbox child on Safari(12. 1.1)

html - 相对大小的表格单元格元素的定位(IE 错误?)

html - 选择元素时如何更改选择元素的背景颜色?

javascript - 表格不切换选择

css - Internet Explorer 7 - 绝对位置 - 下拉菜单

html - 如何以绝对位置在右侧放置一个div

javascript - 在动态文本区域中删除文本时无法降低高度

javascript - 如何确定页面的哪一部分应该首先加载?