
Ein schwebendes Bild nimmt horizontalen Raum vom Text weg, der darum herumfließt. In Layouts mit fester Breite können Sie überprüfen, ob der für den Text verbleibende Platz ausreicht, um eine ansehnliche Spalte zu erstellen, und Sie wissen, dass alle anderen dasselbe sehen werden.
In einem flexiblen Layout haben Sie jedoch keine solche Garantie. Wenn ein Benutzer Ihre Website auf einem kleineren Gerät anzeigt, reicht der für den Text verbleibende horizontale Platz möglicherweise nur für ein oder zwei Wörter pro Zeile. Eine so schmale Textspalte sieht nicht nur hässlich aus; sie ist auch fragil. Ein Satz mit einem langen Wort wird aufgeteilt, wenn das lange Wort unter das schwebende Bild rutscht und mitten im Satz leeren Raum hinterlässt.
Die schwer fassbare Mindestabsatzbreite
Um das Problem zu schmaler Absätze zu lösen, benötigen wir eine Möglichkeit, eine Mindestabsatzbreite zu implementieren. Wenn der durch das schwebende Bild verbleibende Platz unter dieser Breite liegt, wird der gesamte Absatz darunter verschoben.

Intuitiv scheint die folgende CSS-Regel passen:
p {
min-width: 10em;
/* For demonstration */
border: 1px solid red;
}
Dies hat jedoch keine Auswirkung. Das Bild schwebt über dem Absatz und reduziert somit nicht die „offizielle“ Breite des Absatzes. In der Zwischenzeit weicht der Text innerhalb des Absatzes pflichtbewusst aus, um Platz für das schwebende Bild zu schaffen, und das Problem bleibt bestehen.
Die Media-Query-Lösung für bekannte Bildbreiten

Wenn Ihre Bilder (oder andere schwebende Inhalte) eine feste und vordefinierte Breite haben, können Sie CSS3-Media-Queries verwenden, um das Schweben bei Bildschirmgrößen zu deaktivieren, die zu schmal sind, um sowohl ein Bild als auch eine Textspalte nebeneinander zu platzieren.
Diese Lösung funktioniert natürlich nur in Browsern, die CSS-Media-Queries unterstützen. Für andere Browser wird die Lösung zum ursprünglichen Problem zurückgeführt.
@media screen and (max-width: 400px) {
img {
float: none;
}
}
Allgemeine Lösung mit Pseudo-Element
Die Media-Query-Lösung funktioniert nicht, wenn die schwebenden Elemente beliebige Breiten haben, und ist auch nicht sehr elegant.

Eine bessere Lösung ist, jedem Absatz ein unsichtbares CSS-Pseudo-Element mit der gewünschten Mindestabsatzbreite zu geben. Wenn nicht genügend Platz vorhanden ist, um dieses Pseudo-Element unterzubringen, wird es unter das Bild geschoben und nimmt den Absatz mit.
Diese Lösung wird von den meisten Browsern unterstützt. In älteren Browsern fällt die Lösung dankend auf das ursprüngliche Problem zurück.
p:before {
content: "";
width: 10em;
display: block;
overflow: hidden;
/* For Demonstration */
border: 1px solid green;
}
Der grüne `border` des Pseudo-Elements dient nur zur Veranschaulichung. Er ist für die Lösung nicht erforderlich und sollte in Ihrem Code entfernt werden. Das Pseudo-Element nimmt dann überhaupt keinen vertikalen Platz ein.
Demo & Download
Demo ansehen Dateien herunterladen
Über den Autor

Gustav Andersson ist der Autor von The Modern Nomad, einer Website, die nomadische Lebensstile erforscht und Menschen ermöglicht, überall und jederzeit zu leben und zu arbeiten. Er ist ein Tango-tanzender, Bullenreiten-könnender, Grammatik-liebender Burner, der Sie inspirieren möchte, ein Leben ohne Adresse in Erwägung zu ziehen.
Man könnte dem Absatz auch einfach `overflow: hidden` mit einer Mindestbreite geben, um einen neuen Block-Formatierungskontext zu erstellen, der ihn so verhalten lassen sollte, wie Sie es möchten.
Entfernen Sie die `min-width`, um zu sehen, warum dies funktioniert (es zwingt den Absatz, nicht hinter den schwebenden Inhalt zu fallen). Ich liebe Block-Formatierungskontexte, und diese Eigenschaft wird wirklich unterschätzt.
Aber das bricht nicht richtig um.
Wenn man mehr Text schreibt, so dass der Absatz höher als das schwebende Bild ist, beginnt er nicht unter dem Bild zu fließen; er setzt sich einfach in einer vertikalen Spalte mit konstanter Breite fort.
Interessante Lösung bezüglich des Pseudo-Elements.
Ich habe `float:none` schon einmal verwendet und nicht an das andere gedacht. Ich werde es beim nächsten Mal ausprobieren.
Großartige Idee!
Ich bin auf dem Handy, kann also nicht testen, aber ich glaube, ein benachbarter Selektor könnte hier nützlich sein: „img + p:before“.
Großartige Ratschläge, werde ich sehr bald ausprobieren.
Schöner Tipp. Lohnt sich auszuprobieren
Schön, sehr clever.
Dies funktioniert gut, wenn Sie das `img`-Tag vor oder nach dem Absatz platzieren. Wenn Sie ein Bild inmitten davon platzieren, behält der Absatz seine Mindestbreite nicht bei.
Dies funktioniert nur, wenn wir das Bild nach rechts schieben. Was ist mit `float left`? Müssen wir auch das Pseudo-Element nach rechts schieben oder das Pseudo-Element mit absoluter Position nach rechts verschieben? Ich denke, Media-Queries sind immer noch die beste Lösung, wir können einfach die Ausrichtungsklasse von den Bildern abrufen und dann den Float deaktivieren oder das Pseudo-Element einfach über Media-Queries erstellen.
Hallo,
Unterstützen gängige E-Mail-Clients diesen CSS-Trick? Könnte dies eine Möglichkeit sein, Tabellen zu vermeiden?
Toller Tipp. Ich bin sicher, ich werde das viel benutzen.
Man könnte dem Bild auch eine maximale Breite geben… z.B. 50 % eines Absatzes.
Sie haben mir gerade einen großartigen Tipp gegeben, ich bin sicher, ich werde ihn benutzen
Dies funktioniert bei mir in FF 11.0 nicht ohne einen oberen Rand (`border-top:1px solid transparent`) am `P`-Tag – es fällt auf das ursprüngliche Problem zurück.
Es funktioniert wie beschrieben in IE8, ich hatte noch keine Gelegenheit, andere Browser zu testen.
Schöner Beitrag, Mann! Ich persönlich benutze `min-width` für fast alles, lol. RWD all the way!
Was wir wirklich brauchen, ist das Zeilenbrechen mit Bindestrichen. Ich frage mich, wann Webbrowser dafür fortgeschritten genug sein werden.
Eine sehr hilfreiche Notlösung! Vielen Dank für die Einblicke, ich bin sicher, das wird nützlich sein.
Schöner Beitrag – danke fürs Teilen :)