我有一个带有按钮的webapp。当我单击其中一个按钮* JavaScript magic *时,旁边会出现一个菜单。该脚本对定位或样式一无所知,它只是找到一个目标元素,然后将HTML写入其中。
简而言之,我有一个相对于其父级的菜单(在此示例中为#pretty-target
)。
<div class="container">
<button class="my-pretty-button">@</button>
<div class="menu-target" id="pretty-target"></div>
</div>
结果如下:
现在,当我减小页面高度时,我想限制此菜单的高度,具体取决于它与页面底部的距离。一个比理想的结果看起来像这样:
我知道最好的做法是拥有一个可滚动的页面主体,而不必担心这些元素的高度。但是,我的页面正文是一个地图,因此任何滚动它的尝试都只会移动地图。
我当然可以通过使用可滚动的叠加来制作一些替代的东西,或者更好的是,通过使用媒体查询来选择更好的方法来显示这些菜单。但是,他们不会以这种方式展示。
简单地说:我有一个与页面无关的div,我希望它受页面高度的限制。这怎么可行(不使用JS)?
答案 0 :(得分:3)
如果您定位现代浏览器,可以使用calc
和vh
来实现目标。
如果您需要将按钮放在屏幕中间,只需从max-height
的{{1}}中减去按钮的位置。
.popup
&#13;
.wrapper {
position: absolute;
top: 80px; /*the position of your floating button*/
right: 50px;
}
.button {
display: block;
width: 50px;
padding: 10px;
float: right;
box-sizing: border-box;
text-align: center;
border: 1px solid red;
}
.popup {
position: absolute;
max-height: calc(100vh - 50px - 80px); /*modify the value to fit your needs, 80px is the position of your floating button*/
overflow-y: scroll;
width: 100px;
padding: 10px;
right: 55px;
top: 0;
border: 1px solid blue;
}
&#13;
答案 1 :(得分:1)
一种选择是使用viewport units.
像这样简单的东西应该有效:
.menu-target {
max-height: calc(100vh - 100px); /* 100px to match whatever offsets you might need for headers etc */
overflow-y: scroll;
}