CSS+JavaScriptでローディング時にスケルトンスクリーン

Ads

Result


ユーザーに優しいとウワサのローディング時のスケルトンスクリーンを殆どCSS、ほんの少しのJavaScriptで実装する、というもの。

JavaScriptは表示の切り替えの為にclassを削除するためだけに使っていますので表示そのものはCSSで管理されています。

Ads

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