<50代主婦 ゆきんこのチャレンジブログ>
『もう遅い』なんて誰が決めた?50代からでも輝ける、新しい働き方があります! このブログでは、転職・再就職を目指す50代の皆さまに、 未経験でも始められる仕事探し・ 在宅ワーク・副業の始め方・ 面接対策&履歴書の書き方・ 必要な資格情報・ 職業訓練体験談・WEB制作勉強方法・50代からのライフスタイル などを発信しています。
--------------------------------------------------------------------------------------------------------------------------------------

HTMLとCSSで作る「夜の海」のアニメーション


こんにちは!

今回は、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資格