CSS:positionの考え方

どうも。craysです。

CSSはレイアウトをするのに使うのは周知のとおりですが、
今のお仕事で、positionやfloat指定が良く分からないという声があったのでエントリーしておこうと思う。(あくまで、僕の考えなので参考までに・・・)



positionやfloatは位置を指定するのだが、marginやpaddingと混じると理解しづらくなる。
更にはそれを意図したデザインにしていこうとすると・・・Orz


僕の場合、positionやfloatは"レイヤー"として考えています。(浮かぶって言ったほうが分かり易い?)adobePhotoShopなんかを使った人には馴染み深いんじゃないかな?


つまり、

  • positionやfloatを指定した要素(レイヤー2)
  • positionやfloatを指定しない要素(レイヤー1)

という形。


もう少し分かりやすく書くと

   /~~~~~~~~~/
  / Layer2  /
 /_________/~/
  / Layer1  /
 /_________/

こんな感じ。
そしてHTMLの場合、レイヤー1に"レイヤー2が入れる分の余白"があればレイヤー2が入ってくる。


だから、positionやfloatを指定した要素を回り込ませる場合、レイヤー1側のボックスにmarginを使って回り込ませる。


実際にHTMLコードでイメージすると、

<div class="body">
  <div class="side_contents">
    〜ここにサイドコンテンツ〜
  </div>
  <div class="contents">
    〜ここにコンテンツ〜
  </div>
</div>

こんなHTMLで、class="contents"を右に。class="side_contents"を左に表示させる2カラム構成にしたい場合は
(全体の幅を800px。contentsを500px。side_contentsを300pxと仮定)

/* 幅を指定 */
.body{
  width: 800px;
}
.contents{
  width: 500px;
}
.side_contents{
  width: 300px;
}

/* 位置を指定 */
.contents{
  margin-left: 300px;
}
.side_contents{
  float: left
}

とする。


先のAAでイメージすると

   /~~~~~~~~~~~~~~~/                         |     side_contents
  / side_contents /                          | ↑レイヤー2
 /_______________//~~~~~~~~~~~~~~~~~~~~~~~/  |________________
                 /        contents       /   | ↓レイヤー1
   /~~~~~~~~~~~~/_______________________/~/  |     contents
  /               body                   /   |     body
 /______________________________________/    |

 |-----300px---|----------500px---------|
 |-----------------800px----------------|

こんな感じ。


レイヤーというより、レイヤーグループって言ったほうがいいのかな?



<本日のBGM>ごまえ〜〜ごまえ〜〜

プライバシーポリシー お問い合わせ