Element mitten im Absatz schweben lassen

Avatar of Chris Coyier
Chris Coyier am

DigitalOcean bietet Cloud-Produkte für jede Phase Ihrer Reise. Starten Sie mit 200 $ kostenlosem Guthaben!

Angenommen, Sie möchten ein Bild (oder ein beliebiges anderes Element) visuell links in einem Textabsatz schweben lassen. Aber eben… mitten im Absatz, nicht ganz oben. Das ist machbar, gehört aber definitiv in den Bereich der CSS-Tricksereien!

Eine Sache, die man tun kann, ist, das Bild direkt in die Mitte des Absatzes zu klatschen

<p>
  Lorem ipsum dolor sit amet consectetur, adipisicing 
  <img src="tree.jpg" alt="An oak tree." />
  elit. Similique quibusdam aliquam provident suscipit 
  corporis minima? Voluptatem temporibus nulla
</p>

Aber das ist mega umständlich. Achten Sie auf den Alternativtext. Wir können keinen zufälligen alt-Text mitten in einem Satz haben. Das ist semantisch *igitt* und buchstäblich verwirrend für Menschen, die assistierende Technologien nutzen.

Also müssen wir das Bild vor den Absatz setzen.

<img src="tree.jpg" alt="An oak tree." />

<p>
  Lorem ipsum dolor sit amet consectetur, adipisicing 
  elit. Similique quibusdam aliquam provident suscipit 
  corporis minima? Voluptatem temporibus nulla
</p>

Aber wenn wir das tun, lassen wir das Bild nicht mehr wirklich mitten im Absatz schweben. Es ist ganz oben. Kein margin-top oder vertikales Translate oder irgendetwas anderes wird uns hier retten. margin verlängert nur die Höhe des schwebenden Bereichs und translate schiebt das Bild in den Text.

Der Trick, zumindest einer, den ich gefunden habe, besteht darin, shape-outside und ein polygon() zu nutzen, um den schwebenden Bereich dort neu zu formen, wo Sie ihn haben möchten. Sie können den oberen linken Teil überspringen. Clippy ist eine großartige Möglichkeit, einen Anfang für das Polygon zu bekommen

Aber anstatt des clip-path, den Clippy standardmäßig liefert, wenden Sie diesen Wert auf shape-outside an.

Das sollte ausreichen, wenn Sie nur eine Box an dieser Stelle platzieren. Aber wenn es sich tatsächlich um ein Bild handelt oder einen Hintergrundfarbton benötigt, müssen Sie möglicherweise *auch* clip-path anwenden und die Dinge vielleicht in Position transformieren. Hier landete ich nach etwas Fummelei.

Siehe den Pen
Ausschnitt mitten im Absatz schweben lassen.
von Chris Coyier (@chriscoyier)
auf CodePen.