Połączenie float i margin w CSS

Teraz nasz tekst jest dociśnięty do obrazka z lewej strony. Spróbujmy nieco odsunąć ten tekst. W tym celu ustawmy naszym akapitom lewy margin na 30px, a divowi-rodzicowi - czerwoną ramkę.

Niespodziewanie w prawo odsunie się tylko ten tekst, który przylega do diva-rodzica, a tekst, przylegający do obrazka - nie odsunie się:

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;
}

Результат:

Aby zrozumieć, dlaczego tak jest, dodajmy akapitom zieloną ramkę:

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;
}

Результат:

Jak widzimy, w rzeczywistości akapity odsuwają się od lewej krawędzi, ale nie od obrazka, a od diva-rodzica. Aby przyjrzeć się temu dokładniej, dodajmy jeszcze półprzezroczystość obrazkowi za pomocą właściwości 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;
}

Результат:

Teraz dokładnie widać, że reakcja na margin-left jest, tylko akapity w rzeczywistości są umieszczone pod obrazkiem. Usuńmy odstęp, pozostawiając jednak półprzezroczystość obrazka:

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;
}

Результат:

Tak naprawdę tak wyglądają nasze akapity - ich tekst jest odsunięty przez obrazek, ale fizycznie akapity leżą pod obrazkiem, widać to po ramce, która zaczyna się od lewej krawędzi diva-rodzica.

Wróćmy do margin i wsuńmy obrazek do pierwszego akapitu:

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;
}

Результат:

Teraz obrazek przesuwa się razem z akapitami!