ネガティブマージン をつかって親要素からはみ出す

CSS

ネガティブマージンとは

margin の値が マイナス になっているもののことです。

今回の記事で、position などを使わずに margin をつかうことで

要素を移動させる方法をお伝えします!

ネガティブマージンではみださせる

基本的な仕様

上から順に、width 200px, 100%, 指定なし(または width: auto;), 100%(display:inline-block) を指定しています。

<div class="wrap">
  <div class="square00">00 width:200px;</div>
</div>
<div class="wrap">
  <div class="square01">01 width:100%;</div>
</div>
<div class="wrap">
  <div class="square02">02 width の指定なし</div>
</div>
<div class="wrap">
  <div class="square03">03 width:100%; display:inline-block;</div>
</div>
.wrap {
  margin-top: 20px;
  margin-bottom: 20px;
  width: 500px;
  height: 150px;
  margin-inline: auto;
  border: 1px solid #000;
}

.square00 {
  width: 200px;
  height: 100px;
  background: orange;
  /* margin-left: -100px; */
}

.square01 {
  background: orange;
  width: 100%;
  height: 100px;
  /* margin-left: -100px; */
}

.square02 {
  background: orange;
  height: 100px;
  /* margin-left: -100px; */
}

.square03 {
  display: inline-block;
  background: orange;
  width: 100%;
  height: 100px;
  /* margin-left: -100px; */
}

上記の css にコメントアウトしてある、margin-left: -100px; を通常の状態に戻すと

↓のような状態になります。

width を指定してある要素は長さがそのままに、横にはみ出ます。

対して width を指定していない(または width: auto;)要素は、ネガティブマージンの分長さが伸びます。

これは、display:block; のような、width の指定がなくても

自動的に横幅いっぱいに伸びてくれる要素しか、横には伸びません

display:inline-block; の width の指定をなくすと↓のようになります。

inline-block および inline 要素は、テキストなどのコンテンツの長さ分しか自動的に

width をつけてくれないので、block のようにはなりません。

この ネガティブマージン をつかったテクニックを紹介してくださっている、

はにわまんさんの記事もぜひご覧ください!

使用時の注意点

ネガティブマージンには、注意点がひとつありまして、

それは、画面幅が縮んだ時に、要素が画面外にはみ出してしまうことです。

margin-left: -100px分画面外に飛び出している

なので、media query などを使って、画面外にはみ出ないようにしておく必要があります

まとめ

  • ネガティブマージンは、値が負の数になっている margin のこと
  • 負の値を指定した分だけ要素がはみ出る
  • display: block などの横幅が自動的に伸びる要素に関しては、はみ出る分だけ伸びる
  • 画面幅を縮めたときに要素が画面外にはみ出る可能性があるので、はみ出ないように対応すること

他にも、ネガティブマージンが通常のマージンと被った場合の挙動など、

紹介しておいた方がいいかなと思うものもあるのですが、

今回の記事はここまでにさせていただきます。

もち
もち

今回はここまでになります。

最後まで見てくださりありがとうございました!

この記事がお役に立てばうれしいです!

タイトルとURLをコピーしました