CSSだけで作る液体ガラスのボタン|CSSとSVGフィルターでつくる幻想的なUIデザイン

ビジュアル

CSSだけで作る液体ガラスのボタン|CSSとSVGフィルターでつくる幻想的なUIデザイン

投稿日2026/01/14

更新日2026/1/15

Webデザインのトレンドである「グラスモーフィズム(Glassmorphism)」をさらに進化させたのが、今回紹介する「Liquid Glass Effect(液体ガラス効果)」です。

単に背景をぼかすだけでなく、ガラス越しに見える景色が水や溶けたガラスのように「ゆがむ」表現を加えることで、UIに圧倒的な質感と高級感を与えます。

Preview プレビュー

Code コード

<div class="background-wrapper">
	<div class="crystal-btn">
		<span class="text">GLASS</span>
	</div>
	<svg xmlns="http://www.w3.org/2000/svg">
		<filter id="distorsion">
			<feturbulence type="fractalNoise" basefrequency="0.015 0.015" numoctaves="3" result="noise">
			</feturbulence>
			<fedisplacementmap in="SourceGraphic" in2="noise" scale="40">
			</fedisplacementmap>
		</filter>
	</svg>
</div>
/* 全体のレイアウト設定:画面の真ん中に16:9の箱を置く */
body, html {
	margin: 0;
	padding: 0;
	width: 100%;
	height: 100%;
	background-color: #000;
	display: flex;
	justify-content: center;
	align-items: center;
	overflow: hidden;
}

/* 1920x1080の比率を持つ背景コンテナ */
.background-wrapper {
	position: relative;
	width: 100%;
	max-width: 1920px;
	aspect-ratio: 1920 / 1080;
	overflow: hidden;
	/* 動いてはみ出た背景を隠す */

	/* 背景画像の設定:上下に動くために110%に拡大 */
	background-image: url('https://kumonosu.net/wp-content/uploads/2026/01/260115.jpg.webp');
	background-size: 110%;
	background-position: center center;

	/* 背景を上下にゆっくり動かすアニメーション */
	animation: bgFloatVertical 20s ease-in-out infinite alternate;

	/* 中のボタンを中央に配置 */
	display: flex;
	justify-content: center;
	align-items: center;
	box-shadow: 0 20px 50px rgba(0, 0, 0, 0.5);
}

/* 背景が上下に動くキーフレーム */
@keyframes bgFloatVertical {
	0% {
		background-position: center 40%;
	}

	100% {
		background-position: center 60%;
	}
}

/* ガラスボタンのデザイン:ご提示のコードをベースに調整 */
.crystal-btn {
	width: 280px;
	height: 120px;
	border-radius: 50px;
	border: 1px solid rgba(255, 255, 255, 0.4);
	display: flex;
	align-items: center;
	justify-content: center;
	background: transparent;

	/* 液体ガラス効果:ご提示のコードを維持 */
	backdrop-filter: url(#distorsion);
	-webkit-backdrop-filter: url(#distorsion);

	/* transition時間を少し調整してより滑らかに */
	transition: all 0.6s cubic-bezier(0.165, 0.84, 0.44, 1);
	position: relative;
	overflow: hidden;
	cursor: pointer;
	z-index: 10;
}

/* ホバー時の動き:大きくしてガラス感を強調 */
.crystal-btn:hover {
	transform: scale(1.3);
	/* 以前より大きくして歪みを見えやすく */
	border: 1px solid rgba(255, 255, 255, 0.8);
	box-shadow: 0 0 30px rgba(255, 255, 255, 0.15);
}

/* テキストのデザイン */
.text {
	color: rgba(255, 255, 255, 0.9);
	font-family: 'Arial Black', sans-serif;
	font-size: 42px;
	letter-spacing: 6px;
	text-transform: uppercase;
	user-select: none;
	transition: letter-spacing 0.6s ease;
}

.crystal-btn:hover .text {
	letter-spacing: 10px;
	/* ホバー時に文字も少し広がる演出 */
}

/* SVGフィルター(透明化して配置) */
svg {
	position: absolute;
	width: 0;
	height: 0;
	pointer-events: none;
}

Explanation 詳しい説明

このエフェクトは、主に3つの技術的な組み合わせによって成り立っています。

1. backdrop-filter による背面へのエフェクト適用

通常の filter プロパティがその要素自体を加工するのに対し、backdrop-filterは「その要素の背後にある領域」にエフェクトを適用します。画像内のコードにあるbackdrop-filter: url(#distorsion);は、ボタンの背後に広がる画像だけを、指定したSVGの形状に合わせて加工するという命令です。

2. SVGフィルター(feTurbulence と feDisplacementMap)

このエフェクトの「液体感」を作っているのは、CSSではなく実はHTML内に記述されたSVGフィルターです。

  • feTurbulence: 数学的なノイズ(雲のような模様)を生成します。これが「ゆがみ」の設計図になります。
  • feDisplacementMap: 生成されたノイズをもとに、実際の画像のピクセルをどの方向にどれくらいずらすかを決定します。これにより、ただのぼかしではない、有機的な歪みが生まれます。

3. 1920×1080 (16:9) のアスペクト比固定

高画質な背景画像を扱う場合、ブラウザのサイズが変わっても意図した構図を維持することが重要です。CSSの aspect-ratio: 1920 / 1080; を使用することで、どのような画面サイズでも常にフルHDの比率を保ち、中央に美しくボタンを配置するレイアウトを実現しています。

4. ガラスの質感を高める境界線(Border)

透明なボタンを認識させるためには、境界線の設定が不可欠です。画像内のコードでもborder: 1px solid rgba(255, 255, 255, 0.4); と設定されている通り、ごく薄い白の半透明ラインを引くことで、光の反射(ハイライト)を表現し、背景から浮き上がらせる効果を生んでいます。