Combinação de float e margin em CSS

Agora, nosso texto está alinhado à esquerda da imagem. Vamos tentar afastar um pouco esse texto. Para isso, vamos definir uma margin esquerda de 30px para os nossos parágrafos e uma borda vermelha para a div pai.

Inesperadamente, apenas o texto adjacente à div pai recuará para a direita, enquanto o texto adjacente à imagem não se afastará:

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

Результат:

Para entender por que isso acontece, vamos adicionar uma borda verde aos parágrafos:

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

Результат:

Como podemos ver, na verdade, os parágrafos estão se afastando da borda esquerda, mas não da imagem, e sim da div pai. Para examinar mais detalhadamente, vamos adicionar uma semi-transparência à imagem usando a propriedade 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;
}

Результат:

Agora sim está claro que há uma reação ao margin-left, apenas que os parágrafos estão, na verdade, posicionados abaixo da imagem. Vamos remover a margin, mantendo a semi-transparência da imagem:

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

Результат:

É assim que nossos parágrafos realmente se parecem - seu texto é afastado pela imagem, mas fisicamente os parágrafos estão sob a imagem, isso é visível pela borda que começa na borda esquerda da div pai.

Vamos restaurar a margin e colocar a imagem dentro do primeiro parágrafo:

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

Результат:

Agora a imagem se move junto com os parágrafos!