在制作导航时,希望左边的导航和右侧的内容区域可以联动显示,例如:左侧导航点到某个标题后,右侧的内容区域自动将此标题置顶
像Word中的导航窗口:
点击导航中的“文章2”时,右侧的内容区,自动将“文章2”内容滚动到置顶位置进行显示。
但是再点击“文章3”“文章4”时,右侧的内容区域就无法将其内容,滚动到置顶位置了。
滚动条展示原理图:
从上图可知:
可视区域高度/内容高度 = 滚动条长度/滚动条总长;
可滚动距离=内容高度-可视区域高度;
而 从图又可知:滚动条总长 = 可视区域高度。
假设内容高度=200,可视区域长度 =100,,当有个【目标元素】距离顶部125,当我们想让其滚动到顶部时,就会出现如下情况:
可滚动距离=200-100,而目标元素在125的位置,所以【目标元素】也就无法滚动到顶端。
而想要实现滚动到顶部,就要使其 目标滚动距离<可滚动距离
显而易见,最简单的方法就是补充【内容区域】的高度。而需要补充的长度=目标距离-可滚动距离。
在实际处理中,我们可以借助一个“补充高度的元素”,利用calc动态计算高度,然后通过设置min-height 来实现相关的滚动
min-height:calc(100% - 底部元素高度);
一个简单的示例:
这里footer就是用来补充高度的
<html lang="en">
<head>
<style>
div {
height: 200px;
border: 1px solid;
}
#c{
height:150px;
}
.container {
height: 300px;
overflow: scroll;
}
.footer{
/* 这里的150px是 div C的高度
100%是父级元素的高度
*/
min-height: calc(100% - 150px);
}
</style>
</head>
<body>
<a href="#a">文章A</a>
<a href="#b">文章B</a>
<a href="#c">文章C</a>
<div class="container">
<div id="a">
<h2>文章A</h2>
</div>
<div id="b">
<h2>文章B</h2>
</div>
<div id="c">
<h2>文章C</h2>
</div>
<footer class="footer"></footer>
</div>
</body>
</html>