Miki's Blog

フロントエンジニアに、俺はなる!

【書籍学習ログ】HTML/CSS/Webデザインが1冊できちんと身につく本 - 【2日目】

引き続き、書籍学習を進めます。前回で、共通のレイアウト作成が終了。
gomagaru.hatenablog.com

今回はこれをコピーしてから、フルスクリーンのトップページを作成しました!

Chapter 5 フルスクリーンページを制作する

2月2日(土) 1.5h

用語

スネークケース...単語間をアンダースコアでつなぐ命名
キャメルケース...単語の頭文字だけを大文字にする命名
ブロック要素...1つのブロックとしてみなされ前後に改行が入る。高さや幅の指定が可能。例 : p、h1、div、ulなど
インライン要素...テキストの一部として扱われ改行は入らない。高さや幅の指定もできない。例: a、img、spanなど

CSSプロパティ/UI

ボタンにマウスを置いたとき色を反転する

ボタン色反転
ボタン色反転

.btn a:hover {
   text-decoration: none;
background-color: #ffffff; // 背景白
color: #009cd3; // 文字青
// 通常時は背景と文字が逆
}

フルスクリーンページの背景画像設定
1. 背景画像のパス指定
2. タイル状に表示しない設定
3. 画像表示開始位置を指定
4. 背景画像のスクロールを固定
5. 背景画像の大きさを指定

#index {
   // 画像パス指定
   background-image: url(../images/bg-index.jpg);
   // リピートしない
   background-repeat: no-repeat;
   // 表示開始位置を 横位置 縦位置 で指定
   background-position: center center;
   // 背景画像のスクロールを固定 
   background-attachment: fixed;
   // 背景画像の大きさをブラウザに合わせて拡大縮小に指定
   background-size: cover; 
}
ポイント

デザインカンプに忠実なコーディング...1pxまでの正確さは必要はないが、設計の意図を汲み取れるかでWebサイト全体のクオリティに大きな差ができる。
記述が重複した時は1つにまとめる
写真画像に文字を重ねる...文字の可読性を考慮する。
 薄く編みかけをし、薄い黒色を重ねる。
フルスクリーンページの背景画像サイズ...ファイルサイズが大きくなりすぎないこと、ディスプレイの大きさの違いで画質が荒れないことを考慮する。
 <参考>実際の業務で多いサイズ : 2000×1500px程度
  Full HD : 1920×1080px 今回使用画像 : 1260×840px

成果物

トップページ画像
トップページ

まとめと感想

フルスクリーンページをはじめて制作。

1から作るならば、シンプルな分画像と文字の見せ方をよりしっかり考える必要がありそうですね。

また、現在は全体的に基礎学習なので用意された画像とスタイル記述の写経で終わっていますが、それだけだとどうしても不足する部分があるなと...。

元々基本のコーディングが出来るようになったらWebサイトの模写でひらすらコーディング修行をはじめる予定でしたが、

デザイン側の知識、もっと欲しい...。
画像(写真)の選び方・作り方、色の組み合わせ、余白の使い方。

デザインの勉強もしながらそれもコーディングに落とし込めたら、強くなれそうだと思いました!

【書籍学習ログ】HTML/CSS/Webデザインが1冊できちんと身につく本 - 【続・1日目】

引き続き。
今回は環境設定〜Webページ制作・共通レイアウト作成まで。
Chapter 2 ~ 4
2月1日(金) 1.0h

Chapter 2 サイト制作の前に準備しておくこと

ショートカットキー

Bracketsでの場合の記述が多かったので、
Mac環境・VSCodeのショートカットキーを調査。
Google検索上位のものが見やすかった...
【Mac版】 VisualStudioCode キーボードショートカット - Qiita

Chapter 3 知っておきたいHTMLのきほんと書き方

※前の本に記載がない・新しい概念・要復習内容についてのみ記載
head要素は「バーコード」と同じようなものと考える...人の目に触れないが、ブラウザや検索エンジンにとって重要な情報
section要素article要素の選び方...『複数のsection要素を1つのarticle要素が囲っている』のケースは多いが、文章構造によっては『複数のarticle要素をsection要素が囲う』ケースもあり、両者の間に上下関係があるわけではない
div要素はレイアウト目的の「

Chapter 4 知っておきたいCSSのきほんと書き方

※前の本に記載がない・新しい概念・要復習内容についてのみ記載

CSSプロパティ

line-height...行間
vertical-align...テキストや画像の垂直方向の位置揃え
margin: 0 auto;...中央揃え、必ずwidthを指定してから記述する

デザインのポイント

Webサイトの横幅サイズ「960px」...もっともよく使われるPCディスプレイサイズが1024×768pxであり、横幅が1024pxのディスプレイで問題なく表示される数字であるため、960pxが基準となる

成果物

共通レイアウトが作成できました。

f:id:gomagaru:20190202210610j:plain
common.html

まとめと感想

まずは、制作環境について。今回VSCodeをそのまま使うことにしましたが、
Bracketsの「クイック編集」がとっても気になっています。
(ショートカットキーで編集したいHTML部分関連CSSにアクセスできるらしい...)
テキストエディタどうしよってなった時に、ぜひ最初に試したいと思います。

HTML/CSSについては、前の本で学習した内容でほぼ理解でき、サクサクと制作が進められました。
既に学習したHTML要素やCSSプロパティについて、前書とはまた別の表現で記述されていて、わかりやすい表現が多かった印象です。
margin指定での中央揃えは何度も使っておきながら、横幅の指定が先に必要であることが
あまり印象に残ってなかった(...)ので助かりました...これで覚えた!

そして、今回はじめて共通レイアウトを作るということを実践。
Webサイトの統一されたデザインってこうやって作るのね。
以前はindex.htmlの1ページ作ったら終わりだったので、
作る規模を少し大きくできた一歩目として、何だかうれしくなりました。

次回、Chapter 5、トップページ制作です\\٩( 'ω' )و ///

【書籍学習ログ】HTML/CSS/Webデザインが1冊できちんと身につく本 - 【1日目】

これから、こちらの本で学習進めていきます〜
新しい本・初日╭( ・ㅂ・)و

HTML&CSSとWebデザインが 1冊できちんと身につく本

HTML&CSSとWebデザインが 1冊できちんと身につく本

この日、たのしすぎたのかChapter 4まで
一気にぶっ通してしまいましたwww

たいへん学びが多かったので、記事を分けます。
本記事はChapter 1のまとめ。

Chapter1 知っておきたいサイトとデザインのきほん知識

2月1日(金) 1.0h

WebサイトのしくみとWebデザイン

用語

ワイヤーフレーム...配置を記載した図面
デザインカンプ...最終的なWebサイトの完成イメージ
コーディング...デザイン案をコンピュータが処理できる形式に言語化すること
ソースコード...Webサイトを再現可能な形式にしたもの、音楽でいう楽譜
文章構造...見出しや文章、画像の論理的な配列
SEO(Search Engine Optimization)...検索エンジンにヒットしやすくする施策
ユーサビリティ...使いやすさ
UI(ユーザーインターフェース)...ユーザーとの接点
UIコンポーネント...UIの中でもWebサイトのパーツとなるもの(メニュー、ボタン、フォームなど)
ユニバーサルデザイン...できるだけ多くの人が利用可能なようにしたデザイン
アクセシビリティ...障害を持つ人など誰でも支障なく利用できるかを測る尺度
ハイパーテキスト...複数の文章を関連付けるしくみ
マークアップ...コンピュータが文章構造を理解できるように要素に目印をつけること(例:HTMLタグ)
セマンティックウェブ...正確にマークアップしコンピュータが自動処理しやすくする

ポイント

Web検索エンジンが正しく理解できるようなコーディングSEOを意識する
デザインありきでなく文章構造が正しいかを意識する
・デザインとは、自己表現ではなく問題解決の手段であり、コミュニケーションを最適化すること
ユーサビリティに優れていることは良いWebサイトの必須条件
アクセシビリティへの配慮でユニバーサルデザインを実現できる

Webデザインパターン

用語

要素...Webページを構成する1つのかたまり
ヘッダー...Webページの最上部。ロゴやナビゲーションメニュー、電話番号などを掲載
ナビゲーション...サイト内を案内するもの。以下の種類がある
  ・グローバルナビゲーション...全ページに共通で表示される
  ・ローカルナビゲーション...あるコンテンツの中だけで表示される
  ・パンくずリスト...現在の階層を表したり、その上の階層への移動に用いる
コンテンツ...各Webページの中身
サイドバー...補足情報の掲載
フッター...Webページの最下部。著作権表示や補足情報を掲載
LP(ランディングページ)...ネット広告やリンククリック時に表示されるページ。一般的には、1ページで問い合わせや購入を促す独立したWebページのこと。
ボックスモデル...Webページを構成する要素はボックスと呼ばれる四角形の領域を生成するという概念
リッチデザイン...立体感を持たせたデザイン
フラットデザイン...平面的でシンプルなデザイン
カラム...段組、列のこと

レイアウトパターン

1カラム、2カラム、3カラム、グリッドレイアウト、フルスクリーン
WEBレイアウトの基本4パターンそれぞれのメリット・デメリット-エムタメ!

ポイント

・用途にあったレイアウト、フォントを選択する
行間によって可読性が大きく変わる
文字コードUTF-8を使用する
・最近のトレンドはリッチデザインからフラットデザインへ。機能主義に変化?
・携帯デバイスの普及によりシングルカラムが多くなり、より軽いWebサイトが求められる
・時代の流れに合わせて変化するトレンドを把握が大切

まとめと感想

SEO対策、アクセシビリティなど用語としてはよく聞いていたけれども、デザインとコーディングに必要な概念を
Webサイトのしくみと関連付けて考えたことが新鮮でした。

ユーサビリティ・アクセシビリティについては、
ビヨンセ様の公式Webサイトが訴訟されたというニュースが記憶に新しい。
headlines.yahoo.co.jp
画像を配置しただけのデザインで、とてもスタイリッシュでしたが
視覚障害者の方が内容を一切把握できなかったそう。
まさに今回の学習内容が体現されたようなニュースだなぁと。
私もcaptionやalt属性の設定をサボりがち。改めて、気をつけます...

フラットデザインへのトレンドの変化は、とても意外でした。

変化がはやい分野のようなので、常にアンテナを張って
色々なものから吸収していくことが大事ですね!

次回、【続・1日目】Chapter 2 〜 Chapter4 となります。

【書籍学習ログ】HTML/CSS/JavaScript 基礎 - 【6日目】

1冊目、最終章〜!
やっていきましょう\\٩( 'ω' )و ///

1月31日(木) 2.0h

Chapter 7 Ajax通信のきほんを学ぼう〜jQuery、Vue.jsにもチャレンジ!

CSSプロパティ

position: fixed

要素の位置を固定する

header {
   position: fixed; /*画面内に固定する*/
   top: 0; /*位置。top、left、right、bottom指定可能*/
}
z-index

重なり合う要素の優先度を指定する

header {
   z-index: 100; /*最小0、最大1000000000、大きいほど上に表示*/
}

JSONデータ形式

JavaScript Object Notation」の略称。
JavaScriptと相性の非常に良いデータ形式

[
   {
      キー: 値,
      キー: 値,
      ...
   },
   ...
]

JavaScript

配列Arrayオブジェクト

var 配列名 = ['値1', '値2', '値3', ...];
配列名[0]...値1、配列名[1]...値2、...

JSONデータをJavaScriptで扱う

・内部JSONデータからHTMLを生成する
例: <img src="ファイルパス">
1. createElementで新しい要素'img'を作成
2. setAttributeで属性'src'を追加
3. appendChildで属性の値にJSONから取得した値を代入
4.要素を追加

// JSON
var images = [
   {
   "path": "img/img_1.jpg",
   "caption": "It's a dog."
   "name": "taro"
   },
   ...
]
var img;
document.createElement('img'); /*img要素生成*/
img.setAttribute('src', images[0].path); /*属性srcにimages配列0番目要素のpathを追加*/
document.getElementById('img_unit').appendChild(img); /*画像表示場所に要素を追加*/

Ajax通信を利用して外部JSONデータ(.json)を取得
1. XMLHttpRequestオブジェクトでファイル読込
2. openメソッドで通信を開始
3. responseTypeで受け取るデータを指定
4. sendメソッドで値を送信
5. onreadystatechangeイベントで受信データを処理
6. responseプロパティで受信内容を参照

var ajax = new HMLHttpRequest();
ajax.open('GET', 'image.json'); // Get: 取得のみ POST: 送信もする
ajax.responseType = 'json'; // text、arraybufferblob、document、jsonから指定
ajax.send(null); // null: 何も送信しないことを明示

ajax.onreadystatechange = function() {
   if (ajax.readyState === XMLHttpRequest.DONE && ajax.status === 200) {
   // データ取得時の処理。responseから参照
   // 例: var data = this.response[i]〜img.setAttribute('src', data.path)
   }
}

readyStateプロパティについて :

数値 定数 意味
0 UNSENT インスタンス生成したがopenメソッドはまだ利用せず
1 OPENED openメソッドを使用した
2 HEADERS_RECEIVED sendメソッドが使用され、ヘッダー部分が受信できた
3 LOADING データ受信中
4 DONE 通信終了、すべてのデータを受信済

HTTPステータスについて :

ステータスコード 意味
200 正常終了
301 Webページが移動した
401 認証が必要
404 ファイルが見つからない
500 内部エラー
for文
for (var i=0; i<10; i++) {
   // 処理
}

jQuery

jQuery
JavaScriptライブラリ。
「Download jQuery」から、「Download the compressed, production jQuery X.X.X」でダウンロード。
ファイルをWebページファイル群に「js」フォルダを作成して配下に置く。
htmlファイルのbody要素最後で読み込む。

書式

$(セレクター). メソッド (パラメータ);
※「$」は「jQuery」の省略形

htmlの内容を変更・取得
$('#img_unit').html('ここに画像を表示'); // 内容変更
alert($('#img_unit').html()); // 取得
cssの内容を変更・取得
$('#img_unit').css('margin-top', '100px'); // 内容変更
$('#img_unit').css('margin-top'); // 取得
メソッドチェーン
$('#img_unit').html('ここに画像を表示').css('margin-top', '100px');
jQueryを使ってAjax通信
$.getJSON(..., function(data) {
... // dataにデータが入る
});
要素の作成

$('作成する要素')

要素の追加

A.append(B); Aの要素にBが子要素として追加
A.appendTo(B); Bの要素にAが子要素として追加

Vue.js

Vue.js
「ビュー(見た目)」に特化して開発されているフレームワーク
今回はHTML生成部分の煩雑さをこれを使って解決。CDN利用が可能。

書式

{{ }}...プレースホルダ
new Vue({ })...インスタンスを生成する
el: ' '...対象の要素を指定する
data:{ }...HTMLに反映するデータを作成する

:属性名 ="プレースホルダーのキー"...属性でのプレースホルダー追加

vfor="変数名 in 配列名"...配列の要素分、処理をくり返す
例 : <div class="photo" vfor="Photo in Photos">

create: function () {...}...インスタンス作成時に実行される処理

成果物

f:id:gomagaru:20190131201137j:plain
f:id:gomagaru:20190131201148j:plain
f:id:gomagaru:20190131201159j:plain

まとめと感想

重ね合わせのレイアウトを実装できた。
また、JSONデータの扱いについて以下の方法を学習できた。
・内部から取得
・外部(.jsonファイル)からAjax通信で取得 - JavaScriptjQuery、Vue.js

JavaSctipr→jQuery→Vue.jsと進む中で、同じ成果物を実装しているのにも関わらず
どんどんソースコードがすっきりしていく様子に感動した。
ライブラリとフレームワークを用いることで全く違った書式となること、
実装の効率が高まること、特色のある機能があることを体験することができた。

ただ、今回は書籍内容に準じて開発を進めておりVue.jsはCDN利用、
使用エディタVSCode拡張機能などは利用しなかったため、
記述の補完もなくLive Serverで起動+Chromeデベロッパツールでのデバッグでは
確認できないエラーがあるなど、デバッグに苦労する場面があった。
(Vue.js使用コードにて用意する配列名を「Photes」としてしまうスペルミスが原因だった)
開発を本格的に行う時には改めて開発環境を見直したい。

【書籍学習ログ】HTML/CSS/JavaScript 基礎 - 【5日目】

Chapter 6 イベントドリブンのきほんを学ぼう〜DOMを使ってストップウォッチを作る

1月28日(月) 1.5h

Bootstrap

ボタンスタイル指定
クラス 表示
btn-default
btn-primary
btn-success
btn-info 水色
btn-warning オレンジ
btn-danger
btn-link テキストの見た目
btn-lg 大きいボタン
btn-sm 小さいボタン

JavaScript

HTML内の書式注意 :
document.writeメソッドを利用するとき以外、
<script>要素は必ず<body>要素の最後か、<head>要素内に記述する

DOM(Document Objrct Model)

HTML要素をプログラムの対象(=オブジェクト)として扱う手段。
要素取得メソッド
・getElementsByClassName ... class属性から複数の要素を配列で取得。【書籍p.207 'Name'抜け】
・getElementsByName ... name属性から要素をNodeListで取得。
・getElementsByTagName ... タグ名から要素をHTML.Collectionで取得。
その他メソッド
・innnerHTML ... 要素の内容を書き換える
・remove ... 要素を削除する

<div class="container">
   <p id="timer">00:00:00</p> // ID:timerの文章

   <script>
      // ID:timer要素の中身を取得して書き換え
      document.getElementById('timer').innerHTML = '00:00:01';
      // ID:timer要素を削除
      document.getElementById('timer').remove();
   </script>

</div>
if...else文
if ( 条件) {
   // true時の処理
} else {
   // false時の処理
}
演算子
比較演算子 意味
A > B AがBより大きい
A < B AがB未満
A >= B AがB以上
A <= B AがB以下
A === B AとBが等しい
A !== B AとBが等しくない
関数の定義
var 関数名 = function(変数) {
   // 処理内容
};
イベントドリブン

ユーザが何かしら操作を行った時にプログラムを動かすこと。
イベント ... 「ユーザがクリックした」などの動作。
イベントの種類

イベント 説明
keydown キーボードが押された
keypress キーボードが押し続けられている
keyup キーボードが押された状態から離された
mouseenter マウスカーソルが要素に触れた
mouseover マウスカーソルが要素に触れ続けている
mousemove マウスカーソルが動いた
mousedown マウスボタンを押した
mouseup マウスボタンを離した
click クリックした
dbclick ダブルクリックした

イベント監視方法
要素 .addEventListener( イベントの種類 , 処理);

document.getElementById('要素id') .addEventListener('click', function() {

});

※無名関数...名前の付いていないファンクション。例えば、上のfunction。関数を新たに定義する事なくイベントへの処理を記述できている。

タイマー処理

開始
処理を間隔ごとにくり返す
タイマーID = setInvertal( 処理, 間隔(ミリ秒) );
終了
clearInterval(タイマーID);

小数点以下を切り捨てる

整数 = Math.floor(小数);

要素にクラスを追加

要素.classList.add('追加クラス名');
例: STARTボタンをSTOPボタンに変える

this.innnerHTML = 'STOP';
this.classList.remove('btn-default');
this.classList.add('btn-danger);

成果物

f:id:gomagaru:20190130155956j:plainf:id:gomagaru:20190130160018j:plain

まとめと感想

イベントと関連付けたスクリプトの動作するWebページをはじめて1から作ることができた。
今回、書籍の中でストップウォッチ機能を「タイマー処理」と名付けて定義していたので
本来のタイマー処理と混同して、はじめ少々混乱していた。
自作する時、関数や変数の定義には気をつけたいと思いました。

また、今回はhtmlの中で<script>で囲ってスクリプトを記述したが、
VSCodeではmain.jsファイルを読み込む形でhtmlのデフォルトとなっているので
そちらの形に今後の開発で挑戦したい。

次回、ついに書籍最後のChapterへ...!

【書籍学習ログ】HTML/CSS/JavaScript 基礎 - 【4日目】

Chapter 5 JavaScriptのきほんを学ぼう

1月26日(土) 0.5h

HTML内にスクリプトを記述する

<div class="container">
   <script>
    // スクリプト
   </script>
</div>

文法

命令の記述

オブジェクト. メソッド( パラメータ )
誰に. どうする( なにを )

コメント
/*
複数行
コメント
*/

// 1行コメント
変数宣言
var answer = 10; // var 変数名 = 値;

メソッド

画面に文字を表示する
   document.write('<p class="date">20XX/01/23</p>');
日時を取得する
// 今日の日付を取得
var today = new Date(); // 現在日時を取得
var today_year = today.getFullYear(); // 年4桁
var today_month = tosay.getMonth(); // 月
var today_date = today.getDate(); // 日

// 任意日時を取得
var new_year = new Date(2017, 1, 1); // 元旦
絶対値
var num = Math.abs(-10); // numは絶対値10

成果物

f:id:gomagaru:20190127235429j:plain

まとめと感想

Hugoテーマを使う以外で、はじめてJavaScriptのソースをさわった。
変数宣言やメソッドの使い方などは、他言語での感覚と同じように記述できた。
画面に文章を出すときdocument.writeメソッドに与える文字列に
<p>要素を含めて記述する点が印象に残った。
( '<p class="date">' + todayHTML + '</p>' )

次章で、Webページ上のイベント関連を書けるようなので楽しみ。

【書籍学習ログ】HTML/CSS/JavaScript 基礎 - 【続・3日目】

多くなったので記事分けました!↓の続き。
【書籍学習ログ】HTML/CSS/JavaScript 基礎 - 【3日目】 - Miki's Blog
1月25日(金) 計1.5h

Chapter 4 CSSフレームワークのきほんを学ぼう〜Bootstrapでフォームをつくる

1月25日(金) 1.0h

Boostrap

Bootstrap · The most popular HTML, CSS, and JS library in the world.
Twitter社が開発したCSSフレームワーク
書籍はバージョン3に対応。
2019年1月現在の最新版は4.2.x。
トップページ右上のプルダウンより過去ページに飛べる。
f:id:gomagaru:20190125215820j:plain
今回は書籍に合わせて3をCDNで使用、その後は書籍通り。

CDN(Contents Delivery Network)

専用の配信サーバを準備することで、CSSJavaScriptなどを
ダウンロードせずに利用出来るようにした仕組み
同じファイルをサイト毎に複数回ダウンロードすることや
Webブラウザに保存されるキャッシュの無駄を防ぐ。

ノーマライズ

cssファイルでsanitize.cssを読み込まずにノーマライズされた見た目になる。
containerで囲むと左右に余白を設けた中央揃えに。
クラス名と機能の対応はドキュメントを参照。

グリッドシステム

floatで実現した回り込みは、グリッドシステムを利用して実現できる。
col-XX-Xの形で記述。
XX : ブレイクポイントの画像幅を設定できる。

XX 画像幅
xs ~767px
sm 768~991px
md 992~1199px
lg 1200px

X : 画像幅を12区画(カラム)に分けた時に指定する画像幅の大きさ。
合計12で設定する。
例 : 画像幅767px以下で標準、768px以上で6カラムにする。
(1:1で分かれた横並びにレイアウトする)

...
<div class="row">
   <div class="col-sm-6">
   ...
   </div>
   <div class="col-sm-6">
   ...
   </div>
</div>
フォーム

文字列フォーム、ドロップダウンリスト、
チェックボックスラジオボタンを設定。
大体Chapter 2内容とphp作成時の知識でOK。
Bootstrap特有の事項 :
・横並びに配置する設定
チェックボックスラジオボタンを横並びに配置したいとき
labelにinlineクラスを付加する。
checkbox-inline or radio-inline

※書籍p.164のコードそのままではチェックボックスは横並びになる。
書籍p.165の図4-2-10のように縦に並ぶ表示にするには、
label クラスで"checkbox"を追加した。

例: ラジオボタンを横並びに配置

<label class="radio-inline">
   <input type="radio" name="q1" id="q1_1" value="A型">
</label>
...

・テキストエリアの横幅100%がデフォルト
Bootstrapを使用していない時は幅を指定する記述が必要になる。

・ボタンに標準スタイルを適用する
例: 「送信」ボタンに標準スタイルを適用する
btn-default クラスを付加。

<button type="submit" class="btn btn-default">送信</button>

・赤に白文字で警告を出す
label-danger クラスを付加
例 : 「お名前」が必須項目

<label for="name">お名前<span class="label label-dangar">必須</span></label>

フォームのRWD対応で重要な事項 :
・画像幅が狭いときは縦並びにする
優先順位に気をつける。最優先の指定「!important」を使用する。
例 : 通常時inlineのラジオボタン

@media only screen and (max-width: 992px) {
   .radio-inline {
      display: block; /*ブロック要素にして改行させない*/
      margin: 0 !important; /*余白を0に強制*/
   }
}

・labelの重要性
入力ボックスの要素で、例えば「span」を使用すると
指で確実に選択領域に触れなければならず、選択が困難になる。
対して、「label」を使用すると、対象の入力ボックスが関連付けられてタップ・クリックでフォーカスされるようになる

成果物

PC画面、デベロッパツール(iPhone6/7)で確認。
f:id:gomagaru:20190125215845j:plainf:id:gomagaru:20190125215849j:plain

まとめと感想

Bootstrap導入〜簡単なレイアウト指定の基本を学習。
概ねChapter 2で触れた知識にBootstrap機能による補助が加わった感じ。

必須事項への警告表示など、css側に背景色・文字色などの指定要らずで感動。

グリッドシステムはHugoテーマをカスタムした際に触れており
復習、指定するsmやmdの意味について理解が深まった。

RWD対応時にはレイアウトをどう変化させるかユーザー目線で考える必要があるので、実機での確認がベストと思った。

今回のバージョンは古いそうなので、最新版のv4.2を利用して
本を見ずに同じレイアウトで作成するなど練習したい。

以上!次回、JavaScriptへ〜