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