バナーを一定エリアでフローティングする方法【CSSのみ】

バナーを一定エリアでフローティングする方法【CSSのみ】

 

バナーを一定エリアでフローティングする方法【CSSのみ】

 

jsでやろうとしたけど挫折

TOPから固定したい要素までの高さまできたら固定
またヘッダーがより下で固定したいのでヘッダーの高さを取得して
CSSの場所指定にも適応させる

//フローティング PC CSS  勝手に高さ合わせて固定

jQuery( function() {
var $offset = jQuery( '.floating' ).offset();//floatingまでの距離
var $head_height =$('header').height();//headerの高さ
var $sidebar_width =$('#sidebar').width();//sidebarの幅
var $floating_height =$('.floating').height();//floatingの高さ
var $contents_height =$('#contents').height();//contentsの高さ

jQuery( window ).scroll( function () {
if( jQuery( window ).scrollTop() > $offset.top -$head_height -10 ) {
//スクロール量>フローティングまでの距離-()
jQuery( '.floating' ).addClass( 'fixed' );
jQuery( '.floating' ).css( {'top':$head_height +10 , 'width':$sidebar_width} );
jQuery( '#sidebar' ).css( {'height':$contents_height-$floating_height} );
} else {
jQuery( '.floating' ).removeClass( 'fixed' );
}
} );

jQuery( window ).scroll( function () {
if( jQuery( window ).scrollTop() > $contents_height-$head_height -10 ) {
jQuery( '.floating' ).addClass( 'fixed_bottom' );
jQuery( '.floating' ).css( {'width':$sidebar_width} );
}else {
jQuery( '.floating' ).removeClass( 'fixed_bottom' );
}
} );
} );

要素の高さ/幅を設定/取得する
https://www.buildinsider.net/web/jqueryref/009

[jQuery]でcssプロパティを動的に追加、変更、削除する
https://qiita.com/kazTera/items/ab5dd9fb5b2579b25c4d

 

position: stickyを使う

#sidebar .floating {
position: -webkit-sticky;
position: sticky;
top: 150px;
left: 0;
}

position: stickyが効かない場合

・フローティングしたい範囲の高さを指定していない場合、フローティングしてくれない。

・サイドバーの場合、高さはコンテンツの高さに合わせて、jsなどで出力する。

jQuery( function() {
var $contents_height =$('#contents').height();//contentsの高さ
jQuery( '#sidebar' ).css( {'height':$contents_height} );//sidebarをcontentsの高さにする
} );

・理由は全くわからないが、親要素に overflow: hidden; などがかかっている場合、フローティングしてくれない。