Nehmen wir an, Sie möchten ein Layout wie dieses erstellen

Das ist doch vernünftig, oder? Besonders, wenn Ihr Artikel davon handelt, dass Katzen im MITTELPUNKT der Aufmerksamkeit stehen wollen. VERSTEHEN SIE?! (Kätzchen via PlaceKitten).
Nun, das ist nicht gerade einfach zu bewerkstelligen. Unsere aktuellen Layout-Methoden sind nicht wirklich darauf ausgelegt. Tatsächlich fühlen sie sich manchmal so an, als hätten sie "Webdesign" nicht wirklich im Sinn. HAB ICH RECHT? Selbst die fortschrittlichsten CSS-Layoutsysteme, glaube ich, würden das nicht gut handhaben. Das ist ein bisschen so wie bei float, wo der Text um das Bild herumfließt, aber der Text fließt in beide Richtungen, also wäre es so etwas wie float: center; oder float: both;, was nicht existiert.
Aber das ist machbar! Beweis
Demo ansehen Dateien herunterladen
Wir werden dies tun, indem wir geflutete Pseudo-Element-Platzhalter verwenden. Wir werden einen in jeder Textspalte platzieren1, einen links, einen rechts geflutet. Das Pseudo-Element sollte die Höhe des Bildes haben und die halbe Breite (ungefähr... denken Sie daran, dass Sie etwas Polsterung benötigen und der Abstand zu berücksichtigen ist).
Im Wesentlichen
#l:before, #r:before {
content: "";
width: 125px;
height: 250px;
}
#l:before {
float: right;
}
#r:before {
float: left;
}

Jetzt gibt es ein Loch im Text, bereit, unser Bild dort zu platzieren. Wir könnten dies tun, indem wir es absolut positionieren, wie in der Demo. Oder Sie könnten es einfach in einem Element darüber belassen, zentriert, und negative obere Ränder an den Spalten verwenden, um den Text herumzuziehen.
1 Beachten Sie, dass wir div's für die Textspalten verwenden, nicht CSS-Spalten, was cooler und semantischer wäre, aber es wird nicht passieren.
Ooh. Toller Tipp und etwas anderes. Ergibt viel mehr Sinn und ich verwende zunehmend spaltenartige Layouts, da immer mehr Leute neuere Computer mit größeren Bildschirmen kaufen oder andere Magazin-Layouts und etwas anderes als den üblichen einheitlichen Textblock wünschen.
Vielen Dank für diesen tollen Tipp! Sieht fantastisch aus und ist tatsächlich viel natürlicher!
Das ist großartig! Man sollte meinen, es gäbe etwas im Standard, um dies intuitiver zu machen. Es erinnert mich in gewisser Weise an die Sandbag-Div-Technik, um Text um Bilder herumfließen zu lassen.
Meine bevorzugte „float: center;“-Technik ist es, ein Element auf „display: inline-block;“ zu setzen und dessen Elternelement auf „text-align: center;“. Es hat nicht genau das gleiche Verhalten wie dieses Beispiel, aber es ist eine sehr nützliche Technik von Zeit zu Zeit.
sehr interessant
danke
Chris kehrt zu echten CSS-Tricks zurück! Danke, es ist immer eine Freude, neue Techniken zu lernen.
sehr clever .. für Anzeigen verfügbar, danke
OMG, es funktioniert nicht in IE 5.5!!!!!!!!!!!!! ASFASDASFASFADSDSF!
(Schöner Tipp ;))
Hey, was cool ist, ist, dass es in IE 7 und höher funktionieren sollte, was für so einen netten Trick ziemlich gut ist.
Ernsthaft, welcher Kunde hat dich gebeten, IE5.5 zu unterstützen? Immer noch Kunden mit Windows 95/98?
^ Sarkasmus.
Definitiv ein solider Tipp. Es ist lächerlich, dass man sich so anstrengen muss, um etwas so Einfaches zu erreichen. Ich schätze, wir müssen bis CSS4 warten....
benutzen Sie IE5.5?……
Ich denke, es ist schwer, Sarkasmus in Text zu vermitteln ;-) Aber ein toller Tipp, Chris, ich werde es ausprobieren. Danke
Gerade solche Dinge mag ich am liebsten, lustige Workarounds, die Sinn ergeben und eine solide Basis haben. Nett :)
Hehe, ich würde es nie selbst schaffen.
Mit etwas Geduld kann man sogar noch interessantere Float-Effekte erzielen
http://rmcreative.ru/blog/post/slozhnoe-obtekanie-tekstom
Das ist sehr cool, die alte Shim-Technik. Ein Teil des „Sinns“ hierbei ist, dass Pseudo-Elemente dafür sorgen, dass der Code fast perfekt semantisch bleibt, keine zusätzlichen Elemente benötigt werden.
Ich habe schon unzählige Male gesehen, wie Leute versucht haben, float:center zu verwenden – man sollte meinen, nachdem sie mehrmals gesehen haben, dass es nicht funktioniert, würden sie aufhören. Also hat mich dieser Titel aufmerksam gemacht :)
Danke für den Tipp! Die Pseudo-Selektoren sind ziemlich genial und ich mag es, verschiedene Ideen zu sehen, wie man sie verwenden kann.
Hallo Chris,
Ich würde das Bild nicht in das Markup aufnehmen, da es IE6/7 kaputt macht. Stattdessen würde ich es verwenden, um beide Pseudo-Elemente mit einem Hintergrundbild zu gestalten. So erhalten Sie denselben Effekt mit einem schönen „Fallback“ (da das Bild den Inhalt nicht überlagern würde).
Hallo Chris, toller Tipp. Atemberaubend :)
Ihre Seite heißt zu Recht CSS-Tricks und präsentiert großartige und seltenste Tricks im gesamten WWW.
Hallo Chris,
Ich musste vor einiger Zeit den Look von „float: center“ erreichen und er musste in IE6 funktionieren, also benutzte ich Spacer-Bilder anstelle von Pseudo-Elementen, woran ich ehrlich gesagt noch nicht gedacht hatte.
Ich werde meinen Ansatz aktualisieren, falls ich jemals wieder eine Anfrage dafür bekomme!
Viele Grüße,
Hey danke, Chris. Ich bin so aufgeregt deswegen!!! Vielleicht ist es mein Print-Hintergrund, der mich immer zu dieser Fähigkeit drängt, aber ich habe versucht, den „Center Float“ auf viele Arten zu erreichen und immer versagt. Mit freundlichen Grüßen-
cheers-
Liebe es! Verleiht dem Begriff „Magazin-Layout“ eine neue Bedeutung. ;-)
Das sieht nach einer tollen Idee aus. Ich habe eine Frage zur Implementierung
Wenn Sie mehrere Elemente zentrieren möchten, müssten Sie dann etwas wie dies in Ihrem Stylesheet mit einer eindeutigen Kennzeichnung für JEDES Element verwenden?
#element1 #left:before, #element1 #right:before { content: “”; width: 225px; height: 250px; }
#element2 #left:before, #element2 #right:before { content: “”; width: 225px; height: 250px; }
Danke für Ihren Rat.
~Jeff
Tatsächlich ist es sinnvoller, wenn die Größenanforderungen unterschiedlich sind
#element1 #left:before, #element1 #right:before { content: “”; width: 225px; height: 250px; }
#element2 #left:before, #element2 #right:before { content: “”; width: 100px; height: 150px; }
Entschuldigung, ich konnte meine vorherigen Kommentare nicht bearbeiten… also hier ist ein weiteres Update, um die „zentrale Flutung“ mehrerer Elemente zu unterstützen
Für mehrere Elemente kann man keine doppelten IDs verwenden, sondern muss Klassen verwenden, also sollte das funktionieren
#element1 .left:before, #element1 .right:before { content: “”; width: 225px; height: 250px; }
#element2 .left:before, #element2 .right:before { content: “”; width: 100px; height: 150px; }
sehr schick !!, ist es IE-sicher?
Es ist nicht vollständig IE-sicher. Ich habe es gerade getestet.
IE8 und IE9 machen es gut.
IE7 und niedriger scheitern…
@Chris Coyier
Danke für den Blog-Post. Könnte ich irgendwann brauchen.
Danke fürs Teilen, ich bin immer noch dabei, all diese coolen CSS-Tricks zu lernen, und Ihre Website ist fantastisch!
Ich freue mich auf weitere Beiträge von Ihnen :)
Das ist ein wirklich cooler Trick. Sehr einfach. Sobald ich „Wir werden dies tun, indem wir geflutete Pseudo-Element-Platzhalter verwenden.“ gelesen habe, wusste ich, was Sie tun, aber ohne diesen „Auslöser“ wäre ich nie auf eine solche Methode gekommen. Tatsächlich hatte ich so ein „Problem“ nie in Betracht gezogen.
Sehr gute Arbeit!
Ich liebe den Effekt und habe versucht (erfolglos), den Look für IE7 und darunter nachzubilden. Ich dachte, die Einbindung von Dean Edwards IE7.js würde das Problem lösen, aber das scheint derzeit Probleme mit den :before und :after-Selektoren zu haben, also kein Erfolg.
Ich werde meine Bemühungen fortsetzen und hier berichten, wenn ich Erfolg habe.
Es scheint, dass eine jQuery-Lösung die beste Antwort ist – entweder über die API (http://api.jquery.com/before/ und http://api.jquery.com/after/) oder dieses Plugin http://jquery.lukelutman.com/plugins/pseudo/.
Vielleicht ist ein besserer Weg, einfach IE7 und darunter spezifische Stylesheets einzubinden, die das Layout für die Browser korrigieren, die diese Selektoren nicht unterstützen.
Sie können die Pseudo-Elemente durch Spacer-Bilder oder leere Tags ersetzen, da IE7- die :before, :after Pseudo-Elemente nicht unterstützt. Hier ist ein Beispiel mit Spacer-Bildern.
Viele Grüße,
Danke Fabien, aber diese Lösung funktioniert nicht gut, wenn man mit einem CMS integrieren muss und der Kunde zahlreiche zusätzliche Elemente einfügen muss. Ich suche immer noch nach der perfekten CSS-basierten Lösung für ältere Browser!
Ich wünschte, wir könnten das mit der CSS-Eigenschaft column-count tun.
Sehr cool, Chris. Ich sehe eine Reihe von Möglichkeiten, wo ich das gerne implementieren würde.
Ich habe Ihre Erklärung und den Code befolgt und eine erste, akzeptable Version erstellt. Sobald ich herausgefunden habe, wie ich hier ein Bild einfügen kann, werde ich einen Screenshot davon teilen.
Danke, dass Sie das großartige Konzept und die klare Erklärung geteilt haben.
Ich bin genau auf dieses Problem gestoßen – vor einer Woche ;)
Ich habe überlegt, wie ich das in einem CMS-Template bauen kann.
Vielen Dank. Werde es testen, aber ich bin sicher, dass es funktionieren wird ;)
Hallo!
Wir hatten dieses Problem erst letzte Woche. Ein Kollege von mir wollte genau so etwas machen und ich sagte ihm, dass es einfach nicht möglich sein würde.
Aber jetzt, wo ich die Lösung für das Problem sehe, scheint es viel einfacher zu lösen zu sein, als ich erwartet hatte!
Vielen Dank dafür! :)
Ich habe Ihre Erklärung und den Code befolgt und eine erste, akzeptable Version erstellt. Sobald ich herausgefunden habe, wie ich hier ein Bild einfügen kann, werde ich einen Screenshot davon teilen.
Sehr gute Dinge ~~~~
Toller Tipp, aber ich hatte gehofft, es würde CSS3-Spalten verwenden. Na ja.
Toller Tipp! ‚float: center;‘ war schon lange ein Traum von mir. Das funktioniert ziemlich gut. Danke!
Diese hier scheint ziemlich gut zu sein.
Eine Sache aber, warum kreieren sie nicht einfach ein float:center CSS selbst?
Es ist sehr cool und nützlich!
Erstellt also :before eine Art virtuelles Div mit der angegebenen Breite und Höhe?
Denn nach meinem Verständnis der schematischen Darstellung verhalten sich die erstellten :before-Bereiche wie Elemente mit „display:block;“… Behandeln Browser sie als solche?
Es ist kein DIV, aber ja, es ist ein generisches Block-Level-Element. (Und es ist nur Block-Level, weil das Fluten es automatisch zu Block macht, sonst wäre es Inline.)
Unterstützt es IE6, IE7?
Gute Idee, die ich vielleicht in Zukunft brauche, danke.
Das ist ziemlich clever, danke dafür, ich werde es ausprobieren :)
Oooo sehr praktisch…vorerst!
Sie sollten sich unbedingt box-pack:center ansehen, es ist eine weitere Möglichkeit, dies zu erreichen: https://developer.mozilla.org/en/CSS/-moz-box-pack
IE6-7 haben keine :before-Unterstützung, deshalb müssen wir dieses Beispiel für Microsoft optimieren :)
mit einigen speziellen Techniken, z. B. mit JS-Ausdrücken
Kein Grund dazu, zeigen Sie ihnen einfach eine einfache Version mit dem Bild oben links und machen Sie weiter.
Ich liebe es! Ich bin kein Hardcore-Coder, aber habe ich Recht, dass das ein (nur) CSS3-Trick ist?
Wirklich schöne Tipps für die Erzeugung des Effekts…
Doh! o_O
Danke für den Tipp.
Großartige Technik, Chris! Ich habe eine Variante auf meinem Blog geschrieben: Sie verwendet
display: table-cell, um die Spalten zu erstellen, was den CSS- und Markup-Aufwand vereinfacht. Danke für den Trick!Liege ich richtig in der Annahme, dass, wenn ich das Gegenteil davon erreichen wollte (d.h. 2 Bilder mit Text in der Mitte), ich dies mit Folgendem tun könnte?
Die Bilder, auf die in diesem Beispiel Bezug genommen wird, sind dumm.
vielleicht mache ich es mir schwerer als nötig
Dies ist nur einer von vielen CSS-Tricks, die die Probleme des HTML-Layouts ein wenig komplizierter machen, als sie sein müssten.
Sie sind nicht für das Dilemma verantwortlich, helfen uns aber nicht bei der Lösung der Probleme.
Dieser Trick ist wie das Stopfen von Socken in ein kaputtes Fenster.