CSSだけでローディングアニメーション10パターン【コピペOK】
Webサイトでローディングアニメーションを表示したいとき、JavaScriptを使わなくてもCSSだけで結構いい感じのものが作れるんですよね。
今回はCSSだけで実装できるローディングアニメーションを10パターン作ってみました。全部コピペですぐ使えるようにしてあるので、気に入ったものがあればぜひ使ってみてください。
▶ サンプルページを見る(10パターンすべてをグリッド一覧で実際に確認できます)
目次
1. 回転スピナー(border + rotate)
一番定番のやつですね。borderの一辺だけ色を変えて、くるくる回すだけで作れます。シンプルだけど見栄えがいいので、よく使ってます。
<div class="spinner"></div>.spinner {
width: 48px;
height: 48px;
border: 5px solid #e0e0e0;
border-top-color: #3498db;
border-radius: 50%;
animation: spin 0.8s linear infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}2. ドット3つの点滅(animation-delay)
3つのドットが順番に点滅するパターンです。animation-delayをずらすだけで、それっぽい動きになるんですよね。チャットの「入力中…」みたいな表現にも使えますね。
<div class="dots">
<span class="dot"></span>
<span class="dot"></span>
<span class="dot"></span>
</div>.dots {
display: flex;
gap: 8px;
}
.dot {
width: 12px;
height: 12px;
background: #3498db;
border-radius: 50%;
animation: blink 1.4s infinite both;
}
.dot:nth-child(2) {
animation-delay: 0.2s;
}
.dot:nth-child(3) {
animation-delay: 0.4s;
}
@keyframes blink {
0%, 80%, 100% {
opacity: 0.3;
}
40% {
opacity: 1;
}
}3. バウンスするドット
ドットが上下に跳ねるアニメーションです。点滅よりも動きがあって楽しい感じになりますね。delayをずらして波のような動きにしてみました。
<div class="bounce-dots">
<span class="bounce-dot"></span>
<span class="bounce-dot"></span>
<span class="bounce-dot"></span>
</div>.bounce-dots {
display: flex;
gap: 8px;
align-items: flex-end;
height: 40px;
}
.bounce-dot {
width: 12px;
height: 12px;
background: #3498db;
border-radius: 50%;
animation: bounce 0.6s alternate infinite;
}
.bounce-dot:nth-child(2) {
animation-delay: 0.2s;
}
.bounce-dot:nth-child(3) {
animation-delay: 0.4s;
}
@keyframes bounce {
to {
transform: translateY(-20px);
}
}4. プログレスバー(横に伸びる)
横に伸びるプログレスバーです。ページ上部に置くと、読み込み中の雰囲気が出ますね。幅を0%から100%にアニメーションさせるだけなので、実装もかんたんです。
<div class="progress-bar">
<div class="progress-bar__fill"></div>
</div>.progress-bar {
width: 200px;
height: 6px;
background: #e0e0e0;
border-radius: 3px;
overflow: hidden;
}
.progress-bar__fill {
height: 100%;
background: #3498db;
border-radius: 3px;
animation: progress 1.5s ease-in-out infinite;
}
@keyframes progress {
0% {
width: 0%;
}
50% {
width: 100%;
}
100% {
width: 0%;
}
}5. パルスリング(広がる円)
中心から円がどんどん広がっていくアニメーションです。通知やアラートの注目させたい場所に使うと効果的ですね。scaleとopacityを組み合わせてみました。
<div class="pulse-ring"></div>.pulse-ring {
width: 48px;
height: 48px;
border: 3px solid #3498db;
border-radius: 50%;
animation: pulse 1.2s ease-out infinite;
}
@keyframes pulse {
0% {
transform: scale(0.5);
opacity: 1;
}
100% {
transform: scale(1.5);
opacity: 0;
}
}6. スケルトンスクリーン(shimmer)
最近よく見かけるスケルトンスクリーンです。コンテンツが読み込まれる前に、グレーの枠がキラキラ光る感じのやつですね。linear-gradientを横にスライドさせて作ってます。
<div class="skeleton"></div>.skeleton {
width: 300px;
height: 20px;
background: linear-gradient(
90deg,
#e0e0e0 25%,
#f0f0f0 50%,
#e0e0e0 75%
);
background-size: 200% 100%;
border-radius: 4px;
animation: shimmer 1.5s infinite;
}
@keyframes shimmer {
0% {
background-position: 200% 0;
}
100% {
background-position: -200% 0;
}
}7. 回転する四角形
四角形がくるくる回転するパターンです。スピナーの円形に飽きたときに使ってみるといいですね。rotateXとrotateYを組み合わせると、3D的な回転になります。
<div class="rotating-square"></div>.rotating-square {
width: 40px;
height: 40px;
background: #3498db;
animation: rotate-square 1.2s ease-in-out infinite;
}
@keyframes rotate-square {
0% {
transform: perspective(120px) rotateX(0deg) rotateY(0deg);
}
50% {
transform: perspective(120px) rotateX(-180deg) rotateY(0deg);
}
100% {
transform: perspective(120px) rotateX(-180deg) rotateY(-180deg);
}
}8. 波形バー(イコライザー風)
音楽プレイヤーのイコライザーみたいな動きをするバーです。5本のバーがそれぞれ違うタイミングで伸び縮みするので、見てて飽きないですね。
<div class="equalizer">
<span class="bar"></span>
<span class="bar"></span>
<span class="bar"></span>
<span class="bar"></span>
<span class="bar"></span>
</div>.equalizer {
display: flex;
gap: 4px;
align-items: flex-end;
height: 40px;
}
.bar {
width: 6px;
background: #3498db;
border-radius: 3px;
animation: wave 1s ease-in-out infinite;
}
.bar:nth-child(1) { animation-delay: 0s; }
.bar:nth-child(2) { animation-delay: 0.1s; }
.bar:nth-child(3) { animation-delay: 0.2s; }
.bar:nth-child(4) { animation-delay: 0.3s; }
.bar:nth-child(5) { animation-delay: 0.4s; }
@keyframes wave {
0%, 100% {
height: 10px;
}
50% {
height: 40px;
}
}9. テキスト「Loading…」のドット増減
「Loading」のあとにドットが1つずつ増えていくアニメーションです。CSSのcontent属性とstepsを使って実装してみました。地味だけど、実用的なパターンですね。
<div class="loading-text">Loading</div>.loading-text {
font-size: 18px;
font-weight: bold;
color: #333;
}
.loading-text::after {
content: "";
animation: loading-dots 1.5s steps(4, end) infinite;
}
@keyframes loading-dots {
0% {
content: "";
}
25% {
content: ".";
}
50% {
content: "..";
}
75% {
content: "...";
}
100% {
content: "";
}
}※ content属性のアニメーションは、一部のブラウザでは動かない場合があります。Chrome・Edgeなどのモダンブラウザでは動作確認済みです。
10. グラデーション回転スピナー
最後は、グラデーションを使ったおしゃれなスピナーです。conic-gradientで色のグラデーションを作って回転させてみました。普通のスピナーよりもちょっとリッチな印象になりますね。
<div class="gradient-spinner"></div>.gradient-spinner {
width: 48px;
height: 48px;
border-radius: 50%;
background: conic-gradient(
from 0deg,
transparent 0%,
#3498db 100%
);
mask: radial-gradient(
farthest-side,
transparent calc(100% - 5px),
#000 calc(100% - 5px)
);
-webkit-mask: radial-gradient(
farthest-side,
transparent calc(100% - 5px),
#000 calc(100% - 5px)
);
animation: spin 0.8s linear infinite;
}
@keyframes spin {
to {
transform: rotate(360deg);
}
}まとめ
CSSだけでもこれだけのバリエーションが作れるので、ちょっとしたローディング表示ならJavaScriptなしでも十分対応できますね。
個人的には、シンプルな場面では「1. 回転スピナー」か「2. ドット3つの点滅」、おしゃれにしたいときは「10. グラデーション回転スピナー」あたりをよく使ってます。
プロジェクトの雰囲気に合わせて、色やサイズを調整してみてください。
今回は以上です!