学びをカタチに
未来を変える

画像1
Section 002

ヒーローセクション

カーテンアニメーション付きのヒーローセクション。CSSアニメーションとclip-pathを使った視覚的にインパクトのあるファーストビューです。

学習ポイント

HTML構造の解説

<div class="hero-container"> <div class="hero-content-text"> <h1> <span class="curtain"><span>学びをカタチに</span></span> <span class="curtain"><span>未来を変える</span></span> </h1> </div> <div class="hero-content-img"> <img src="./img/hero.jpg" alt="画像1" /> </div> </div>

ポイント解説

.curtain 要素は二重のspan構造になっています。外側のspanでカーテン(白い矩形)を作り、内側のspanでテキストのフェードインを制御します。

なぜ二重span?
外側のspanに::after疑似要素でカーテンを作り、内側のspanでテキストの透明度を独立して制御するためです。

CSS解説:カーテンアニメーション

1. カーテンのベース設定

.curtain { position: relative; display: inline-block; } .curtain span { opacity: 0; /* テキストは最初非表示 */ display: inline-block; }

2. カーテンの@keyframesアニメーション

@keyframes curtain { 0% { transform-origin: left center; /* 左から展開 */ transform: scaleX(0); } 49.999% { transform-origin: left center; transform: scaleX(1); /* 完全に広がる */ } 50% { transform-origin: right center; /* 右を基点に切り替え */ transform: scaleX(1); } 100% { transform-origin: right center; transform: scaleX(0); /* 右へ収縮 */ } }
transform-originの切り替えがポイント!
49.999%と50%でtransform-originを切り替えることで、カーテンが「左から展開→右へ収縮」という自然な動きを実現しています。

3. テキストのフェードイン

@keyframes fadeInText { 0% { opacity: 0; } 21% { opacity: 0; } /* カーテンが広がるまで待つ */ 22% { opacity: 1; } /* カーテンが覆った瞬間に表示 */ 100% { opacity: 1; } }

カーテンがテキストを覆った瞬間(約22%時点)にテキストを表示します。これにより、カーテンの下からテキストが現れる効果が生まれます。

4. 2行目のディレイ設定

.curtain:nth-of-type(2) span { animation: fadeInText 4s ease-in-out 2s forwards; } .curtain:nth-of-type(2):after { animation: curtain 2s ease 2s forwards; }

2sのディレイを設定することで、1行目のアニメーション終了後に2行目が始まります。

CSS解説:clip-path

.hero-content-img img { width: 100%; height: 100%; clip-path: polygon(50% 0%, 100% 0%, 100% 100%, 0% 100%); }

clip-path: polygon() で画像を多角形にクリッピング。4つの座標で台形を定義しています。

polygon()の座標
polygon(左上, 右上, 右下, 左下)の形式で、各点をx% y%で指定します。
この例では左上を50% 0%にすることで、斜めカットを実現しています。

CSS解説:clamp()関数

.hero-content-text h1 { font-size: clamp(1.5rem, 5vw, 4.5rem); }

clamp(最小値, 推奨値, 最大値) は、レスポンシブなサイズ指定に便利な関数です。

レスポンシブ対応

@media screen and (max-width: 767px) { .hero-container { flex-direction: column; } .hero-content-img img { clip-path: polygon(0% 0%, 100% 0%, 100% 100%, 0% 100%); /* 斜めカットを解除して矩形に */ } }

モバイルでは縦並びにし、clip-pathを通常の矩形に変更しています。

応用・発展