Result
ユーザーに優しいとウワサのローディング時のスケルトンスクリーンを殆どCSS、ほんの少しのJavaScriptで実装する、というもの。
JavaScriptは表示の切り替えの為にclassを削除するためだけに使っていますので表示そのものはCSSで管理されています。
css
.skeleton { position: relative; width: max-content; overflow: hidden; border-radius: 4px; background-color: #1e2226 !important; color: transparent !important; border-color: #1e2226 !important; user-select: none; cursor: default; } .skeleton::after { position: absolute; top: 0; right: 0; bottom: 0; left: 0; transform: translateX(-100%); background-image: linear-gradient( 90deg, rgba(255, 255, 255, 0) 0, rgba(255, 255, 255, 0.2) 20%, rgba(255, 255, 255, 0.5) 60%, rgba(255, 255, 255, 0) ); animation: shimmer 2s infinite; content: ""; } @keyframes shimmer { 100% { transform: translateX(100%); } }
JavaScript
const skeletons = document.querySelectorAll(".skeleton"); skeletons.forEach((skeleton) => { setTimeout(() => { skeleton.classList.remove("skeleton"); }, 4000); });
サンプル用に用意された便宜上のものです。実装時は適したコードに変更してください。
html
<div class="profile-container"> <div class="profile-images"> <div class="cover-img skeleton"> <img src="https://picsum.photos/800/400"> </div> <div class="profile-img skeleton"> <img src="https://picsum.photos/100/100" alt="Photo by Ian Dooley on Unsplash"> </div> </div> <div class="profile-text"> <h1 class="skeleton">hogehoge</h1> <p class="skeleton">hugahuga foo bar piyopiyo</p> <h5 class="skeleton">Tokyo, Osaka, Fukuoka<a class="skeleton" href="#">お問い合わせ</a></h5> <p class="skeleton"><a class="skeleton" href="#">534 コメント</a></p> </div> <div class="profile-cta"> <a class="message-btn skeleton" href="#">DMを送る</a> <a class="more-btn skeleton" href="#">プロフィール</a> </div> </div>
スケルトンスクリーンにしたい場所にskeleton
というclassを付与。
via
How to Create a Skeleton Screen Loading Effect in HTML, CSS, and JavaScript