带有纯粹CSS的侧边栏边栏?

时间:2015-08-29 13:22:21

标签: jquery html css

很容易to create a simple sidebar with pure CSS

#page-wrap {
    position: relative;
    margin: 0 auto;
    max-width: 600px;
}

#content {
    margin-right: 200px;
}

#sidebar {
    width: 190px;
    position: fixed;
    right: 0;
    height: 100vh;
}

这个解决方案的问题是,如果窗口变大,#sidebar(红色)会粘到窗口并与#content(黄色)留下巨大的间隙:

enter image description here

我们如何解决这个问题,即当窗口宽度增长时,我们如何将这个差距添加到侧边栏的右侧而不是 left ?这是how we can solve this we JQuery

#sidebar {
    width: 190px;
    position: absolute;
    right: 0;
    height: 100vh;
}

function updateSidebar(sidebar) {
    sidebar.css('top', $(window).scrollTop());
    sidebar.css('height', $(window).height() -
        sidebar[0].getBoundingClientRect().top);
}

updateSidebar($('#sidebar'));
$(window).on('scroll', function() {
    updateSidebar($('#sidebar'))
});

是否有可能实现相同的JavaScript,即使用纯CSS?

2 个答案:

答案 0 :(得分:2)

我认为你正在寻找calc()

在您的示例中,由于#page-wrap#sidebar具有固定的宽度,您可以通过设置

使侧边栏粘贴到页面换行的右边框
left: calc(50% + 110px);

110px600px / 2 - 190px的结果。

[Updated fiddle]

答案 1 :(得分:1)

有一个简单的解释。 position:Fixed元素需要通过XY轴从屏幕定位,而不是从其相对父级定位。元素位于视口右侧的零像素处。

最佳解决方案是更改为absolute,但您可能不希望出现此行为。

也许您需要研究粘性定位元素:

http://www.sitepoint.com/css-position-sticky-introduction-polyfills/