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 ( 90 deg, 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 2 s 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