WEBサイト制作の勉強

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

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

cssのみで作るドロップダウンメニュー

コーポレートサイトなど情報量が多いサイトでは、リンク先のページに飛んでからさらにそのページの中から目当てのコンテンツを探さなければならない、といった手間がかかります。
メガドロップダウンメニューであれば、リンク先のページの中の目当てのコンテンツにダイレクトに飛べるので、ユーザーの手間が省けるわけです。ユーザビリティの向上のためにも情報量の多いサイトであれば積極的に使っていきましょう。


メガドロップダウンメニューを採用しているサイト例
www.tiffany.co.jp


www.nike.com


www.kureha.co.jp

<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>ドロップダウンメニューの作成</title>
<style>
html,body,ul,li{
margin:0;
padding:0;
}
ul{
list-style:none;
}
a{
text-decoration:none;
}

.g-nav{
width:600px;
margin:100px auto 0;
}
.g-nav>ul{
display:flex;
position:relative;
}
.g-nav>ul>li{
width:200px;
height:50px;
background:#ED6062;
text-align:center;
line-height:50px;
border-right:1px solid #FFF;
cursor:pointer;
}
.g-nav>ul>li:last-child{
border-right:0;
}
.g-nav>ul>li>a{
display:block;
line-height:50px;
color:#222;
}
.g-nav>ul>li>a:hover{
background:#83AFEB;
}
.drop-menu {
width:100%;
height:400px;
background:#CCC4C4;
position:absolute;
top:50px;
visibility:hidden;
opacity:0;
}
.g-nav>ul>li:nth-child(1):hover>.drop-menu {
visibility:visible;
opacity:1;
transition:0.6s;
}
.drop-menu>li>a{
display:block;
text-align:left;
line-height:50px;
color:#222;
padding-left:50px;
}
.drop-menu>li>a:hover{
background:#B1EBAA;
}
</style>
</head>

<body>
<nav class="g-nav">
<ul>
<li>ボタン1
<ul class="drop-menu">
<li><a href="#">ボタン1-1</a></li>
<li><a href="#">ボタン1-2</a></li>
<li><a href="#">ボタン1-3</a></li>
</ul>
</li>

<li><a href="#">ボタン2</a></li>
<li><a href="#">ボタン3</a></li>
</ul>
</nav>
</body>
</html>

jQueryを記述する上で気をつけるポイント

jQueryはライブラリーという性質上、どうしても動作が重くなってしまいます。PCではあまり気にならなくても、パフォーマンスの低いスマートフォンでは読み込み速度が遅くなる、という事が良くあります。
jQueryを適切に記述する事である程度の改善は出来るので、しっかりと覚えましょう。


セレクターの指定はID

やむを得ずクラス名で指定しなければいけない場合以外は必ず「ID名」を指定しましょう。


同じIDでの指定でも
OK

$("#target").css({'color':'red'});

NG

$("div#target").css({'color':'red'});

同じセレクタは変数化する

OK

var target = $('.target p');
target.css({'background-color':'red'});
target.show();


NG

$('.target p').css({'background-color':'red'});
$('.target p').show();

連続した処理はメソッドチェーンを使う

$('#target p').css({'background-color':'red'}).show();

ファイルデータの大きいjQuery本体をCDNにする事で実際には色々なメリットがあります。

メリット

  • 高速化
  • 他サイトでのキャッシュが期待できる(※)
  • 自サーバーにJQueryを置く必要がない


などですが、
一方、万が一CDNがダウンしてしまった場合などには使えなくなってしまいます。このようなトラブルが起こったときに代替策として、フォールバックという方法があります。

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js"></script>
<!-- CDNが使えない場合は自サーバーに置いたjQueryファイルを読み込む -->
<script>
window.jQuery || document.write('<script src="js/jquery-3.2.1.min.js"><\/script>');
</script>

スクロールアニメーションが簡単に実装できる「Animate on scroll library」

スクロールに合わせて「Fade」「Flip」「slide」「Zoom」の4種類のアニメーションを簡単に実装出来、「duration」などの細かい設定も行えます。

michalsnik.github.io


index.html

<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>AOSを実装してみる</title>
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="css/style.css">
<link rel="stylesheet" href="css/aos.css" media="(min-width:768px)">
</head>
<body>
<div class="container">
<header>
<h1>Animate On Scroll Library</h1>
</header>
<div class="main">
<div class="box">
<h2>ニューヨーク・タイムズスクエア</h2>
<div class="box-inner" data-aos="fade-up" data-aos-delay="300">
<p class="photo"><img src="img/01.png" alt=""></p>
<p class="txt">テキストテキストテキスト<br>テキストテキストテキスト<br>テキストテキストテキスト</p>
</div><!--/.box-inner-->
</div><!--/.box-->
<div class="box">
<h2>京都・清水寺</h2>
<div class="box-inner" data-aos="flip-left">
<p class="photo"><img src="img/02.png" alt=""></p>
<p class="txt">テキストテキストテキスト<br>テキストテキストテキスト<br>テキストテキストテキスト</p>
</div><!--/.box-inner-->
</div><!--/.box-->
<div class="box">
<h2>パリ・シャンゼリゼ通り</h2>
<div class="box-inner"  data-aos="zoom-in-down">
<p class="photo"><img src="img/03.png" alt=""></p>
<p class="txt">テキストテキストテキスト<br>テキストテキストテキスト<br>テキストテキストテキスト</p>
</div><!--/.box-inner-->
</div><!--/.box-->
</div><!--/.main-->
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.2.4/jquery.min.js"></script>
<script src="js/aos.js"></script>
<script>
     AOS.init({
        easing: 'ease-in-out-sine'
      });
</script>
</body>
</html>

style.css

@charset "utf-8";
/* CSS Document */

html,body,h1,h2,p,ul,li{
margin:0;
padding:0;
box-sizing:border-box;
}
ul{
list-style:none;
}
a{
text-decoration:none;
}
img{
vertical-align:bottom;
}
header {
width:25%;
height:100vh;
background:#0E63A0;
position:fixed;
z-index:1000;
}
header::after {
display:block;
content:"";
width:100px;
height:100vh;
background:url(../img/bg.svg) no-repeat center center/cover;
position:absolute;
top:0;
right:-97px;
}
h1 {
color:#FFFFFF;
padding:100px 10px 0;
}
.main {
width:75%;
margin-left:25%;
}
.box {
height:100vh;
padding:0 150px;
}
.box:nth-of-type(2){
background:#C0C0C0;
position:relative;
}
.box:nth-of-type(2)::before {
display:block;
content:"";
width:100%;
height:100px;
background:url(../img/bg2.svg) no-repeat center center/cover;
position:absolute;
top:-98px;
left:0;
}
.box:nth-of-type(2)::after {
display:block;
content:"";
width:100%;
height:100px;
background:url(../img/bg2.svg) no-repeat center center/cover;
position:absolute;
bottom:-98px;
left:0;
transform:rotate(180deg);
}
h2 {
text-align:center;
padding:80px 0 50px;
}
.box-inner{
display:flex;
justify-content:space-between;
}
.box:nth-of-type(2)>.box-inner{
flex-direction:row-reverse;
}
.box-inner img {
max-width:100%;
}
@media (max-width:767px){
header {
width:100%;
height:auto;
position:static;
}
h1 {
padding:20px 10px;
font-size:20px;
text-align:center;
}
.main {
width:100%;
margin-left:0;
}
.box {
height:auto;
padding:50px 10px 0;
}
h2 {
text-align:center;
font-size:18px;
padding:20px 0 10px;
}
.box-inner{
display:block;
}
.photo{
margin-bottom:20px;
}
.txt{
text-align:center;
margin-bottom:40px;
}
}

デモ
yachin29.com



plusgraph-ca.jp


www.taguchi.co.jp

ワイヤーフレームの作成

ワイヤーフレームとは「サイトの設計図」です。
サイトを作成する前に「何を・どこに・どのように」画面に配置するかを明らかにする事で、実際の作成作業をスムーズに進める事が出来ます。また複数人で作業する場合やクライアントとデザインイメージを共有する場合にも必要になってきます。

f:id:yachin29:20180501132842p:plain


デザインルールの一例
  • ワイヤーの段階で色を入れない
  • ファーストビュー(高さ700px前後)を意識する
  • 複数ページの場合、ヘッダー、ナビゲーションは基本的に全ページ共通


今回は既存サイトを元にワイヤーを作成していきます。






www.wirify.com




www.webcreatorbox.com



markehack.jp



cacoo.com


https://www.justinmind.com/www.justinmind.com


goworkship.com

第3回実技試験ー再試験

再試験のチェック項目

  • レスポンシブ化(ブレイクポイント:640px)配点:50点
  • スムーススクロールでアニメーションしながらトップに戻る
  • h1にgoogle fontsを適用させる
  • GoogoleMapをサイト内に表示させる(レスポンシブ化)
  • 適切な余白を入れる
  • .boxをhoverしたときにcssでスタイルに変化をつける

f:id:yachin29:20190924133325p:plain

cssの正規表現を使って要素を絞り込む

divなどの要素に複数のクラス名を付けてcssでコントロールする、という事自体は以前からやって来ましたが、クラス名が増え過ぎてしまうと、逆にコントロールし難くなってしまいます。
そういう場合に正規表現を上手に使う事でコントロールしたい要素を絞り込む事が出来ます。

<div class="box-a"></div>
<div class="box-b"></div>
<div class="box-c"></div>

クラス名の行頭を一致させる場合

div[class^="box"] {
 
}

クラス名の行末を一致させる場合

div[class$="◯◯"] {
 
}

クラス名の部分一致させる場合

div[class*="◯◯"] {
 
}

Sassのfor文を使ってループ処理する

@for $i from 1 through 8 {
    $width: percentage(1 / $i);
    .col#{$i} {
      width: $width;
    }
}

jQueryでのcookieの指定

Cookie(クッキー)とは?

Cookie(クッキー)とは、ホームページを訪問した ユーザーの情報を一時的の保存する仕組み、またはそのデータです。ID、パスワード、メールアドレス、訪問回数などが ユーザー情報として保存されます。これによって再訪問したときに ユーザーを特定し、情報を入力する手間が省けます。ショッピングサイトに訪問したとき、すでにログイン状態になっている、以前カートに入れた商品がそのまま残っているのは、Cookie機能がはたらいているからです。


似たような機能でSessionという機能がありますが、Cookieはクライアント側にデータを保存するのに対して、Sessionはサーバー側に保存されてるため機密性の高いデータを扱う場合はSessionを使った方が良いでしょう。



github.com

<script>
  $(function(){
 if($.cookie("access")){
 //既に訪問済みの場合
    
    } else {
 //未訪問の場合
     
    };
     $(window).load(function(){
		$.cookie("access",$('body').addClass('access'));
  });
  });
 </script>