接辞プラグインは、スクロール位置 (およびオフセット) に基づいて要素に異なるクラスを設定します。オフセットの前では、このクラスは になります。affix-top
接辞オフセット トップと接辞オフセット ボトムの間では、このクラスは になりますaffix
。クラスの位置が固定に設定されている間、css で定義された位置affix-top
は静的です (デフォルト、http ://www.w3schools.com/cssref/pr_class_position.asp も参照)。affix
要素に position:absolute がある場合、その幅はその親の最大幅です。したがって、あなたの場合、パネルは col-lg-3 の 100% 幅になります (box-sizing: border-box のため、Bootstrap 3 が 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));
})