こんにちは!
今回は、HTMLとCSSを使って、星空と月、そして波に揺られる小船のある「夜の海のシーン」を作る方法をご紹介します。
<完成イメージ>
HTMLの作成
まずは、シーンの基本構造となるHTMLから始めましょう。
<html>
<!DOCTYPE html>
<html>
<head>
<style>
/* ここにCSSが入ります */
</style>
<script>
/* ここにJavaScriptが入ります */
</script>
</head>
<body>
<div class="scene">
<div class="moon"></div>
<div class="ocean">
<div class="wave"></div>
<div class="wave"></div>
<div class="wave"></div>
</div>
<div class="boat">
<div class="sail"></div>
<div class="hull"></div>
</div>
</div>
</body>
</html>
- `scene`クラス:全体のシーン
- `moon`クラス:月を表現
- `ocean`クラス:海を表現し、その中に3つの波(`wave`)を配置
- `boat`クラス:小舟を表現し、帆(`sail`)と船体(`hull`)で構成
背景とレイアウト
シーン全体のスタイリングを行います。
<css>
.scene {
position: relative;
width: 100%;
height: 400px;
background: linear-gradient(180deg, #000033 0%, #000066 60%, #000080 100%);
overflow: hidden;
}
- `position: relative`:子要素の配置の基準点となります
- `background`:グラデーションで深い青から少し明るい青へと変化する夜空を表現
- `overflow: hidden`:はみ出た要素を隠す
星空の作成
星は JavaScriptを使って生成します。
<javascript>
window.onload = function() {
const scene = document.querySelector('.scene');
for (let i = 0; i < 50; i++) {
const star = document.createElement('div');
star.className = 'star';
star.style.left = Math.random() * 100 + '%';
star.style.top = Math.random() * 60 + '%';
star.style.animationDelay = Math.random() * 2 + 's';
scene.appendChild(star);
}
}
星のスタイリング
<css>
.star {
position: absolute;
width: 2px;
height: 2px;
background: white;
border-radius: 50%;
animation: twinkle 1.5s infinite ease-in-out;
}
@keyframes twinkle {
0%, 100% { opacity: 1; }
50% { opacity: 0.3; }
}
- 50個の星をランダムな位置に配置
- 各星にランダムなアニメーション開始時間を設定
- `twinkle`アニメーションで明滅効果を作成
月の表現
<css>
.moon {
position: absolute;
top: 40px;
right: 60px;
width: 60px;
height: 60px;
background: #FFFAE6;
border-radius: 50%;
box-shadow: 0 0 20px #FFFAE6;
}
- 薄い黄色(#FFFAE6)を使用して温かみのある月の色を表現
- `box-shadow`で月の光の拡散を表現
- `border-radius: 50%`で完全な円を作成
海と波のアニメーション
<css>
.ocean {
position: absolute;
bottom: 0;
width: 100%;
height: 200px;
background: linear-gradient(180deg, #000080 0%, #000033 100%);
}
.wave {
position: absolute;
width: 200%;
height: 40px;
background: linear-gradient(180deg, rgba(255,255,255,0.2) 0%, transparent 100%);
border-radius: 100%;
animation: wave 8s infinite linear;
}
@keyframes wave {
0% { transform: translateX(0); }
100% { transform: translateX(-50%); }
}
- 3つの波を重ねて自然な動きを表現
- 各波にアニメーションの遅延を設定して変化をつける
- 半透明のグラデーションで波の質感を表現
小舟の作成とアニメーション
<css>
.boat {
position: absolute;
bottom: 140px;
left: 50%;
transform: translateX(-50%);
animation: float 4s infinite ease-in-out;
}
.hull {
width: 100px;
height: 30px;
background: #4A3728;
border-radius: 0 0 50% 50%;
}
.sail {
position: absolute;
top: -50px;
left: 40px;
width: 0;
height: 0;
border-left: 30px solid transparent;
border-right: 30px solid transparent;
border-bottom: 60px solid #CCCCCC;
}
@keyframes float {
0%, 100% { transform: translateX(-50%) translateY(0); }
50% { transform: translateX(-50%) translateY(-10px); }
}
- 船体は茶色で下部を丸めて表現
- 帆は三角形を作るためにborderプロパティを利用
- `float`アニメーションで上下の揺れを表現
まとめ
このように、HTMLとCSSの基本的な機能を組み合わせることで、動きのある美しいシーンを作ることができます。
アニメーションを追加することで、静的なデザインに生命感を与えることができました。
ポイントとなるテクニック
1. グラデーションによる深み表現
2. アニメーションの重ね合わせによる複雑な動きの表現
3. JavaScriptによる動的な要素生成
4. 透明度と影を使った立体感の演出
このコードを基礎に、色や形、アニメーションの時間を変更することで、さまざまなバリエーションを作ることができます。
ぜひ自分好みにカスタマイズしてみてください!
#WEBクリエイター #WEB #WEBデザイン #WEBデザイナー #コーディング #在宅ワーク #WEB資格