如何强制 div 位于视口的顶部/底部,同时不将其从文档流中取出?

Posted

技术标签:

【中文标题】如何强制 div 位于视口的顶部/底部,同时不将其从文档流中取出?【英文标题】:How to force a div to top/bottom of viewport while not taking it out of document flow? 【发布时间】:2021-11-30 13:42:45 【问题描述】:

我想知道如何在不破坏文档流的情况下使蓝色 div '粘'到页面的顶部和底部(因此您不能滚动超出它)(我不希望它与内容分区)。粗略版本在代码 sn-p 中。如果我在其上设置“绝对”,它会中断流程,并且内容会进入 菜单下。如果我保持相对,您可以滚动超出它(我希望它保持在顶部:0,底部:0 以实现完整的 100vh 并带有自己的滚动)。

我有什么遗漏的吗?谢谢!

* 
  box-sizing: border-box;


.main 
  display: flex;
  flex-direction: row;
  


.sideNav 
  width: 100px;
  height: 100vh;
  border: 5px solid red;


.sidePanel 
  width: 50px;
  height: 100vh;
  border: 5px solid blue;


.content 
  display: flex;
  flex-direction: column;
  flex-grow: 1;
  height: 200vh;
  margin: auto;
  width: auto;
  border: 5px solid green;
<div class="main">
  <div class="sideNav">Side Nav</div>
  <div class="content">This is the content area</div>
  <div class="sidePanel">Side Panel</div>
</div>

【问题讨论】:

【参考方案1】:

如果不将其从文档流中删除,您真的无法做到这一点。

但如果您知道侧面板的宽度,您可以将其作为右边距应用到内容 div。

.main 
  display: flex;
  flex-direction: row;


.sideNav 
  width: 100px;
  height: 100vh;
  border: 5px solid red;


.sidePanel 
  width: 50px;
  height: 100vh;
  border: 5px solid blue;
  position: fixed;  /* new */
  right: 0; /* new */


.content 
  display: flex;
  flex-direction: column;
  flex-grow: 1;
  height: 200vh;
  margin: auto;
  width: auto;
  border: 5px solid green;
  margin-right: 50px;  /* new */


* 
  box-sizing: border-box;


body 
  margin: 0;
<div class="main">
  <div class="sideNav">Side Nav</div>
  <div class="content">This is the content area</div>
  <div class="sidePanel">Side Panel</div>
</div>

【讨论】:

问题是面板展开/折叠,所以我不确定如何让宽度与动画相匹配。我担心我不能这样做。该死。 用MUI设置Collapse组件的onEnter和onExit方法是不是很傻?也许设置一个child div 延伸到 100vh,而父容器始终“可见”?这有意义吗?

以上是关于如何强制 div 位于视口的顶部/底部,同时不将其从文档流中取出?的主要内容,如果未能解决你的问题,请参考以下文章

如何防止 div 文本掉到容器底部?

在 CSS 中,如何不将 300px 宽的 Div 浮动到下一行?

CSS:将 div 高度设置为 100% - 像素

CSS:将 div 高度设置为 100% - 像素

CSS:将 div 高度设置为 100% - 像素

CSS:将 div 高度设置为 100% - 像素