サイト制作に関するメモ書き

HOME > HTML・CSS > position:stickyを使ってみる

position:stickyを使ってみる

スクロールに合わせて要素を固定できるposition: sticky を試してみました。

対応ブラウザ

対応ブラウザですが、IEでは対応していないようです。
またSafariではベンダープレフィックスが必要になります。
 

サンプルコード

例として、サイト内のローカルナビをスクロールに合わせて上部固定するサンプルを試してみます。

<header>ヘッダー</header>
<main>
	<div class="main">メインコンテンツ</div>
	<ul class="local-nav">
		<li><a href="#contents-a">コンテンツA</a></li>
		<li><a href="#contents-b">コンテンツB</a></li>
		<li><a href="#contents-c">コンテンツC</a></li>
	</ul>
	<section id="contents-a">
		<h2>コンテンツA</h2>
		<p>テキストテキストテキスト</p>
	</section>
	<section id="contents-b">
		<h2>コンテンツB</h2>
		<p>テキストテキストテキスト</p>
	</section>
	<section id="contents-c">
		<h2>コンテンツC</h2>
		<p>テキストテキストテキスト</p>
	</section>
</main>
<footer>フッター</footer>

.local-navをスクロールに合わせて固定する想定です。
次にCSSです。(関連部分のみの抜粋になります。)

.local-nav {
	position: -webkit-sticky;
	position: sticky;
	top: 0;
}

Safari用にベンダープレフィックスもつけています。
これで試してみると、意図した動作になりました。
position: stickyのデモページ

先ほどの例ではtop:0 としましたが、bottom:0 とすることで下部固定もできます。
先ほどの例を少し変更して、シェアボタンを下部に固定するサンプルを試してみます。

<header>ヘッダー</header>
<main>
	<div class="main">メインコンテンツ</div>
	<section id="contents-a">
		<h2>コンテンツA</h2>
		<p>テキストテキストテキスト</p>
	</section>
	<section id="contents-b">
		<h2>コンテンツB</h2>
		<p>テキストテキストテキスト</p>
	</section>
	<section id="contents-c">
		<h2>コンテンツC</h2>
		<p>テキストテキストテキスト</p>
	</section>
	<div class="share-btns">
		<a href="">シェアボタンA</a>
		<a href="">シェアボタンB</a>
		<a href="">シェアボタンC</a>
	</div>
</main>
<footer>フッター</footer>

.share-btnsを下部に固定する想定です。
CSSはtopをbottomに変更したのみです。

.share-btns {
	position: -webkit-sticky;
	position: sticky;
	bottom: 0;
}

これで該当部分にスクロールされるまでシェアボタンが下部に固定されるようになりました。
position: stickyのデモページ2
 

IEの対応

position: stickyはIEで対応していませんが、Polyfillを利用することで一部機能を対応することができます。
今回はStickyfillを使ってみます。

上記サイトからファイルをダウンロードして、先ほどのローカルナビの例に読み込みませます。

<script src="stickyfill.min.js"></script>

position: stickyを指定している.local-navに対してPolyfillの設定を行います。

var elements = document.querySelectorAll('.local-nav');
Stickyfill.add(elements);

これでIEでも固定配置を実装することができました。
position: stickyのIE対応のデモページ1
 

IE9以降で動作するようですが、top以外(bottom,left,right)には対応していないようなので注意が必要です。
実際に先ほどのシェアボタンの例で試してみましたが、IEでは固定配置にできませんでした。
position: stickyのIE対応できない場合のデモページ
 

【参考サイト】

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

▲PAGE TOP