HTML / CSS / JS
アニメーション
2026/06/29
2026/6/28
雲からカラフルな雫がぽたぽたと落ちていく――そんなかわいらしいアニメーションを、CSSだけで作ったデモです。
雲の形はborder-radiusと::before疑似要素の組み合わせ、雫の形は透明なborderと丸い底部の組み合わせで再現しています。
ピンク・イエロー・グリーンの3つの雫がそれぞれ異なるタイミングで落下し、フェードアウトして消えていきます。
JavaScriptは一切使っておらず、HTMLとCSSだけで完結するため、ローディング画面やデコレーション要素として手軽に組み込めます。
<div class="kumonosu-backdrop">
<div class="kumonosu-container">
<div class="kumonosu-cloud">
<div class="kumonosu-drop kumonosu-drop-1">
<div class="kumonosu-top"></div>
<div class="kumonosu-bot"></div>
</div>
<div class="kumonosu-drop kumonosu-drop-2">
<div class="kumonosu-top"></div>
<div class="kumonosu-bot"></div>
</div>
<div class="kumonosu-drop kumonosu-drop-3">
<div class="kumonosu-top"></div>
<div class="kumonosu-bot"></div>
</div>
</div>
</div>
</div>
* {
box-sizing: border-box;
}
html, body {
margin: 0;
padding: 0;
width: 100%;
height: 100%;
background: #ffffff;
display: flex;
justify-content: center;
align-items: center;
overflow: hidden;
}
.kumonosu-backdrop {
width: 100%;
height: 100dvh;
display: flex;
justify-content: center;
align-items: center;
position: relative;
}
.kumonosu-container {
position: relative;
display: flex;
justify-content: center;
align-items: center;
transform: scale(clamp(0.4, 1vw + 0.5, 1.2));
width: 500px;
height: 400px;
}
.kumonosu-cloud {
position: relative;
width: 320px;
height: 100px;
background: #e0e0e0;
border-radius: 100px;
z-index: 10;
}
.kumonosu-cloud::before {
content: "";
position: absolute;
top: -50px;
left: 40px;
width: 110px;
height: 110px;
border-radius: 50%;
background: #e0e0e0;
box-shadow: 90px -10px 0 30px #e0e0e0;
}
.kumonosu-drop {
position: absolute;
top: 100px;
animation: kumonosu-drip 1.5s linear infinite;
z-index: 1;
}
.kumonosu-top {
height: 0px;
width: 0px;
border: 10px solid transparent;
transform: rotate(-10deg) translateX(-4px);
}
.kumonosu-bot {
position: relative;
height: 19px;
width: 19px;
top: -9px;
border-radius: 50%;
}
.kumonosu-drop-1 {
left: 80px;
animation-delay: 600ms;
}
.kumonosu-drop-1 .kumonosu-top {
border-bottom: 28px solid #FF6B6B;
}
.kumonosu-drop-1 .kumonosu-bot {
background: #FF6B6B;
}
.kumonosu-drop-2 {
left: 170px;
animation-delay: 0s;
}
.kumonosu-drop-2 .kumonosu-top {
border-bottom: 28px solid #FFD93D;
}
.kumonosu-drop-2 .kumonosu-bot {
background: #FFD93D;
}
.kumonosu-drop-3 {
left: 260px;
animation-delay: 1s;
}
.kumonosu-drop-3 .kumonosu-top {
border-bottom: 28px solid #6BCB77;
}
.kumonosu-drop-3 .kumonosu-bot {
background: #6BCB77;
}
@keyframes kumonosu-drip {
0% {
transform: translate(0px, 0px);
opacity: 1;
}
50% {
opacity: 1;
}
100% {
transform: translate(40px, 200px);
opacity: 0;
}
}
@media (max-width: 400px) {
.kumonosu-container {
transform: scale(0.6);
}
}
このアニメーションは、HTMLとCSSのみで構成されており、JavaScriptは一切使用していません。
主な構成は以下のとおりです。
border-radius: 100px)をベースに、::before疑似要素で2つの円形(border-radius: 50%+box-shadow)を重ねて雲のシルエットを作っています。色はグレー(#e0e0e0)で統一されています。border: 10px solid transparent+border-bottomに色指定)で逆三角形を作り、下部は丸いdiv(border-radius: 50%)を重ねることで、雫の形を再現しています。#FF6B6B)、イエロー(#FFD93D)、グリーン(#6BCB77)の3色がそれぞれ異なる位置から落下します。@keyframesで1.5秒間かけて斜め下方向に移動しながらフェードアウトします。animation-delayで各雫の開始タイミングをずらし(0ms・600ms・1000ms)、自然なリズムを作っています。animation: ... infiniteで無限に繰り返されます。.kumonosu-drop-*クラスのborder-bottomとbackgroundの色を変更すれば、自由な配色にできます。.kumonosu-drop要素を追加し、対応するCSSクラス(位置・色・ディレイ)を定義すれば、雫の数を増やせます。@keyframes kumonosu-dripのアニメーション時間(デフォルト1.5s)を変更すると、落下の速さが変わります。@keyframes内のtransform: translate(40px, 170px)のX値を0にすると真下に落ち、値を変えると斜めの角度が変わります。animation-delayを変更すると、落下のリズムを調整できます。.kumonosu-cloudと::before疑似要素のbackgroundおよびbox-shadowの色を変更すると、雲の色を変えられます。.kumonosu-cloudのwidth・heightと::beforeの寸法を比例的に変更すると、雲の大きさを調整できます。bodyのbackgroundを変更すれば、全体の雰囲気を変えられます。暗い背景にすると雫の色がより映えます。.kumonosu-backdropと.kumonosu-containerにピクセル固定のサイズが設定されています。小さい画面ではコンテナがはみ出す可能性があるため、レスポンシブ対応が必要な場合はサイズをvwや%で指定するか、max-widthを設定してください。divの組み合わせによる近似的な雫形状のため、拡大すると接合部にわずかな隙間が見える場合があります。transform: rotate(-10deg)とtranslateX(-4px)で微調整していますが、サイズを大幅に変更する場合はこれらの値も調整が必要です。prefers-reduced-motionメディアクエリでアニメーションを停止する対応を加えると、モーションが苦手なユーザーにも配慮できます。