有几件事情:
1)既然你的100vh
固定高度的栏,你应该确保其.main-content
对应具有至少一个min-height
。这样,当您从DOM的正常流程中删除边栏时(当您添加position: fixed
时),您不会有怪异的行为。所以:
.main-content {
...
min-height: 100vh;
}
2)你正在使用浮动。总是,总是clear floats。这是因为添加:after
伪元件.content
简单:
.content:after {
content: '';
clear: both;
display: table;
}
这防止了浮动元素的父塌陷,允许你相对于亲本的尺寸/位置的儿童。你会需要这个步骤4
3)只是一个设置变化:移动.footer
的main
标签以外,所以不是这样的结构:
<main>
...
<aside>...</aside>
<div class="footer"></div>
</main>
你有这样的:
<main>
...
<aside>...</aside>
</main>
<footer>...</footer>
(我也使用HTML5 footer
标签并更改CSS选择器)。这使得下一步可能:
4)改变.footer-fix
的CSS:
.footer-fix {
position: absolute;
bottom: 0;
right: 0;
}
所以,当你准备解除固定侧边栏,你会绝对在其母公司的底部位置它。为了使这项工作,你还需要创建父堆叠环境(.content
):
.content {
...
position: relative; /* defines a new stacking context */
}
5)最后,你的JavaScript将是这样的:
var $wannaBeSticky = $('.sidebar'),
currentPosition = $wannaBeSticky.offset().top,
footerOffset = $('footer').offset().top;
$(window).scroll(function(event) {
var scrollTop = $(this).scrollTop();
if (scrollTop >= currentPosition) {
$wannaBeSticky.addClass('fix');
} else {
$wannaBeSticky.removeClass('fix');
}
if (scrollTop + $(this).height() >= footerOffset) {
$wannaBeSticky.removeClass('fix').addClass('footer-fix');
} else {
$wannaBeSticky.removeClass('footer-fix');
}
});
这是与之前的版本非常相似,我只是清理了代码并改进了添加/删除类的逻辑。
您可能还想要处理窗口大小调整并在页面加载时触发window
上的滚动。
这是一个工作CodePen。祝你好运。
谢谢Iam现在看看它,并从差异中学习。 –
嘿乔希我一直在努力修复一个错误,我发现过去几个小时我开始使用这个工具,我无法按照它的方式让它工作在Internet Explorer上。每当页脚出现时,整个侧栏消失。你可能会指出我正确的方向来解决这个问题吗? –