l

o

a

d

i

n

g

.

.

.

[CSS] NowLoadingサンプル「FallCube」

2026/01/05

CSS NowLoading

t f B! P L
eyecatch 四角のCubeをアニメートさせるLoaderが後を断ちません。 また、新たなタイプを見つけたので、コード分析して、紹介したいと思います。

デモ

ソースコード : CSSのみバージョン

index.html

<meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <link rel="stylesheet" href="style.css"> <div id="site_loader_overlay"> <div id="site_loader_animation"></div> </div>

style.css

:root { --c0: transparent; --c1: rgba( 0, 119, 179, 1); --c2: rgba( 87, 189, 204, 1); --c3: rgba(242, 205, 123, 0); } #site_loader_overlay { display: flex; justify-content: center; } #site_loader_animation { width: 44px; height: 44px; position: relative; margin: 22px; } #site_loader_animation::before, #site_loader_animation::after { content:""; width:12px; height:12px; position:absolute; left:0; } #site_loader_animation::before { bottom:0; animation:loader 5.4s linear infinite; } #site_loader_animation::after { bottom:10px; background:var(--c2); opacity:0; animation:base 5.4s linear infinite; } @keyframes loader { 0%,5% { box-shadow: 16px -8px 0 var(--c0), 32px 0px 0 var(--c0), 0px -16px 0 var(--c0), 16px -16px 0 var(--c0), 32px -16px 0 var(--c0), 0px -32px 0 var(--c0), 16px -32px 0 var(--c0), 32px -32px 0 var(--c3); } 10% { box-shadow: 16px 0 var(--c1), 32px -8px var(--c0), 0 -16px var(--c0), 16px -16px var(--c0), 32px -16px var(--c0), 0 -32px var(--c0), 16px -32px var(--c0), 32px -32px var(--c3); } 15% { box-shadow: 16px 0 var(--c1), 32px 0 var(--c1), 0 -24px var(--c0), 16px -16px var(--c0), 32px -16px var(--c0), 0 -32px var(--c0), 16px -32px var(--c0), 32px -32px var(--c3); } 20% { box-shadow: 16px 0px var(--c1), 32px 0px var(--c1), 0px -16px var(--c1), 16px -24px var(--c0), 32px -16px var(--c0), 0px -32px var(--c0), 16px -32px var(--c0), 32px -32px var(--c3); } 25% { box-shadow: 16px 0 var(--c1), 32px 0 var(--c1), 0 -16px var(--c1), 16px -16px var(--c1), 32px -24px var(--c0), 0 -32px var(--c0), 16px -32px var(--c0), 32px -32px var(--c3); } 30% { box-shadow: 16px 0 var(--c1), 32px 0 var(--c1), 0 -16px var(--c1), 16px -16px var(--c1), 32px -16px var(--c1), 0 -50px var(--c0), 16px -32px var(--c0), 32px -32px var(--c3); } 35% { box-shadow: 16px 0 var(--c1), 32px 0 var(--c1), 0 -16px var(--c1), 16px -16px var(--c1), 32px -16px var(--c1), 0 -32px var(--c1), 16px -50px var(--c0), 32px -32px var(--c3); } 40% { box-shadow: 16px 0 var(--c1), 32px 0 var(--c1), 0 -16px var(--c1), 16px -16px var(--c1), 32px -16px var(--c1), 0 -32px var(--c1), 16px -32px var(--c1), 32px -50px var(--c3); } 45%,55% { box-shadow: 16px 0 var(--c1), 32px 0 var(--c1), 0 -16px var(--c1), 16px -16px var(--c1), 32px -16px var(--c1), 0 -32px var(--c1), 16px -32px var(--c1), 32px -32px var(--c2); } 60% { box-shadow: 16px 8px var(--c0), 32px 0 var(--c1), 0 -16px var(--c1), 16px -16px var(--c1), 32px -16px var(--c1), 0 -32px var(--c1), 16px -32px var(--c1), 32px -32px var(--c2); } 65% { box-shadow: 16px 8px var(--c0), 32px 8px var(--c0), 0 -16px var(--c1), 16px -16px var(--c1), 32px -16px var(--c1), 0 -32px var(--c1), 16px -32px var(--c1), 32px -32px var(--c2); } 70% { box-shadow: 16px 8px var(--c0), 32px 8px var(--c0), 0 -8px var(--c0), 16px -16px var(--c1), 32px -16px var(--c1), 0 -32px var(--c1), 16px -32px var(--c1), 32px -32px var(--c2); } 75% { box-shadow: 16px 8px var(--c0), 32px 8px var(--c0), 0 -8px var(--c0), 16px -8px var(--c0), 32px -16px var(--c1), 0 -32px var(--c1), 16px -32px var(--c1), 32px -32px var(--c2); } 80% { box-shadow: 16px 8px var(--c0), 32px 8px var(--c0), 0 -8px var(--c0), 16px -8px var(--c0), 32px -8px var(--c0), 0 -32px var(--c1), 16px -32px var(--c1), 32px -32px var(--c2); } 85% { box-shadow: 16px 8px var(--c0), 32px 8px var(--c0), 0 -8px var(--c0), 16px -8px var(--c0), 32px -8px var(--c0), 0 -24px var(--c0), 16px -32px var(--c1), 32px -32px var(--c2); } 90% { box-shadow: 16px 8px var(--c0), 32px 8px var(--c0), 0 -8px var(--c0), 16px -8px var(--c0), 32px -8px var(--c0), 0 -24px var(--c0), 16px -24px var(--c0), 32px -32px var(--c2); } 100% { box-shadow: 16px 8px var(--c0), 32px 8px var(--c0), 0 -8px var(--c0), 16px -8px var(--c0), 32px -8px var(--c0), 0 -24px var(--c0), 16px -24px var(--c0), 32px -24px var(--c0); } } @keyframes base { 0%,100% { bottom:10px; opacity:0; } 5%,50% { bottom:0; opacity:1; } 55% { bottom:-10px; opacity:0; } }

解説

cubeの数に対して、基礎HTMLが少ないことに気がついた人は、エンジニアレベルが比較的高いですね。 今回の3x3のcubeオブジェクトは、box-shadowで表現されています。 陰の効果をボカシなしで、元の四角形のoffset座標をずらすことで、複数のブロック(cube)を表示しているんですね。 このコードの難点は、cssでのbox-shadowのコードをいちいち書かないといけないので、クソ長くなってしまう事です。

あとがき

cssのproperty変数を使って、若干ですが、見た目をわかりやすくしてコーディングしてみましたが、やはり長い! Javascriptを使って効率化しても良いし、このコードは、元の四角を中心において、上下左右に配置する仕様ですが、 個人的には、左上の配置する仕様にした方が、エレメントの配置が楽になる(座標が設置しやすい)と思いました。 でも、色々なcubeパターンを作っていくうちに、なんだか法則性のようなものも見えてきた感じがして、そろそろゾーンに入りそうです。 面白いLoadingサイトを見つけたら、是非ご連絡ください。 このブログのライブラリに加えたいと思います。

このLoadngが使用されていたサイト

https://www.tankan-diy-land.com/30804 ※2025年12月時点(ページ改修していたらごめんなさい)

人気の投稿

このブログを検索

ごあいさつ

このWebサイトは、独自思考で我が道を行くユゲタの少し尖った思考のTechブログです。 毎日興味がどんどん切り替わるので、テーマはマルチになっています。 もしかしたらアイデアに困っている人の助けになるかもしれません。

ブログ アーカイブ