ThomasReggi 的 data-smart-affix 在某些极端情况下(在调整文档大小或附加列太高时)对我不起作用。但它给了我一个简单的想法:在附加内容之前添加一个空元素,并使用它来获取偏移量。调整大小时效果很好。
当我这样做时,我还将元素的宽度设置为原始父级中的自然宽度。这是我的解决方案:
$('[data-affix-after]').each( function() {
var elem = $(this);
var parent_panel = elem.parent();
var prev = $( elem.data('affix-after') );
if( prev.length != 1 ) {
/* Create a new element immediately before. */
prev = elem.before( '<div></div>' ).prev();
}
var resizeFn = function() {
/* Set the width to it's natural width in the parent. */
var sideBarNavWidth = parent_panel.width()
- parseInt(elem.css('paddingLeft'))
- parseInt(elem.css('paddingRight'))
- parseInt(elem.css('marginLeft'))
- parseInt(elem.css('marginRight'))
- parseInt(elem.css('borderLeftWidth'))
- parseInt(elem.css('borderRightWidth'));
elem.css('width', sideBarNavWidth);
elem.affix({
offset: {
top: prev.offset().top + prev.outerHeight(true),
bottom: $('body>footer').outerHeight(true)
}
});
};
resizeFn();
$(window).resize(resizeFn);
});
随之而来的 HTML 是:
<div id='before-affix'></div><!-- leave this empty -->
<div data-affix-after='#before-affix'>
Put content to affix here.
</div>
或者
<div data-affix-after='#create'><!-- any ID that doesn't exist -->
Put content to affix here.
</div>
所需的 CSS 是:
.affix { top: 0px },
.affix-bottom { position: absolute; }
如果要禁用词缀(例如,当右列堆叠时),请使用 CSS:
.affix, .affix-bottom { position: static; }
在适当的媒体查询中。
胃肠道