Division? 静的なWEBサイトのレイアウト(基本) 備忘録

##はじめに
社外研修がHTML/CSSの内容に入りました。
WEBページのレイアウトは、悩んだところなので
自分の備忘録もかねて、まとめてみます。

##レイアウトの基本
ページのレイアウトとは、ページにあるブロック要素をいくつかのグループに分割して、
レイアウト調整をする。

つまるところ、1枚の紙があるとして、
タイトルとかタイトルロゴとか先頭に置きたいものをグループ①にまとめる
本文のテキストや画像などをグループ②にまとめる
連絡先とかのグループ③・・・

みたいな形で、コンテンツの中身で場所を分割して決めていくことがレイアウト。

当たり前っちゃ当たり前なんですけど・・・。
僕は、混乱しました。

そこで、HTMLで利用するのがdivタグ。

__divはdivision(分割)の略らしいです。__


そのまんまですね!!
##ボックスモデル
ブロックボックスとインラインボックス

###ブロックボックス
・上から下へタテ方向に配置される。
・幅、高さを指定できる。(width,height)
・上下左右のmargin、paddingを指定できる


###インラインボックス
・上下のmarginを指定できない
・幅や高さを指定できない
※img,input.textareaなど一部、指定できるものもある。
　__このような要素は置換要素と呼ぶ。__

・上下のpaddingは指定できる。
→改行された際に前後の行と被るのであまり利用しない。

__▲注意　widthとheightの適用範囲はどこまで？__
　　　　　
答え) content-boxまで。(初期値)

box-sizingプロパティの利用で適用範囲は変更できる。

box-sizing:

|値|説明|
|----|---|
|content-box: | width、heightの適用範囲をcontent領域までに変更(初期値)| 
|padding-box: | width、heightの適用範囲をpadding領域までに変更 | 
|border-box:  | width、heightの適用範囲をpadding+border領域までに変更| 


###marginとpaddingの使い分け

 __marginを使う場合__
　borderの外側に余白が必要
　余白に背景色、背景画像を適用したくない
　値にauto(中央寄せ)を使いたい
　marginの相殺を利用したい
　ネガティブマージンを利用したい
　
 __paddingを使う場合__
　borderの内側に余白を使いたい
　余白に背景色や背景画像を適用させたい
　

##ブロック要素とインライン要素

・ブロック要素
→文書の構造に関するもの。(タグ)
h1とかpとか・・・。
※コンテンツを指定しないとヨコ軸めいいっぱい横幅をとる。
※縦方向に並んでいく。

__上記がもの凄く注意です。__
ブロック要素を横に並べたいときにデフォルトでは縦積みだ！！
って意識を持ってないと混乱します。(しつこいですが)


・インライン要素
→ブロック要素内に納まるコンテンツ。
サイズを調整することはできない。
文字数や中に入っているコンテンツによってサイズが決まる。
(widthやheightは使えない)
※横方向に並んでいく。
ヨコ軸めいいっぱいまで、並んだ場合は改行されます。

##float 浮動化
ブロック要素を横に並べたい!
例として、ブログのような記事を投稿するグループと投稿した年月のアーカイブを表示するグループを横並びにするみたいな。

ブロック要素は、基本タテ方向に並んでいくので、横には回らない。
なので、CSSで並べたいブロック要素に対して、floatをあてて浮かせる。
横並びのコンテンツの下に表示したいブロック要素はfloatを解除する。(footerとか)

⇒floatを解除しない場合、浮いているブロックの下に潜り込んでしまう。


```sample.html

<!DOCTYPE html>
<html lang="ja">

<head>
  <meta charset="utf-8">
  <title>サンプル</title>
  <style type="text/css">
    body,
    p {
      margin: 0px;
    }

    header {
      width: 700px;
      height: 300px;
      background-color: orange;
      text-align: left;
      font-size: 42px;
    }

    .archive {
      width: 200px;
      height: 305px;
      background-color: purple;
      float: left;
      text-align: center;
    }

    .main {
      width: 500px;
      height: 305px;
      background-color: pink;
      float: left;
    }

    footer {
      width: 700px;
      height: 50px;
      background-color: blue;
      clear: both;
    }
  </style>
</head>

<body>
  <header>
    サンプル
  </header>
  <div class="archive">
    <p>アーカイブ</p>
    <p><a href="#">2019</a></p>
    <p><a href="#">2018</a></p>
    <p><a href="#">2017</a></p>
    <p><a href="#">2016</a></p>
    <p><a href="#">2015</a></p>
  </div>
  <div class="main">
    タイトル
    <p>
      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa <br>
      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa <br>
      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa <br>
      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa <br>
      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa <br>
      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa <br>
      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa <br>
      aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa <br>
    </p>
  </div>
  </div>
  <footer></footer>
</body>

</html>

```

上記は、archiveとmainをfloatで浮かせて横並びにしていて、
その直下にfooterを表示したいため、footerはfloat解除をclear: bothで行っている。


##参考
■ 株式会社ヌーラボ, 今更聞けない！エンジニアのための CSS の基礎講座 〜ボックスモデル編〜, 2015/12/10, 閲覧日 2019-10-03, https://nulab.com/ja/blog/nulab/css-basics-for-engineer-boxmodel/
■ サルワカ | サルでも分かる図解説明マガジン, 【CSS】displayの使い方を総まとめ！inlineやblockの違いは？, 2019/08/21, 閲覧日 2019-10-03, https://saruwakakun.com/html-css/basic/display#section3

##終わりに
基礎的な部分を自分のアウトプットにまとめてみました。
CSSのレイアウト難しいです。

今回は、positionプロパティに触れてないので簡単にまとめられましたが、
positionプロパティやdispalyプロパティが入り乱れると混乱すると思います。

どこかの機会でまとめたいと思います。

難しいといえば、記事を書くのも難しいです。
自分のアウトプット用途以外にも、誰かに役立つものになればいいなあと思っているのですが、
なかなかままならないです。

継続は力なりということで、
まず、投稿するのを継続させていきます。

最後に誤記等あればご指摘いただけると幸いです。