WEBサイト制作の勉強

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

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

.matchMedia()を使ってハンバーガーメニューを作成する

window.matchMedia

window.matchMediaというメソッド使用することでCSS側に記述するブレイクポイントの記述と同じような形でJS側の判定条件を記述する事ができます。

例 1000pxまではjsを有効にさせる

$(window).on('load resize', function(){
if(window.matchMedia('(max-width:1000px)').matches) {

1000px以下で有効にさせたいjquery

}else{
1001px以上で有効にさせたいjquery

});

ナビゲーションを作成

Toggleを使う場合、「:not(:animated)」を設定しないとボタンをクリックした回数分スライドしてしまうので、「:not(:animated)」の設定をしましょう。
またスマホのの場合、resizeイベントの解釈がiOSandroidで微妙に違うので注意が必要です。

$(function(){
var windowWidth = $(window).width();

$(window).on('load resize',function(){

var ww = $(window).width();
if(windowWidth != ww) {
if(window.matchMedia('(max-width:767px)').matches){
//スマホの時
  $('nav').hide();
  $('#ham-btn').removeClass('click');
}else{
	$('nav').show();
};
 windowWidth = ww;
        }
});
   $('#ham-btn').on('click',function(){
   $(this).toggleClass('click');
   $('nav:not(:animated)').slideToggle(100);
  });
});

ユーザーエージェントでスマホかPCか判別してやる方法もあります

ユーザーエージェント

ユーザーエージェント(UserAgent)とはウェブサイトに訪問する際「Google Chromeからアクセスしています」「iPhoneからアクセスしています」などのどんな環境でアクセスしているのかの利用者の情報のことを言います。
ウェブサイトにアクセスする際にはこのユーザーエージェントを必ず送ることになっています。


今回のパターンはPC・タブレットであればjQueryを有効に。スマホiPhoneAndroid)であればjQueryを無効にします。
「!」エクスクラメーションマーク (exclamation mark)とは、Javascriptでは否定の意味で使われます。

if(!navigator.userAgent.match(/(iPhone|Android)/)){
$(function(){
//ここにjQueryの記述
});
}


逆にPC・タブレットであればjQueryを無効に。スマホiPhoneAndroid)であればjQueryを有効の場合

if(navigator.userAgent.match(/(iPhone|Android)/)){
$(function(){
//ここにjQueryの記述
});
}

また、PCであればjQueryを無効に。スマホiPhoneAndroid)とタブレットiPad)であればjQueryを有効の場合

if(navigator.userAgent.match(/(iPhone|iPad|Android)/)){
$(function(){
//ここにjQueryの記述
});
}


このように「|」で区切って自身でユーザーエージェントを追加する事も出来ます。

フリー素材集

3月3日の作業データ

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>レストランサイトの作成</title>
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/jquery.bxslider.css">
<link rel="stylesheet" href="css/hamburgers.css">
<link rel="stylesheet" href="css/lightbox.css">
</head>
<body>
<header>
<h1><img src="img/logo.svg" alt=""></h1>
</header>
<nav id="g-nav">
<ul>
<li><a href="#">Top</a></li>
<li><a href="#news">News<span>ニュース</span></a></li>
<li><a href="#video">Video<span>動画</span></a></li>
<li><a href="#menu">Menu<span>お品書き</span></a></li>
<li><a href="#">Shop<span>店舗情報</span></a></li>
<li><a href="#">Reserve<span>ご予約</span></a></li>
</ul>
<div class="sns">
<p><a href="#"><img src="img/twitter-brands.svg" alt=""></a></p>
<p><a href="#"><img src="img/facebook-brands.svg" alt=""></a></p>
<p><a href="#"><img src="img/instagram-brands.svg" alt=""></a></p>
<p><a href="#"><img src="img/line-brands.svg" alt=""></a></p>
</div>
</nav>
<div class="main-visual">
<ul class="bxslider">
<li><img src="img/slide01.jpg"></li>
<li><img src="img/slide02.jpg"></li>
<li><img src="img/slide03.jpg"></li>
</ul>
</div>
<p class="hamburger hamburger--spring" id="btn">
<span class="hamburger-box">
<span class="hamburger-inner"></span>
</span>
</p>

<main>
<div id="news">
<h2>News</h2>
<dl id="news-list">

</dl>
</div>

<div id="video">
<h2>Video</h2>
<div class="video-inner">
<video src="img/video.mp4" controls></video>
</div>
</div><!-- /#video -->

<div id="menu">
<h2>Menu</h2>

<div class="menu-wrapper">
<div class="menu-box">
<a href="img/01.jpg" data-lightbox="menu">
<img src="img/01.jpg" alt="">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum pariatur atque odio omnis. Harum, et.</p>
</a>
</div><!-- /.menu-box -->

<div class="menu-box">
<a href="img/02.jpg" data-lightbox="menu">
<img src="img/02.jpg" alt="">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum pariatur atque odio omnis. Harum, et.</p>
</a>
</div><!-- /.menu-box -->

<div class="menu-box">
<a href="img/03.jpg" data-lightbox="menu">
<img src="img/03.jpg" alt="">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum pariatur atque odio omnis. Harum, et.</p>
</a>
</div><!-- /.menu-box -->

<div class="menu-box">
<a href="img/04.jpg" data-lightbox="menu">
<img src="img/04.jpg" alt="">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum pariatur atque odio omnis. Harum, et.</p>
</a>
</div><!-- /.menu-box -->

<div class="menu-box">
<a href="img/05.jpg" data-lightbox="menu">
<img src="img/05.jpg" alt="">
<p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Illum pariatur atque odio omnis. Harum, et.</p>
</a>
</div><!-- /.menu-box -->

</div><!-- /.menu-wrapper -->
</div><!-- /#menu -->





</main>
<footer>

</footer>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
<script src="js/script.js"></script>
<script src="js/lightbox.js"></script>
<script src="js/jquery.bxslider.js"></script>
<script>
$(function(){
  $('.bxslider').bxSlider({
  mode: 'fade',
  auto: true,
  controls: false,
  pager: false,
  speed: 2000,//画像が差し代わる秒数
  pause: 2000//画像が止まっている時間
  });
});
</script>
</body>
</html>


style.css

@charset "utf-8";

:root{
--main_color:#802525;
}

header{
width: 100%;
height: 100vh;
background-color: rgba(255, 255, 255, 0.3);
position: absolute;
top: 0;
left: 0;
z-index: 12000;
}
h1{
width: 320px;
position: absolute;
left: 80px;
top: 300px;
}
#btn{
position: fixed;
right: 20px;
top: 20px;
z-index: 20000;
background-color: rgba(255, 255, 255, 0.7);
}

/* ナビゲーション部分 */
#g-nav{
width: 100%;
height: 100vh;
background-color: var(--main_color);
position: fixed;/* 要素を固定にする */
top: 0;
left: 0;
z-index: 15000;
display: none;
}
#g-nav>ul{
width: 60%;
margin: 60px auto 0;
background-color: #ececec;
display: flex;
flex-wrap: wrap;
padding: 30px 60px;
}
#g-nav li{
width: 50%;
}
#g-nav a{
display: block;
color: #222;
font-size: 18px;
font-weight: bold;
margin-bottom: 20px;
}
#g-nav a:hover>span{
text-decoration: 3px underline #15218f;
text-underline-offset: 3px;
}
#g-nav span{
display: block;
color: var(--main_color);
font-size: 24px;
font-weight: normal;
margin-top: 10px;
}
.sns{
display: flex;
justify-content: center;
}
.sns>p{
width: 40px;
margin: 70px 20px 0;
}




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

/* p:nth-of-type(-n+2){
color: red;
font-size: 20px;
} */

/* 共通部分 */
h2{
text-align: center;
font-size: 30px;
margin: 50px 0 30px;
color: var(--main_color);
}
/* news部分 */
#news-list{
max-width: 800px;
margin: 0 auto 100px;
display: flex;
flex-wrap: wrap;
}
#news-list>dt{
width: 30%;
border-bottom: 2px solid var(--main_color);
padding: 16px;
margin-bottom: 10px;
}
#news-list>dd{
width: 70%;
border-bottom: 2px solid var(--main_color);
padding: 16px;
margin-bottom: 10px;
}
#news-list>dt:nth-of-type(n+5),#news-list>dd:nth-of-type(n+5){
display: none;
}


/* 動画部分 */
.video-inner{
width: 60%;
height: auto;
margin: 0 auto 100px;
}
.video-inner>video{
object-fit: cover;
object-position: center center;
width: 100%;
height: 100%;
}

/* menu部分 */
.menu-wrapper{
max-width: 960px;
margin: 0 auto 100px;
display: flex;
flex-wrap: wrap;
gap:40px 20px;/* 上下、左右の空き */
}
.menu-box{
width: calc((100% - 40px) / 3);
}
.menu-box>a{
color: #222;
line-height: 1.5;
display: block;
padding: 10px;
transition: 0.2s;
}
.menu-box>a:hover{
box-shadow: 0 0 10px #AAA;
}
.menu-box img{
margin-bottom: 10px;
}


script.js

$(function(){
//ハンバーガーメニュー
$('#btn').on('click',function(){
$(this).toggleClass('is-active');
$('#g-nav').fadeToggle(400);
});

//newsデータを呼び出す
$('#news-list').load('news.txt');
});

フルスクリーンナビゲーションの作成

PCレイアウト時にもナビゲーションを隠し、ハンバーガーメニューを付け、全画面で表現をする機会が増えてきました。サイトに合わせた構成をいくつか覚えておきましょう。


webdesignday.jp





https://pulpxstyle.com/post-214/pulpxstyle.com



sparty.jp


anz-homecare.com


baigie.me

2月17日の作業データ

<!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>ホバーアニメーション</title>
<style>
html,body,h1,h2,p{
margin: 0;
padding: 0;
}
img{
vertical-align: bottom;
}
h1{
text-align: center;
margin: 50px 0 30px;
}

.wrapper{
width: 960px;
margin: 0 auto;
display: flex;
justify-content: space-between;
}
.photo-box{
width: 300px;
position: relative;
overflow: hidden;
}
.caption{
width: 300px;
height: 200px;
background-color: rgba(0,0,0,0.5);
color: #FFF;
position: absolute;
top: 0;
left: 0;
opacity: 0;
transition: 0.2s;
}
.caption:hover{
opacity: 1;
}
.caption2{
position: absolute;
top: 0;
left: -300px;
width: 300px;
height: 200px;
background-color: rgba(0,0,0,0.5);
color: #FFF;
transition: 0.2s;
}
.photo-box:hover>.caption2{
left: 0;
}
.photo-box>.img-03{
transition: 0.2s;
}
.photo-box:hover>.img-03{
transform: scale(1.2);
}
</style>
</head>
<body>
<h1>Hover-animation</h1>
<div class="wrapper">
<div class="photo-box">
<img src="img/01.jpg" alt="">
<div class="caption">
<h2>商品名</h2>
<p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Autem, obcaecati?</p>
</div>
</div>

<div class="photo-box">
<img src="img/02.jpg" alt="">
<div class="caption2">
<h2>商品名</h2>
<p>Lorem ipsum dolor, sit amet consectetur adipisicing elit. Autem, obcaecati?</p>
</div><!-- /.caption2 -->
</div><!-- /.photo-box -->

<div class="photo-box">
<img class="img-03" src="img/03.jpg" alt="">
</div>
</div>
</body>
</html>

複数ページの制作

最近ではシングルページのサイトもよく見かけますが、ほとんどのサイトは複数ページをリンクさせていくという形でこちらの方が一般的です。
複数ページでサイトを作る際に気をつけないといけないのがフォルダー構成です。





developers.google.com





上記の事を踏まえて、以下のようにページ毎にフォルダーを作り、中のファイルは必ずindex.htmlという名前にしましょう。

f:id:yachin29:20160816004934j:plain



https://developers.google.com/search/docs/beginner/seo-starter-guide?visit_id=637429075069265959-3050504082&rd=1




nipponcolors.com



今回は5ページ構成のサイトを作ってみましょう。



使用するテキスト一例
ーーーーーーーーーーーーーーーーーーーーーーーーー

日本の四季

トップ
日本の春
日本の夏
日本の秋
日本の冬


四季の移り変わり
日本の気候は温暖でおだやかで、しかも春夏秋冬という四季にめぐまれています。
春には三寒四温、三日間寒さが続くと四日間暖かい日が続き、
そうしているうちに桜が咲き、夏が来る。
そして秋になり、また冬を迎える。
このように、日本の気候は少しづつ微妙に季節の顔を変えながら、こまやかに移り変わっていくのです。
春夏秋冬という四季に彩られた日本は、その恩恵ともいうべき、ゆたかな自然にもめぐまれ、その季節に応じたさまざまな文化を育んできたのです。



日本の春
「サクラ」の名称の由来は、一説に「咲く」に複数を意味する「ら」を加えたものとされ、元来は花の密生する植物全体を指したと言われている。また他説として、春に里にやってくる稲(サ)の神が憑依する座(クラ)だからサクラであるとも考えられている。
富士の頂から、花の種をまいて花を咲かせたとされる、「コノハナノサクヤビメ(木花之開耶姫)」の「さくや」をとって「桜」になった、とも言われている。



日本の夏
夏は、四季のひとつで、春と秋にはさまれた季節。天文学的には夏至から秋分まで。太陽暦では6月から8月を指し、陰暦では4月から6月となる。 四季の区分のある土地では最も気温の高い、3ヶ月程度の期間である。北半球ではグレゴリオ暦の6月 - 8月ごろ、南半球では12月 - 2月ごろである。
日本で炎天下に咲く花としてはヒマワリやサルスベリが有名。夏の風物詩としてはアサガオも代表格。


日本の秋
普段、葉が緑色に見えるのはクロロフィルが含まれるからであるが、寒くなり日照時間が短くなるとクロロフィルが分解される。また、葉柄の付け根に離層という特殊な水分を通しにくい組織ができ、葉で作られた水溶性のブドウ糖や蔗糖などの糖類やアミノ酸類が葉に蓄積し、その糖から光合成を利用して新たな色素が作られたりする。その過程で葉の色が赤や黄色に変化し、紅葉が起こる。


日本の冬
黒姫山斑尾山妙高山戸隠山飯綱山とともに北信五岳のひとつに数えられている山で、今から約17万年前ごろから火山活動を初め、4万年前ごろに現在の中央火口丘である小黒姫山(2,046m)を形成した。外輪山と中央火口丘の間には火口原が広がり七ツ池がある。南東方向より見た整った姿から信濃富士とも呼ばれている。
古くから信仰の対象とされ、黒姫というお姫様の悲話伝説(黒姫伝説)があり、山名の由来になったと言われている。冬季には黒姫高原スノーパークでスキーやスノーボードが楽しめる。


Copyright 日本の四季 All Rights Reserved

CSS基礎

CSSCascading Style Sheets

CSSとは、HTMLの要素をどのように修飾(表示)するかを指示する、W3Cによる仕様の一つ。HTMLによる文書構造と体裁を分離させるという理念を実現する為に提唱されたスタイルシートの具体的な仕様の一つ。

h1やpなどの意味付けはHTML

色や大きさやレイアウトなどはCSS


www.csszengarden.com


エンベットによる記述方法
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title></title>
<style>
</style>
</head>
<body>
</body>	
</html>
外部ファイルによる記述方法
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title></title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
</body>	
</html>

CCSの記述ルール

f:id:yachin29:20160308130715g:plain


最初に覚えるべきプロパティ

  • color = 文字の色
  • font-size = 文字の大きさ
  • background-color = 背景の色
  • width = 横幅
  • height = 高さ
  • margin = 要素の外側の空き
  • padding = 要素の内側の空き
  • border = 線の種類・太さ・色を指定する
主な線の種類
  • solid = 1本線で表示されます。
  • double = 2本線で表示されます。
  • dashed = 破線で表示されます。
  • dotted = 点線で表示されます。


www.tagindex.com