WEBサイト制作の勉強

WEBサイト制作の勉強の為の解説ブログです。

フェリカテクニカルアカデミー

Canvasでパーティクルを表現する

Canvasとは

Canvasとは、ブラウザ上に図を描くために策定された仕様です。

これまでHTML上で図を表現するためには、GIFやJPEGといったフォーマットの画像を用意する必要がありました。また、条件に応じて表示する図を変化させたり、アニメーションを実現するために、FlashJavaアプレットが使われてきました。

Canvasは、FlashJavaのようにプラグインを使わずに、JavaScriptベースで図を描くことができます。
Canvasは、もともとはAppleが発祥で、当初、Mac OSでおなじみのDashboardで使われた技術仕様です。その後、AppleMozilla FoundationOpera Softwareといったブラウザベンダが立ち上げたWHATWGという団体にて策定作業が行われていた「Web Applications」と呼ばれる規格に採用されました。

github.com



vincentgarreau.com





See the Pen
Particle & Mouse stalker
by yachin29 (@yachin29)
on CodePen.



recruit.lifeones.jp


webdesignfacts.net



www.webopixel.net




stitch.co.jp



y-n10.com



blog.8bit.co.jp





note.com



ics.media




さらにカーソルがマウスに追随する、「マウスストーカー」を導入してみましょう。

https://school.yachin29.com/0414/


https://cdnjs.cloudflare.com/ajax/libs/gsap/2.1.1/TweenMax.min.js
<div class="cursor"></div>
<div class="follower"></div>

それと

var
cursor = $('.cursor'),
follower = $('.follower'),
cWidth = 6, //カーソルの大きさ
fWidth = 30, //フォロワーの大きさ
delay = 5, //数字を大きくするとフォロワーがより遅れて来る
mouseX = 0, //マウスのX座標
mouseY = 0, //マウスのY座標
posX = 0, //フォロワーのX座標
posY = 0; //フォロワーのX座標

//カーソルの遅延アニメーション
//ほんの少ーーーしだけ遅延させる 0.001秒
TweenMax.to({}, .001, {
  repeat: -1,
  onRepeat: function() {
    posX += (mouseX - posX) / delay;
    posY += (mouseY - posY) / delay;

    TweenMax.set(follower, {
        css: {    
          left: posX - (fWidth / 2),
          top: posY - (fWidth / 2)
        }
    });
    
    TweenMax.set(cursor, {
        css: {    
          left: mouseX - (cWidth / 2),
          top: mouseY - (cWidth / 2)
        }
    });
  }
});

//マウス座標を取得
$(document).on('mousemove', function(e) {
    mouseX = e.pageX;
    mouseY = e.pageY;
});

//ボタンにホバーした時
$('.cursor-on').on({
  "mouseenter": function() {
    cursor.addClass('is-active');
    follower.addClass('is-active');
  },
  "mouseleave": function() {
    cursor.removeClass('is-active');
    follower.removeClass('is-active');
  }
});

jquery-cookie.jsを使ってみる

github.com

if($.cookie('access')){
//既にアクセス済みの場合はカーテンを非表示
$('#svg-wrapper').hide();
}else{
//初アクセスの場合はカーテンをfadeOutさせる
$('#svg-wrapper').delay(4000).fadeOut(400);
}


//ファイルがロードされたら
$(window).on('load',function(){
$.cookie('access',$('body').addClass('access'),{
 expires: 1 //指定しない場合は現在のセッションのみ保持される(ブラウザを閉じると消える)。
});
});

$.ajax(jQuery)とfetch APIを使ってsvgを外部ファイルとして読み込む

svgをcss3のアニメーションで動かす場合、下記のようにsvgファイルのコードをインラインでbody内に入れる必要があります。

<body>
<svg class="likeButton" width="500px" height="500px" viewBox="0 0 500 500">
  <circle class="explosion" r="150" cx="250" cy="250"></circle>
  <g class="particleLayer">
    <circle fill="#8CE8C3" cx="130" cy="126.5" r="12.5"/>
    <circle fill="#8CE8C3" cx="411" cy="313.5" r="12.5"/>
    <circle fill="#91D2FA" cx="279" cy="86.5" r="12.5"/>
    <circle fill="#91D2FA" cx="155" cy="390.5" r="12.5"/>

ただこのやり方だとbody内のソースの可読性が著しく下がってしまうので、svgタグ部分を外部ファイル化しajaxを使って非同期通信で読み込む方式に変更します。
ajaxで読み込めばbody内のソースも整理され、なおかつインラインの時と同じようにcsssvgをコントロールする事が出来ます。

<body>
<div id="box">
<!--ここ外部svgデータが挿入-->
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$.ajax({
url: 'logo.svg',//ここにsvgファイルのパスを入れる
})
.then(
// 1つめは通信成功時の処理
function(data){
	var svg = $(data).find('svg');
  $('#box').append(svg);
},
// 2つめは通信失敗時の処理
function(){
	alert('読み込み失敗');
});
</script>
</body>

Fetch APIを使ってsvgを呼び出す

JavaScriptの次世代の非同期通信の規格であるFetch APIを使用する事で、jqueryを使わずに非同期通信が行えるようになります。


フェッチ 【 fetch 】とは

ソフトウェアやネットワーク通信の分野では、データなどの受信側・需要側が(送信側・供給側から送られてくるのを待つのではなく)能動的に読み出しに行く、相手に送信するよう要求する、といった意味合いでフェッチという用語が用いられる。特に、送信側が能動的に送り出す「プッシュ」(push)方式と対比して、一定時間ごとに受信すべきデータの有無を繰り返し確認する受信側の動作を指す場合があり、「ポーリング」(polling)とも呼ばれる。

マイクロプロセッサ(CPU/MPU)では、命令を実行する最初の段階で、命令コード(インストラクション)をメインメモリ(またはキャッシュメモリ)から読み出し、プロセッサ内部のレジスタに転送する動作のことをフェッチという。フェッチされた命令デコード(解析)されて実行に移される。フェッチにかかる時間を「フェッチサイクル」(fetch cycle)あるいは「命令サイクル」(instruction cycle)という。

また、CPUやソフトウェアが将来必要になる(かもしれない)データなどを先取りして読み出しておくことで読み込み動作にかかる待ち時間を削減する手法が様々な分野で幅広く利用されており、そのような「先読み」方式のことを「プリフェッチ」(prefetch)という。

var box = document.getElementById("box")
fetch("logo.svg")
.then(function(response) {
    return response.text();
}).then(function(svg) {
    box.innerHTML = svg
})

fancybox 3.5.7のCDNを使用する

高機能モーダルウィンドウ「Fancybox」のCDNを使ってギャラリーページを作ってみる

fancybox CSS

<link rel="stylesheet" href="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.css" />

fancybox JS

<script src="https://cdn.jsdelivr.net/gh/fancyapps/fancybox@3.5.7/dist/jquery.fancybox.min.js"></script>




https://web.archive.org/web/20210325170940/https://fancyapps.com/fancybox/3/docs/

Webサイトの構成表の作成

Webサイトの構成を明確にする為に必ず、Webサイト構成表を作成しましょう。
「サイト全体で何ページになるか?」「どのページにどんな内容のコンテツを入れるか?」「どういう順番でコンテンツを並べたら、ユーザーが見やすい・解りやすいか?」
などは、必ずデザイン部分に入る前に決めてしまいましょう。もちろん作る過程で多少変更はありますが、基本的には入れるべきコンテンツの種類・内容・順番が決まった段階で、ワイヤー・カンプに入ります。
この構成表はサイトマップとは違い、自分自身のサイト制作作業をスムーズに進める為に用意する物です。

サイトマップとは?

サイトマップとは、サイト全体のページ構成や、「どの様なコンテンツが入るか?」などを示すためのもので、サイト制作を進める上で無くてはならない物です。
サイトマップは大きく分けると、ユーザー用と検索エンジン用の2種類があります。



構成表作成の手順

掲載させるコンテンツのグループ分け
いきなり、構成表を作るのでは無く、まずはそのWebサイトに必要なページを全て書き出してみましょう。この時は階層、カテゴリーなど関係なくとにかく思いつくままに。それが終わったらその中でグループ分けをします。


コンテンツの重要度をランク付け
コンテンツのグルーピングが終わったら、次はどの様な順番でページに載せていくかです。気をつけなければいけないのは、作る側やクライアントが「これは重要だ!」と思っているページでも、ユーザーにとって価値のあるコンテンツ・情報か、どうかをしっかりと見極めて、順番を決めましょう。また、コンテンツの順番はSEOとも関わってくるので、上位検索を考えている人はここで、必ず、「検索キーワード」を選定し、キーワードの内容も加味したランク付けを行いましょう。


ユーザーの利便性を考える
Webサイトの階層が深ければ深いほど、ユーザーは多くのリンクをクリックしなければなりません。要点をしぼってなるべく浅い階層(2〜3階層)を目指しましょう。また、ユーザーがどういう順番で情報を取得すると、ユーザーにとって便利なサイトになるか、などユーザー目線での導線作りを心がけましょう。





課題

自身で1つサイトを探して、自分なりに「サイトの構成表」を作ってみましょう。そしてクライアントワークのサイトの構成表も必ず作成しましょう。


the-ringo.jp

上記のサイトの場合の例

コンテンツ構成表

ページ構成:5ページ

  1. Home:トップページ
  2. About
  3. Menu
  4. Party
  5. Contact
  6. Reservations(外部サイトへのリンク)
Homeページのコンテンツ内容
  1. ロゴ(共通)
  2. グローバルナビ(共通)
  3. キービジュアル
  4. aboutの概要(aboutページへのリンクボタン)
  5. menuの概要(menuページのイメージ画像、Menuページへのリンクボタン)
  6. お店情報(お店情報のイメージ画像、Contactへのリンクボタン)
  7. 外部サイトへのリンク(食べログぐるなび・外部web予約システムサイト)
  8. 次ページ(aboutページ)へのリンク
  9. フッター(コピーライト、SNSリンク)
aboutページのコンテンツ内容
  1. ロゴ(共通)
  2. グローバルナビ(共通)
  3. キービジュアル
  4. ページ内リンクボタン
  5. お店のコンセプト(店内などのイメージ画像)
  6. シェフの紹介(シェフの画像)
  7. SNSへのリンク
  8. 予約への誘導
  9. 外部サイトへのリンク(食べログぐるなび・外部web予約システムサイト)
  10. 次ページ(Menuページ)へのリンク
  11. フッター(コピーライト、SNSリンク)
Menuページのコンテンツ内容
  1. ロゴ(共通)
  2. グローバルナビ(共通)
  3. キービジュアル
  4. ページ内リンクボタン
  5. シェフのご挨拶
  6. 料理5品の紹介・料理の画像付き
  7. シェフが料理しているイメージ画像
  8. 予約への誘導
  9. 外部サイトへのリンク(食べログぐるなび・外部web予約システムサイト)
  10. 次ページ(Partyページ)へのリンク
  11. フッター(コピーライト、SNSリンク)
Partyページのコンテンツ内容
  1. ロゴ(共通)
  2. グローバルナビ(共通)
  3. キービジュアル
  4. ページ内リンク
  5. 貸切パーティーについて
  6. プランの内容例を4例(人数、予算、要望に応じて変更可、という事を明記)
  7. 貸切パーティーの場合の細かい情報
  8. パーティーのイメージ画像
  9. 予約への誘導
  10. 外部サイトへのリンク(食べログぐるなび・外部web予約システムサイト)
  11. 次ページ(Contactページ)へのリンク
  12. フッター(コピーライト、SNSリンク)
Contactページのコンテンツ内容
  1. ロゴ(共通)
  2. グローバルナビ(共通)
  3. キービジュアル
  4. ページ内リンク
  5. アクセス(住所、最寄駅からの情報、マップ)
  6. 営業時間
  7. 予約への誘導
  8. 外部サイトへのリンク(食べログぐるなび・外部web予約システムサイト)
  9. 次ページ(Homeページ)へのリンク
  10. フッター(コピーライト、SNSリンク)

7月5日の作業データ(レストランサイト)完成版

index.html

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>restaurant-site</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=Josefin+Sans:ital@1&family=M+PLUS+Rounded+1c&display=swap" rel="stylesheet">

<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/hamburgers.css">
<link rel="stylesheet" href="css/jquery.bxslider.css">
<link rel="stylesheet" href="css/lightbox.css">
<link rel="apple-touch-icon" href="touch-icon.png">
<link rel="shortcut icon" href="favicon.png">
</head>
<body>
<header>
<h1><img src="img/logo.svg" alt=""></h1>
</header>
<p class="hamburger hamburger--stand" id="btn">
<span class="hamburger-box">
<span class="hamburger-inner"></span>
</span>
</p>
<nav id="g-nav">
<ul>
<li><a href="#">トップ</a></li>
<li><a href="#news">お知らせ</a></li>
<li><a href="#movie">ムービー</a></li>
<li><a href="#gallery">ギャラリー</a></li>
<li><a href="#info">インフォメーション</a></li>
<li><a href="#form">お問い合わせ</a></li>
</ul>
</nav>

<div class="main-visual">
<ul class="bxslider">
<li><img src="img/slide-01.jpg" alt=""></li>
<li><img src="img/slide-02.jpg" alt=""></li>
<li><img src="img/slide-03.jpg" alt=""></li>
</ul>
</div>


<main>
<div id="news">
<h2 data-en="News">お知らせ</h2>
<dl id="news-list">

</dl>
<p id="more-btn"><a href="#">もっと見る</a></p>
</div><!-- /#news -->


<div id="movie">
<h2 data-en="Movie">ムービー</h2>
<div class="video-wrapper">
<video src="img/movie.mp4" controls></video>
</div>
<div class="yt-wrapper">
<iframe class="y-tube" src="https://www.youtube.com/embed/eowVg3lWIQk" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</div><!-- /.yt-wrapper -->
</div><!-- /#movie -->


<div id="gallery">
<h2 data-en="Gallery">ギャラリー</h2>
<div class="gallery-wrapper">
<div class="gallery-box">
<h3 class="heading01">Lorem, ipsum</h3>
<p><a href="img/01.jpg" data-lightbox="gallery"><img src="img/01.jpg" alt=""></a></p>
</div><!-- /.gallery-box -->

<div class="gallery-box">
<h3 class="heading01">Lorem, ipsum</h3>
<p><a href="img/02.jpg" data-lightbox="gallery"><img src="img/02.jpg" alt=""></a></p>
</div><!-- /.gallery-box -->

<div class="gallery-box">
<h3 class="heading01">Lorem, ipsum</h3>
<p><a href="img/03.jpg" data-lightbox="gallery"><img src="img/03.jpg" alt=""></a></p>
</div><!-- /.gallery-box -->
</div><!-- /.gallery-wrapper -->
</div><!-- /#gallery -->



<div id="info">
<h2 data-en="Information">インフォメーション</h2>
<div class="info-wrapper">
<div class="tw">
<a class="twitter-timeline" data-width="320" data-height="500" data-theme="light" href="https://twitter.com/city_toshima?ref_src=twsrc%5Etfw">Tweets by city_toshima</a> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>
</div>
<div class="map">
<iframe class="g-map" src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3238.9454663323195!2d139.7121211499927!3d35.72755968008629!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x60188d68f6cfe057%3A0xddd17dcd7ecaf745!2z6LGK5bO25Yy656uL5Y2X5rGg6KKL5YWs5ZyS!5e0!3m2!1sja!2sjp!4v1656383900346!5m2!1sja!2sjp" style="border:0;" allowfullscreen="" loading="lazy" referrerpolicy="no-referrer-when-downgrade"></iframe>
</div>
</div><!-- /.info-wrapper -->
</div><!-- /#info -->


<div id="form">
<h2 data-en="Form">お問い合せ</h2>
<div class="form-wrapper">
<iframe class="g-form" src="https://docs.google.com/forms/d/e/1FAIpQLSddB3BecnL5eHITYfoVHkzQP_3Ut2K-rj4NZNvmJZoSfAlAaA/viewform?embedded=true" height="1200" frameborder="0" marginheight="0" marginwidth="0">読み込んでいます…</iframe>
</div><!-- /.form-wrapper -->
</div><!-- /#form -->
</main>
<footer>
<p><small>&copy; 2018 - <span id="thisYear"></span> felica</small></p>
<ul class="sns">
<li><img src="img/twitter-brands.svg" alt=""></li>
<li><img src="img/instagram-brands.svg" alt=""></li>
<li><img src="img/line-brands.svg" alt=""></li>
</ul>
</footer>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="js/jquery.bxslider.js"></script>
<script src="js/lightbox.js"></script>
<script>
$(function(){
//ハンバーガー
$('#btn').on('click',function(){
$(this).toggleClass('is-active');
//#g-navをfadeToggle
$('#g-nav').toggleClass('click');
});
//ナビゲーション部分
//#g-nav aをon.clcikしたら
$('#g-nav a').on('click',function(){
//#g-navについている「.click」をremoveClassする
$('#g-nav').removeClass('click');
//#btnについている「.is-active」をremoveClassする
$('#btn').removeClass('is-active');
});


//bxslider
$('.bxslider').bxSlider({
mode: 'fade',//画像の切り替わり方
auto: true,//trueがon
controls: false,//falseはoff
pager: false,
speed: 2000,
pause: 2000,
});

//newsデータの呼び出し
$('#news-list').load('news.txt');

//西暦の取得
let today = new Date().getFullYear();
console.log(today);
$('#thisYear').text(today);
});
</script>

</body>
</html>


style.css

@charset "utf-8";
:root{
--color:#e44616;
--ja:'M PLUS Rounded 1c', sans-serif;
--en:'Josefin Sans', sans-serif;
}


html{box-sizing:border-box;-webkit-text-size-adjust:100%}*,:after,:before{background-repeat:no-repeat;box-sizing:inherit}:after,:before{text-decoration:inherit;vertical-align:inherit}*{padding:0;margin:0;box-sizing:border-box;}audio:not([controls]){display:none;height:0}hr{overflow:visible}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}summary{display:list-item}small{font-size:80%}[hidden],template{display:none}abbr[title]{border-bottom:1px dotted;text-decoration:none}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}code,kbd,pre,samp{font-family:monospace,monospace}b,strong{font-weight:bolder}dfn{font-style:italic}mark{background-color:#ff0;color:#000}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}input{border-radius:0}[role=button],[type=button],[type=reset],[type=submit],button{cursor:pointer}[disabled]{cursor:default}[type=number]{width:auto}[type=search]{-webkit-appearance:textfield}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}textarea{overflow:auto;resize:vertical}button,input,optgroup,select,textarea{font:inherit}optgroup{font-weight:700}button{overflow:visible}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:0;padding:0}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button:-moz-focusring{outline:1px dotted ButtonText}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}button,select{text-transform:none}button,input,select,textarea{background-color:transparent;border-style:none;color:inherit}select{-moz-appearance:none;-webkit-appearance:none}select::-ms-expand{display:none}select::-ms-value{color:currentColor}legend{border:0;color:inherit;display:table;max-width:100%;white-space:normal}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}img{border-style:none;vertical-align: bottom}progress{vertical-align:baseline}svg:not(:root){overflow:hidden}audio,canvas,progress,video{display:inline-block}@media screen{[hidden~=screen]{display:inherit}[hidden~=screen]:not(:active):not(:focus):not(:target){position:absolute!important;clip:rect(0 0 0 0)!important}}[aria-busy=true]{cursor:progress}[aria-controls]{cursor:pointer}[aria-disabled]{cursor:default}::-moz-selection{background-color:#b3d4fc;color:#000;text-shadow:none}::selection{background-color:#b3d4fc;color:#000;text-shadow:none}ul,ol{list-style:none;}a{text-decoration:none;}.wrapper{overflow:hidden;}body{overflow-y:scroll;}img{max-width: 100%;}

/* pcレイアウト */

header{
width: 100%;
height: 100vh;
background-color: #FFFFFF66;
position: absolute;
top: 0;
left: 0;
z-index: 1;
}
h1{
width: 360px;
position: absolute;
top: 60px;
left: 100px;
}


/* ナビゲーション部分 */
#g-nav{
width: 50%;
height: 100vh;
background-color: #444040;
position: fixed;
left: 0;
top: 0;
z-index: 2;
transform: translateX(-100%);
transition: 0.3s;
}
#g-nav.click{
transform: translateX(0);
}
#g-nav>ul{
padding: 50px;
}
#g-nav li{
margin-bottom: 20px;
}
#g-nav a{
display: block;
color: #FFF;
padding: 10px 0;
overflow: hidden;
}
/* #g-nav a:hover{
text-decoration: underline 4px #ef9292;
text-underline-offset: 4px;
} */
#g-nav a::after{
content: "";
display: block;
width: 50%;
height: 4px;
background-color: #ef9292;
/* transform: scale(0); */
transform: translateX(-110%);
transition: 0.2s;
}
#g-nav a:hover::after{
/* transform: scale(1); */
transform: translateX(0);
}



#btn{
position: fixed;
right: 0;
top: 0;
z-index: 3;
background-color: #FFF;
}



/* メインビジュアル部分 */
.main-visual{
width: 100%;
height: 100vh;
margin-bottom: 100px;
}
.main-visual li{
width: 100%;
height: 100vh;
}
.main-visual img{
object-fit: cover;
object-position: center center;
width: 100%;
height: 100%;
}

/* 共通部分 */
h2{
text-align: center;
padding: 40px 0;
font-family: var(--ja);
font-size: 32px;
}
h2::after{
content: attr(data-en);
display: block;
font-size: 20px;
color: var(--color);
font-family: var(--en);
}

/* お知らせ部分 */
#news>dl{
max-width: 800px;
padding: 0 10px;
margin: 0 auto 40px;
display: flex;
flex-wrap: wrap;
}
#news dt{
width: 30%;
border-bottom: 2px solid var(--color);
margin-bottom: 20px;
padding: 10px;
font-weight: bold;
}
#news dd{
width: 70%;
border-bottom: 2px solid var(--color);
margin-bottom: 20px;
padding: 10px;
}

#news dt:nth-of-type(n+4),#news dd:nth-of-type(n+4){
display: none;
}



#more-btn{
width: 240px;
height: 44px;
margin: 0 auto 150px;
}
#more-btn>a{
display: block;
text-align: center;
line-height: 44px;
background-color: var(--color);
color: #FFF;
border-radius: 6px;
}
#more-btn>a::after{
content: "→";
display: inline-block;
margin-left: 1em;
}
#more-btn>a:hover{
text-indent: 1em;
transition: 0.2s;
}




/* ムービー部分 */
.video-wrapper{
width: 60%;
height: 80vh;
margin: 0 auto 100px;
}
.video-wrapper>video{
object-fit: cover;
width: 100%;
height: 100%;
}
.yt-wrapper{
width: 60%;
height: 80vh;
margin: 0 auto 100px;
}
.y-tube{
width: 100%;
height: 100%;
}

/* ギャラリー部分 */
.gallery-wrapper{
max-width: 960px;
padding: 0 10px;
margin: 0 auto 100px;
display: flex;
justify-content: space-between;
}
.gallery-box{
width: calc((100% - 40px) / 3);
}
.heading01 {
display: inline;
font-size: 24px;
background-image: linear-gradient(rgba(0,0,0,0) 70%, var(--color) 70%);
}
.gallery-box>p{
margin-top: 16px;
}

/* インフォ部分 */
.info-wrapper{
max-width: 960px;
padding: 0 10px;
margin: 0 auto 100px;
display: flex;
justify-content: space-between;
}
.tw{
width: 320px;
}
.map{
width: calc(100% - 400px);
height: 500px;
}
.g-map{
width: 100%;
height: 100%;
filter: grayscale(1);
}
/* フォーム部分 */
.form-wrapper{
max-width: 640px;
margin: 0 auto 100px;
}
.g-form{
width: 100%;
}
/* footer部分 */
footer{
width: 100%;
background-color: var(--color);
padding-bottom: 50px;
}
footer>p{
color: #ffffff;
text-align: center;
padding: 30px 0;
font-size: 20px;
}
.sns{
display: flex;
justify-content: center;
}
.sns>li{
width: 40px;
margin: 0 14px;
}



/* 767px以下の時 */
@media (max-width:767px){

/* インフォ部分 */
.info-wrapper{
margin: 0 auto 100px;
display: block;
}
.tw{
margin: 0 auto 70px;
}
.map{
width:100%;
height: 300px;
}
}

/* 640px以下の時 */
@media (max-width:640px){

h1{
width: 180px;
position: absolute;
top: 10px;
left: 10px;
}
#g-nav>ul{
padding: 10px;
}
#g-nav li{
margin-bottom: 10px;
}

/* お知らせ部分 */
#news>dl{
margin: 0 auto 40px;
display: block;
}
#news dt{
width: 50%;
margin-bottom: 0;
}
#news dd{
width: 100%;
margin-bottom: 40px;
}

/* ムービー部分 */
.video-wrapper,.yt-wrapper{
width: 90%;
}

/* ギャラリー部分 */
.gallery-wrapper{
margin: 0 auto 100px;
display: block;
}
.gallery-box{
width: 100%;
margin-bottom: 50px;
}

}