gpt4 book ai didi

javascript - 固定 flexbox 占用空间

转载 作者:太空宇宙 更新时间:2023-11-04 01:54:15 25 4
gpt4 key购买 nike

我试图找到一种现代解决方案,在页面顶部有一个固定的菜单栏( flexbox ),在下面有一个 flexbox 。我希望页面滚动时菜单保持静态,第二个内容 flexbox 的内容滚动 (fixBox)。但是我希望固定菜单的行为就像它与 fillBox div 的相对关系一样出现在它下面而不是它下面....

我有以下代码:

<!DOCTYPE HTML>
<html>
<head>
<style>
body {
padding:0;
margin:0;
}
#logo {
width:170px;
border: 1px solid black;
}
#menuStrip {
position:relative;
width:95%;
height:100%;
background-color:#f0f0f0;
border: 1px solid black;
}
#topContainer {
position:fixed;
display: flex;
justify-content: center;
align-items: center;
border: 1px solid black;
width:100%;
height:50px;
}
#fillBox {
display:flex;
justify-content: center;
align-items: center;
border: 1px solid black;
}

#fill1 {
width:100%;
height:2000px;
background-color:#a2b565;
}
#menuObj {
position:absolute;
right:0;
width:40px;
height:30px;
border:1px solid; black;
background-color:red;

}
</style>
</head>
<body>
<div id="topContainer">
<div id="menuStrip"><div id="menuObj"> </div></div>
</div>
<div id="fillBox">
<div id="fill1"> <p> hello </p></div>
</div>
</body>
</html>

fiddle

注意:不是在寻找最高利润黑客解决方案......

最佳答案

这个问题的答案与flexbox无关,它与固定定位有关。

position: fixed 将 DOM 元素完全脱离文档流,因此其他 DOM 元素将忽略它们占用的空间。一个(几个可能的)行动方案是向 #fillBox 添加一个顶部填充,它等于 #topContainer 的高度 - 如果 #topContainer 将始终具有固定的高度。

      body {
padding:0;
margin:0;
}
#logo {
width:170px;
border: 1px solid black;
}
#menuStrip {
position:relative;
width:95%;
height:100%;
background-color:#f0f0f0;
border: 1px solid black;
}
#topContainer {
position:fixed;
display: flex;
justify-content: center;
align-items: center;
border: 1px solid black;
width:100%;
height:50px;
}
#fillBox {
padding-top: 50px;
display:flex;
justify-content: center;
align-items: center;
border: 1px solid black;
}

#fill1 {
width:100%;
height:2000px;
background-color:#a2b565;
}
#menuObj {
position:absolute;
right:0;
width:40px;
height:30px;
border:1px solid; black;
background-color:red;

}
      <div id="topContainer">
<div id="menuStrip"><div id="menuObj"> </div></div>
</div>
<div id="fillBox">
<div id="fill1"> <p> hello </p></div>
</div>

如果 #topContainer 具有动态高度,那么您需要在加载/调整大小时使用 JS 来动态设置 #fillBox 的顶部填充。

    var $topContainer = $('#topContainer');
var $fillBox = $('#fillBox');

var updateTopBar = function() {
var dynamicHeight = $topContainer.height();
$fillBox.css({paddingTop:dynamicHeight+'px'});


};

$(window).on('load',updateTopBar).on('resize',updateTopBar);
    body {
padding:0;
margin:0;
}
#logo {
width:170px;
border: 1px solid black;
}
#menuStrip {
position:relative;
width:95%;
height:100%;
background-color:#f0f0f0;
border: 1px solid black;
}
#topContainer {
position:fixed;
display: flex;
justify-content: center;
align-items: center;
border: 1px solid black;
width:100%;
height:50px;
}


#fillBox {
display:flex;
justify-content: center;
align-items: center;
border: 1px solid black;
}

#fill1 {
width:100%;
height:2000px;
background-color:#a2b565;
}
#menuObj {
position:absolute;
right:0;
width:40px;
height:30px;
border:1px solid; black;
background-color:red;

}
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="topContainer">
<div id="menuStrip"><div id="menuObj"> </div></div>
</div>
<div id="fillBox">
<div id="fill1"> <p> hello </p></div>
</div>

关于javascript - 固定 flexbox 占用空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42885366/

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