如何使div可滚动,而不对其高度进行硬编码?通常当你想让div可滚动时,你需要设置max-height,否则它将会扩展。
#element {
overflow:auto;
max-height: 100px;
}
在我的情况下,我希望高度受父母身高限制(父亲可以调整大小),而不是在CSS中设置。
这是JSFiddle: http://jsfiddle.net/mbrnwsk/58qSc/1/
答案 0 :(得分:2)
答案 1 :(得分:2)
为了让#content
拉伸以填充父级中的剩余空间减去#title
元素的高度,您可以使用CSS或JS来完成。 CSS解决方案很简单,但您必须调整top
的偏移量以确保其正确匹配。通过将其他三个偏移(左,底和右)设置为零,我们可以强制#content
元素完全伸展。
#parent {
border: 3px solid;
height: 150px;
position: relative;
}
#content {
overflow-y: auto;
overflow-x: hidden;
background: cyan;
top: 16px; /* This is based on the assumption that #title has a height of 16px */
right: 0;
bottom: 0;
left: 0;
position: absolute;
}
http://jsfiddle.net/teddyrised/58qSc/3/
对于响应更快的解决方案,您需要依赖JS来获取#title
的高度,然后相应地设置top
的{{1}}属性 - 这样做的好处是当视口大小发生变化时它也会很好地响应,当#content
的高度发生变化时也是如此。
对于CSS,它与上面相同,但我们删除了#title
声明。相反,我们将此委托给JS:
top
http://jsfiddle.net/teddyrised/58qSc/4/
基于JS的解决方案的优势在于:
$(function() {
$("#parent").resizable();
// Function to set height
var setContentHeight = function() {
$('#content').css('top', $('#title').outerHeight());
}
// Recalculate when viewport changes
// You can also bind this function to events that manipulate the dimension of #title
$(window).resize(setContentHeight);
// Run once when DOM is ready
setContentHeight();
});
功能绑定到您可以预见会更改top
维度的任何事件来重新计算setContentHeight()
。#title
的行高或任何值时,您不必手动更新top
值它的孩子(如果他们存在)