WEBサイト制作の勉強

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

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

レスポンシブサイト演習

今までの内容を踏まえて実際にレスポンシブサイトを制作していきましょう。
まずはシンプルな2カラムレイアウトをレスポンシブ化してみましょう。


今回のブレイクポイントは



画像のダウンロード
http://ascii.jp/elem/000/000/699/699812/index-3.html


f:id:yachin29:20170330160832p:plain
f:id:yachin29:20170330160839j:plain
f:id:yachin29:20170330160844j:plain
f:id:yachin29:20170330160851j:plain


作例

PCレイアウト
f:id:yachin29:20160401010640j:plain


タブレットレイアウト
f:id:yachin29:20160401010715j:plain


スマホレイアウト
f:id:yachin29:20160401010740j:plain

テキスト

枝豆隊ロゴ
豆はカラダにイイ

ホーム
枝豆一覧
枝豆隊
アクセス

枝豆の栄養素はスゴい

枝豆は大豆が未成熟で収穫したものですが、たくさんの栄養がつまっています。枝豆のタンパク質に含まれる成分はアルコールを分解を促します。カリウムも含まれており塩分を体の外に排出する手伝いをしています。
代表的な豆料理
枝豆
イラスト 枝豆

枝豆は未成熟の大豆を収穫したもの。枝付きのままゆでたので「枝豆」と呼ばれるようになりました。塩ゆでして食べると非常に美味。しかし塩ゆでするときは沸騰した湯で茹でる。茹で上がった豆を冷水でさらしてはいけない。濃厚な風味がそこなわれることになる。
ずんだ
イラスト ずんだ

ゆでた枝豆をすり潰したもの。ずんだを餅にまぶしたものは「ずんだ餅」といって宮城県の特産品です。主に夏の時期に食べられます。非常に枝豆の風味が良いのが特徴です。
枝豆隊隊長
肖像 枝豆隊長

枝豆隊隊長は、枝豆について知識をもち、新しい枝豆料理につねにチャレンジしています。

2004-2021©枝豆隊

動画を使ったサイト

www.ditjapan.com




sankoudesign.com



html5ではvideoタグを使うことで簡単にページに動画データを埋め込む事が出来ますが、スマートフォンで見た場合にはiOSandroidで対応している物、していない物が違うので注意が必要です。場合によっては以前のように「PCでは動画」「スマートフォンでは画像」というやり方が必要になってきます。

  • controls:コントロールパネルを表示する
  • auto(muted属性とセット)

iOSでvideo要素が表示されない場合

video要素に「playsinline」属性を指定します。

<video id="" src="" muted playsinline></video>

サイトの表示を早くする

video要素は読み込むのに時間がかかるため、一部のブラウザーではloading属性を使って動画の読み込むタイミングをずらす事が出来ます。
loading="lazy"

<video id="" src="" muted loading="lazy" playsinline poster="example.jpg"></video>

レスポンシブサイトの作成

  • GoogleMapの挿入
  • GoogleFontsの挿入
  • FontAwesomeの使用


fontawesome.com


fonts.google.com

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>レスポンシブサイトの作成</title>
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="css/style.css">
<link rel="preconnect" href="https://fonts.gstatic.com">
<link href="https://fonts.googleapis.com/css2?family=Shadows+Into+Light&display=swap" rel="stylesheet">
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" integrity="sha384-wvfXpqpZZVQGK6TAh5PVlGOfQNHSoD2xbE+QkPxCAFlNEevoEH3Sl0sibVcOQVnN" crossorigin="anonymous">
</head>
<body>
<header>
<h1>Cafe de FELICA</h1>
<nav class="g-nav">
<ul>
<li><a href="#">Top</a></li>
<li><a href="#">Menu</a></li>
<li><a href="#">Access</a></li>
<li><a href="#">Contact</a></li>
</ul>
</nav>
</header>

<div class="main">
<p class="key-visual"><img src="img/main.jpg" alt=""></p>
<p class="lead">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Libero voluptatibus tempore, beatae facilis iusto totam labore, sequi voluptatum praesentium, pariatur veritatis laborum laboriosam, cumque itaque commodi reiciendis. Placeat, doloremque cumque!</p>

<div class="wrapper">
<div class="box">
<h2>Shop info</h2>
<dl>
<dt>住所</dt>
<dd>東京都豊島区池袋</dd>
<dt>営業時間</dt>
<dd>11:00~20:00</dd>
<dt>電話番号</dt>
<dd>1234567890</dd>
<dt>座席数</dt>
<dd>50席(テラス10席)</dd>
</dl>
</div><!--/.box-->

<div class="box">
<h2>Map</h2>
<div class="map-inner">
<iframe class="g-map" src="https://www.google.com/maps/embed?pb=!1m18!1m12!1m3!1d3238.929646365803!2d139.71221001465224!3d35.727948735017065!2m3!1f0!2f0!3f0!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x60188d68f6cfe057%3A0xddd17dcd7ecaf745!2z6LGK5bO25Yy656uL5Y2X5rGg6KKL5YWs5ZyS!5e0!3m2!1sja!2sjp!4v1615255457057!5m2!1sja!2sjp"  style="border:0;" allowfullscreen="" loading="lazy"></iframe>
</div><!--/.map-inner-->
</div><!--/.box-->
</div><!--/.wrapper-->

</div><!--/.main-->
<footer>
<p><small>&copy; Cafe de FELICA</small></p>
<ul class="sns">
<li><a href="#"><i class="fa fa-twitter-square" aria-hidden="true"></i></a></li>
<li><a href="#"><i class="fa fa-facebook-square" aria-hidden="true"></i></a></li>
<li><a href="#"><i class="fa fa-instagram" aria-hidden="true"></i></a></li>
</ul>
</footer>
</body>
</html>


style.css

@charset "utf-8";
html,body,h1,h2,h3,p,ul,li,dl,dt,dd{
margin: 0;
padding: 0;
box-sizing: border-box;
}
ul{
list-style: none;
}
a{
text-decoration: none;
}
img{
vertical-align: bottom;
max-width: 100%;
}

/*PCレイアウト*/
header{
width: 100%;
height: 100px;
background-color: crimson;
display: flex;
align-items: center;
justify-content: space-around;
}

h1{
color: #FFF;
font-family: 'Shadows Into Light', cursive;
font-size: 40px;
}
.g-nav>ul{
display: flex;
}
.g-nav li{
margin: 0 20px;
}
.g-nav a{
padding: 10px;
color: #FFF;
font-family: 'Shadows Into Light', cursive;
font-size: 20px;
}
.g-nav a:hover{
text-decoration: underline;
}
.key-visual{
max-width: 960px;
margin: 50px auto;
}
.lead{
max-width: 600px;
margin: 0 auto 50px;
line-height: 2;
}
.wrapper{
max-width: 960px;
margin: 0 auto 100px;
display: flex;
justify-content: space-between;
}
.box{
width: 46%;
}
.box>h2{
font-family: 'Shadows Into Light', cursive;
font-size: 30px;
margin-bottom: 20px;
border-left: 16px solid crimson;
padding-left: 20px;
}
dl{
display: flex;
flex-wrap: wrap;
border: 1px solid #666;
}
dt{
width: 30%;
padding: 20px;
background-color: beige;
border-right:1px solid #666;
}
dd{
width: 70%;
padding: 20px;
}
dt:nth-of-type(n+2),dd:nth-of-type(n+2){
border-top:1px solid #666;
}
.map-inner{
width: 100%;
height: 400px;
}
.g-map{
width: 100%;
height: 100%;
}
footer{
background-color: crimson;
padding-bottom: 40px;
}
footer>p{
text-align: center;
color: #FFF;
padding: 20px 0;
}
.sns{
display: flex;
max-width: 960px;
margin: 0 auto;
}
.sns>li{
margin-right: 20px;
}
.sns a{
font-size: 44px;
color: #FFF;
}
.sns a:hover{
color: #CCC;
}

@media (max-width:959px){
/*959px以下の時*/
.main,.sns{
padding: 0 10px;
}
}
@media (max-width:640px){
/*640px以下の時*/
header{
display: block;
height: auto;
padding: 6px 0;
}
h1{
font-size: 24px;
text-align: center;
}
.g-nav>ul{
justify-content: center;
}
.g-nav li{
margin: 0 6px;
}
.g-nav a{
font-size: 16px;
}
.wrapper{
display: block;
}
.box{
width: 100%;
margin-bottom: 50px;
}
}

バナーの制作

Webデザイナーとして任される最初の仕事として代表的なものがバナー広告の制作です。

バナーのサイズ

広告の場合、ある程度はサイズに規定があります。仕事の場合大抵クライアントの方から指定があります。1種類のバナーに対し様々なサイズを用意する場合もあるので、色々なサイズに適したレイアウトのパターンを覚えておきましょう。

300×250(Yahoo!/Google)PC/スマホ ※推奨

728×90(Yahoo!/Google)PC ※推奨

160×600(Yahoo!/Google)PC ※推奨

336×280(Google)PC ※推奨

320×50(Yahoo!/Googleスマホ ※推奨

320×100(Yahoo!/Googleスマホ ※推奨


anagrams.jp

文字を入れてみる

決めたサイズとメインカラーで背景レイヤーを作り、文言を入れてみる。

優先順位とジャンプ率

入れた文言に対し、訴求したい順に優先順位を決め、文字サイズやジャンプ率をここで決めましょう。

バナー全体のデザイン

フォントの種類や色、テーマに沿ったデザインを作っていきましょう。
中々アイデアが出ない場合は既存のバナーを参考にしましょう。

既存のバナー制作

既存のバナーをモデルにし、バナー画像を作成する。


ローソンフレッシュのバナー
サイズ:300x250

f:id:yachin29:20150116233657g:plain






通信制 科学技術学園高等学校のバナー
サイズ:300x250

f:id:yachin29:20161125092848j:plain



フリー素材

食材・料理や野菜・果物のフリー写真素材 無料画像のフード・フォト

www.pakutaso.com


使用素材
f:id:yachin29:20200107123117j:plain

モバイルファーストの復習

index.html
<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<title>モバイルファーストの復習</title>
<meta name="viewport" content="width=device-width">
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<header>
<nav class="g-nav">
<ul>
<li><a href="#">ボタン1</a></li>
<li><a href="#">ボタン2</a></li>
<li><a href="#">ボタン3</a></li>
<li><a href="#">ボタン4</a></li>
</ul>
</nav>
</header>
<div class="container">
<h1>モバイルファーストの復習</h1>
<div class="wrapper">
<div class="box">
<h2>Content1</h2>
<p class="photo"><img src="img/01.jpg" alt="">
</p>
<p class="txt">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Omnis nihil dolore, ea natus vero minus consectetur doloribus voluptatibus et, reprehenderit adipisci cumque illum reiciendis vel sint eligendi tempora fugiat atque!</p>
</div><!--/.box-->

<div class="box">
<h2>Content2</h2>
<p class="photo"><img src="img/02.jpg" alt=""></p>
<p class="txt">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Omnis nihil dolore, ea natus vero minus consectetur doloribus voluptatibus et, reprehenderit adipisci cumque illum reiciendis vel sint eligendi tempora fugiat atque!</p>
</div><!--/.box-->

<div class="box">
<h2>Content3</h2>
<p class="photo"><img src="img/03.jpg" alt=""></p>
<p class="txt">Lorem ipsum dolor sit amet, consectetur adipisicing elit. Omnis nihil dolore, ea natus vero minus consectetur doloribus voluptatibus et, reprehenderit adipisci cumque illum reiciendis vel sint eligendi tempora fugiat atque!</p>
</div><!--/.box-->
</div><!--/.wrapper-->
</div><!--/.container-->
</body>
</html>
style.css
@charset "utf-8";
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;
max-width: 100%;/*フルードイメージの設定*/
}
/*spレイアウト*/
.g-nav{
height: 100px;
}
.g-nav>ul{
display: flex;
flex-wrap: wrap;
}
.g-nav li{
width: 50%;
height: 50px;
}
.g-nav a{
display:block;
text-align: center;
line-height: 50px;
background-color: darkslategrey;
color: #FFF;
}
.g-nav li:nth-of-type(odd)>a{
border-right: 1px solid #FFF;
}
.g-nav li:nth-of-type(n+3)>a{
border-top:1px solid #FFF;
}
h1{
font-size: 26px;
text-align: center;
padding: 40px 0;
}
.wrapper{
padding: 0 10px;
}
.box{
margin-bottom: 60px;
border: 1px solid #333;
padding: 10px;
}
h2{
margin-bottom: 10px;
}
.photo{
margin-bottom: 10px;
}

/*768px以上の時*/
@media (min-width:768px){
.g-nav{
height: 50px;
background-color:cadetblue;
}
.g-nav>ul{
flex-wrap:nowrap;
max-width: 960px;
margin: 50px auto;
}
.g-nav li{
width: 25%;
}
.g-nav li:nth-of-type(odd)>a{
border-right: 0;
}
.g-nav li:nth-of-type(n+3)>a{
border-top:0;
}
.g-nav li>a{
border-left:1px solid #FFF;
}
.g-nav li:nth-of-type(4)>a{
border-right: 1px solid #FFF;
}
.g-nav a:hover{
background-color: cadetblue;
}
.wrapper{
max-width: 960px;
margin: 100px auto;
display: flex;
justify-content: space-between;
}
.box{
width:calc((100% - 40px) / 3); /*100%-40px/3*/
}
.box:hover{
box-shadow: 0 0 10px #AAA;
}
}

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




Web Developer

1クリックでCSSJavaScriptを無効化したり、画像の非表示、様々なデバイスサイズでの表示、クラスやID名の表示、定規やカラーピッカーまで揃っていて、非常に便利なのでぜひ導入しましょう。


chrome.google.com





余白の設定

f:id:yachin29:20210209012104j:plain


CSSの基礎で一番解りにくいのが、marginとpaddingの違いです。

margin

marginとは要素の外側に出来る隙間の事です。

padding

paddingとは要素の内側に出来る隙間です。

言葉にすると一見簡単に思えますが、実際にレイアウトしてみるとシンプルなレイアウトではどちらでも結果として思い通りの形になるケースが多いため、上手く使い分けが出来ないままなんとなく使い続け、いざ複雑なレイアウトを始めると、使い分けが出来ていないせいで苦労する、というケースをよく目にします。なので、今のうちからmarginとpaddingの違いをしっかりと理解しておきましょう。


marginとpaddingは共に4つの方向別に指定する事が出来ます。

margin-top
margin-bottom
margin-left
margin-right

padding-top
padding-bottom
padding-left
padding-right

また、ショートハンドという省略した形でコーディングしていく機会も多いので、ショートハンドの形も一緒に覚えて行きましょう。



f:id:yachin29:20160720132056g:plain



近接の法則

bulan.co

ヒーローヘッダーを使ったサイト制作

f:id:yachin29:20170209004414j:plain



今回の制作のポイント

  • メインビジュアルはヒーローヘッダーでbxsliderを使ってフェードで見せる
  • お知らせ部分はajaxを使って外部データを読み込む
  • Movie部分にmp4データを設置
  • Menu部分にモーダルウィンドを設置(jQuery
  • Access部分にGoogleMapを設置
  • Form部分にGoogleAPIを使ってお問い合わせフォームを導入



最近、よく見かける「1枚画像」を画面全体に表示させているようなフルスクリーンレイアウト。
「ヒーローヘッダー」と呼ばれています。

ヒーローヘッダー(Hero Header)とは、ウェブサイトのファーストビューに全画面の画像を使用するなど、巨大なイメージで構成されたウェブサイトのことを指します。

2014年頃から海外のウェブデザインにてトレンド的にかなり増えてきている手法です。
巨大な画像により、イメージを強く植えつけることができる反面、写真のクオリティ次第でウェブサイト全体の印象を悪くすることも有りますので、フラットデザイン同様簡単そうでデザインセンスの問われるデザイン要素となっています。


参考サイト
http://racines-park.com/



ferret-plus.com


こういったレイアウトを作る際の1番のポイントは、用意する画像の大きさです。
自分のPCでは綺麗にフルスクリーンで表示されるけど、別のPCでは写真が見切れてしまっていたり、逆に余白が出てしまったり、という事が起こります。

ビットマップのデータをすべてのディスプレイでピッタリの大きさに合わせるという事は基本的に無理なので、ある大きさで書き出した画像をCSSで拡大・縮小していきます。

img要素の場合は前回やったようにフルードイメージ化する事で画像を可変にしましたが、background画像の場合は「background-size」というプロパティを使って、拡大・縮小していきます。



今回のようにフルスクリーンで画像を表示したい場合、絶対的に決まった大きさはありませんが、一番シェアの多いモニターの解像度で作るのが無難です。
モニター解像度のシェア(2019年~2020年)
f:id:yachin29:20200813002742p:plain



f:id:yachin29:20170512112150p:plain


index.html

<!DOCTYPE html>
<html lang="ja">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>ヒーローヘッダーを使ったページ制作</title>
<link rel="stylesheet" href="css/style.css">
</head>
<body>
<header>
<h1>Cafe de Felica</h1>
</header>
<div class="key-visual">
<img src="img/01.jpg" alt="">
</div>
<nav class="g-nav">
<ul>
<li><a href="#">Top</a></li>
<li><a href="#">Video</a></li>
<li><a href="#">Menu</a></li>
<li><a href="#">Info</a></li>
<li><a href="#">Access</a></li>
</ul>
</nav>

<div class="box" id="video">
<h2>Video</h2>
<div class="video-inner">
<video src="img/Adler-60600.mp4" autoplay muted loop></video>
</div><!-- /.video-inner -->
</div><!-- /#video -->

<div class="box" id="menu">
<h2>Menu</h2>
<div class="menu-inner">
<p><img src="img/01.jpg" alt=""></p>
<p><img src="img/02.jpg" alt=""></p>
<p><img src="img/03.jpg" alt=""></p>
</div>
</div><!-- /#menu -->

<div class="box" id="info">
<h2>News</h2>
<dl class="news-list" id="list-box">

</dl>
</div><!-- /#info -->
<p id="to-top">
<a href="#">
<img src="img/to-top.svg" alt="">
</a>
</p>

<footer>
<p><small>&copy; Cade de FELICA</small></p>
</footer>

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script>
$(function(){
$('#list-box').load('news.txt');

//#to-top>aをon.clickしたら
$('#to-top>a').on('click',function(){
$('html,body').animate({scrollTop:0},200);
});
});
</script>
</body>
</html>

style.css

@charset "utf-8";

:root{
--main-color: #972b56;
}

html,body,h1,h2,h3,p,ul,li,dl,dt,dd{
margin: 0;
padding: 0;
}
ul{
list-style: none;
}
a{
text-decoration: none;
}
img{
vertical-align: bottom;
max-width: 100%;/* フルードイメージ */
}

header{
position: absolute;
top: 0;
right: 0;
bottom: 0;
left: 0;
margin: auto;
width: 300px;
height: 100px;
text-align: center;
}
h1{
color: var(--main-color);
background-color:rgba(255,255,255,0.5);
}
.key-visual{
width: 100%;
height: calc(100vh - 50px);
}
.key-visual>img{
object-fit: cover;
object-position: center center;
width: 100%;
height: 100%;
}
.g-nav{
width: 100%;
height: 50px;
margin-bottom: 100px;
background-color: #FFF;
position: sticky;
top: 0;
z-index: 9999;
}
.g-nav>ul{
height: 50px;
display: flex;
justify-content: center;
align-items: center;
}
.g-nav li{
margin: 0 20px;
}
.g-nav a{
padding: 10px;
color: var(--main-color);
font-weight: bold;
}
.g-nav a:hover{
text-decoration: underline;
}
h2{
color: var(--main-color);
text-align: center;
font-size: 30px;
}
.video-inner{
max-width: 960px;
height: 400px;
margin: 100px auto;
}
video{
object-fit: cover;
width: 100%;
height: 100%;
}
.menu-inner{
max-width: 960px;
margin: 50px auto;
display: flex;
justify-content: space-between;
}
.menu-inner>p{
width: calc((100% - 40px) / 3);
overflow: hidden;
}
.menu-inner>p>img{
transition: 0.3s;
}
.menu-inner>p:hover>img{
transform: scale(1.2);
}
.news-list{
max-width: 800px;
margin: 0 auto 100px;
display: flex;
flex-wrap: wrap;
}
dt{
width: 30%;
margin-bottom: 20px;
border-bottom: 1px solid var(--main-color);
display: none;/* 非表示 */
}
dd{
width: 70%;
margin-bottom: 20px;
border-bottom: 1px solid var(--main-color);
padding-bottom: 10px;
display: none;/* 非表示 */
}
dt:nth-of-type(-n+4){
display: block;
}
dd:nth-of-type(-n+4){
display: block;
}
#to-top{
width: 50px;
height: 50px;
position: fixed;
right: 50px;
bottom: 140px;
}



footer{
height: 100px;
background-color: var(--main-color);
}
footer>p{
text-align: center;
line-height: 100px;
color: #FFF;
}