
JavaScriptの ロゴ アイコン by Icons8
これまで習ってきたことを総動員して、美容サロンサイトを作ってみましょう。
作業手順
HTML
【ポイント】
メインビジュアルの画像は、モニター幅に応じて切り替えるため、今回は
pictureタグを使います。「3つの約束」では、見出しの箇条書き番号を
positionでデザインしますので、それを考慮したHTML構造を作ります。「料金表」は
tableタグで作ります。列幅を整えるために、colgroupタグで幅を指定します。「よくあるお問い合わせ」はアコーディオンメニューで開閉させます。常時表示する「質問」と、クリック時に表示する「回答」の位置関係を踏まえながらコーディングします。
今回のハンバーガーメニューは、1つの
navをPC・SPサイトで共有します。
コードを参照
<!DOCTYPE html> <html lang="ja"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Felica Beauty Salon</title> <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=JetBrains+Mono:ital,wght@0,100..800;1,100..800&family=Noto+Sans+JP:wght@100..900&family=Noto+Serif+JP:wght@200..900&display=swap" rel="stylesheet"> <link rel="stylesheet" href="css/slick-theme.css"> <link rel="stylesheet" href="css/slick.css"> <link rel="stylesheet" href="css/style.css"> </head> <body> <div class="burger"> <span></span> <span></span> <span></span> </div> <header> <div class="header_wrapper"> <h1><a href="#"><img src="img/logo_b.svg" alt="フェリカ・ビューティー・サロン"></a></h1> <nav> <ul class="en"> <li><a href="#news">NEWS</a></li> <li><a href="#about">ABOUT</a></li> <li><a href="#features">FEATURES</a></li> <li><a href="#menu_price">MENU</a></li> <li><a href="#faq">FAQ</a></li> </ul> </nav> </div> </header> <main> <section class="main_visual"> <h2>新しい私<span>に</span><br> 会いに行こう </h2> <ul class="image_wrapper slider"> <li> <picture> <source media="(max-width:1280px)" srcset="img/main_visual_m.webp"> <source media="(max-width:600px)" srcset="img/main_visual_s.webp"> <img src="img/main_visual.webp" alt="メインビジュアル"> </picture> </li> <li> <picture> <source media="(max-width:1280px)" srcset="img/main_visual_02_m.webp"> <source media="(max-width:600px)" srcset="img/main_visual_02_s.webp"> <img src="img/main_visual_02.webp" alt="メインビジュアル"> </picture> </li> <li> <picture> <source media="(max-width:1280px)" srcset="img/main_visual_03_m.webp"> <source media="(max-width:600px)" srcset="img/main_visual_03_s.webp"> <img src="img/main_visual_03.webp" alt="メインビジュアル"> </picture> </li> <li> <picture> <source media="(max-width:1280px)" srcset="img/main_visual_04_m.webp"> <source media="(max-width:600px)" srcset="img/main_visual_04_s.webp"> <img src="img/main_visual_04.webp" alt="メインビジュアル"> </picture> </li> <li> <picture> <source media="(max-width:1280px)" srcset="img/main_visual_05_m.webp"> <source media="(max-width:600px)" srcset="img/main_visual_05_s.webp"> <img src="img/main_visual_05.webp" alt="メインビジュアル"> </picture> </li> <li> <picture> <source media="(max-width:1280px)" srcset="img/main_visual_06_m.webp"> <source media="(max-width:600px)" srcset="img/main_visual_06_s.webp"> <img src="img/main_visual_06.webp" alt="メインビジュアル"> </picture> </li> </ul> </section> <section class="news fadeUp" id="news"> <h2 data-subtitle="お知らせ" class="en">NEWS</h2> <dl> <div class="news_row"> <dt>2026.05.20</dt> <dd>[サロン]定休日変更(火曜定休)のお知らせ</dd> </div> <div class="news_row"> <dt>2026.04.15</dt> <dd>[メニュー]新しい髪質改善トリートメントメニューが加わりました</dd> </div> <div class="news_row"> <dt>2026.03.01</dt> <dd>[その他]ホームページをリニューアルオープンいたしました</dd> </div> </dl> </section> <div class="bg fadeUp"> <section class="about" id="about"> <div class="about_wrapper"> <img src="img/about.webp" alt="私たちについて"> <div class="about_message"> <h2 data-subtitle="私たちについて" class="en">ABOUT</h2> <p>当店では、目の前のお客様一人ひとりのライフスタイルに寄り添い、じっくり時間をかけた丁寧なカウンセリングを大切にしています。<br> 無理に飾るのではなく、あなたの髪が持つ本来の美しさを引き出し、毎日の鏡の前に立つ時間が少しだけ楽しみになる。そんな「心地いい日常」を、この街の皆さまへお届けします。</p> </div> </div> </section> </div> <section class="features fadeUp" id="features"> <h2 data-subtitle="3つの約束" class="en">FEATURES</h2> <ul class="point_list"> <li> <span>01.</span> <h3>じっくり向き合う<br>丁寧なカウンセリング</h3> <p>髪のクセや骨格のお悩みだけでなく、普段のお手入れ方法や理想の雰囲気を細かくお伺いします。初めての方でも緊張せず、何でも話しやすいリラックスした空間づくりを心がけています。</p> <img src="img/features.webp" alt="カウンセリング"> </li> <li> <span>02.</span> <h3>5年後を見据えた<br>髪質改善と薬剤選定</h3> <p>使用するシャンプーやカラー剤は、すべて頭皮と髪に優しいオーガニック・低刺激なものを厳選。施術を重ねるごとに、芯から潤う健康な髪へと導きます。</p> <img src="img/features_02.webp" alt="ヘアケア・スキンケア"> </li> <li> <span>03.</span> <h3>お家でも簡単に<br>再現できるカット技術</h3> <p>サロン帰りの美しさがお家でもずっと続くよう、ドライヤーの乾かし方ひとつで綺麗にまとまる再現性の高いカットをご提案。毎朝のスタイリング時間をグッと短縮します。</p> <img src="img/features_03.webp" alt="ヘアカット"> </li> </ul> </section> <div class="bg fadeUp"> <section class="menu_price" id="menu_price"> <h2 data-subtitle="料金表" class="en">MENU & PRICE</h2> <div class="table_scroll_x"> <table> <colgroup> <col style="width: 24%;"> <col style="width: 14%;"> <col style="width: 14%;"> <col style="width: auto;"> </colgroup> <tr> <th>MENU</th> <th>TIME</th> <th>PRICE</th> <th>DETAILS</th> </tr> <tr> <td>Hair Cut & Blow</td> <td>60min</td> <td>¥6,600</td> <td>髪質改善/骨格に合わせたオリジナルカット</td> </tr> <tr> <td>Organic Color</td> <td>90min</td> <td>¥8,800</td> <td>低刺激・ハーブエキス配合のダメージレスカラー</td> </tr> <tr> <td>Head Spa & Treat</td> <td>45min</td> <td>¥5,500</td> <td>極上のアロマオーガニックスパ</td> </tr> </table> </div> </section> </div> <section class="faq fadeUp" id="faq"> <h2 data-subtitle="よくあるお問い合わせ" class="en">FAQ</h2> <ul class="faq_list"> <li> <p class="q_text"><span>Q1</span> 初めての利用ですが、事前に髪型を決めていかなくても大丈夫ですか?</p> <dl class="a_text"> <dt>A1.</dt> <dd>はい、まったく問題ありません。<br> 当店では、最初のカウンセリングに十分なお時間をとっています。「具体的なイメージはないけれど、雰囲気を変えたい」「自分に似合うスタイルを知りたい」という状態でも、髪質や骨格、普段のお手入れ方法を伺いながら、一緒に最適なスタイルをご提案させていただきます。どうぞリラックスしてお越しください。 </dd> </dl> </li> <li> <p class="q_text"><span>Q2</span> カウンセリングや施術にはどのくらいの時間がかかりますか?</p> <dl class="a_text"> <dt>A2.</dt> <dd>はい、まったく問題ありません。<br> 初めてご来店のお客様は、丁寧なカウンセリングと髪質診断を行うため、通常の施術時間に加えて、15〜20分ほど長めにお時間をいただいております。<br> 目安として、カット+カラーで約2時間半、髪質改善メニューを含む場合は3時間前後となります。お急ぎの場合は、事前に終了希望時間をお伝えいただければ柔軟に対応いたします。 </dd> </dl> </li> <li> <p class="q_text"><span>Q3</span>髪質改善トリートメントは、どのくらい効果が持続しますか?</p> <dl class="a_text"> <dt>A3.</dt> <dd>お客様の髪のダメージ状態やホームケアによって個人差はありますが、初回はおおよそ3週間〜1ヶ月程度効果が持続します。<br> 当店の髪質改善は、回数を重ねるごとに髪の芯に栄養が定着していくため、定期的に(1ヶ月半〜2ヶ月周期で)続けていただくことで、より手触りの良い健康な状態が長持ちするようになります。 </dd> </dl> </li> <li> <p class="q_text"><span>Q4</span>ロング料金や、担当者の指名料はかかりますか?</p> <dl class="a_text"> <dt>A4.</dt> <dd>当店では、髪の長さに応じた「ロング料金」は一切いただいておりません。すべてのメニューが提示価格通りの安心なワンプライスです。<br> スタイリストの指名料もいただいておりませんので、スタッフのプロフィールをご覧いただき、ご希望のスタイリストをご自由にお選びください。 </dd> </dl> </li> <li> <p class="q_text"><span>Q5</span> 敏感肌でカラー剤がしみやすいのですが、対応してもらえますか?</p> <dl class="a_text"> <dt>A5.</dt> <dd>ご安心ください。<br> 当店では頭皮と髪への優しさを第一に考え、オーガニック成分を配合した低刺激な薬剤を厳選しております。<br> また、施術前に頭皮を保護する専用のオイルを塗布するほか、ご希望に応じて地肌に薬剤を極力つけない特別な塗布技術(ゼロテク)での施術も可能です。不安な点がございましたら、事前のカウンセリングで何でもご相談ください。 </dd> </dl> </li> </ul> </section> </main> <footer> <div class="footer_wrapper"> <div class="shop_info"> <a href="#"><img src="img/logo_w.svg" alt="フェリカ・ビューティー・サロン"></a> </div> <nav class="l_nav"> <ul> <li><a href="#news">お知らせ</a></li> <li><a href="#about">私たちの想い</a></li> <li><a href="#features">3つのこだわり</a></li> <li><a href="#menu_price">施術メニュー</a></li> <li><a href="#faq">よくあるお問い合わせ</a></li> </ul> </nav> </div> <p><span><small>© <span id="thisYear"></span> Felica Beauty Salon</span> All Rights Reserved.</small></p> </footer> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> <script src="js/slick.js"></script> <script src="js/script.js"></script> </body> </html>
JavaScript
【ポイント】
スライダー表示は、jQuery[slick]を使います。
slickの本体はこちらからダウンロードしてください。その他の要素はJavaScriptで記述します。
headerはposition: sticky;で画面上に常時表示させ、footerがモニター内に入ったら非表示にします。各セクション要素は、通常時は非表示にし、モニター内に入ったらフェードアップさせます。
JavaScriptはclassを与えるだけで、class追加後、transform-delayを使って時間差で動きを付けます。アコーディオンの動きは、通常時は「回答」の
heightをゼロにし、クリック時に要素の高さを測定し、それを「回答」のheightに書き込む形で開閉させます。
コードを参照
<script> // ―――――――――――――――――――――――― // メインビジュアル // ―――――――――――――――――――――――― // jQuery「slick」を実装 $('.slider').slick({ autoplay: true, autoplaySpeed: 2000, dots: false, infinite: true, speed: 300, slidesToShow: 1, centerMode: true, centerPadding: '5%', }); // ―――――――――――――――――――――――― // アコーディオンメニュー // ―――――――――――――――――――――――― // 「+」アイコンを回転させる // ―――――――――――――――――――――――― // 要素を取得する const spinBtns = document.querySelectorAll('.q_text'); // 質問項目の数だけ下記の処理を実行 spinBtns.forEach(spinBtn => { // 質問項目をクリックした時 spinBtn.addEventListener('click', () => { // クリックした要素にclassを追加 spinBtn.classList.toggle('spin'); // 「回答」欄を開閉する // ―――――――――――――――――――――――― // 回答要素(dl)を取得する const aText = spinBtn.nextElementSibling; // 該当要素にclassを追加 aText.classList.toggle('open'); // 該当要素にclassが追加されていたら if (aText.classList.contains('open')) { // 該当要素の高さを測定しHTMLに書き込む aText.style.height = `${aText.scrollHeight + 16}px`; // classがなくなればHeightをゼロに戻す } else { aText.style.height = 0; } }); }); // ―――――――――――――――――――――――― // ヘッダー表示・非表示 // ―――――――――――――――――――――――― // 要素を取得 const headerEl = document.querySelector('header'); const footerEl = document.querySelector('footer'); // スクロールイベント window.addEventListener('scroll', () => { // footerの位置情報を取得 const footerRect = footerEl.getBoundingClientRect(); const footerTop = footerRect.top; // footerがモニター内に入ったら if (footerTop < window.innerHeight) { // headerのstickyを無効にする headerEl.classList.add('remove_sticky'); } else { // headerのstickyを有効にする headerEl.classList.remove('remove_sticky'); } }); // ―――――――――――――――――――――――― // フェードアップ // ―――――――――――――――――――――――― // 要素を取得する const fadeUp = document.querySelectorAll('.fadeUp'); // スクロールイベントを追加 window.addEventListener('scroll', () => { // 要素の数だけ下記の処理を繰り返す fadeUp.forEach((e) => { // フェードアップさせたい要素の位置情報を取得 const rect = e.getBoundingClientRect(); const top = rect.top; const bottom = rect.bottom; // 該当要素がモニター内に入ったら if (top < window.innerHeight - 100 && bottom > 0) { // 該当要素にclassを追加 e.classList.add('active'); } }); }); // ―――――――――――――――――――――――― // ハンバーガーメニュー // ―――――――――――――――――――――――― // 要素を取得する const burger = document.querySelector('.burger'); const burgerLogo = document.querySelector('.header_wrapper h1 a img') const headerBg = document.querySelector('header'); // バーガーボタンをクリックした時の挙動 burger.addEventListener('click', () => { // ボタンとドロワーメニューにclassを追加 burger.classList.toggle('spin'); headerBg.classList.toggle('drawer'); // ボタンクリック時にロゴを差し替え if (burger.classList.contains('spin')) { burgerLogo.src = 'img/logo_w.svg'; } else { burgerLogo.src = 'img/logo_b.svg'; } }); // ドロワーメニューのリンククリック時の挙動 const links = document.querySelectorAll('.header_wrapper nav ul li a'); // クリック時 バーガーとドロワーメニューからclassを削除 links.forEach((link) => { link.addEventListener('click', () => { burger.classList.remove('spin'); headerBg.classList.remove('drawer'); }); }); // ―――――――――――――――――――――――― // 最新の西暦を表示する // ―――――――――――――――――――――――― // 要素を取得 const thisYear = document.querySelector('#thisYear'); // 最新の日時情報を取得 const infoYear = new Date().getFullYear(); // 日時情報を要素に書き込む thisYear.textContent = infoYear; </script>
CSS
【ポイント】
今回はフェードアップやスライドインさせる要素が多いので、はじめは「すべて表示した状態」で作り、JavaScriptを書く段階で非表示にし、class追加後のコードを記述していきます。
jQuery[slick]がCSSに影響を与える場合があります。 想定外に幅が広がってしまう場合は、親要素に
overflow: hidden;をかけて、それ以上広がらないように手当てをしましょう。SP表示に切り替えることを想定して、見出し・説明を横並びにする必要がある要素は
tableではなく、メディアクエリと相性の良いdl、dt、ddタグを使って記述しましょう。「3つの約束」は3つの子要素が並ぶカードレイアウトです。
内容の文字数によって「行の高さ」がズレてしまうことがありますので、subgridを使って行の高さを揃えましょう。
コードを参照
@charset "UTF-8"; * { margin: 0; padding: 0; box-sizing: border-box; } ul { list-style: none; } a { text-decoration: none; color: #232323; } img { max-width: 100%; } /* ―――――――――――――――――――――――――――― */ /* カスタムプロパティ */ /* ―――――――――――――――――――――――――――― */ :root { /* カラー */ --color-base: #FCFAF7; --color-text: #4A3E3D; --color-accent: #D4A373; --color-bg-text: #fff7ee; --color-white: #FFFFFF; --color_bg: #F5F5F5; /* フォント */ --font_base: "Noto Serif JP", serif; --font_jp_go: "Noto Sans JP", sans-serif; --font_en: "Playfair Display", serif; } body { font-family: var(--font_base); color: var(--color-text); letter-spacing: .05em; font-size: 16px; font-weight: 500; line-height: 1.7; background-color: var(--color-base); } h1, h2, h3, h4, li, dt, dd, ::before, ::after { color: var(--color-text); } .jp_go { font-family: var(--font_jp_go); } .en { font-family: var(--font_en); } /* ―――――――――――――――――――――――――――― */ /* 共通設定 */ /* ―――――――――――――――――――――――――――― */ /* ページ内リンクをスムーズに */ html { scroll-behavior: smooth; } /* モニター幅いっぱいに背景を広げる */ .bg { width: 100%; background-color: var(--color-bg-text); padding: 60px 0; margin-bottom: 100px; } /* セクション設定 */ section { width: min(90%, 1080px); margin: 0 auto 100px; padding: 40px; scroll-margin-top: 60px; } /* 背景を持つセクションの下余白 */ .bg>section { margin-bottom: 0; } /* h2要素の表示設定 */ h2 { font-size: clamp(30px, 4vw, 40px); text-align: center; margin-bottom: 40px; } /* h2要素の疑似要素 */ h2::after { display: block; content: attr(data-subtitle); font-size: 0.4em; font-family: var(--font_base); } /* h3要素の表示設定 */ h3 { text-align: center; margin-bottom: 32px; } /* ―――――――――――――――――――――――――――― */ /* ヘッダー */ /* ―――――――――――――――――――――――――――― */ /* モニター幅いっぱいに */ header { width: 100%; padding: 10px 0; background-color: rgba(255, 255, 255, 0.7); position: sticky; top: 0; transition: all 0.6s ease; z-index: 10; } /* ロゴとnavを両端揃えに */ .header_wrapper { display: flex; justify-content: space-between; align-items: center; width: min(90%, 1280px); margin: 0 auto; padding: 0 30px; } /* ロゴの幅 */ .header_wrapper h1 { width: 150px; } /* ロゴのリンク設定 */ .header_wrapper h1 a { width: 100%; display: flex; align-items: center; } /* ロゴ・リンク内の画像設定 */ .header_wrapper h1 a img { display: block; object-fit: cover; } /* navの幅 */ .header_wrapper nav { width: 65%; } /* navを横並びに */ .header_wrapper nav ul { display: flex; width: 100%; } /* nav内のli要素の幅 */ .header_wrapper nav ul li { width: calc(100% / 5); } /* li要素内のリンク設定 */ .header_wrapper nav ul li a { display: block; text-align: center; padding: 4px 0; transition: all 0.4s ease; } /* リンクのホバー設定 */ .header_wrapper nav ul li a:hover { background-color: var(--color-text); color: #fff; } /* ―――――――――――――――――――――――――――― */ /* メインビジュアル */ /* ―――――――――――――――――――――――――――― */ /* slickのはみ出し防止にoverflowを追加 */ .main_visual { width: 100%; padding: 0; position: relative; overflow: hidden; } .main_visual .image_wrapper { width: 100%; height: 100%; } .main_visual .image_wrapper li img { object-fit: cover; width: 100%; height: 70vh; } .main_visual h2 { position: absolute; top: 50%; left: 15%; transform: translateY(-50%); font-size: clamp(40px, 5vw, 70px); font-weight: 500; text-align: left; letter-spacing: .06em; text-shadow: 0 0 10px #000000ca, 0 0 4px #0000006e; color: #fff; line-height: 1.6; width: fit-content; z-index: 10; } .main_visual h2 span { font-size: 0.7em; } /* メインビジュアル|メディアクエリ */ /* ―――――――――――――――――――――――――――― */ @media (width < 1080px) { .main_visual .image_wrapper li img { aspect-ratio: 2.5/3; } } @media(width < 800px) { .main_visual h2 { position: absolute; top: auto; transform: none; left: 50%; transform: translateX(-50%); bottom: 0; text-align: center; width: 100%; } } /* ―――――――――――――――――――――――――――― */ /* お知らせ */ /* ―――――――――――――――――――――――――――― */ .news { width: min(90%, 880px); } /* 日付と説明を横並びに */ .news_row { display: flex; gap: 0 30px; flex-wrap: wrap; width: 80%; margin: 0 auto; padding: 16px 0; border-bottom: 1px solid var(--color-accent); } /* 日付の幅 */ .news dt { width: 120px; flex-shrink: 0; padding-left: 1rem; } /* 説明の幅 */ .news dd { flex: 1; } /* お知らせ|メディアクエリ */ /* ―――――――――――――――――――――――――――― */ @media(width < 720px) { .news_row { flex-direction: column; gap: 4px 30px; } .news .news_row dd { padding-left: 3rem; } } @media(width < 550px) { .news .news_row dd { padding-left: 0; } } /* ―――――――――――――――――――――――――――― */ /* 私たちについて */ /* ―――――――――――――――――――――――――――― */ /* セクション内の表示面積 */ .about .about_wrapper { position: relative; width: 100%; height: 400px; } /* 画像をスペースに合わせる */ .about .about_wrapper img { width: 50%; height: 100%; background-color: #ccc; object-fit: cover; } /* 見出し・テキストの表示設定 */ .about .about_wrapper .about_message { width: 65%; height: fit-content; position: absolute; top: 0; bottom: 0; right: 6%; margin: auto; padding: 30px; background-color: rgba(255, 255, 255, 0.7); } /* 私たちについて|メディアクエリ */ /* ―――――――――――――――――――――――――――― */ @media(width < 1080px) { .about .about_wrapper { height: auto; } .about .about_wrapper img { width: 70%; display: block; margin: 0 auto; margin-bottom: 24px; } .about .about_wrapper .about_message { position: static; background-color: transparent; } } @media(width < 800px) { .about .about_wrapper .about_message { width: 70%; } } @media(width < 800px) { .about .about_wrapper img { width: 90%; } .about .about_wrapper .about_message { width: 100%; } } /* ―――――――――――――――――――――――――――― */ /* 3つの約束 */ /* ―――――――――――――――――――――――――――― */ /* 見出しの下余白 */ .features h3 { margin-bottom: 56px; } /* 子要素の幅や列数をモニター幅に応じて可変 */ .features .point_list { display: grid; grid-template-columns: repeat(auto-fit, minmax(210px, 1fr)); gap: 0 40px; } /* subgridで行の高さを揃える */ .features .point_list li { display: grid; grid-template-rows: subgrid; grid-row: span 3; gap: 0; background-color: var(--color-bg-text); padding: 30px; position: relative; } /* 箇条書きをpositionで配置 */ .features .point_list li span { color: var(--color-accent); position: absolute; top: -32px; left: 20px; font-size: 36px; } /* 斜線を作るために見出し側にrelativeを付ける */ .features .point_list li h3 { position: relative; margin-bottom: 24px; } /* 擬似要素で斜線を作る */ .features .point_list li h3::before { content: ""; position: absolute; top: 6px; left: -31px; width: 138px; height: 1px; background-color: var(--color-accent); transform: rotate(-45deg); } .features .point_list li p { margin-bottom: 24px; } .features .point_list li img { object-fit: cover; width: 100%; height: 250px; } /* 3つの約束|メディアクエリ */ /* ―――――――――――――――――――――――――――― */ @media(width < 790px) { .features .point_list { gap: 70px 40px; } } /* ―――――――――――――――――――――――――――― */ /* 料金表 */ /* ―――――――――――――――――――――――――――― */ /* 表の表示設定 */ .menu_price table { width: 88%; margin: 0 auto; border-collapse: collapse; } /* 見出し・説明セルの余白 */ .menu_price table tr th, .menu_price table tr td { padding: 16px 0; border-bottom: 1px solid var(--color-accent); } /* 見出しセルの表示設定 */ .menu_price table tr th { text-align: center; } /* 「MENU」と「DETAILS」の表示設置絵 */ .menu_price table tr td:first-of-type, .menu_price table tr td:last-of-type { width: fit-content; padding: 0 1rem; } /* 「TIME」と「PRICE」の表示設定 */ .menu_price table tr td:nth-of-type(2), .menu_price table tr td:nth-of-type(3) { text-align: center; } /* 料金表|メディアクエリ */ /* ―――――――――――――――――――――――――――― */ @media(width < 1080px) { /* SP時に横スクロールさせる */ .table_scroll_x { width: 100%; overflow-x: auto; } /* 最小サイズを指定 */ .table_scroll_x table { min-width: 860px; } /* スクロールバーの高さ */ .table_wrapper::-webkit-scrollbar { height: 6px; } /* スクロールバーの表示設定 */ .table_wrapper::-webkit-scrollbar-thumb { background: #ccc; border-radius: 3px; } } /* ―――――――――――――――――――――――――――― */ /* よくあるお問い合わせ */ /* ―――――――――――――――――――――――――――― */ /* 項目全体の幅 */ .faq .faq_list { width: 80%; margin: 0 auto; } /* 各問答間の余白 */ .faq .faq_list li { margin-bottom: 32px; } /* 質問文の表示設定 */ .faq .faq_list li p { padding: 16px; letter-spacing: .08em; line-height: 1.7; } /* 質問文の箇条書き番号の表示設定 */ .faq .faq_list li p span { font-size: 1.5em; padding-right: 1rem; } /* 質問文の表示設定 */ .faq .faq_list li .q_text { background-color: var(--color-bg-text); position: relative; cursor: pointer; } /* 回答文の箇条書き番号と説明文を横並びに */ .faq .faq_list li .a_text { display: grid; grid-template-columns: 2.5rem 1fr; padding: 0 1rem 0 3rem; height: 0; overflow: hidden; transition: all 0.5s ease; } /* 回答文の表示設定 */ .faq .faq_list li .a_text dt, .faq .faq_list li .a_text dd { letter-spacing: .08em; line-height: 1.7; } /* 回答文が開いた後は、上下に余白を追加 */ .faq .faq_list li .a_text.open { padding-top: 16px; padding-bottom: 32px; } /* 「+」ボタンの表示設定 */ /* ひとつの線は横向きに */ .faq .faq_list li .q_text::before, .faq .faq_list li .q_text::after { content: ""; position: absolute; top: 0; bottom: 0; margin: auto; right: 16px; width: 16px; height: 3px; background-color: var(--color-text); transform: rotate(0); transition: all 0.5s ease; } /* ひとつの線は縦向きに */ .faq .faq_list li .q_text::after { transform: rotate(90deg); } /* クリック時|ひとつの線はナナメ向きにに */ .faq .faq_list li .q_text.spin::before { transform: rotate(405deg); } /* クリック時|上に45度角度を追加してナナメ向きに */ .faq .faq_list li .q_text.spin::after { transform: rotate(495deg); } /* ―――――――――――――――――――――――――――― */ /* フッター */ /* ―――――――――――――――――――――――――――― */ /* フッターの表示設定 */ footer { width: 100%; background-color: var(--color-text); color: #fff; padding: 40px 0 10px; font-size: 15px; } /* ロゴとnavを横並びに */ footer .footer_wrapper { width: min(90%, 980px); display: flex; justify-content: center; align-items: center; gap: 0 50px; margin: 0 auto; } /* ロゴの幅 */ footer .footer_wrapper .shop_info { width: 30%; } /* ロゴ画像の大きさ */ footer .footer_wrapper .shop_info img { width: 150px; } /* 残りのスペースをnavに */ footer .l_nav { flex: 1; } /* navを横並びに */ footer .l_nav ul { display: flex; gap: 0 24px; } /* li要素ひとつあたりの表示設定 */ /* hoverアニメのためにoverflowを */ footer .l_nav ul li { width: calc((100% - 96px)/ 5); margin-bottom: 16px; overflow: hidden; } /* リンク要素の表示設定 */ footer .l_nav ul li a { display: block; color: #fff; } /* li要素に疑似要素で下線を引く */ /* 通常時は左に待機させる */ footer .l_nav ul li::after { content: ""; width: 100%; display: block; height: 1px; background-color: #fff; transform: translateX(-100%); transition: all 0.3s ease; } /* hover時にスライドインさせる */ footer .l_nav ul li:hover::after { transform: translateX(0); } footer>p { text-align: center; } /* フッター|メディアクエリ */ /* ―――――――――――――――――――――――――――― */ @media (width < 1080px) { /* ロゴとnavを縦並びに */ footer .footer_wrapper { flex-direction: column; gap: 32px 50px; } /* ロゴを親要素の中心に配置 */ footer .footer_wrapper .shop_info { display: flex; justify-content: center; width: 100%; } /* 画像を中心に配置 */ footer .footer_wrapper .shop_info img { margin: 0 auto; } /* navの幅を親要素いっぱいに */ footer .l_nav { width: 100%; margin-bottom: 30px; } /* li要素とライセンス表示の間に余白を追加 */ footer .l_nav ul li { margin-bottom: 16px; } /* リンク要素を中央揃えに */ footer .l_nav ul li a { text-align: center; } } @media (width < 660px) { /* 改行させる */ footer .l_nav ul { gap: 16px 24px; flex-wrap: wrap; } /* navを3列に */ footer .l_nav ul li { width: calc((100% - 48px)/ 3); } } @media (width < 400px) { /* navの幅を広げる */ footer .l_nav { width: 80%; } /* navを2列に */ footer .l_nav ul li { width: calc((100% - 24px)/ 2); } /* リンク要素を左揃えに */ footer .l_nav ul li a { text-align: left; } /* ライセンスを2行表示に */ footer>p>span { display: block; } } /* ―――――――――――――――――――――――――――― */ /* ヘッダー表示・非表示 */ /* ―――――――――――――――――――――――――――― */ /* フッターがモニター内に入ったら、ヘッダーを非表示に */ header.remove_sticky { opacity: 0; visibility: hidden; } /* ―――――――――――――――――――――――――――― */ /* フェードアップ */ /* ―――――――――――――――――――――――――――― */ /* フェードアップ要素の初期表示 */ .fadeUp { opacity: 0; visibility: hidden; transform: translateY(100px); transition: all 0.4s ease; } /* classが追加されたらフェードアップ */ .fadeUp.active { opacity: 1; visibility: visible; transform: translateY(0); } /* 【ABOUT】フェードアップ後に右からスライドイン */ .about .about_message { opacity: 0; visibility: hidden; transform: translateX(50px); transition: all 0.7s ease; } /* class追加後にアニメを発動 */ .fadeUp.active .about_message { opacity: 1; visibility: visible; transform: translateX(0px); transition-delay: 1.5s; } @media(width < 1080px) { /* セクションが縦並びになったら フェード方向を縦に切り替える */ .about .about_message { transform: translate(0, 50px); } .fadeUp.active .about_message { transform: translate(0, 0); transition-delay: 0.9s; } } /* 【FEATURES】フェードアップ後に時間差で表示 */ .features .point_list li { opacity: 0; visibility: hidden; transform: translateY(100px); transition: all 0.7s ease; } /* class追加後にフェードアップ */ .fadeUp.active .point_list li:nth-of-type(1), .fadeUp.active .point_list li:nth-of-type(2), .fadeUp.active .point_list li:nth-of-type(3) { opacity: 1; visibility: visible; transform: translateY(0px); } /* 各要素を0.2秒ずつ遅延させる */ .fadeUp.active .point_list li:nth-of-type(1) { transition-delay: 1s; } .fadeUp.active .point_list li:nth-of-type(2) { transition-delay: 1.2s; } .fadeUp.active .point_list li:nth-of-type(3) { transition-delay: 1.4s; } /* 【FAQ】フェードアップ後に時間差で表示 */ .faq .faq_list li { opacity: 0; visibility: hidden; transform: translateY(100px); transition: all 0.7s ease; } /* class追加後にフェードアップ */ .fadeUp.active .faq_list li { opacity: 1; visibility: visible; transform: translateY(0px); } /* 各要素を0.2秒ずつ遅延させる */ .fadeUp.active .faq_list li:nth-of-type(1) { transition-delay: 1s; } .fadeUp.active .faq_list li:nth-of-type(2) { transition-delay: 1.2s; } .fadeUp.active .faq_list li:nth-of-type(3) { transition-delay: 1.4s; } .fadeUp.active .faq_list li:nth-of-type(4) { transition-delay: 1.6s; } .fadeUp.active .faq_list li:nth-of-type(5) { transition-delay: 1.8s; } /* ―――――――――――――――――――――――――――― */ /* ハンバーガー|メディアクエリ */ /* ―――――――――――――――――――――――――――― */ .burger { display: none; } @media(width < 1080px) { /* ハンバーガーボタン */ /* ―――――――――――――――――――――――――――― */ /* ボタンの外観・位置 */ .burger { display: block; position: fixed; top: 20px; right: 20px; width: 70px; height: 80px; background-color: var(--color-text); z-index: 100; } /* 三本線の位置 */ .burger span { position: absolute; inset: 0; margin: auto; width: 70%; height: 4px; background-color: #fff; border-radius: 10px; transition: all 0.4s ease; } /* 三本線(上) */ .burger span:nth-of-type(1) { transform: translateY(-16px); } /* 三本線(中) */ .burger span:nth-of-type(2) { transform: translateY(0); } /* 三本線(下) */ .burger span:nth-of-type(3) { transform: translateY(16px); } /* クリック時 三本線(上) */ .burger.spin span:nth-of-type(1) { transform: translateY(0) rotate(45deg); } /* クリック時 三本線(中) */ .burger.spin span:nth-of-type(2) { transform: translateY(0) rotate(45deg); } /* クリック時 三本線(下) */ .burger.spin span:nth-of-type(3) { transform: translateY(0) rotate(-45deg); } /* ドロワーメニュー */ /* ―――――――――――――――――――――――――――― */ /* ヘッダーをドロワーメニューに切り替え */ header { padding: 0; background-color: var(--color-text); position: fixed; transform: translateX(100%); transition: all 0.4s cubic-bezier(0.075, 0.82, 0.165, 1); inset: 0; z-index: 90; } /* ロゴとnavを縦並びに */ .header_wrapper { flex-direction: column; width: 100%; height: 100%; padding: 10vh 0 5vh 0; } /* navの幅を広げる */ .header_wrapper nav { width: 90%; } /* navを縦並びに */ .header_wrapper nav ul { flex-direction: column; justify-content: center; position: absolute; top: 60%; left: 50%; transform: translate(-50%, -50%); margin: 0 auto; } /* リンクの表示設定 */ /* 下線アニメのために親要素にoverflowを追加 */ .header_wrapper nav ul li { padding: 16px 0; width: 50%; margin: 0 auto; overflow: hidden; } /* リンクの表示設定 */ .header_wrapper nav ul li a { color: #fff; font-size: 1.5em; } /* 各a要素に下線を表示 */ .header_wrapper nav ul li a::after { content: ""; display: block; border-bottom: 1px solid #fff; transform: translateX(-100%); transition: all 0.4s ease; } /* クリック時|ドロワーメニュー */ /* ―――――――――――――――――――――――――――― */ /* ハンバーガーボタンをクリックしたら ドロワーメニューを表示させる */ header.drawer { transform: translateX(0); } /* ドロワーが開いたら下線を表示 */ header.drawer .header_wrapper nav ul li a::after { transform: translateX(0); } /* 各a要素の下線を、0.1秒ずつ遅延させて表示 */ header.drawer .header_wrapper nav ul li:nth-of-type(1) a::after { transition-delay: 0.6s; } header.drawer .header_wrapper nav ul li:nth-of-type(2) a::after { transition-delay: 0.7s; } header.drawer .header_wrapper nav ul li:nth-of-type(3) a::after { transition-delay: 0.8s; } header.drawer .header_wrapper nav ul li:nth-of-type(4) a::after { transition-delay: 0.9s; } header.drawer .header_wrapper nav ul li:nth-of-type(5) a::after { transition-delay: 1s; } /* 余白 */ /* ―――――――――――――――――――――――――――― */ section { padding: 0; } .faq .faq_list { width: 100%; margin: 0 auto; } .faq .faq_list li p { padding: 16px 3rem 16px 1rem; } }






































































































