【ITニュース解説】Untitled
2025年09月22日に「Dev.to」が公開したITニュース「Untitled」について初心者にもわかりやすく解説しています。
ITニュース概要
開発者がCodePenで公開している「数字当てゲーム」のPenを紹介する。JavaScript、HTML、CSSを用いて作成されており、Webフロントエンドの基本的な実装例として、システムエンジニアを目指す初心者がコードを学ぶのに適している。
ITニュース解説
このCodePenで公開されているデモは、ウェブページでデータが読み込まれている最中などに表示される「ローディングアニメーション」の実装例である。ウェブサイトやアプリケーションを開発する上で、ユーザーが何か処理を待っている間に視覚的なフィードバックを与えることは、ユーザー体験を向上させるために非常に重要である。このデモは、主にHTMLとCSSという二つの基本的なウェブ技術を使って、このようなアニメーションをどのように作り出すかを示している。
まず、ウェブページの構造を作るHTML(HyperText Markup Language)の役割から見ていく。HTMLは、ウェブページ上の文字、画像、動画などのコンテンツがどのような意味を持ち、どのような配置関係にあるかを定義する言語である。このデモのHTMLコードは非常にシンプルで、主要な要素としてdivタグとpタグ、そしてspanタグが使われている。具体的には、画面全体の中央に表示される灰色の四角いボックスを作るために<div class="main">という要素があり、その中にアニメーションとテキストを保持する<div class="text">という要素が配置されている。さらにそのtext要素の内部には、ローディングアニメーションの回転する円形部分を作るための<span></span>という空の要素と、「Loading ...」というテキストを表示するための<p>Loading ...</p>という要素が存在する。HTMLの役割は、これらの要素が画面上のどこに存在し、どのような親子関係にあるか、すなわちコンテンツの骨組みを定義することにある。
次に、このデモの見た目と動きを決定しているCSS(Cascading Style Sheets)について解説する。CSSは、HTMLで定義された要素に対して、色、サイズ、配置、フォント、そしてアニメーションといった装飾やスタイルを適用するための言語である。このデモのほとんどの工夫はCSSによって実現されている。
まず、body要素に対するスタイル設定では、ウェブページ全体の背景色を濃い灰色にし、画面いっぱいに広がるように幅と高さを設定している。overflow: hiddenは、画面外にはみ出すコンテンツが表示されないようにする設定である。さらに、display: flex; justify-content: center; align-items: center;という記述により、body要素の直下にあるコンテンツ(この場合は.main要素)を水平方向と垂直方向の両方で画面の中央に配置している。display: flexは、子要素の配置を柔軟にコントロールするための強力な機能である。
次に、.mainクラスが適用されたdiv要素は、ローディングアニメーション全体を囲む灰色の四角いボックスである。width: 450px; height: 250px;でそのサイズを固定し、background-color: #364156;で背景色を設定している。border-radius: 10px;は、ボックスの角を少し丸くする効果を持つ。ここでもdisplay: flexとjustify-content, align-itemsを使って、子要素である.textをこのボックスの中央に配置している。
.textクラスが適用されたdiv要素は、ローディングアイコンとテキストをまとめるためのコンテナである。position: relative;という設定は、この要素を基準として、その子要素であるspanやpをposition: absolute;で配置する際に必要となる。width: 100px; height: 100px;でサイズを指定し、ここでもdisplay: flexを使って子要素を中央寄せにしている。
ローディングアニメーションの回転する円形部分を担うspan要素は、多くのCSSテクニックが詰まっている。position: absolute;により、親要素である.textの左上を基準に配置される。width: 100%; height: 100%;は親要素のtextと同じサイズに広がることを意味する。border-radius: 50%;とすることで、正方形のspan要素を完全な円形に変形させている。この円形に、border-top, border-left, border-rightプロパティを使って赤い線を表示し、border-bottomは透明にすることで、まるで四分の一円や半円のような見た目を作り出している。transform: rotate(45deg);は、このspan要素を初期状態で45度傾けることで、アニメーションの開始時の見た目を調整している。そして、animation: loading 1.5s linear infinite;が、この要素を実際に回転させるアニメーションの指示である。
このanimationプロパティが参照している@keyframes loadingルールは、アニメーションの具体的な動きを定義している。@keyframesは、アニメーションの特定の時点(0%は開始時、100%は終了時)における要素のスタイルを指定する。loadingという名前のアニメーションでは、0%の時点でtransform: rotate(0deg);、つまり回転なしの状態から始まり、100%の時点でtransform: rotate(360deg);、つまり一回転する状態になるように指定されている。このアニメーションは1.5s(1.5秒)かけて実行され、linear(一定の速度で)、infinite(無限に繰り返す)と設定されているため、ローディングアイコンが滑らかに繰り返し回転する様子が表現される。
最後に、「Loading ...」というテキストを表示するp要素に対するスタイルである。color: #eff3f6;で文字色を白っぽい色に設定し、font-sizeとfont-familyで文字の見た目を調整している。このp要素にもanimation: blink 1.5s linear infinite;というアニメーションが適用されている。@keyframes blinkでは、0%と100%の時点でopacity: 1;(完全に不透明)にし、50%の時点でopacity: 0;(完全に透明)にすることで、テキストが点滅する効果を作り出している。これも1.5sかけて実行され、linearでinfiniteに繰り返される。
このデモではJavaScript(JS)のコードは記述されていない。JavaScriptはウェブページにインタラクティブな動きや動的な機能を追加するためのプログラミング言語であるが、今回のような純粋な視覚的アニメーションであれば、CSSの強力なアニメーション機能だけで十分実現可能であることを示している。CSSアニメーションは、パフォーマンスの面でJavaScriptを使ったアニメーションよりも有利な場合もあり、シンプルなアニメーションには適している。
システムエンジニアを目指す初心者にとって、このデモはHTMLでウェブページの構造を作り、CSSでその見た目をデザインし、さらにアニメーションを加えるという、ウェブフロントエンド開発の基本的な流れと技術要素を理解するのに非常に良い例となる。特に、display: flexを使ったレイアウト、positionプロパティを使った要素の配置、border-radiusとborderを使った図形の表現、そして@keyframesとanimationプロパティを使った複雑なアニメーションの作成方法は、今日のウェブ開発において頻繁に使われる重要なスキルである。これらの基本的な技術を組み合わせることで、ユーザーが心地よく使えるインターフェースを作り出すことができることを、このシンプルなローディングアニメーションは教えてくれる。