最近のWebサイトやアプリ(YouTube、Facebook、Twitterなど)を使っていると、画面が読み込まれる前に「グレーの骨組み(プレースホルダー)」がふわふわと表示されるのを見たことがありませんか?
あのUIパターンのことを「スケルトンスクリーン(Skeleton Screen)」と呼びます。従来の「ぐるぐる回るスピナーアイコン(ローディングインジケーター)」に代わる、モダンなUX改善手法として広く定着しています。
なぜスピナーよりスケルトンスクリーンが良いのか?
従来のスピナーは「今、頑張って読み込んでいます!」というシステム側の都合をユーザーに伝えるだけのものです。スピナーを見つめているユーザーは、「あとどれくらいで終わるのか?」「次に何が表示されるのか?」が分からず、体感の待ち時間が長く感じてしまいます。
一方、スケルトンスクリーンのメリットは以下の通りです。
- 次に何が表示されるか予測できる:画像がここに出る、テキストがここに出る、というレイアウトの枠組みを先に見せることで、ユーザーの脳が情報の受け入れ準備を整えることができます。
- 体感時間が短くなる:スピナーのように「止まっている」印象を与えず、徐々に画面が完成していく「進行感」があるため、心理的な待ち時間が短く感じられます。
- レイアウトシフトの防止:あらかじめコンテンツが入る場所の高さを確保しておくことで、後から画像やテキストが読み込まれた時に画面がガクッと動いてしまう(CLS:Cumulative Layout Shiftの悪化)のを防ぐことができます。
CSSでの実装は意外と簡単!
スケルトンスクリーンの実装は、複雑なJavaScriptを必要としません。基本的には、要素の背景色をグレーにし、CSSアニメーションで光が左から右へ流れるような効果(Shimmer effect)をつけるだけで完成します。
.skeleton-box {
background-color: #e2e5e7;
/* Shimmerアニメーション用のグラデーション */
background-image: linear-gradient(
90deg,
rgba(255, 255, 255, 0),
rgba(255, 255, 255, 0.5),
rgba(255, 255, 255, 0)
);
background-size: 40px 100%;
background-repeat: no-repeat;
background-position: left -40px top 0;
animation: shimmer 1s ease infinite;
}
@keyframes shimmer {
to {
background-position: right -40px top 0;
}
}