gpt4 book ai didi

html - 具有滚动内容的垂直居中未知高度 div

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

我正在尝试制作一个类似灯箱的窗口,它有一个已知高度的标题栏和一个未知高度的内容区域。

我正在使用 a floating pseudoelement with vertical-align: middle使其垂直居中。这非常有效……当窗口的高度小于视口(viewport)的高度时。

(从 CSS 技巧中复制粘贴代码)

/* This parent can be any width and height */
.block {
text-align: center;
}

/* The ghost, nudged to maintain perfect centering */
.block:before {
content: '';
display: inline-block;
height: 100%;
vertical-align: middle;
margin-right: -0.25em; /* Adjusts for spacing */
}

/* The element to be centered, can
also be of any width and height */
.centered {
display: inline-block;
vertical-align: middle;
width: 300px;
}

我的问题是,当滚动内容变得比视口(viewport)高时,我不知道如何限制窗口高度并保持垂直居中。

如果窗口没有标题栏和内部内容区域,则可以通过对窗口元素应用 max-heightoverflow: auto 轻松实现。但是我想要一个标题栏,并且我希望滚动条只出现在窗口的内容区域中,如下图所示:

enter image description here

我可以在内容区域设置 overflow: auto,但是 max-height 设置百分比(我需要,因为我不能假设用户的视口(viewport)高度) 似乎被忽略了。

不使用 JS 可以实现这种布局吗?

Here's a demo to play with .窗口在视口(viewport)下方溢出,但如果您删除足够多的内容(使其比视口(viewport)短),它将垂直居中。

最佳答案

bg height:100%; 并给 window 你想要的百分比高度 Updated Demo

.bg {
position: fixed;
top: 0; bottom: 0; left: 0; right: 0;
background: rgba(0,0,0,0.5);
text-align: center;
height:100%; /* The important part you were missing */
}
.window {
vertical-align: middle;
display: inline-block;
position: relative;
height:75%; /* The height you desire */
}
.bg:before {
content: '';
height: 100%;
vertical-align: middle;
display: inline-block;
}
.titlebar {
height: 30px; /* arbitrary value but height is known and static */
position: absolute;
left: 0; right: 0;
}
.window .content {
margin-top: 30px; /* same abritrary value as titlebar height */
height:calc(100% - 60px); /* I would think that this would be 30px,
but in practice it needed 60px... */
overflow:auto;
}

附带说明一下,您应该在同一个位置包含演示中的所有 CSS,直到我注意到在演示的最底部添加了填充,我才对为什么我的方法不能正常工作感到困惑

编辑

显然你想做的事情在纯 CSS 中是不可能的,因为你必须给 window 一个 height 而不是 auto。所以,我添加了一行 javascript,它完全按照你的要求工作

document.getElementsByClassName('window')[0].style.height = 
document.getElementsByClassName('window')[0].offsetHeight + "px";

Updated Demo

关于html - 具有滚动内容的垂直居中未知高度 div,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13165525/

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