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; }
適切なメディアクエリ内。
GI