限制高度与页面底部的距离

Gnx*_*nxR 8 css css-position css3

我有一个带按钮的webapp.当我单击其中一个按钮*JavaScript magic*时,旁边会出现一个菜单.该脚本对定位或样式一无所知,它只是找到一个目标元素,然后将HTML写入其中.

简而言之,我有一个相对于其父级的菜单(#pretty-target在此示例中).

<div class="container">
    <button class="my-pretty-button">@</button>
    <div class="menu-target" id="pretty-target"></div>
</div>
Run Code Online (Sandbox Code Playgroud)

结果如下:

按钮旁边的浮动菜单

现在,当我减小页面高度时,我想限制此菜单的高度,具体取决于它与页面底部的距离.一个比理想的结果看起来像这样:

相同的菜单,但其高度神奇地限制

我知道最好的做法是拥有一个可滚动的页面主体,而不必担心这些元素的高度.但是,我的页面正文是一个地图,因此任何滚动它的尝试都只会移动地图.

我当然可以通过使用可滚动的叠加来制作一些替代的东西,或者更好的是,通过使用媒体查询来选择更好的方法来显示这些菜单.但是,它们不会以这种方式显示.

简单地说:我有一个与页面无关的div,我希望它受页面高度的限制.这怎么可行(不使用JS)?

bri*_*han 5

如果您以现代浏览器为目标,则可以使用calcvh实现您的目标。如果需要放置该按钮在屏幕的中间,只需减去从按钮的位置max-height.popup

.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;
}
Run Code Online (Sandbox Code Playgroud)
<div class="wrapper">
  <span class="button">Star</span>
  <div class="popup">
    <p>Option 1</p>
    <p>Option 2</p>
    <p>Option 3</p>
    <p>Option 4</p>
    <p>Option 5</p>
    <p>Option 6</p>
    <p>Option 7</p>
    <p>Option 8</p>
    <p>Option 9</p>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)


fre*_*ett 3

一种选择是使用视口单位。

像这样简单的事情应该有效:

.menu-target {
    max-height: calc(100vh - 100px); /* 100px to match whatever offsets you might need for headers etc */
    overflow-y: scroll;
}
Run Code Online (Sandbox Code Playgroud)

示例 jsfiddle。