WEBサイト制作の勉強

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

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

既存サイトのトレース ニュースリリース部分

f:id:yachin29:20160906013820j:plain

前回はdl要素を使いましたが、今回はli要素でマークアップをしていきましょう。


文章構造

<div id="News_area">
<div id="News_release">
<h2 id="News_click">ニュースリリース</h2>
<ul  id="News_text">
<li><span>2016年9月2日</span><a href="#">[スプリングバレーブルワリー東京(代官山)限定]「秋三昧」を新発売</a></li>
<li><span>2016年9月1日</span><a href="#">「のどごし〈生〉」の新CMがスタート</a></li>
<li><span>2016年9月1日</span><a href="#">「グランドキリン 十六夜お月見ボックス」を数量限定で発売</a></li>
<li><span>2016年9月1日</span><a href="#">『セブンプレミアム アンデスキーパー カベルネ・ソーヴィニヨン 750ml/ソーヴィニヨン・ブラン 750ml』を発売</a></li>
<li><span>2016年8月31日</span><a href="#">「ギュギュッと搾ったサングリア 赤ワイン×ピーチ&ストロベリー&ラズベリー」新発売</a></li>
<li><span>2016年8月30日</span><a href="#">「キリン 氷結® ハロウィンオレンジ<期間限定>」発売中止について</a></li>
<li><span>2016年8月30日</span><a href="#">「キリン 本搾り™ハイボール グレープフルーツ&ライム<期間限定>」を発売</a></li>
</ul>
</div>

<div id="banner">
<h2>お知らせ</h2>
<ul>
<li><a href="#">「午後の紅茶」キャンペーン景品の自主回収に関するお詫びとお知らせ</a></li>
<li><a href="#">弊社グループに関する不審な投資勧誘にご注意ください</a></li>
<li><a href="#"><img></a></li>
<li><a href="#"><img></a></li>
<li><a href="#"><img></a></li>
<li><a href="#"><img></a></li>
</ul>
</div>
</div><!--/#News_area-->

アコーディオンパネルの導入

コーディングが終わったら、アコーディオンパネルを導入しましょう。
さらにスマホレイアウト(640px以下)のみの時に動くように条件分岐していきましょう。

.resize( )

ブラウザのウインドウをリサイズした時に引数のfunctionを実行します。また引数に何も設定しない場合は、要素に設定されたリサイズ時の処理を実行します。セレクタにはwindowsを指定しなければなりません(documentやhtmlでは機能しません)。

前回のモバイルファーストの際に使用した「.width」は1回1回リロードしないと現在のwidthを取得しませんが、今回の「.resize」はリロードする必要が無いので非常に便利ですが、使うには注意が必要です。

$(window).resize(function(){
$('#News_click').on('click touchstart',function(){
if($(window).width() <= 640){ 
	$('#News_text').slideToggle();
}
});
});

この記述だと、ul部分が縦にスクロールしても「.resize」が適応されるため、ulが開いた直後にもう1度「.slideToggle」が効いてしまうので、スクリプトの書き換えが必要になります。

モバイルファーストを意識したレスポンシブデザインサイトの制作 2

授業で制作を進めているモバイルファーストを意識したRWDサイト(netsmart)のモバイルサイト部分を完成させましょう。

完成例

今回組み込むjQuery

アコーディオンパネルの追加

h2に既にグラデーションの指定をしてるため、h2にspanタグを追加して、そこに背景画像を指定しましょう。さらにアコーディオンパネルに必要なクラス名も追加しておきましょう。

<section class="seminar toggle">
<h2><span>セミナー</span></h2>
<dl class="informationLink">
<dt>2016年8月11日</dt><dd><a href="#">テキストテキストテキストテキストテキスト</a></dd>
<dt>2016年7月19日</dt><dd><a href="#">テキストテキストテキストテキストテキスト</a></dd>
<dt>2016年7月14日</dt><dd><a href="#">テキストテキストテキストテキストテキスト</a></dd>
<dt>2016年7月10日</dt><dd><a href="#">テキストテキストテキストテキストテキスト</a></dd>
<dt>2016年6月29日</dt><dd><a href="#">テキストテキストテキストテキストテキスト</a></dd>
</dl>
</section><!--/seminar-->

<section class="information toggle close">
<h2><span>お知らせ</span></h2>
<dl class="informationLink">
  <dt>2016年3月18日</dt><dd><a href="#">採用情報を更新しました</a></dd>
  <dt>2016年3月11日</dt><dd><a href="#">実績紹介を更新しました</a></dd>
  <dt>2016年3月1日</dt><dd><a href="#">サービスが紹介されました</a></dd>
  <dt>2016年2月25日</dt><dd><a href="#">社内ブログを開設しました</a></dd>
</dl>
</section><!--/information-->


スタイルシート

.seminar h2,
.information h2 {
  display: block;
  font-size: 16px;
  font-weight: bold;
  line-hegiht: 1;
  padding: 12px 10px;
}

の部分にspanを追加

/*spanを追加*/
.seminar h2 span,
.information h2 span {
  display: block;
  font-size: 16px;
  font-weight: bold;
  line-hegiht: 1;
  padding: 12px 10px;
}


アコーディオンパネルの背景画像の指定

/*  アコーディオンメニュー
---------------------------------------------------------- */

.toggle h2 span {
background:url(../img/icon_minus_white.png) no-repeat 100% 50%;
}
.toggle.close h2 span {
  background: url(../img/icon_plus_white.png) no-repeat 100% 50%;
}
.toggle h2 {
  cursor: pointer;
}
.toggle.close dl {
  display: none; /*クラス名「close」が付いていない状態のスタイル*/
}


jQuery

 // アコーディオン
$('.toggle').find('h2').on('click touchstart',function(){
 $(this).siblings('dl').slideToggle(300, function(){
   $(this).parent().toggleClass('close');
   });
  });

ハンバーガーメニューの導入

nav 部分のhtmlに要素を追加しましょう。

<nav class="menu">
<p id="menuToggle">メニュー<a href="#" id="panel-btn"><span id="panel-btn-icon"></span></a></p>
<ul id="panel">
  <li class="service"><a href="#"><div>サービス紹介</div></a></li>
  <li class="proven"><a href="#"><div>実績紹介</div></a></li>
  <li class="corporate"><a href="#"><div>会社概要</div></a></li>
  <li class="recruit"><a href="#"><div>採用情報</div></a></li>
</ul>
</nav>


ハンバーガーメニューのスタイルシート

/*  ハンバーガーメニュー
---------------------------------------------------------- */
#globalHeader nav {
  float: right;
}
#globalHeader nav p#menuToggle {
  display: block;
  background: #2b2b2b;
  background: -webkit-linear-gradient(top, #eeedf2 1%, #717171 4%, #2b2b2b 84%);
  background: linear-gradient(to bottom, #eeedf2 1%, #717171 4%, #2b2b2b 84%);
  border: 1px solid #444;
  border-radius: 5px;
  color: #fff;
  line-height: 36px;
  padding-left: 6px;
}
#panel-btn {
  float: right;
  background-image: url(../img/bg_line.png);
  background-position: 0 60%;
  background-repeat: repeat-y;
  background-size: 2px auto;
  position: relative;
  width: 36px;
  height: 36px;
  border-radius: 5px;
  padding-left: 20px;
  margin-left: 10px;
}
#panel-btn-icon {
  display: block;
  position: absolute;
  top: 50%;
  left: 50%;
  width: 22px;
  height: 2px;
  margin: -1px 0 0 -11px;
  transition: .2s;
  background: #FFF;
}
#panel-btn-icon:before, #panel-btn-icon:after {
  display: block;
  content: "";
  position: absolute;
  top: 50%; left: 50%;
  width: 22px;
  height: 2px;
  margin-left: -11px;
  background: #FFF;
  transition: .3s;
}
#panel-btn-icon:before {
  margin-top: -8px;
}
#panel-btn-icon:after {
  margin-top: 6px;
}
#panel-btn .close {
  background: transparent;
}
#panel-btn .close:before, #panel-btn .close:after {
  margin-top: 0;
}
#panel-btn .close:before {
  transform: rotate(-45deg);
}
#panel-btn .close:after {
  transform: rotate(-135deg);
}
#globalHeader nav ul {
  display: none;
}

/*クリックしたら出てくるメニュー部分*/
ul#panel {
  background: #333;
  border-bottom: 1px solid #000;
  box-shadow:0 3px 5px 0px rgba(0, 0, 0, 0.4);
  display: block;
  position: absolute;
  left: 0;
  top: 50px;
  width: 100%;
  z-index: 99999;
}
ul#panel li {
  border-top: 1px solid #000;
}
ul#panel li a {
  border-top: 1px solid #666;
  color: #fff;
  display: block;
  padding: 10px;
}
ul#panel li:first-child,
ul#panel li:first-child a {
  border-top: none;
}

ハンバーガーメニューのjQuery

 // メニュー
  $("#panel-btn").on('click touchstart',function() {
    $("#panel").slideToggle(200);
    $("#panel-btn-icon").toggleClass("close");
    return false;
  });


yachin29.hatenablog.com

JavaScriptをオンラインで学習する

サイト制作を通して、プラグインに頼らず自身でJavaScriptjQueryを打てるようになりたい!と思った人も多いと思います。
あまりコストをかけずにJavaScriptを学びたい人にとっては、やはりオンラインサービスを使うのが良いかもしれません。



今は無料で便利なオンライン学習サービスが沢山あるので、この機会にもう一度JavaScriptを勉強し直すのも良いでしょう。
授業の中で使用しているprogate以外のオンラインサービスをいくつか。

初心者用

CODEPREP(コードプレップ)
CODEPREPは、出された課題に対してオンライン上のエディタに直接書き込みながら進めるサイトです。基礎編では演算や変数など初歩的な内容から始まり、条件分岐、繰り返し、配列、関数と進み、最後にDOMを学習します。さらにこの言語に興味を持った場合などは、応用編にチャレンジすることもできます。
codeprep.jp



paiza.IO

paiza.IOは、ブラウザ上でコードが書け、書いたコードをその場で実行出来るオンラインプログラム実行環境です。
Web-based online coding environment | paiza.IO

paiza.hatenablog.com

jsdo.it

JS実行系サービスの中でも珍しい日本製サイトで、英語・中国語にも対応しています。書いたコードは公開・非公開が選べます。
jsdo.it

ドットインストール

「3分動画でマスターするプログラミング学習サイト(初心者向け)」と謳われているサイトです。様々なプログラミング言語フレームワークの初心者向けレッスンを動画で配信しています。
http://dotinstall.com/

CodeAcademy

日本語に対応はしていませんが、充実のコンテンツを無料で受講することができます。
www.codecademy.com



ある程度JavaScriptが理解出来たら

paizaのスキルチェック問題

paiza.jp

CODECOMBAT

フルボイスの本格RPGJavaScriptが学べるCODECOMBAT。
codecombat.com

Illustratorで放射状のオブジェクトを作る

よくバナーなんかで見る、放射状の背景。

こんなやつです。

f:id:yachin29:20160819234847p:plain
http://retrobanner.net/archives/6923


f:id:yachin29:20160819235108j:plain
http://retrobanner.net/archives/6895


作り方は色々なやり方がありますが、1番簡単なのは楕円を線のみにして、「線幅」と破線の「線分」と「間隔」で調整するやり方です。



1、まずは300✕250の長方形を作り、塗りの色を放射状の片方の色に設定する。塗りのみで線は無し。
2、楕円形ツールで60pxの正円を作り、整列パレットで中心に移動。
f:id:yachin29:20160819232837j:plain


3、円は線のみで塗りは無し。線の色は放射状のもう片方の色を指定。
f:id:yachin29:20160819233025j:plain


4、線パレットを出して、今回は細めの放射状を作りたいので「線幅」を1000px。破線にチェックを入れ「線分:
6px」と「間隔:6px」。この辺の値は放射状の線の細さや間隔によって変わります。
f:id:yachin29:20160819233610j:plain


これで、簡単に放射状のオブジェクトが出来ました。
あとは文字にアピアランスを掛け、袋文字などにしてみましょう。

文字をアウトライン化せずにグラデーションをかける方法

通常、文字はアウトライン化しパスにしてからグラデーションをかけますが、今回はテキストオブジェクトのままグラデーションをかける方法です。

まずはテキストツールで文字を書き、「塗り:無し」「線:無し」に設定します。
もちろん「塗り」も「線」も無しなので何も見えなくなります。
f:id:yachin29:20160820113836j:plain


次にアピアランスパネルを出して、新規塗りを追加します。
f:id:yachin29:20160820124913j:plain


新規塗りで追加した塗りに対してグラデーションを掛けます。
f:id:yachin29:20160820114419j:plain


グラデーションの色を調整しそれっぽくして、線を追加し袋文字に。
f:id:yachin29:20160820124440j:plain


最後に必要な文字や菱型などの飾りを追加しかんせいです。
f:id:yachin29:20160820123559p:plain

今回のポイント

今回、文字にアピアランスを設定する前に、塗りと線を一旦無しにしました。簡単に言うとその後の作業効率を高めるためですが、
詳しくは以下のブログに書いてあるので、興味のある人は見ておきましょう。

www.dtp-transit.jp

「 display: table」を使ったタブパネル

これまでHTML上でスタティック(縦)に並んでしまう要素を横並びにする方法として、

  • float
  • inline、inline-block

などを用いてきましたが、今回は「 display: table」を使い横並びに。さらにjQueryを使ってタブパネルにしてみます。

 

「 display: table」とは一言でいうと、table要素のような表示にする為のスタイルです。


display: tableの特徴

  • カラム落ちしない
  • すべてのカラムの高さは、一番縦長と同じ高さになる
  • 上下中央揃えに出来る

等、floatでは難しいレイアウトが作れるので、用途に分けて使い分け出来るようにしましょう。

 

通常、「 display: table」は「table-cell」と併用する事が多く、「table-cell」を使えば要素を簡単に均等に表示出来るので、レスポンシブデザインやスマートフォンサイトにも向いています。
IE6~7では「 display: table」が使えませんでしたが、IE8以降のほとんどのモダンブラウザーで使えるようになっています。

使用するjQueryメソッド

parentメソッド

指定した要素の「親」要素を選択します。親要素とは階層構造(入れ子構造)において直上にある要素のことです。
名前が似ているparentsメソッドはparentメソッドと異なり「先祖」要素も選択します。

addClassメソッド

指定した要素に引数で設定したクラス(class属性)を追加します。引数にはfunctionを指定することも可能で、条件によって追加するクラスを変更するなど高度な処理にも対応できます。

siblingsメソッド

指定した要素の兄弟要素(同じ階層の要素)を選択します。引数を設定しない場合はすべての兄弟要素を選択します。

removeClassメソッド

指定した要素から引数に設定したクラス(class属性)を削除します(引数を設定しない場合には全てのクラスを削除します)。引数にはfunctionを指定することも可能で、条件によって削除するクラスを変更するなど高度な処理にも対応できます。

「 display: table」を使ったタブパネル

f:id:yachin29:20150828022147j:plain
display-tableを使ったタブパネル




index.html

<!doctype html>
<html lang="ja">
<head>
<meta charset="utf-8">
<title>display-tableを使ったタブパネル</title>
<link rel="stylesheet" href="css/style.css">
<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<script src="js/script.js"></script>
</head>
<body>
<section id="panel">
<h1>世界の街並み</h1>
<ul class="tab">
<li class="current"><a href="#ny">ニューヨーク</a></li>
<li><a href="#kyoto">京都</a></li>
<li><a href="#paris">パリ</a></li>
<li><a href="#goldcoast">ゴールドコースト</a></li>
</ul>

<div class="tabContents current" id="ny">
<div class="round">
<p><a href="#">
<img src="img/01.png" alt=""></a></p>
</div> <!--/.round-->
<p class="text">タイムズ・スクエアは、ニューヨーク・マンハッタン島の42丁目と7番街、ブロードウェイの交差を中心に位置する。ここの交差点は世界の交差点と言われる。</p>
</div><!--/.tabContents-->

<div class="tabContents" id="kyoto">
<div class="round">
<p><a href="#"><img src="img/02.png" alt=""></a></p>
</div>
<p class="text">清水寺は、京都府京都市東山区清水にあり平安京遷都以前からの歴史をもつ、京都では数少ない寺院の1つである。日本有数の観光地で、季節を問わず多くの参詣者が訪れる。</p>
</div>


<div class="tabContents" id="paris">
<div class="round">
<p><a href="#"><img src="img/03.png" alt=""></a></p>
</div>
<p class="text">凱旋門は1806年、ナポレオン・ボナパルトの命によって建設が始まった。ナポレオンは凱旋門が完成する前に死去しており、彼がこの門をくぐったのは死後パリに改葬された時であった。</p>
</div>

<div class="tabContents" id="goldcoast">
<div class="round">
<p><a href="#"><img src="img/04.png" alt=""></a></p>
</div>
<p class="text">海岸線が約50kmにわたって広がっており、世界的に有名なサーフポイントがいくつかある。海岸沿いには多くの高層マンションやホテルが建てられ、世界中から観光客がやってくる。</p>
</div>
</section>
</body>
</html>

style.css

@charset "utf-8";

/* reset */
html, body, div, h1, h2, h3, h4, h5, h6,p, blockquote, pre, 
address,ul, ol, li, dl, dt, dd,table, th, td, form, fieldset {
  margin: 0;
  padding: 0;
  line-height: 1.0;
  font-family:
    "Hiragino Kaku Gothic ProN",
    Meiryo, 
    sans-serif;
}
table {
  border-collapse: collapse;
  border-spacing: 0;
}
ul, ol {
  list-style: none; /* マーカーを消す */
}
a {
  text-decoration: none; /* 下線を消す */
}
img {
  border: 0;
}
img, input {
  vertical-align: bottom;
}
 article, aside, dialog, figure, footer, header,
 main, menu, nav, section { display: block; }

/*  レイアウト
---------------------------------------------------------- */
body {
  color: #333;
  font: 14px/1.3 sans-serif; /*font指定のショートハンド*/
}
#panel {
  width: 630px;
  margin: 10px auto 0;
  background: #666;
  color: #fff;
  padding: 10px;
}
h1 {
  color: #fff;
  font-size: 16px;
  padding: 10px 5px;
}
ul.tab {
  display: table;
  width: 100%;
  border-collapse: collapse;
}
ul.tab li {
  display: table-cell;
  width: 25%;
}
ul.tab li a {
  display: block;
  background: #aaa;
  background-image: linear-gradient(to bottom, #eeedf2, #717171 4%, #2b2b2b 74%);
  border: 1px solid #444444;
  border-bottom: none;
  border-radius: 5px 5px 0 0;
  box-shadow: 0 0 3px rgba(0, 0, 0, 0.2);
  color: #fff;
  font-size: 12px;
  margin: 0 2px;
  padding: 20px;
  text-align: center;
}
ul.tab li.current a {
  background: #FCFCFC;
  color: #000;
}
div.tabContents {
  display: none;
  padding: 0 3px;
}
div.tabContents.current {
  display: block;
}
div.round {
  background: #FCFCFC;
  border-radius: 0 0 5px 5px;
  padding: 10px;
  text-align: center;
  height: 400px;
}
div.tabContents p.text {
  margin: 10px;
  line-height: 1.4;
}


script.js

$(function(){
  // タブ
  $('.tab a').click(function(){ 
    $(this).parent().addClass('current').siblings('.current').removeClass('current'); //クリックしたaの親要素(li)にcurrentを付ける。他のli要素にcurrentが付いている場合は削除する

    var tabTarget = $(this).attr('href'); //クリックしたa hrefの値を変数化する
    $( tabTarget ).addClass('current').siblings('.current').removeClass('current'); //クリックされたタブの中身の切替

    return false;
  });

});

$(function(){
$('#News_click').on('click touchstart',function(){
if($(window).width() <= 640){ 
	$('#News_text').slideToggle();
    return false;
  };
});

$(window).resize(function(){
if($(window).width() > 640){ 
      $('#News_text').show();
    } else {
      $('#News_text').hide();
    }
});
});

練馬の雑貨 セレクトショップ | Strange Garden ストレンジガーデン

Strange Garden

手作りからセレクトまで様々な商品を扱っている雑貨店。
毎日をちょっと楽しくしてくれる練馬の雑貨店 セレクトショップ Strange Garden ストレンジガーデンです。東京都練馬区 中村橋駅近くにある雑貨屋です。日々の生活にちょっと彩りを加え 楽しくしてくれる商品を幅ひろく置いています。


f:id:yachin29:20160808015619j:plain

サイトURL