我有一个显示表格的模态窗口。用户可以单击按钮向表单添加新行。随着每个新行的追加,整个模态窗口的高度应该会增加,直到距离视口底部50px
为止。
演示中的示例标记:
<div class="parent">
<h4>window title</h4>
<a href="#">add new row</a>
<section>
<h4>content</h4>
<p>some random content which never scrolls</p>
<ul><li></li></ul>
</section>
</div>
我基本上使用具有绝对定位的div来包含模态窗口。随着窗口的增长,它最终将达到这个高度,然后我可以overflow-y: scroll
内容。
麻烦的是,只有表单本身才能滚动。随着每个新行的添加,窗口应该在高度上增长,直到它到达其父母的位置。高度。此时,只有ul
内容应该滚动 - 而不是整个模态。
我意识到这可以通过javascript完成,但我希望找到一个纯css解决方案,以便在我们的应用程序中避免特定于DOM的逻辑,并且必须考虑视口调整大小事件等。
答案 0 :(得分:0)
如果您的父级内容的高度和ul之前的部分内容的高度是一致的,并且不会基于内容动态,您可以使用max-height:calc(100vh - valuePx)来允许ul到可滚动。我还包括一个保证金:0到你的ul css。
请参阅JSFiddle
$(function() {
var ul = $('ul');
$('a').on('click', function() {
ul.append('<li></li>');
return false;
});
})
.parent {
position: fixed;
bottom: 56px;
overflow-y: hidden;
top: 56px;
/* demo only */
border: 1px solid red;
left: 50%;
margin-left: -100px;
width: 200px;
}
section {
border: 1px solid blue;
min-height: 300px;
}
ul {
padding: 0;
max-height: calc(100vh - 341px);
overflow-y: auto;
margin: 0;
}
li {
background: #ccc;
height: 50px;
margin-top: 10px;
}
li {
list-style: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div class="parent">
<h4>window title</h4>
<a href="#">add new row</a>
<section>
<h4>content</h4>
<p>some random content which never scrolls. the list below should scroll when the section reaches the max height</p>
<ul>
<li></li>
</ul>
</section>
</div>