2018年9月12日
デザイン
CSSだけでスクロール時に画面領域をぴたっと固定(スナップ)することができる, scroll snap
はじめに
今日はCSSだけでスクロール時に画面領域をぴたっと固定(スナップ)することができる,scroll snapをご紹介します。
scroll snap(スクロールスナップ)とはスクロールした時に、特定の画面領域でぴったりスクロールが止まる動きのことを言います。
▼デモ(横にスクロールしてください)▼
See the Pen スクロールスナップ by Ayaka Sasaki (@ayausaspirit) on CodePen.
ブラウザサポートがだんだんとされてきていて、注目を集めているプロパティなので、今回はどういうものなのか、その文法、そしてブラウザの対応状況を簡単にご紹介します。
Scroll Snapの文法
今回のデモは非常にシンプルですが、こちらです。
See the Pen スクロールスナップ by Ayaka Sasaki (@ayausaspirit) on CodePen.
まずは、このようにScroll Snap(スクロールスナップ)の動きを再現するために必要なコアなプロパティを2つご紹介します。
スクロールスナップを作るためには下記2つのプロパティが必要になります。
scroll-snap-type
scroll-snap-align
scroll-snap-type
はスクロールスナップの動きを実装したい要素の親要素にかけます。
scroll-snap-align
はscroll-snap-type
の中の子要素にかけます。
つまりこのようなイメージです。
<div class='container'>
<section class='page'></section>
<section class='page'></section>
<section class='page'></section>
</div>
.container {
scroll-snap-type: y mandatory;
}
.page {
scroll-snap-align: start;
}
scroll-snap-type
scroll-snap-type
にはmandatory
とproximity
の二つの値があります。
mandatory
の値はどんなスクロールが起きても、ページにコンテンツが追加、削除、リサイズなどがされても、snapするようにできています。
proximity
の値はもう少しゆるい動きをします。ユーザーがスクロールした時にsnap付近の場合は、snapしてくれますが、どんなときでもsnapしてくれるというわけではないようです。
▼先ほどの例を使い、proximityとmandatoryを比べてみる▼
See the Pen スクロールスナップ1 by Ayaka Sasaki (@ayausaspirit) on CodePen.
x方向とy方向で動きを変えたい場合は、scroll-snap-type-x
scroll-snap-type-y
と書くことでそれぞれ分けられることができます。
scroll-snap-align
一方、子要素の方にかける scroll-snap-align
では中の要素のどの部分に対してsnapするべきなのかをしてすることができます。
scroll-snap-align
が持てる値は start
, center
, end
の3つです。
start
では、要素の一番上、もしくは左にsnapします。
center
では、要素の真ん中にsnapします。
end
では、要素の一番下、もしくは右にsnapします。
基本的に、使う場合はstart
を使うことが多いでしょう。
ブラウザ対応
なかなか便利そうな Scroll Snapですが、現状のブラウザ対応の状況はこんな感じになっています。
最初に導入された2016年からは格段にブラウザサポート状況もよくはなっていますが、まだまだ使うのにはリスクがあるのでご注意ください。
また、使用される際はScroll Snap用のpolyfillがあるので、こちらも合わせてお使いいただくことをお勧めします。
まとめ
以上、CSSだけでスクロール時に画面領域をぴたっと固定(スナップ)することができる,scroll snapをご紹介しました。
こちらがどんどんサポートされていけば、今後JavaScriptを全く使わず、スクロールスナップが実現できるようになるので、楽しみですね。
CSSのお仕事に関するご相談
Bageleeの運営会社、palanではCSSに関するお仕事のご相談を無料で承っております。
zoomなどのオンラインミーティング、お電話、貴社への訪問、いずれも可能です。
ぜひお気軽にご相談ください。
この記事は
参考になりましたか?
6
1
関連記事
2021年12月5日
【CSS】CSSだけでアコーディオンを作る方法
2021年11月29日
Tailwind CSSの概要と導入のメリット
2021年6月7日
FLOCSSとBEMを理解する
2020年12月24日
【CSS】:not否定擬似クラスの使い方とできること
2020年12月21日
デザイン制作・コーディングツール「Hadron」を使ってみた
2018年12月9日
【CSS】3D transformsでコロッとなるエフェクトを作る
簡単に自分で作れるWebAR
「palanAR」はオンラインで簡単に作れるWebAR作成ツールです。WebARとはアプリを使用せずに、Webサイト上でARを体験できる新しい技術です。
palanARへpalanでは一緒に働く仲間を募集しています
正社員や業務委託、アルバイトやインターンなど雇用形態にこだわらず、
ベテランの方から業界未経験の方まで様々なかたのお力をお借りしたいと考えております。
運営メンバー
Eishi Saito 総務
SIerやスタートアップ、フリーランスを経て2016年11月にpalan(旧eishis)を設立。 マーケター・ディレクター・エンジニアなど何でも屋。 COBOLからReactまで色んなことやります。
sasakki デザイナー
アメリカの大学を卒業後、日本、シンガポールでデザイナーとして活動。
やまかわたかし デザイナー
フロントエンドデザイナー。デザインからHTML / CSS、JSの実装を担当しています。最近はReactやReact Nativeをよく触っています。
Sayaka Osanai デザイナー
Sketchだいすきプロダクトデザイナー。シンプルだけどちょっとかわいいデザインが得意。 好きな食べものは生ハムとお寿司とカレーです。
はらた エンジニア
サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています
こぼり ともろう エンジニア
サーバーサイドエンジニア。SIerを経て2019年7月に入社。日々学習しながらRuby on Railsを使った開発を行っています。
ささい エンジニア
フロントエンドエンジニア WebGLとReactが強みと言えるように頑張ってます。
Damien
WebAR/VRの企画・開発をやっています。森に住んでいます。
ゲスト bagelee
かっきー
まりな
suzuki
miyagi
ogawa
雑食デザイナー。UI/UXデザインやコーディング、時々フロントエンドやってます。最近はARも。
いわもと
デザイナーをしています。 好きな食べ物はラーメンです。
taishi kobari
フロントエンドの開発を主に担当してます。Blitz.js好きです。
kubota shogo
サーバーサイドエンジニア。Ruby on Railsを使った開発を行いつつ月500kmほど走っています!
nishi tomoya
aihara
グラフィックデザイナーから、フロントエンドエンジニアになりました。最近はWebAR/VRの開発や、Blender、Unityを触っています。モノづくりとワンコが好きです。
nagao
SIerを経てアプリのエンジニアに。xR業界に興味があり、unityを使って開発をしたりしています。
Kainuma
サーバーサイドエンジニア Ruby on Railsを使った開発を行なっています
sugimoto
asama
ando
iwasawa ayane
oshimo
異業界からやってきたデザイナー。 palanARのUIをメインに担当してます。 これからたくさん吸収していきます!