【ITニュース解説】Untitled
2025年09月24日に「Dev.to」が公開したITニュース「Untitled」について初心者にもわかりやすく解説しています。
ITニュース概要
CodePenで公開されたWebページのデモだ。HTMLとCSSを使い、画面上のテキストが横に動くアニメーションを実装している。これはJavaScriptなしで動きを付けるCSSアニメーションの仕組みを学ぶ良い例だ。システムエンジニアがWebサイトの見た目を豊かにする表現技術を学ぶ入門として役立つ。
ITニュース解説
このWebコンテンツは、Webページ上でよく見かける、マウスカーソルを乗せると波紋のように広がるインタラクティブなボタンの裏側にある技術を具体的に示している。これはHTML、CSS、JavaScriptというWeb開発の基本的な三要素がどのように連携し、ユーザーの操作に応じて動的な視覚効果を生み出しているかの一例だ。システムエンジニアを目指す上で、ユーザーが直接触れる「フロントエンド」の技術理解は非常に重要であり、このデモはその良い出発点となる。
まず、Webページの構造を作る基本であるHTMLは、このボタンの土台を提供している。具体的には、<a>タグというアンカー要素が使われ、その中にボタンとして表示されるテキストが配置されている。HTMLの役割は、コンテンツの意味と構造を定義することであり、この段階ではまだ見た目や動きは一切指定されていない。
次に、このボタンの見た目や動きを決定するのがCSSだ。CSSは、ボタンの背景色、文字色、角の丸み、影などの基本的なデザイン要素を定義する。さらに、このデモの核となる「波紋」のエフェクトもCSSによって作られている。この波紋は、実はボタン要素自体ではなく、CSSの::before疑似要素という特殊なテクニックを使って、ボタンの上に仮想的に重ねられた別の要素として実装されている。
::before疑似要素は、HTMLに書かれていないが、CSSによって要素の内部の先頭に生成される仮想的な要素だ。この疑似要素を円形にし、最初はtransform: scale(0)で完全に縮小されて見えない状態にしている。そして、マウスがボタンに乗った時に、JavaScriptが特定のCSSプロパティの値を変更することで、この疑似要素がtransform: scale(1)まで拡大し、まるで水面に波紋が広がるような視覚効果を作り出す。この拡大の動きを滑らかにするために、transitionプロパティが使われており、指定した時間で自然なアニメーションを実現している。
ここで特に注目すべきは、CSSカスタムプロパティ、別名CSS変数と呼ばれるものの活用だ。このデモでは、波紋の開始位置となるX座標とY座標(--x、--y)、波紋の色(--color)などがCSSカスタムプロパティとして定義されている。これにより、スタイルシート内でこれらの値を一元的に管理できるだけでなく、JavaScriptから簡単にこれらの値を読み書きできるようになる。例えば、波紋の色を変更したい場合、CSSカスタムプロパティの値を変更するだけで、その色を使用している全ての箇所が更新される。これは、大規模なWebサイトでスタイルを管理する上で非常に強力な機能だ。
そして、この波紋エフェクトに「インタラクティブ性」を与えるのがJavaScriptの役割だ。JavaScriptは、ユーザーがWebページに対して行う様々な操作(イベント)を検知し、それに応じてプログラムを実行できる。このデモでは、主に二つのイベントを監視している。一つはmouseoverイベントで、マウスカーソルがボタンの領域に入った瞬間に発生する。もう一つはmouseoutイベントで、マウスカーソルがボタンの領域から出た瞬間に発生する。
mouseoverイベントが発生すると、JavaScriptはまず、現在マウスカーソルがボタン上のどこにあるかを正確に把握しようとする。これは、e.clientXやe.clientYといったプロパティからマウスカーソルの画面全体に対するX座標とY座標を取得し、さらにgetBoundingClientRect()メソッドを使ってボタン自体の画面に対する位置とサイズを取得することで可能になる。これらの情報を基に、JavaScriptはマウスカーソルがボタン要素の左上端からどれくらいの距離にあるかを計算し、その相対座標を波紋の開始点として設定する。
計算されたX座標とY座標は、element.style.setProperty()というJavaScriptのメソッドを使って、先ほどCSSで定義したCSSカスタムプロパティ--xと--yにそれぞれ適用される。この値が更新されると、CSSは自動的にその新しいX、Y座標を基に::before疑似要素の位置を決定し、波紋がマウスの位置から広がるように見えるのだ。さらに、JavaScriptは波紋の色を示す--colorというカスタムプロパティもランダムな値に設定し、ホバーするたびに異なる色の波紋が現れるようにしている。
mouseoutイベントでは、ボタンからマウスカーソルが離れた時に、JavaScriptは波紋に関するCSSカスタムプロパティをリセットしたり、ボタンのスタイルを元の状態に戻したりする処理を行う。これにより、波紋が消え、ボタンが通常の状態に戻る。
このように、HTMLがコンテンツの構造を提供し、CSSが見た目と動きのルールを定義し、JavaScriptがユーザーの操作に応じてそのルールを動的に変更するという役割分担によって、このインタラクティブなボタンは実現されている。システムエンジニアにとって、サーバーサイドやデータベースの知識ももちろん重要だが、ユーザーが直接利用するインターフェースを理解し、その裏側でどのような技術が使われているかを知ることは、より良いシステムを設計・開発するために不可欠なスキルとなる。このデモは、その第一歩として、Web技術の連携の面白さと奥深さを教えてくれる良い教材と言えるだろう。