1
2

More than 3 years have passed since last update.

float の解除 clearfix

Last updated at Posted at 2019-11-05

子要素が全てfloatの時の、親要素の高さ

通常、親要素の高さは子要素を包む高さとなるが、子要素が全てfloatの時、親要素の高さは0となってしまうという性質がある。

float は浮いているという意味で、親要素からみると float の子要素は存在しないように見えるからである。


<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title></title>
    <link rel="stylesheet" href="css/reset.css">
    <link rel="stylesheet" href="css/style.css">
  </head>
  <body>
    <header class="header">

    </header>
    <div class="wrapper">
      <main class="main">

      </main>
      <div class="sidemenu">

      </div>
    </div>
    <footer class="footer">

    </footer>
  </body>
</html>
.header {
  width: 100%;
  /* border: 1px solid red; */
}

.wrapper {
  width: 970px;
  /* border: 1px solid red; */
  margin: 30px auto 40px;
}

.main {
  display: block;
  float: left;
  width: 660px;
}

.sidemenu {
  float: right;
  width: 275px;
}

.footer {
  width: 100%;
}


.header, .main, .sidemenu, .footer {
  border: 1px solid #aaa;
  background-color: #ccc;
}
.header, .footer {
  height: 100px;
}
.main, .sidemenu {
  height: 500px;
}

mainクラスとsidemenuクラスにはそれぞれfloatが指定されているため高さを認識できなくなり、footerが上がってしまう。

スクリーンショット 2019-11-05 12.19.32.png

改善策

親要素にclearfix クラスみたいにクラス名をつける(使いまわせるように)。

<div class="wrapper clearfix">
  <main class="main">

  </main>
  <div class="sidemenu">

  </div>
</div>

擬似要素を使用しclear: both;とし(もしくは 'clear: left;')、floatを解除することで、高さを認識できるようになり、この問題を解決することができる。
https://saruwakakun.com/html-css/basic/before-after

.clearfix::after {
  content: '';
  display: block;
  clear: both;
}

スクリーンショット 2019-11-05 12.29.18.png

1
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
2