CSSにおけるfloatとmarginの組み合わせ

現在、テキストは画像の左側に寄せられています。 このテキストを少し離してみましょう。 そのためには、段落に左側のmarginを30px設定し、 親のdivには赤い枠線を設定します。

予期せず、親divに接しているテキストだけが右に移動し、 画像に接しているテキストは移動しません:

html<div>
  <img src="img.png" alt="">
  <p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elitorire.
  </p>
  <p>
    some long text
  </p>
</div>
cssdiv {
  width: 400px;
  border: 1px solid red;
  text-align: justify;
}
p {
  margin-left: 30px;
}
img {
  float: left;
}

Результат:

なぜこうなるのか理解するために、段落に緑色の枠線を追加しましょう:

html<div>
  <img src="img.png" alt="">
  <p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elitorire.
  </p>
  <p>
    some long text
  </p>
</div>
cssdiv {
  width: 400px;
  border: 1px solid red;
  text-align: justify;
}
p {
  margin-left: 30px;
  border: 1px solid green;
}
img {
  float: left;
}

Результат:

ご覧の通り、実際には段落は画像からではなく、 親divの左端から離れています。 詳しく見るために、opacityプロパティを使って 画像に半透明度を追加しましょう:

html<div>
  <img src="img.png" alt="">
  <p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elitorire.
  </p>
  <p>
    some long text
  </p>
</div>
cssdiv {
  width: 400px;
  border: 1px solid red;
  text-align: justify;
}
p {
  margin-left: 30px;
  border: 1px solid green;
}
img {
  float: left;
  opacity: 0.5;
}

Результат:

これで確実に、margin-leftへの反応はありますが、 実際の段落は画像の下に配置されています。 マージンを削除して、画像の半透明度だけを残しましょう:

html<div>
  <img src="img.png" alt="">
  <p>
    Lorem ipsum dolor sit amet, consectetur adipiscing elitorire.
  </p>
  <p>
    some long text
  </p>
</div>
cssdiv {
  width: 400px;
  border: 1px solid red;
  text-align: justify;
}
p {
  border: 1px solid green;
}
img {
  float: left;
  opacity: 0.5;
}

Результат:

これが私たちの段落の実際の見え方です。 テキストは画像によって押し出されていますが、 物理的に段落は画像の下にあり、 これは親divの左端から始まる枠線で確認できます。

marginを戻し、画像を最初の段落の中に入れてみましょう:

html<div>
  <p>
    <img src="img.png" alt="">
    Lorem ipsum dolor sit amet, consectetur adipiscing elitorire.
  </p>
  <p>
    some long text
  </p>
</div>
cssdiv {
  width: 400px;
  border: 1px solid red;
  text-align: justify;
}
p {
  margin-left: 30px;
  border: 1px solid green;
}
img {
  float: left;
  opacity: 0.5;
}

Результат:

これで画像が段落と一緒に動くようになりました!