【ITニュース解説】Untitled
2025年09月22日に「Dev.to」が公開したITニュース「Untitled」について初心者にもわかりやすく解説しています。
ITニュース概要
ある開発者が作成したウェブ技術のデモコード(Pen)が公開された。システムエンジニアを目指す初心者は、このPenで公開されている実際のコードやその動作を参考に、Webプログラミングの学習を進めることができる。
ITニュース解説
今回取り上げているニュース記事は、Webサイト上でよく見かける「ローディングアニメーション」の具体的な実装方法を、HTMLとCSSのみを使って紹介している。システムエンジニアを目指す上で、Webサイトがどのように構成され、どのように動的な要素が表現されるかを理解することは非常に重要だ。この解説では、基本的なHTMLとCSSの概念から、アニメーションの仕組み、そしてそれがユーザー体験にどう貢献するかまでを詳しく見ていく。
まず、Webサイトは大きく分けて「構造(骨組み)」と「見た目(装飾)」の二つの要素で成り立っている。構造を定義するのがHTML(HyperText Markup Language)であり、見た目を定義するのがCSS(Cascading Style Sheets)である。今回のローディングアニメーションも、この二つの言語を組み合わせることで実現されている。
HTMLの部分を見てみよう。コードは非常にシンプルで、divという要素が二つ使われている。divは「division(分割)」の略で、Webページ内でコンテンツをグループ化するための汎用的なコンテナ要素だ。あたかも箱の中に別の箱を入れるように、要素を入れ子にできる。今回のデモでは、外側のdivにloader-containerというクラス名が、内側のdivにはloaderというクラス名が付与されている。クラス名は、CSSで特定の要素にスタイルを適用するための目印として使われる。loader-containerはローディングアニメーション全体を包む外側の箱、loaderは実際に回転するアニメーションの本体を表している。
次に、CSSがこれらのHTML要素にどのようにスタイルを適用し、アニメーションを生み出しているかを見ていく。
まず、bodyセレクタを使ってWebページ全体のスタイルが設定されている。margin: 0でページの余白をなくし、display: flex; justify-content: center; align-items: center;という指定で、子要素であるローディングアニメーションをページの水平方向と垂直方向の中央に配置している。min-height: 100vhは、ページ全体の高さをブラウザの表示領域の高さと同じにすることを意味し、background-color: #f0f0f0で背景色を淡いグレーに設定している。また、overflow: hiddenは、コンテンツがはみ出した場合にスクロールバーが表示されないようにする指定だ。
次に、.loader-containerクラスに対するスタイルを見てみよう。width: 100pxとheight: 100pxでこの箱の大きさを指定している。position: relativeは、この要素を基準として、その中に配置される子要素(今回の場合は.loader)を特定の場所に配置する際の基準となることを意味する。これは、複雑なレイアウトを構築する際によく使われる重要なCSSプロパティだ。
そして、アニメーションの本体である.loaderクラスのスタイルが最も重要だ。width: 100%とheight: 100%は、親要素である.loader-containerの幅と高さの100%、つまり同じサイズになることを意味する。border: 10px solid #cccは、要素の周りに太さ10ピクセル、実線、灰色(#ccc)の境界線を表示する。ここからがポイントで、border-top-color: #3498dbという指定によって、上側の境界線だけが青色(#3498db)になる。これにより、円形になったときに一部だけ色が付いた視覚的な特徴が生まれる。最後にborder-radius: 50%が指定されており、これにより要素の角が完全に丸められ、正方形のdiv要素が完璧な円形になる。この一連のCSSプロパティによって、私たちがよく目にする、一部が青く、他が灰色の円形のローディングアイコンが形作られるのだ。
この静的な円形の要素を動的なアニメーションにするのが、CSSのanimationプロパティと@keyframesルールだ。
@keyframes spinという部分がアニメーションの動きを定義している。0% { transform: rotate(0deg); }は、アニメーションの開始時(0%の時点)では要素を0度回転させた状態、つまり初期状態であることを示す。そして100% { transform: rotate(360deg); }は、アニメーションの終了時(100%の時点)では要素を360度(一回転)回転させた状態であることを示す。transform: rotate()は、要素を特定の角度だけ回転させるCSSプロパティである。
このspinという名前で定義されたアニメーションを、.loader要素に適用するのがanimationプロパティだ。animation: spin 1s linear infinite;という指定には、いくつかの意味が含まれている。
spin: 適用するアニメーションの名前(@keyframes spinで定義したもの)。1s: アニメーションが完了するまでにかかる時間(1秒)。linear: アニメーションの進行速度の指定。linearは最初から最後まで一定の速度でアニメーションが進行することを意味する。他にもゆっくり開始して速く終わる、あるいはその逆など、様々な速度指定が可能だ。infinite: アニメーションを無限に繰り返すことを指定する。これにより、ローディングアニメーションが絶え間なく続く。
今回のデモではJavaScriptは使われていない。JavaScriptはWebサイトに複雑な動的な機能やユーザーとのインタラクションを追加するために使われるプログラミング言語だが、シンプルな視覚的なアニメーションであれば、CSSの強力な機能だけでも十分に実現できることをこのデモは示している。CSSアニメーションは、JavaScriptを使ったアニメーションに比べてパフォーマンスが良い場合も多く、リソースの節約にもつながる。
では、なぜこのようなローディングアニメーションが必要なのだろうか。Webサイトやアプリケーションは、データの読み込みや複雑な処理に時間がかかることがある。この間に画面がフリーズしたままだと、ユーザーは「ページが壊れた」「何も動いていない」と感じてしまい、サイトから離脱してしまう可能性が高まる。ローディングアニメーションは、ユーザーに「今、処理が行われている最中だ」という情報を視覚的に伝え、待機中のストレスを軽減し、サイトの応答性を感じさせることで、ユーザー体験(UX: User Experience)を向上させる重要な役割を果たす。
このように、HTMLとCSSという基本的な技術だけでも、ユーザーに快適な体験を提供する魅力的なWebコンテンツを構築できる。システムエンジニアを目指す皆さんも、まずはこのような基本的なWeb技術をしっかりと理解し、実際に手を動かして様々な表現に挑戦することが、その後のスキルアップの大きな土台となるだろう。