javascript - 完全居中时无法滚动到顶部

标签 javascript html css

我目前正在尝试制作一个完全居中的弹出菜单,但由于某种原因我似乎无法一直滚动到顶部。我认为 transform 只是视觉效果,所以 #content 实际上仍处于 top: 50%。有没有办法让 div 完全以 window 为中心,同时能够看到 #content 中的所有内容?

var toggle = false;
var p = document.getElementById("popup");

document.getElementById("show").onclick = function(event) {
  p.style.display = "initial";
  document.body.style.overflow = "hidden";
};

document.getElementById("hide").onclick = function(event) {
  p.style.display = "none";
  document.body.style.overflow = "auto";
  
};
html, body {
  margin 0;
  padding 0;
  width: 100%;
  height: 100%;
}

#popup {
  position: fixed;
  right: 0;
  left: 0;
  top: 0;
  bottom: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.4);
  display: none;
  overflow-y: scroll;
}

#content {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
}
<div id="popup">
  <div id="content">
    <button id="hide">Hide</button>
    <h1>Cant See</h1>
    <p>Cant SeeCant SeeCant SeeCant SeeCant SeeCant SeeCant See</p>
    <h1>Test</h1>
    <p>test test test test test test</p>
    <h1>Test</h1>
    <p>test test test test test test</p>
    <h1>Test</h1>
    <p>test test test test test test</p>
    <h1>Test</h1>
    <p>test test test test test test</p>
    <h1>Test</h1>
    <p>test test test test test test</p>
    <h1>Test</h1>
    <p>test test test test test test</p>
    <h1>Test</h1>
    <p>test test test test test test</p>
    <p>test test test test test test</p>
    <h1>Test</h1>
    <p>test test test test test test</p>
    <p>test test test test test test</p>
    <h1>Test</h1>
    <p>test test test test test test</p>
  </div>
</div>
<div>
  <button id="show">Show</button>
  <h1>Hello World!</h1>
  <p>Hello Hello Hello Hello Hello Hello</p>
  <h1>Hello World!</h1>
  <p>Hello Hello Hello Hello Hello Hello</p>
  <h1>Hello World!</h1>
  <p>Hello Hello Hello Hello Hello Hello</p>
  <h1>Hello World!</h1>
  <p>Hello Hello Hello Hello Hello Hello</p>
  <h1>Hello World!</h1>
  <p>Hello Hello Hello Hello Hello Hello</p>
  <h1>Hello World!</h1>
  <p>Hello Hello Hello Hello Hello Hello</p>
  <h1>Hello World!</h1>
  <p>Hello Hello Hello Hello Hello Hello</p>
  <h1>Hello World!</h1>
  <p>Hello Hello Hello Hello Hello Hello</p>
  <h1>Hello World!</h1>
  <p>Hello Hello Hello Hello Hello Hello</p>
 
</div>

最佳答案

除了使用 position: absolute 居中 #content 你可以将 display: flex 应用到父元素 (#popup) 并使用 margin: auto

例子

var toggle = false;
var p = document.getElementById("popup");

document.getElementById("show").onclick = function(event) {
  p.style.display = "flex";
  document.body.style.overflow = "hidden";
};

document.getElementById("hide").onclick = function(event) {
  p.style.display = "none";
  document.body.style.overflow = "auto";

};
html,
body {
  margin 0;
  padding 0;
  width: 100%;
  height: 100%;
}

#popup {
  position: fixed;
  right: 0;
  left: 0;
  top: 0;
  bottom: 0;
  width: 100%;
  height: 100%;
  background-color: rgba(0, 0, 0, 0.4);
  display: none;
  overflow-y: scroll;
}

#content {
  margin: auto;
}
<div id="popup">
  <div id="content">
    <button id="hide">Hide</button>
    <h1>Cant See</h1>
    <p>Cant SeeCant SeeCant SeeCant SeeCant SeeCant SeeCant See</p>
    <h1>Test</h1>
    <p>test test test test test test</p>
    <h1>Test</h1>
    <p>test test test test test test</p>
    <h1>Test</h1>
    <p>test test test test test test</p>
    <h1>Test</h1>
    <p>test test test test test test</p>
    <h1>Test</h1>
    <p>test test test test test test</p>
    <h1>Test</h1>
    <p>test test test test test test</p>
    <h1>Test</h1>
    <p>test test test test test test</p>
    <p>test test test test test test</p>
    <h1>Test</h1>
    <p>test test test test test test</p>
    <p>test test test test test test</p>
    <h1>Test</h1>
    <p>test test test test test test</p>
  </div>
</div>
<div>
  <button id="show">Show</button>
  <h1>Hello World!</h1>
  <p>Hello Hello Hello Hello Hello Hello</p>
  <h1>Hello World!</h1>
  <p>Hello Hello Hello Hello Hello Hello</p>
  <h1>Hello World!</h1>
  <p>Hello Hello Hello Hello Hello Hello</p>
  <h1>Hello World!</h1>
  <p>Hello Hello Hello Hello Hello Hello</p>
  <h1>Hello World!</h1>
  <p>Hello Hello Hello Hello Hello Hello</p>
  <h1>Hello World!</h1>
  <p>Hello Hello Hello Hello Hello Hello</p>
  <h1>Hello World!</h1>
  <p>Hello Hello Hello Hello Hello Hello</p>
  <h1>Hello World!</h1>
  <p>Hello Hello Hello Hello Hello Hello</p>
  <h1>Hello World!</h1>
  <p>Hello Hello Hello Hello Hello Hello</p>

</div>

关于javascript - 完全居中时无法滚动到顶部,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49183997/

相关文章:

javascript - Xbox One 浏览器的 Web 开发指南

html - 在 CSS 中创建/对齐列而不使用表格

JavaScript/jQuery 和 "top-level"函数

javascript - jquery ui Accordion 单击一次展开但第二次单击不折叠

html - 有没有办法在 :nth-child(n)? 中使用 "n"值

javascript - 将 var 传递给 bootstrap 模式,其中 php 将使用该值

html - 2 个输入被斜线分开

javascript - 实现 http ://thecoloradan. com/like 导航栏的大纲。我不是在问如何实现这个。

javascript - 阻止 JSON.stringify 添加转义字符

javascript - 如何设置jqGrid单元格编辑事件?