CSSにおけるfloatとmarginの組み合わせ
現在、テキストは画像の左側に寄せられています。
このテキストを少し離してみましょう。
そのためには、段落に左側のmarginを30px設定し、
親のdivには赤い枠線を設定します。
予期せず、親divに接しているテキストだけが右に移動し、 画像に接しているテキストは移動しません:
<div>
<img src="img.png" alt="">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elitorire.
</p>
<p>
some long text
</p>
</div>
div {
width: 400px;
border: 1px solid red;
text-align: justify;
}
p {
margin-left: 30px;
}
img {
float: left;
}
:
なぜこうなるのか理解するために、段落に緑色の枠線を追加しましょう:
<div>
<img src="img.png" alt="">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elitorire.
</p>
<p>
some long text
</p>
</div>
div {
width: 400px;
border: 1px solid red;
text-align: justify;
}
p {
margin-left: 30px;
border: 1px solid green;
}
img {
float: left;
}
:
ご覧の通り、実際には段落は画像からではなく、
親divの左端から離れています。
詳しく見るために、opacityプロパティを使って
画像に半透明度を追加しましょう:
<div>
<img src="img.png" alt="">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elitorire.
</p>
<p>
some long text
</p>
</div>
div {
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への反応はありますが、
実際の段落は画像の下に配置されています。
マージンを削除して、画像の半透明度だけを残しましょう:
<div>
<img src="img.png" alt="">
<p>
Lorem ipsum dolor sit amet, consectetur adipiscing elitorire.
</p>
<p>
some long text
</p>
</div>
div {
width: 400px;
border: 1px solid red;
text-align: justify;
}
p {
border: 1px solid green;
}
img {
float: left;
opacity: 0.5;
}
:
これが私たちの段落の実際の見え方です。 テキストは画像によって押し出されていますが、 物理的に段落は画像の下にあり、 これは親divの左端から始まる枠線で確認できます。
marginを戻し、画像を最初の段落の中に入れてみましょう:
<div>
<p>
<img src="img.png" alt="">
Lorem ipsum dolor sit amet, consectetur adipiscing elitorire.
</p>
<p>
some long text
</p>
</div>
div {
width: 400px;
border: 1px solid red;
text-align: justify;
}
p {
margin-left: 30px;
border: 1px solid green;
}
img {
float: left;
opacity: 0.5;
}
:
これで画像が段落と一緒に動くようになりました!