Programming note」カテゴリーアーカイブ

JavaScript学習のまとめ2(比較演算子、アロー関数、コールバック関数、)

1:比較演算子についてのまとめ

HTMLの記述

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
  <h1>JavaScriptの基礎</h1>
   <script src="main.js"></script>
</body>
</html>

main.jsの記述

if(false) {
  console.log('this is true');
} else if(true) {
  console.log('this is else if block');
} else {
  console.log('this is false');
}

// データの型も一致してないとダメこの場合false,==だとtrue
if(1 === '1') {
  console.log('this is true');
} else {
  console.log('this is false');
}

// この場合trueになる,falseは0,型の変換をする
if(1 == true) {
  console.log('this is true');
} else {
  console.log('this is false');
}

// =でないことを確認したいとき、型の比較もするので
if(0 !== '0') {
  console.log('this is true');
} else {
  console.log('this is false');
}

// 数字に変換してから値の比較を行って反転
if(0 != '0' ) {
  console.log('this is true');
} else {
  console.log('this is false');
}

// 両方の条件を満たしていないのでfalse
if(0 == '0' && 0 === '0') {
  console.log('this is true');
} else {
  console.log('this is false');
}

// どちらかがtrueならtrueに行く
if(0 === '0' || 0 == '0') {
  console.log('this is true');
} else {
  console.log('this is false');
}

const num = null;
const bool = Boolean(num);
console.log(bool);

if(!num) {
  console.log('this is true');
} else {
  console.log('this is false');
}

検証して実行結果を確かめると・・・

まとめ

===はデータの型も一致してないとダメ、==はOK

!==は型の比較をするので注意、!=は文字列を数字に変換してから比較して反転する

&&はandと同じで両方trueでないときはfalse

||はorと同じで両方falseでないときはtrue

falseは0,trueは1

最後のnullはfalseと同じ(厳密には違う)なので反転してtrue

2: アロー関数

アロー関数を使うと省略した記法でコードを記述できる。

HTMLの記述は1と同じなので省略

main.jsの記述

// hello();より下に移動してもエラーにならない
// function hello(name = 'Yan') {
// console.log('hello ' + name);
// }

// hello();より下に移動するとエラー
// const hello = function(name = 'Yan') {
// console.log('hello ' + name);
// }

// // アロー関数にすると1行だけなら{}を除ける
// const hello = (name = 'Yan') => console.log('hello ' + name);

// // 引数がデフォルト値ならこうで
// const hello = name => console.log('hello ' + name);

// // 引数が2つならこのように記述
// const hello = (name, age) => console.log('hello ' + name + age);

// 戻り値を出力する場合、一般的記法
// const hello = (name, age) => {
// return 40;
// }

// 上と同じ意味だが更に省略できる
// const hello = (name, age) => 40;
// console.log(hello());

// 省略前の記法
// const retriever = (name, age) => 40;
// const arry = [1,2,3,4,5,6];
// arry.forEach(value => {
// console.log(value);
// })

// 省略後のアロー関数の記法
  const retriever = (name, age) => 40;
// 戻り値40が出力される
  console.log(retriever());
  const arry = [1,2,3,4,5,6];
  arry.forEach(value => console.log(value));
  const hello = (name, age) => console.log('hello ' + name + age);
  hello('Tarou Tanaka ', 15);
  hello('Tarou Tanaka2 ', 25);

検証して実行結果を確かめると・・・

↑がなぜ出力されたか?

  1. const retriever = (name, age) => 40;  console.log(retriever());で=> 40の部分が戻り値なので出力された
  2. 配列をループして出力したから
  3. ‘hello ‘ + 与えた引数で出力された
  4. ‘hello ‘ + 与えた引数で出力された

3:コールバック関数について

HTMLの記述は1と同じなので省略

main.jsの記述

// いつもの基本的な書き方
// function hello(name) {
// console.log("hello " + name);
// }
// hello("Tanaka Tarou");

// callbackに関数getnameが渡る(戻り値'Tanaka Tarou')
function hello(callback, lastname) {
// 関数を実行するためcallback()としている
 console.log('hello ' + callback());
 }
// 引数に渡す関数をcallback関数という
 function getFirstName() {
 return 'Tanaka';
}
 function getName() {
 return 'Tanaka Tarou';
}

 hello(getFirstName);
// 関数を渡すと戻り値'Tanaka Tarou'が渡る
 hello(getName);

// コールバックに引数を渡したい場合、lastnameにAkinaが渡ってくる
function hello2(callback, lastname) {
// 関数を実行するためcallback()としている
// callback(第一引数)の中身がこれ
console.log(callback)
console.log(lastname)
console.log(callback(lastname))
console.log(callback(callback))
console.log('hello ' + callback(lastname));
}
// 無名関数
hello2(function(name) {
return 'suzutuki ' + name;
}, 'Akina');

// アロー関数の記法に直すと(functionと{}とreturnを省略)
// hello(() => 'suzutuki');

function doSomething(a, b, callback) {
// 結果をコールバック関数に渡す
const result = callback(a, b);
console.log(result);
}

function plus(a, b) {
return a + b;
}
function multiply(a, b) {
return a * b;
}
// 処理結果を変えることができる
doSomething(2, 3, plus);
doSomething(2, 4, multiply);

検証して実行結果を確かめると・・・

↑がなぜ出力されたか?

  1. 関数getFirstNameの戻り値’Tanaka’がcallbackに渡されるのでhello Tanakaになった
  2. 関数getNameの戻り値’Tanaka Tarou’がcallbackに渡されるのでhello Tanaka Tarouになった
  3. 無名関数function(name) { return ‘suzutuki ‘ + name; }の部分が第一引数の中に入っているためこのように出力された
  4. 無名関数’Akina’の部分が第二引数なのでAkinaが出力された
  5. 無名関数function(name) { return ‘suzutuki ‘ + name; }の部分のnameの部分は第二引数のAkinaが格納されているのでSuzutuki Akinaと出力された。
  6. 無名関数function(name) { return ‘suzutuki ‘ + name; }の部分のnameの部分は第一引数の関数の無名関数function(name) { return ‘suzutuki ‘ + name; }が格納されているのでSuzutuki +無名関数function(name) { return ‘suzutuki ‘ + name; }と出力された。
  7. 5に単純に’hello’が追加されただけなので出力された。
  8. console.log(callback);のcallbackの中身はcallback関数なのでfunction plus(a, b) { return a + b; } が出力された。
  9. 変数resultには第三引数のcallback関数 function plus(a, b) { return a + b; }が入っていて、式展開が行われた結果5が出力された。
  10. console.log(callback);のcallbackの中身はcallback関数なので
    function multiply(a, b) { return a + b; } が出力された。
  11. 変数resultには第三引数のcallback関数 function multiply(a, b) { return a * b; }が入っていて、式展開が行われた結果8が出力された。

※ポイント

console.log()で中身を確認すると理解しやすいので、積極的に使おう!

 

JavaScript学習のまとめ1(配列、オブジェクト、ループ)

0から続きます。

1:配列の基礎

HTMLの記述

<!DOCTYPE html>
 <html lang="en">
 <head>
   <meta charset="UTF-8">
   <meta name="viewport" content="width=device-width, initial-scale=1.0">
   <meta http-equiv="X-UA-Compatible" content="ie=edge">
   <title>Document</title>
 </head>
  <body>
   <h1>JavaScriptの基礎</h1>
   <script src="main.js"></script>
  </body> 
</html>

main.jsの記述

const arry = new Array(1,2,3,4,5,6);
// constなので下のように新しく宣言し直すことはできないが
// arry = new Array(1,2,3,4,5,6);
// 配列の中身を変えることは可能
arry[5] = 8;
console.log(arry);
console.log(arry[0]);

// 通常こちらの記法で書く
const ally = [1, 2, 3, 4, 5, 6, 'string', false];
// 新しいオブジェクトを末尾に追加する
// ally.push('new item')
// 新しいオブジェクトを最初に追加する
// ally.unshift('first item')
// 末尾を削除する
// ally.pop();
// const val = ally.pop();
// const val2 = ally.pop();
// 末尾から2つ目の削除されたものが出力される
// console.log(val2);

// 新しいオブジェクトを最初に追加する
ally.unshift('first item')
// 先頭のオブジェクトを削除してvalに格納する
const val = ally.shift();
// 削除された先頭のオブジェクトを出力
console.log(val);

続きを読む

JavaScript学習のまとめ0(変数、関数、メソッドとプロパティー)

1:JavaScriptの基礎についてまとめてみた

HTMLの記述

<body>
  <h1>JavaScript基礎</h1>
  <script src="main.js"></script>
</body>

main.jsの記述

// var, let, const
// varは上書きできる
// var name = 'Tom';
// console.log('hello' + name);

// letも上書きできるよ
let name = 'Pon';
name = 'Tim'
console.log('hello' + name);
// あとから上書きできないのでエラーになるよ
// const nam = 'Yan';
// nam = 'Tim';

// データ型は Number, String, Boolean, Undefined, Null, Symbol
// 動的型付け言語
// Rubyと似ている点があるな
let variable = 'str';
  variable = 12;
  variable = false;
// variable = undefined;
// variable = null;

// 実際に確認するには?
  console.log(typeof variable);
// ポイント上書き禁止はconstで定義しよう!

続きを読む

Bootstrap+Font Awesome(フォトギャラリー)

BootstrapとFont Awesomeを使ってレスポンシブ対応のフォトギャラリーを作る

作りたいもの

ファイルの配置図↓

imagesに表示したい画像を入れる。

cssファイルの中にgallery.cssを作成して記述する

HTMLの記述

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>花のフォトギャラリー</title>
  <meta name="description" content="フォトギャラリーです。">
  <meta name="keywords" content="花,フォトギャラリー">
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
  <link rel="stylesheet" href="css/gallery.css">
</head>
  <body>
   <!-- グローバルナビゲーション(ナビバー) -->
   <nav class="navbar fixed-top navbar-expand-lg navbar-dark bg-dark">
     <div class="container">
      <!-- フォントオーサムのアイコンを使うi class~ </i>-->
       <a class="navbar-brand" href="gallery.html"><i class="far fa-image mr-1"></i>Cats</a>
       <!-- ハンバーガーメニュー(bootstrap公式からコピペできる) -->
      <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
       </button>
       <div class="collapse navbar-collapse" id="navbarSupportedContent">
         <!-- ホームの部分をアクティブにする -->
         <ul class="navbar-nav">
          <li class="nav-item">
             <a class="nav-link active" href="gallery.html">Home</a>
           </li>
           <li class="nav-item">
             <a class="nav-link" href="#">New</a>
          </li>
           <li class="nav-item">
             <a class="nav-link" href="#">About</a>
           </li>
         </ul>
       </div>
     </div>
   </nav>
   <!-- レスポンシブ対応のための準備1 -->
  <main class="container">
     <!-- ジャンボトロン -->
     <div class="jumbotron">
       <!-- フォントオーサムのカメラアイコンを利用する -->
       <h1><i class="fas fa-camera-retro"></i>フォトギャラリー</h1>
      <p>花のフォトギャラリーをご覧ください。</p>
     </div>
     <!-- レスポンシブ対応のための準備2 -->
     <div class="row">
       <!-- mb-3=margin-bottom3でHTMLでも直接指定できる -->
       <div class="col-lg-4 col-sm-6 mb-3">
        <!-- 画像の外側に縁をつける -->
         <div class="img-thumbnail"> 
          <img src="images/flower1">
         </div>
       </div>
       <!-- 画面サイズがlgの時横に3つ表示し、smの時は横に2つ表示 -->
      <div class="col-lg-4 col-sm-6 mb-3">
         <div class="img-thumbnail">
           <img src="images/flower2">
         </div>
       </div>
       <div class="col-lg-4 col-sm-6 mb-3">
        <div class="img-thumbnail">
           <img src="images/flower3">
         </div>
       </div> 
      <div class="col-lg-4 col-sm-6 mb-3">
         <div class="img-thumbnail">
          <img src="images/flower4">
         </div>
       </div>
       <div class="col-lg-4 col-sm-6 mb-3">
         <div class="img-thumbnail">
           <img src="images/flower5">
        </div>
       </div>
       <div class="col-lg-4 col-sm-6 mb-3">
         <div class="img-thumbnail">
           <img src="images/flower6">
         </div>       </div>
       <div class="col-lg-4 col-sm-6 mb-3">
         <div class="img-thumbnail">
           <img src="images/flower7">
         </div>
       </div>
       <div class="col-lg-4 col-sm-6 mb-3">
       <div class="img-thumbnail">
         <img src="images/flower8">
         </div>
       </div>
       <div class="col-lg-4 col-sm-6 mb-3">
         <div class="img-thumbnail">
          <img src="images/flower19">
         </div>
       </div>
     </div>
   </main>
  <!-- Bootstrapを導入するためのCDN -->
  <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script> 
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
  <!-- フォントオーサムを導入するためのCDN --> 
  <script defer src="https://use.fontawesome.com/releases/v5.0.2/js/all.js"></script>
 </body>
 </html>

CSSの記述(cssファイルの中にgallery.cssを作成して記述する)

html {
  font-size: 16px;
}
body {
  padding-top: 5rem;
  font-family: "Hiragino Kaku Gothic ProN", "メイリオ", sans-serif;
}
/* 画像が指定されたグリッドに収まるようにする */
img {
  width: 100%;
}

まとめ

Bootstrapを使うことでCSSのコード量を減らすことができ、レスポンシブ対応ができる。

フォントオーサムを使うことでアイコンを使うことができる。

Bootstrapのまとめ5(レスポンシブ)

グリッドオプション(レスポンシブ)

HTMLの記述

<!DOCTYPE html>
 <html lang="ja">
 <head>
   <meta charset="utf-8">
   <title>グリッドシステム</title>
   <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
   <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
   <style>
     .orange {
       background-color: orange;
       border: black 1px solid;
     }
   </style>
 </head>
 <body>
   <div class="container">
     <!-- Grid option -->
     <div class="row">
       <div class="col orange">A</div>
       <div class="col orange">B</div>
       <div class="col orange">C</div>
     </div>
     <div class="row">
       <div class="col-sm orange">A</div>
       <div class="col-sm orange">B</div>
       <div class="col-sm orange">C</div>
     </div>
     <div class="row"> 
       <div class="col-lg orange">A</div>
       <div class="col-lg orange">B</div>
       <div class="col-lg orange">C</div>
     </div>
     <div class="row">
       <div class="col-lg-1 orange">1</div>
       <div class="col-lg-1 orange">1</div>
       <div class="col-lg-1 orange">1</div>
       <div class="col-lg-1 orange">1</div>
       <div class="col-lg-1 orange">1</div>
       <div class="col-lg-1 orange">1</div>
       <div class="col-lg-1 orange">1</div>
       <div class="col-lg-1 orange">1</div>
       <div class="col-lg-1 orange">1</div>
       <div class="col-lg-1 orange">1</div>
       <div class="col-lg-1 orange">1</div>
       <div class="col-lg-1 orange">1</div>
     </div>
     <div class="row">
       <div class="col-lg-1 col-md-2 orange">1</div>
       <div class="col-lg-1 col-md-2 orange">1</div>
       <div class="col-lg-1 col-md-2 orange">1</div>
       <div class="col-lg-1 col-md-2 orange">1</div>
       <div class="col-lg-1 col-md-2 orange">1</div>
       <div class="col-lg-1 col-md-2 orange">1</div>
       <div class="col-lg-1 col-md-2 orange">1</div>
       <div class="col-lg-1 col-md-2 orange">1</div>
       <div class="col-lg-1 col-md-2 orange">1</div>
       <div class="col-lg-1 col-md-2 orange">1</div>
       <div class="col-lg-1 col-md-2 orange">1</div>
       <div class="col-lg-1 col-md-2 orange">1</div>
     </div>
     <!-- 入れ子 -->
     <div class="row">
       <div class="col-sm-9 orange">
         Level 1: 9
         <div class="row">
           <div class="col-sm-8 orange">
             Level 2: 8          
          </div>          
     <div class="col-sm-4 orange">
             Level 2: 4
           </div>
         </div>
       </div>
       <div class="col-sm-3 orange">
         Level 1: 3
       </div>
     </div>
   </div>
   <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous">
</script>
   <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous">
</script>
   <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous">
</script>
 </body>
 </html>

※ポイント

  • class = “container”(固定枠)か”container-fluid”(流動枠)の中に書く
  • class = “row”の中に書く
  • class = “col-{prefix}-{columns}”の形で書くこと
  • class = {columns}は合計が12になるようにする

補足:prefixはsm,lg,md,などの決められた画面幅を下回った時表示を変える指定でxs(スマホなど〜767px)からlg(PC大画面1120px~)となっている

Bootstrapのまとめ3(ナビバーを作る(ハンバーガーメニュー))

Bootstrapのナビバーの作り方のまとめ

どのサイトにもあるナビバーの作り方について〜ハンバーガーメニューもあります〜。(ただし画面が小さくなったとき)

作成するもの

HTMLの記述

<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title>Navibar</title>
    <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
    <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
  </head>
  <body>
    <!-- 色をそれぞれ変えられる -->
    <!-- <nav class="navbar navbar-expand-lg navbar-light bg-light"> -->
    <!-- <nav class="navbar navbar-expand-lg navbar-dark bg-dark"> -->
    <!-- <nav class="navbar navbar-expand-lg navbar-dark bg-primary"> -->
      <!-- ナビバーの背景色を自分でカスタマイズできる -->
      <nav class="navbar navbar-expand-lg navbar-light" style="background-color: #e3f2fd;">
        <!-- ハンバーガーメニューを作る=画面を狭めると出る(三)ぽいやつ -->
      <a class="navbar-brand" href="#">Navbar</a>
      <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarSupportedContent" aria-controls="navbarSupportedContent" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
      </button>
    <!-- 画面幅が所定のサイズ以下になったときに折りたたまれグルーピングされる。-->
      <div class="collapse navbar-collapse" id="navbarSupportedContent">
        <ul class="navbar-nav">
          <!-- スタイルをアクティブにする=黒字の状態 -->
          <li class="nav-item active">
            <a class="nav-link" href="#">Home</a>
          </li>
          <li class="nav-item">
            <a class="nav-link" href="#">Menu1</a>
          </li>
          <li class="nav-item">
            <!-- スタイルを無効状態にする=半透明にする -->
            <a class="nav-link disabled" href="#">Menu2</a>
          </li>
        </ul>
      </div>
    </nav>
    <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
    <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
    <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
  </body>
</html>

Bootstrapのまとめ2(Jumbotoron)

Bootstrapで実際に試してみる

実装イメージ

HTMLの記述

<!DOCTYPE html>
<html lang="ja">
<head>
  <meta charset="utf-8">
  <title>Bootstrap</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"> <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/css/bootstrap.min.css" integrity="sha384-PsH8R72JQ3SOdhVi3uxftmaW6Vc51MKb0q5P2rRUpPvrszuE4W1povHYgTpBfshb" crossorigin="anonymous">
</head>
 <body>
   <h1>Bootstrap</h1>
   <button type="button">ボタン</button>
   <button type="button" class="btn btn-primary">Primary</button>
   <button type="button" class="btn btn-success">Success</button>
   <button type="button" class="btn btn-outline-primary">Primary</button>
   <button type="button" class="btn btn-outline-success">Success</button>
   <button type="button" class="btn btn-primary btn-lg">Primary</button>
   <button type="button" class="btn btn-success btn-sm">Success</button>
   <button type="button" class="btn btn-success btn-sm" disabled>Success</button>
  <div class="container">
    <div class="jumbotron">
      <h1>Jumbotoron</h1>
      <p>Bootstrapへようこそ</p>
      <button class="btn btn-primary btn-lg">Sing Up</button>
    </div>
    <form>
      <div class="form-group">
        <label for="exampleInputEmail1">Email address</label>
        <input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp" placeholder="Enter email">
        <small id="emailHelp" class="form-text text-muted">We'll never share your email with anyone else.</small>
       </div>
      <div class="form-group">
        <label for="exampleInputPassword1">Password</label>
         <input type="password" class="form-control" id="exampleInputPassword1" placeholder="Password">
      </div>
      <div class="form-check">
        <label class="form-check-label">
          <input type="checkbox" class="form-check-input">Check me out
        </label>
      </div>
       <button type="submit" class="btn btn-primary">Submit</button>
    </form>
   </div>
  <script src="https://code.jquery.com/jquery-3.2.1.slim.min.js" integrity="sha384-KJ3o2DKtIkvYIK3UENzmM7KCkRr/rE9/Qpg6aAZGJwFDMVNA/GpGFF93hXpG5KkN" crossorigin="anonymous"></script>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.12.3/umd/popper.min.js" integrity="sha384-vFJXuSJphROIrBnz7yo7oB41mKfc8JzQZiCq4NCceLEaO4IHwicKwpJf9c9IpFgh" crossorigin="anonymous"></script>
  <script src="https://maxcdn.bootstrapcdn.com/bootstrap/4.0.0-beta.2/js/bootstrap.min.js" integrity="sha384-alpBpkh1PFOepccYVYDB4do5UnbKysX5WZXm3XxPqe5iKTfUKjNkCk9SaVuEZflJ" crossorigin="anonymous"></script>
</body>
</html>

※ポイント

CSSに何も書かなくてもHTMLだけで実現できるのもメリット!

Bootstrapのまとめ1(概要)

Bootstrapとは?

フロントエンド開発を効率よく行うためのフロントエンドフレームワーク

レスポンシブ対応のウェブサイトのレイアウトを、簡単に素早くできるのでCSSフレームワークとも呼ばれる

よく使うレイアウトやUIコンポーネントが用意されていて簡単に使うことができる。無償で使うことができる。

ライセンスはMITライセンス

※MITライセンスとは?以下Wikipediaから引用

  1. このソフトウェアを誰でも無償で無制限に扱って良い。ただし、著作権表示および本許諾表示をソフトウェアのすべての複製または重要な部分に記載しなければならない。

  2. 作者または著作権者は、ソフトウェアに関してなんら責任を負わない。

Bootstrapの利用方法

https://getbootstrap.com/

ダウンロードして使う方法とCDNを使って利用する方法があり、CDNの場合<head></head>の中に以下を記述してつかいます。

<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/css/bootstrap.min.css" integrity="sha384-9aIt2nRpC12Uk9gS9baDl411NQApFmC26EwAOH8WgZl5MYYxFfc+NcPb1dKGj7Sk" crossorigin="anonymous">
</body>タグの直前に以下を記述する
<script src="https://code.jquery.com/jquery-3.5.1.slim.min.js" integrity="sha384-DfXdz2htPH0lsSSs5nCTpuj/zy4C+OGpamoFVy38MVBnE+IbbVYUew+OrCXaRkfj" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.5.0/js/bootstrap.min.js" integrity="sha384-OgVRvuATP1z7JjHLkuOU7Xw704+h835Lr+6QL9UvYjZE3Ipu6Tp75j7Bh/kR0JKI" crossorigin="anonymous"></script>

なぜBootstrapを使うのか?

メリット:チートシートなどを使うことにより素早く開発することができる。

デメリット:良くも悪くもテンプレートなので似たようなデザインのサイトになりがちになる

その2に続く

簡単なローダー(lorder)のつくりかた1.5(リファクタリング)

リファクタリングしてコード量を減らす

HTMLの記述

<head>
<meta charset="UTF-8">
<meta name="viewport"content="width=device-width, initial-scale=1.0">
 <meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
 <link rel="stylesheet"href="loader.css">
</head> 
<body>
  <div class="three-dot-spinner">
 <div></div>
 <div></div>
 <div></div>
</div>
</body>

SCSSの記述

.three-dot-spinner {
   text-align: center;
 & div {
   display: inline-block;
   width: 18px;
   height: 18px;
   background-color: #904669;
   border-radius: 50%;
   animation: sk-bouncedelay 1.4s infinite;
   // 1から99までループしたいとき //
   @for $i from 1 to 100
   // 1から2までループしたいとき
   @for $i from 1 through 2 {
   &:nth-child(#{$i}) {
     animation-delay: -0.32s / $i;
  }
  }
  } 
 }
 @keyframes sk-bouncedelay {
 0% {
 transform: scale(0);
 }
 40% {
 transform: scale(1);
 } 80% {
 transform: scale(0);
 } 100% {
 transform: scale(0);
 }
}

※ポイント

@for $i from 1 through 2 {
 &:nth-child(#{$i}) {
 animation-delay: -0.32s / $i;

こうすることで2秒後-0.16s、3秒後-0.1sと設定できる(今回は2秒までです。)