【超初心者向け】floatを理解して使いこなそう。

【超初心者向け】floatの考え方

cssのfloatについて個人的な意見をまとめてみました。恐らく初心者の方でここの考え方につまずく方は少なからずいるのではないでしょうか？
レスポンシブ 対応で結構使う事が多いのでここでしっかり不安を解消しましょう。

なかなか文字だけだと分かりづらいかと思うので実際に手を動かしながら、動作を確認しながら理解していきましょう。

## 準備

html,cssを用意し以下をコピペします。

```html:html
<div class="first">
  <h4>floatを当てる要素</h4>
  <img src="./assets/img/image_1.jpeg" alt="">
  <p>テキスト</p>
</div>
<div class="second">
  <h4>後続の要素</h4>
  <img src="./assets/img/image_2.jpeg" alt="">
  <p>テキスト</p>
</div>
```

```css:css
*{
  margin: 0;
}

div{
  margin-left: 30px;
  padding: 20px;
  width: 300px;
}

div > img{
  width: 200px;
}

div > p{
  background-color:gray;
  padding: 20px;
}

.first{
  background-color: green;
}

.second{
  background-color: yellow;
}
```

ブラウザで確認すると以下のようになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/420031/4e6e4775-ca4c-d7d5-2ed3-3762d13b3753.png)
￼
￼
ブラウザにて確認が出来たら、今回の目的を確認します。
以下の画像のように、画像の右にテキストを配置するのが目的です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/420031/55bf5c38-1af0-132c-b198-09eb313f2523.png)
￼
￼
## 追加

準備と目的が確認できたので、実際に横並びをしていきます。
今回は.firstクラスのimgタグに対してfloat:left;を追加します。

```css:css(追加分のみ記載)
.first img{
  float: left;
}
```

コードが追加できたらブラウザで確認しましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/420031/00a3813c-d651-7441-1f95-156467eec7fe.png)
￼

テキストは確かに横並びにできましたが、なにやら後続の要素が上の要素にめり込んできました。ついでにタイトルのレイアウトもぐちゃぐちゃです！これはプチパニックですねｗ

ただ、これはfloatによるものです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/420031/50ad792d-42cd-90c4-498a-b71bd8d0ccdc.png)
￼
￼
#### そもそもfloatって
floatつまり”浮く”という意味なのですが、もう読んで字の如くのことが起きています。
今回は理解しやすいように書くセッションごとに色分けをしました。

実は横並びしたと見せかけて、元あったグレーのテキスト要素が裏に回っています。
floatを当てた画像は”浮いている”ので、前から<font color="red">立体的に</font>”画像”→”テキスト”と並んでいるだけです。

ただし、これがfloatの混乱の原因の１つでもあるのですが、後ろに回った要素の<font color="red">文字だけが</font>うまいこと横並びになっています。

そしてもう１つ注意しなければならないのはfloatを当てた要素は”高さの概念がなくなる”ということです。実際に画像を見てみると、グレーのテキストの要素に合わせて緑の要素の”高さ”が整形されていることがわかります。（以下参照）

￼![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/420031/a9189945-0155-dfcd-beec-ae93ba53cb6b.png)
￼

正確には”高さの概念がなくなった”訳ではなく、単純に前面に要素が押し出されたので要素の高さが計算されなくなっただけです。

なのでこれを解消するために、”後続の要素”に以下のcssを当てましょう。

```css:css(追加分のみ記載)
.second{
  clear: both;
}
```

★floatを使う上で<font color="red">必ず使うCSS</font>です。きっちりその役目と当てる場所を覚えておきましょう。

ブラウザを確認すると”後続の要素”のレイアウトの崩れは直りました。さらにfloatを当てた画像に後続の要素がぴったりと並びました。

ただし相変わらず緑の要素に関しては画像分の高さが計算されていません。なので緑の要素に対して帳尻を合わせるよう、passingを当てましょう。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/420031/64316214-ddff-b18e-338d-370299cd42bc.png)
￼
￼

```css:css(追加分のみ記載)
.first{
  padding-bottom: 70px;
}
```


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/420031/a7917618-575f-cb7c-73b0-22fcd1773dcf.png)
￼
￼
これで完成です。最後にfloat:right;も使用した完成形コードを載せますのでしっかり読み込んでfloatをものにしましょう。

## 完成形コード

```html:html
<div class="first">
  <h4>floatを当てる要素</h4>
  <img src="./assets/img/image_1.jpeg" alt="">
  <p>テキスト</p>
</div>
<div class="second">
  <h4>後続の要素</h4>
  <img src="./assets/img/image_2.jpeg" alt="">
  <p>テキスト</p>
</div>
```

```css:css
*{
  margin: 0;
}

div{
  margin-left: 30px;
  padding: 20px;
  width: 300px;
}

div > img{
  width: 200px;
}

div > p{
  background-color:gray;
  padding: 20px;
}

.first{
  background-color: green;
  padding-bottom: 70px;
}

.first img{
  float: left;
}

.second{
  background-color: yellow;
  clear: both;
  padding-bottom: 80px;
}

.second img{
  float: right;
}
```

￼
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/420031/2f6ef28b-5f3e-10e6-4f6f-46080f91342e.png)
￼

## おまけ

float:left;を使用した場合には、clear:left;を使います。同じくfloat:right;を使用した場合には、clear:right;を使います。

ですが<font color="red">基本的に何か特別な理由がない限りはclear:both;</font>を使います。clear:both;であればfloat:left; float:right;のどちらにも対応できるからです。

好みや、現場のルールなどがあるので適宜対応できるようにしていきましょう。