波形イラスト装飾フッター
上辺をなめらかな波で区切り、ゆったり揺れるSVGの波を重ねた装飾的なフッター。やわらかい世界観のブランドや子ども向け・自然派サービスで、親しみのある締めくくりになります。
ライブデモ
使用例(お題: カフェ MOON BREW)
この技法を「カフェ MOON BREW」というテーマのダミーサイトで実際に使った例です。
HTML
<!-- MOON BREW:やわらかな波形装飾のカフェフッター -->
<footer class="fwv">
<div class="fwv-waves" aria-hidden="true">
<svg class="fwv-svg" viewBox="0 0 1200 90" preserveAspectRatio="none">
<defs>
<path id="fwvWave" d="M0,40 C150,80 350,0 600,40 C850,80 1050,0 1200,40 L1200,90 L0,90 Z" />
</defs>
<use href="#fwvWave" class="fwv-w1" />
<use href="#fwvWave" class="fwv-w2" />
<use href="#fwvWave" class="fwv-w3" />
</svg>
</div>
<div class="fwv-body">
<div class="fwv-inner">
<a class="fwv-logo" href="#" onclick="return false">☕ MOON BREW</a>
<p class="fwv-tag">夜にひらく、珈琲店。</p>
<nav class="fwv-nav">
<a href="#" onclick="return false">メニュー</a>
<a href="#" onclick="return false">豆を買う</a>
<a href="#" onclick="return false">店舗</a>
<a href="#" onclick="return false">物語</a>
</nav>
<div class="fwv-sns">
<a href="#" onclick="return false" aria-label="Instagram">◐</a>
<a href="#" onclick="return false" aria-label="X">𝕏</a>
<a href="#" onclick="return false" aria-label="note">✎</a>
</div>
<span class="fwv-copy">© 2026 MOON BREW</span>
</div>
</div>
</footer>
CSS
/* MOON BREW(カフェ):波形イラスト装飾フッターの再スキン */
* { box-sizing: border-box; }
body { margin: 0; font-family: "Segoe UI", system-ui, -apple-system, sans-serif; }
.fwv { width: 100%; min-height: 380px; display: flex; flex-direction: column; background: #f7f1e7; }
.fwv-waves { position: relative; height: 90px; line-height: 0; }
.fwv-svg { width: 100%; height: 90px; }
.fwv-svg use { transform-origin: center; }
.fwv-w1 { fill: rgba(192, 142, 86, .4); animation: fwv-move 9s ease-in-out infinite; }
.fwv-w2 { fill: rgba(176, 122, 63, .7); animation: fwv-move 7s ease-in-out infinite reverse; }
.fwv-w3 { fill: #5a3a1c; animation: fwv-move 11s ease-in-out infinite; }
@keyframes fwv-move { 0%,100% { transform: translateX(0) translateY(0); } 50% { transform: translateX(-40px) translateY(4px); } }
.fwv-body { flex: 1; background: #5a3a1c; color: #f3e8d8; display: grid; place-content: center; text-align: center; padding: 10px 24px 30px; }
.fwv-inner { max-width: 520px; }
.fwv-logo { font-size: 24px; font-weight: 800; color: #fff; text-decoration: none; }
.fwv-tag { margin: 8px 0 18px; font-size: 13px; color: #d9c4a3; font-family: "Hiragino Mincho ProN", serif; }
.fwv-nav { display: flex; justify-content: center; gap: 18px; flex-wrap: wrap; }
.fwv-nav a { color: #f3e8d8; text-decoration: none; font-size: 13.5px; font-weight: 600; padding: 4px 0; border-bottom: 1px solid transparent; transition: border-color .2s ease; }
.fwv-nav a:hover { border-color: #e0c79a; }
.fwv-sns { display: flex; justify-content: center; gap: 16px; margin: 18px 0 14px; }
.fwv-sns a { width: 34px; height: 34px; display: grid; place-items: center; border-radius: 50%; background: rgba(255,255,255,.14); color: #fff; text-decoration: none; font-size: 14px; transition: background .2s ease, transform .15s ease; }
.fwv-sns a:hover { background: rgba(255,255,255,.28); transform: translateY(-2px); }
.fwv-copy { font-size: 12px; color: #c2ad92; }
@media (prefers-reduced-motion: reduce) { .fwv-svg use { animation: none; } .fwv-nav a, .fwv-sns a { transition: none; } }
実装ガイド
使いどころ
やわらかい世界観のブランド、子ども向け・自然派・カフェなどのサイトに。上辺をなめらかな波で区切り、ゆれるSVGの波を重ねた親しみのあるフッターです。
実装時の注意点
1つの波パスを use で3層重ね、塗りの濃淡と translate アニメーションの速度・向きを変えてパララックスを出します。波の下は同色の本体で、境目が自然につながります。
対応ブラウザ
SVG の use・transform アニメーションは全モダンブラウザ対応(use は href 属性を使用)。CSS のみで JS 不要です。
よくある失敗
波パスの両端が本体色と一致していないと境目に隙間が出ます。preserveAspectRatio:none で横に引き伸ばすため、極端な縦横比でも崩れないか確認を。アニメーションは控えめにして酔いを防ぎます。
応用例
波の色や本数の変更、上下に波を付ける、スクロールで波が動く、波を山型やジグザグに変えるなどの装飾展開ができます。
コード
HTML
<!-- 上辺を波で区切った、ゆれる装飾フッター -->
<footer class="fwv">
<div class="fwv-waves" aria-hidden="true">
<svg class="fwv-svg" viewBox="0 0 1200 90" preserveAspectRatio="none">
<defs>
<path id="fwvWave" d="M0,40 C150,80 350,0 600,40 C850,80 1050,0 1200,40 L1200,90 L0,90 Z" />
</defs>
<use href="#fwvWave" class="fwv-w1" />
<use href="#fwvWave" class="fwv-w2" />
<use href="#fwvWave" class="fwv-w3" />
</svg>
</div>
<div class="fwv-body">
<div class="fwv-inner">
<a class="fwv-logo" href="#" onclick="return false">🌿 Hügge</a>
<p class="fwv-tag">やさしい暮らしの、道具店。</p>
<nav class="fwv-nav">
<a href="#" onclick="return false">商品</a>
<a href="#" onclick="return false">読みもの</a>
<a href="#" onclick="return false">お店について</a>
<a href="#" onclick="return false">お問い合わせ</a>
</nav>
<div class="fwv-sns">
<a href="#" onclick="return false" aria-label="Instagram">◐</a>
<a href="#" onclick="return false" aria-label="X">𝕏</a>
<a href="#" onclick="return false" aria-label="note">✎</a>
</div>
<span class="fwv-copy">© 2026 Hügge</span>
</div>
</div>
</footer>
CSS
* { box-sizing: border-box; }
body { margin: 0; font-family: "Segoe UI", system-ui, -apple-system, sans-serif; }
.fwv { width: 100%; min-height: 380px; display: flex; flex-direction: column; background: #fbf7ef; }
/* 上辺の波(3層で奥行き+ゆれ)*/
.fwv-waves { position: relative; height: 90px; line-height: 0; }
.fwv-svg { width: 100%; height: 90px; }
.fwv-svg use { transform-origin: center; }
.fwv-w1 { fill: rgba(125, 179, 132, .45); animation: fwv-move 9s ease-in-out infinite; }
.fwv-w2 { fill: rgba(125, 179, 132, .75); animation: fwv-move 7s ease-in-out infinite reverse; }
.fwv-w3 { fill: #2f6f4a; animation: fwv-move 11s ease-in-out infinite; }
@keyframes fwv-move {
0%, 100% { transform: translateX(0) translateY(0); }
50% { transform: translateX(-40px) translateY(4px); }
}
/* 本体 */
.fwv-body { flex: 1; background: #2f6f4a; color: #eaf3ec; display: grid; place-content: center; text-align: center; padding: 10px 24px 30px; }
.fwv-inner { max-width: 520px; }
.fwv-logo { font-size: 24px; font-weight: 800; color: #fff; text-decoration: none; }
.fwv-tag { margin: 8px 0 18px; font-size: 13px; color: #c4dccb; }
.fwv-nav { display: flex; justify-content: center; gap: 18px; flex-wrap: wrap; }
.fwv-nav a { color: #eaf3ec; text-decoration: none; font-size: 13.5px; font-weight: 600; padding: 4px 0; border-bottom: 1px solid transparent; transition: border-color .2s ease; }
.fwv-nav a:hover { border-color: #a7d3b4; }
.fwv-sns { display: flex; justify-content: center; gap: 16px; margin: 18px 0 14px; }
.fwv-sns a { width: 34px; height: 34px; display: grid; place-items: center; border-radius: 50%; background: rgba(255,255,255,.14); color: #fff; text-decoration: none; font-size: 14px; transition: background .2s ease, transform .15s ease; }
.fwv-sns a:hover { background: rgba(255,255,255,.28); transform: translateY(-2px); }
.fwv-copy { font-size: 12px; color: #a7c4b1; }
@media (prefers-reduced-motion: reduce) { .fwv-svg use { animation: none; } .fwv-nav a, .fwv-sns a { transition: none; } }
🤖 AIエージェント用プロンプト
このままコピーしてAIに貼り付け「追加する場所」だけ書き換えればOK
あなたは熟練のフロントエンドエンジニアです。私のWebサイトに「波形イラスト装飾フッター」の効果を追加してください。
# 追加してほしい効果
波形イラスト装飾フッター(フッター)
上辺をなめらかな波で区切り、ゆったり揺れるSVGの波を重ねた装飾的なフッター。やわらかい世界観のブランドや子ども向け・自然派サービスで、親しみのある締めくくりになります。
# 追加する場所
👉【ここに対象箇所を記入:例「トップのヒーローセクション」「お問い合わせボタン」「記事カードの一覧」など】
# 参考実装(この見た目・挙動を再現してください)
【HTML】
<!-- 上辺を波で区切った、ゆれる装飾フッター -->
<footer class="fwv">
<div class="fwv-waves" aria-hidden="true">
<svg class="fwv-svg" viewBox="0 0 1200 90" preserveAspectRatio="none">
<defs>
<path id="fwvWave" d="M0,40 C150,80 350,0 600,40 C850,80 1050,0 1200,40 L1200,90 L0,90 Z" />
</defs>
<use href="#fwvWave" class="fwv-w1" />
<use href="#fwvWave" class="fwv-w2" />
<use href="#fwvWave" class="fwv-w3" />
</svg>
</div>
<div class="fwv-body">
<div class="fwv-inner">
<a class="fwv-logo" href="#" onclick="return false">🌿 Hügge</a>
<p class="fwv-tag">やさしい暮らしの、道具店。</p>
<nav class="fwv-nav">
<a href="#" onclick="return false">商品</a>
<a href="#" onclick="return false">読みもの</a>
<a href="#" onclick="return false">お店について</a>
<a href="#" onclick="return false">お問い合わせ</a>
</nav>
<div class="fwv-sns">
<a href="#" onclick="return false" aria-label="Instagram">◐</a>
<a href="#" onclick="return false" aria-label="X">𝕏</a>
<a href="#" onclick="return false" aria-label="note">✎</a>
</div>
<span class="fwv-copy">© 2026 Hügge</span>
</div>
</div>
</footer>
【CSS】
* { box-sizing: border-box; }
body { margin: 0; font-family: "Segoe UI", system-ui, -apple-system, sans-serif; }
.fwv { width: 100%; min-height: 380px; display: flex; flex-direction: column; background: #fbf7ef; }
/* 上辺の波(3層で奥行き+ゆれ)*/
.fwv-waves { position: relative; height: 90px; line-height: 0; }
.fwv-svg { width: 100%; height: 90px; }
.fwv-svg use { transform-origin: center; }
.fwv-w1 { fill: rgba(125, 179, 132, .45); animation: fwv-move 9s ease-in-out infinite; }
.fwv-w2 { fill: rgba(125, 179, 132, .75); animation: fwv-move 7s ease-in-out infinite reverse; }
.fwv-w3 { fill: #2f6f4a; animation: fwv-move 11s ease-in-out infinite; }
@keyframes fwv-move {
0%, 100% { transform: translateX(0) translateY(0); }
50% { transform: translateX(-40px) translateY(4px); }
}
/* 本体 */
.fwv-body { flex: 1; background: #2f6f4a; color: #eaf3ec; display: grid; place-content: center; text-align: center; padding: 10px 24px 30px; }
.fwv-inner { max-width: 520px; }
.fwv-logo { font-size: 24px; font-weight: 800; color: #fff; text-decoration: none; }
.fwv-tag { margin: 8px 0 18px; font-size: 13px; color: #c4dccb; }
.fwv-nav { display: flex; justify-content: center; gap: 18px; flex-wrap: wrap; }
.fwv-nav a { color: #eaf3ec; text-decoration: none; font-size: 13.5px; font-weight: 600; padding: 4px 0; border-bottom: 1px solid transparent; transition: border-color .2s ease; }
.fwv-nav a:hover { border-color: #a7d3b4; }
.fwv-sns { display: flex; justify-content: center; gap: 16px; margin: 18px 0 14px; }
.fwv-sns a { width: 34px; height: 34px; display: grid; place-items: center; border-radius: 50%; background: rgba(255,255,255,.14); color: #fff; text-decoration: none; font-size: 14px; transition: background .2s ease, transform .15s ease; }
.fwv-sns a:hover { background: rgba(255,255,255,.28); transform: translateY(-2px); }
.fwv-copy { font-size: 12px; color: #a7c4b1; }
@media (prefers-reduced-motion: reduce) { .fwv-svg use { animation: none; } .fwv-nav a, .fwv-sns a { transition: none; } }
# 外部ライブラリ
なし(追加ライブラリ不要)
# 守ってほしいこと
- 既存のHTML構造・レイアウト・デザインを壊さないこと。必要に応じてクラス名・色・サイズを私のサイトに合わせて調整してよい。
- クラス名やidが既存と衝突しないよう、必要なら接頭辞で名前空間を分けること。
- レスポンシブ対応と prefers-reduced-motion への配慮を入れること。
- 私のサイトのフレームワーク(React / Vue / 素のHTML など)に合わせて実装すること。不明な場合は素のHTML/CSS/JSで提示し、組み込み手順も説明すること。
- 変更後の確認手順も簡潔に教えてください。