词缀插件根据滚动位置(和偏移量)为您的元素设置不同的类。在偏移量之前,此类将是 affix-top,在 affix-offset-top 和 affix-offset-bottom 之间,此类将是 affix。 affix-top 由 css 定义的位置将是静态的(默认,另见:http://www.w3schools.com/cssref/pr_class_position.asp),而 affix 类的位置设置为固定。
当一个元素有 position:absolute 时,它的宽度是它的父元素的最大宽度。因此,在您的情况下,您的面板获得 col-lg-3 的 100% 宽度(由于 box-sizing: border-box,请参阅 Why did Bootstrap 3 switch to box-sizing: border-box? )。此类的宽度将为 25% (3/12*100) 父级 .container div。 .container 的(最大)宽度取决于屏幕/视口的宽度。
带有 position:fixed 的词缀类没有父容器。所以这个元素的 100% 宽度将是视口的 100% 减去元素的左侧位置(可用空间的 100%)。
更改视口时,.container 的宽度在网格边界之间是固定的(请参阅:http://getbootstrap.com/css/#overview-container)。因此,您的词缀顶部的大小将在此边界之间固定。始终为 .container 的 25%。将 .affix 类也设置为 25%,它的大小会随流体变化。因为 25% 的视口(减去左侧)大多不等于 25% 的容器,您的附加元素将具有与 .affix 类不同的宽度。
由于上述原因,附加元素的宽度大多设置为固定的像素值。有关示例,请参阅http://getbootstrap.com/ 上的文档。
根据屏幕宽度(使其具有响应性)改变侧面板宽度的最佳方法是将宽度(以像素为单位)与媒体查询相结合。
例子:
/* Extra small devices (phones, up to 480px) */
/* No media query there is no affix */
/* Small devices (tablets, 768px and up) */
@media (min-width: 768px) { #side-panel { width: 152px; } }
/* Medium devices (desktops, 992px and up) */
@media (min-width: 992px) { #side-panel { width: 208px; } }
/* Large devices (large desktops, 1200px and up) */
@media (min-width: 1200px) { #side-panel { width: 270px; } }
请参阅:http://bootply.com/82661(请注意,我采用您的 Bootstrap 3.0.0 代码。)
使用 jQuery 设置宽度的替代方法:
这表明宽度取决于 .container,但更喜欢上面的 css 解决方案。
$(document).scroll(function(){
$('.panel.affix').width(((($('.container').width()+30)/4)-30));
})