見出し画像

AIだけでプロモーションページ(LP)をカッコよくしてみた~AI使って知識0(ゼロ)から始めるWEBサービス・アプリ制作⑥~

昨日(2025.1.20)書こうとしていましたが、アプリのアップデート作業(コーディングはもちろんAIのみ)で間に合いませんでした。。。
さて、今回は③で作成したWEBページをカッコよくしたいと思います。


ページタイトルにnoteでも表示している画像を使いたい

現在のページではインパクトが足りない・・・
※個人の感想です(笑)
最初に表示された時にインパクトが欲しい。そう考え、画像を埋め込むことにしました。
現在のhtmlがコチラ

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700;900&display=swap" rel="stylesheet">
    <title>イチオシ! - 新感覚スピードタップゲーム</title>
    <link rel="stylesheet" href="style1.css">
</head>
<body>
    <header>
        <div class="floating-numbers" id="floatingNumbers"></div>
        <div class="header-content">
            <h1>イチオシ!</h1>
            <p class="catchphrase">最速の指が、最高の興奮を生む</p>
            <p class="subtitle">新感覚スピードタップゲーム</p>
        </div>
    </header>

    <main>
    <section class="game-preview">
    <h2>ゲームプレイ動画</h2>
    <div class="video-container">
        <div class="video-wrapper">
            <iframe 
                src="https://www.youtube.com/embed/SB7i9GXWsEU" 
                title="イチオシ!ゲームプレイ動画1"
                frameborder="0" 
                allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" 
                allowfullscreen>
            </iframe>
        </div>
        <div class="video-wrapper">
            <iframe 
                src="https://www.youtube.com/embed/gZHGdsLalvU" 
                title="イチオシ!ゲームプレイ動画2"
                frameborder="0" 
                allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" 
                allowfullscreen>
            </iframe>
        </div>
    </div>
</section>
        <section class="features">
            <h2>ゲームの特徴</h2>
            <div class="feature-cards">
                <div class="feature-card">
                    <h3>直感的な操作性</h3>
                    <p>たくさんのセルの中から「1」を瞬時に見つけ出そう!</p>
                </div>
                <div class="feature-card">
                    <h3>シンプルで奥深い</h3>
                    <p>誰でも簡単に始められる、でも極めるのは難しい</p>
                </div>
                <div class="feature-card">
                    <h3>グローバルランキング</h3>
                    <p>世界中のプレイヤーとスコアを競おう!</p>
                </div>
            </div>
        </section>

        <section class="download">
            <h2>今すぐプレイ!</h2>
            <a href="https://play.google.com/store/apps/details?id=com.ttinteractive.push_1&pcampaignid=web_share" class="download-button">
                Google Playでダウンロード
            </a>
            <div id="qrcode"></div>
        </section>
    </main>

    <footer>
        <div class="footer-content">
            <div class="social-links">
                <a href="https://x.com/tt_interactive" class="social-link">X(エックス)</a>
                <a href="https://www.youtube.com/@tt.interactive_Push_1" class="social-link">YouTube</a>
            </div>
            <p>© 2025 イチオシ! All Rights Reserved.</p>
        </div>
    </footer>

    <script src="script1.js"></script>
</body>
</html>

タイトル部分は
<header>
<div class="floating-numbers" id="floatingNumbers"></div>
<div class="header-content">
<h1>イチオシ!</h1>
<p class="catchphrase">最速の指が、最高の興奮を生む</p>
<p class="subtitle">新感覚スピードタップゲーム</p>
</div>
</header>
ここに画像を埋め込むのだから、htmlのタグを追加すれば良いのかな?
そう思い、AI(perplexity,Claude3.5 Sonnet)に投げかけてみると・・・

「CSSでイケるで」

.header-content {
    position: relative;
    width: 100%;
    height: 100%;
    z-index: 1;
    perspective: 1000px;
    background-image: url('itioshi.png');
    background-size: cover;
    background-position: center;
}

と返ってきました。
なるほど、タグを書かなくても該当するクラスのcssに追記すれば画像を埋め込むこともできるのか!
また1つ勉強になりました。

画像が表示されるとタイトルの文字が見にくくなる問題

これで画像は埋め込むことができたわけですが、実際に表示させてみると、

「見にくい・・・しかも文字の位置が・・・」


CSS適用後のタイトル部分

よし、わかった。
まずは黒い透明なフィルムをかけた感じにして、文字を見やすくしよう。そしてタイトルの色などを変更して見やすくしよう!
そう思い、再度AIに投げかけます。

「それ、オーバーレイって言うんや、覚えとき!」

<header>
        <div class="floating-numbers" id="floatingNumbers"></div>
        <div class="header-content">
        <div class="overlay">
            <h1>イチオシ!</h1>
            <p class="catchphrase">最速の指が、最高の興奮を生む</p>
            <p class="subtitle">新感覚スピードタップゲーム</p>
        </div>
    </header>

レイ。南斗水鳥拳のレイ。「てめぇらの血は何色だー!」のレイ。
「あなたは死なないわ。私が守るもの。」は綾波レイ。
時を戻して、オーバーレイ。
<div class="overlay">
これのことです。日本語にすると「被せる、覆う」という意味。
”黒い透明なフィルムをかけた感じ”
なるほど、そういうときはオーバーレイを使うのね。また1つ勉強になりました。
そして何度かAIと対話を続け、できたタイトルがコチラ


オーバーレイを適用し、CSSで文字色や位置を調整した後

あぁ、素敵!
そう、これですよ、これ!私がやりたかったのはこれです。
後ほどページのコードは載せますが、

素人でもAIとのやり取りでここまでできるんだ!!!

ということはぜひ知ってもらいたいです。

そしてWEB公開へ

・ページタイトルに画像を埋め込む
・オーバーレイを使用し、タイトルの文字を読みやすくする
・テキストの色などを修正し、読みやすくする
・数字が流れる(<div class="floating-numbers" id="floatingNumbers"></div>)やつをページ全体に適用する

これらの修正を行い、WEBページとして公開します。
修正前後がわかるように修正前と後をそれぞれ公開してみます。

修正前

修正後

修正前のほうが良いじゃん!
なんて言わないでー(汗)

ページのコードを乗せておきます。

<!DOCTYPE html>
<html lang="ja">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <link rel="preconnect" href="https://fonts.googleapis.com">
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin>
<link href="https://fonts.googleapis.com/css2?family=Noto+Sans+JP:wght@400;700;900&display=swap" rel="stylesheet">
    <title>イチオシ! - 新感覚スピードタップゲーム</title>
    <link rel="stylesheet" href="style5.css">
</head>
<body>
    <header>
        <div class="floating-numbers" id="floatingNumbers"></div>
        <div class="header-content">
        <div class="overlay">
            <h1>イチオシ!</h1>
            <p class="catchphrase">最速の指が、最高の興奮を生む</p>
            <p class="subtitle">新感覚スピードタップゲーム</p>
        </div>
    </header>

    <main>
    <section class="game-preview">
    <h2>ゲームプレイ動画</h2>
    <div class="video-container">
        <div class="video-wrapper">
            <iframe 
                src="https://www.youtube.com/embed/SB7i9GXWsEU" 
                title="イチオシ!ゲームプレイ動画1"
                frameborder="0" 
                allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" 
                allowfullscreen>
            </iframe>
        </div>
        <div class="video-wrapper">
            <iframe 
                src="https://www.youtube.com/embed/gZHGdsLalvU" 
                title="イチオシ!ゲームプレイ動画2"
                frameborder="0" 
                allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" 
                allowfullscreen>
            </iframe>
        </div>
    </div>
</section>
        <section class="features">
            <h2>ゲームの特徴</h2>
            <div class="feature-cards">
                <div class="feature-card">
                    <h3>直感的な操作性</h3>
                    <p>たくさんのセルの中から「1」を瞬時に見つけ出そう!</p>
                </div>
                <div class="feature-card">
                    <h3>シンプルで奥深い</h3>
                    <p>誰でも簡単に始められる、でも極めるのは難しい</p>
                </div>
                <div class="feature-card">
                    <h3>グローバルランキング</h3>
                    <p>世界中のプレイヤーとスコアを競おう!</p>
                </div>
            </div>
        </section>

        <section class="download">
            <h2>今すぐプレイ!</h2>
            <a href="https://play.google.com/store/apps/details?id=com.ttinteractive.push_1&pcampaignid=web_share" class="download-button">
                Google Playでダウンロード
            </a>
            <div id="qrcode"></div>
        </section>
    </main>

    <footer>
        <div class="footer-content">
            <div class="social-links">
                <a href="https://x.com/tt_interactive" class="social-link">X(エックス)</a>
                <a href="https://www.youtube.com/@tt.interactive_Push_1" class="social-link">YouTube</a>
            </div>
            <p>© 2025 イチオシ! All Rights Reserved.</p>
        </div>
    </footer>

    <script src="script5.js"></script>
</body>
</html>
/* style.css */
:root {
    --primary-color: #ff3333;
    --secondary-color: #333;
    --background-color: #fff;
}

* {
    margin: 0;
    padding: 0;
    box-sizing: border-box;
}

body {
    font-family: 'Noto Sans JP', sans-serif;
    line-height: 1.6;
    color: var(--secondary-color);
}

/* ヘッダーのベース設定 */
header {
    height: 70vh;
    background: linear-gradient(135deg, #fff 0%, #f5f5f5 100%);
    position: relative;
    overflow: hidden;
    display: flex;
    align-items: center;
    justify-content: center;
}

/* 背景要素 */
.floating-numbers {
    position: fixed;
    width: 100%;
    height: 100%;
    z-index: 2;
    pointer-events: none;
}

.header-content {
    position: relative;
    width: 100%;
    height: 100%;
    z-index: 1;
    perspective: 1000px;
    background-image: url('itioshi.png');
    background-size: cover;
    background-position: center;
}

.overlay {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
    background-color: rgba(0, 0, 0, 0.6);
    display: flex;
    flex-direction: column;
    align-items: center;
    justify-content: center;
}

/* タイトル設定 */
h1 {
    font-size: 5.5rem;
    font-weight: 900;
    margin-bottom: 2rem;
    text-transform: uppercase;
    letter-spacing: 6px;
    background: linear-gradient(45deg, #ff4444, #ff0000);
    -webkit-background-clip: text;
    background-clip: text;
    -webkit-text-fill-color: transparent;
    text-shadow: 
        0 2px 0 #ff6666,
        0 4px 0 #cc0000,
        0 6px 25px rgba(255, 0, 0, 0.5);
    animation: titleAnimation 1.5s ease-out;
}

/* キャッチフレーズ設定 */
.catchphrase {
    font-size: 2.4rem;
    font-weight: 700;
    margin-bottom: 1.5rem;
    color: #ffffff;
    text-shadow: 
        2px 2px 4px rgba(0, 0, 0, 0.5),
        -2px -2px 0 rgba(255, 255, 255, 0.2);
    animation: slideIn 1s ease-out 0.3s backwards;
}

/* サブタイトル設定 */
.subtitle {
    font-size: 2rem;
    font-weight: 600;
    letter-spacing: 3px;
    color: #ffffff;
    position: relative;
    display: inline-block;
    text-shadow: 
        0 0 10px rgba(255, 255, 255, 0.3),
        2px 2px 4px rgba(0, 0, 0, 0.3);
    animation: glowPulse 2s infinite;
}

.subtitle::after {
    content: '';
    position: absolute;
    bottom: -12px;
    left: 50%;
    transform: translateX(-50%);
    width: 70%;
    height: 3px;
    background: linear-gradient(90deg, 
        transparent,
        rgba(255, 51, 51, 0.8),
        transparent
    );
}

/* アニメーション設定 */
@keyframes slideIn {
    0% {
        opacity: 0;
        transform: translateX(-100px);
    }
    100% {
        opacity: 1;
        transform: translateX(0);
    }
}

@keyframes glowPulse {
    0% {
        opacity: 0.8;
        text-shadow: 0 0 10px rgba(255, 255, 255, 0.2);
    }
    50% {
        opacity: 1;
        text-shadow: 0 0 20px rgba(255, 255, 255, 0.5);
    }
    100% {
        opacity: 0.8;
        text-shadow: 0 0 10px rgba(255, 255, 255, 0.2);
    }
}


.features {
    padding: 4rem 2rem;
    background-color: var(--background-color);
}

.feature-cards {
    display: grid;
    grid-template-columns: repeat(auto-fit, minmax(250px, 1fr));
    gap: 2rem;
    padding: 2rem;
}

.feature-card {
    background: white;
    padding: 2rem;
    border-radius: 10px;
    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
    transition: transform 0.3s ease;
}

.feature-card:hover {
    transform: translateY(-5px);
}

.game-preview {
    padding: 4rem 2rem;
    background-color: #f5f5f5;
}

.video-container {
    display: flex;
    justify-content: center;
    gap: 2rem;
    margin-top: 2rem;
    flex-wrap: wrap;
}

.video-wrapper {
    width: 315px;
    height: 560px;
    position: relative;
    overflow: hidden;
    border-radius: 15px;
    box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);
}

.video-wrapper iframe {
    width: 100%;
    height: 100%;
    border: none;
}

@media (max-width: 768px) {
    .video-container {
        flex-direction: column;
        align-items: center;
    }
    
    .video-wrapper {
        width: 100%;
        max-width: 315px;
    }
}


.download {
    text-align: center;
    padding: 4rem 2rem;
    background-color: #f5f5f5;
}

.download-button {
    display: inline-block;
    padding: 1rem 2rem;
    background-color: var(--primary-color);
    color: white;
    text-decoration: none;
    border-radius: 25px;
    margin: 2rem 0;
    transition: background-color 0.3s ease;
}

.download-button:hover {
    background-color: #ff0000;
}

footer {
    background-color: var(--secondary-color);
    color: white;
    padding: 2rem;
    text-align: center;
}

.social-links {
    margin-bottom: 1rem;
}

.social-link {
    color: white;
    text-decoration: none;
    margin: 0 1rem;
}

@keyframes fadeInUp {
    from {
        opacity: 0;
        transform: translateY(20px);
    }
    to {
        opacity: 1;
        transform: translateY(0);
    }
}

@media (max-width: 768px) {
    h1 {
        font-size: 3rem;
    }
    
    .catchphrase {
        font-size: 1.5rem;
    }
    
    .subtitle {
        font-size: 1.2rem;
    }
}
@media (max-width: 768px) {
    h1 {
        font-size: 3.5rem;
        letter-spacing: 2px;
    }
    
    .catchphrase {
        font-size: 1.8rem;
    }
    
    .subtitle {
        font-size: 1.4rem;
        letter-spacing: 1px;
    }
}
// script.js
document.addEventListener('DOMContentLoaded', function() {
    // 浮遊する数字のアニメーション
    const floatingNumbers = document.getElementById('floatingNumbers');
    
    function createFloatingNumber() {
        const number = document.createElement('div');
        number.textContent = Math.floor(Math.random() * 9) + 1;
        number.style.position = 'absolute';
        number.style.left = Math.random() * 100 + 'vw';
        number.style.top = -50 + 'px';
        number.style.fontSize = (Math.random() * 30 + 20) + 'px';
        number.style.opacity = '0.2';
        number.style.color = '#333';
        
        floatingNumbers.appendChild(number);
        
        let speed = 1 + Math.random() * 2;
        let rotation = Math.random() * 360;
        let position = -50;
        
        function animate() {
            position += speed;
            rotation += 1;
            number.style.top = position + 'px';
            number.style.transform = `rotate(${rotation}deg)`;
            
            if (position < window.innerHeight + 50) {
                requestAnimationFrame(animate);
            } else {
                number.remove();
            }
        }
        
        animate();
    }
    
    // 定期的に数字を生成
    setInterval(createFloatingNumber, 500);
    
    // スクロールアニメーション
    const cards = document.querySelectorAll('.feature-card');
    
    const observer = new IntersectionObserver((entries) => {
        entries.forEach(entry => {
            if (entry.isIntersecting) {
                entry.target.style.opacity = '1';
                entry.target.style.transform = 'translateY(0)';
            }
        });
    });
    
    cards.forEach(card => {
        card.style.opacity = '0';
        card.style.transform = 'translateY(20px)';
        card.style.transition = 'all 0.6s ease-out';
        observer.observe(card);
    });
});


いいなと思ったら応援しよう!

この記事が参加している募集