CSSを使ってグローエフェクトボタンを作成する方法
公開日
2024年12月22日
更新日
2025年1月6日
7
分で読める
CSS3HTML5JavaScript
この記事では、HTMLとCSSを使用して、グローエフェクトを持つボタンを作成する方法を紹介します。マウスをボタンの上に移動すると、光の輪がマウスの動きに追従してダイナミックに変化し、流れる光のようなビジュアル効果を生み出します。
成果物
実装手順
- HTML構造
まず、シンプルなHTMLページを作成します。ページには3つのボタンを配置し、それぞれ
<a>タグを使用して作成します。また、style属性を使って異なる色を設定します:
<a href="#" style="--color: #0f0"><span>BUTTON</span></a>
<a href="#" style="--color: #ff0"><span>BUTTON</span></a>
<a href="#" style="--color: #f0f"><span>BUTTON</span></a>
ここで使用されている--colorは、CSSカスタムプロパティで、ボタンのメインカラーを動的に設定するために使用しています。
- CSSスタイル グローエフェクトの主な部分は以下のCSSで実現しています:
/* グローバルスタイル */
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: Arial, sans-serif;
}
/* レイアウトスタイル */
body {
display: flex;
flex-direction: column;
justify-content: center;
align-items: center;
gap: 50px;
height: 100vh;
background-color: #222;
}
/* ボタンの基本スタイル */
a {
position: relative;
padding: 20px 60px;
background-color: rgba(45, 45, 45, 1);
border-radius: 50px;
text-decoration: none;
color: #999;
font-size: 1.5rem;
transition: 0.5s;
overflow: hidden;
}
グローエフェクトのコア部分:
::before疑似要素: 動的な放射状グラデーションの光を生成。
a::before {
content: '';
position: absolute;
top: var(--y, 0px);
left: var(--x, 0px);
transform: translate(-50%, -50%);
width: 200px;
height: 200px;
background: radial-gradient(var(--color), transparent, transparent);
opacity: 0;
transition: 0.5s;
}
a:hover::before {
opacity: 1;
}
::after疑似要素: ボタン内部に半透明の背景を追加し、光の対比を強調。
a::after {
content: '';
background-color: rgba(45, 45, 45, 0.8);
position: absolute;
inset: 2px;
border-radius: 48px;
}
- JavaScriptで光の動きを実現
マウスの移動イベントを監視し、
--xと--yの値を動的に更新します:
const buttons = document.querySelectorAll('a');
buttons.forEach(button => {
button.addEventListener('mousemove', e => {
const x = e.clientX - e.target.offsetLeft;
const y = e.clientY - e.target.offsetTop;
e.target.style.setProperty('--x', `${x}px`);
e.target.style.setProperty('--y`, `${y}px`);
});
});
まとめ
簡単なHTML、CSS、少しのJavaScriptを使用するだけで、動的な光効果を持つボタンを作成できます。このエフェクトは、美しいだけでなく、ユーザー体験を向上させることができ、ウェブサイトに非常に適しています。ぜひ試してみてください!