Mein Freund Richard kam gestern mit einem interessanten Problem zu mir. Er verwendete eine API, die ihm eine große Liste von Unternehmen zurückgab. Jedes Unternehmen hatte **Text** und die meisten (aber nicht alle) hatten auch ein **Bild**. Er wollte das Bild verwenden, wenn vorhanden, aber wenn das Bild angezeigt wurde, wollte er den Text nicht auch anzeigen. Die Lösung musste darin bestehen, sowohl das Bild als auch den Text auszugeben und dann zu versuchen, den Text zu verbergen, wenn möglich.
Hier ist ein Beispiel dafür, wie der HTML-Output aussehen könnte
<img src="images/image-110.png" alt="image" />
<span>Text</span>
<br /><br />
<img src="images/image-110.png" alt="image" />
<span>Text</span>
<br /><br />
<span>Text</span>
Hier sehen Sie, dass die ersten beiden "Gruppen" sowohl ein Bild als auch Text haben, während die letzte nur Text hat. **Dies ist ein ideales Szenario für den Nachbar-Geschwister-Selektor!** Jeder CSS-Nerd-Traum! Was wir hier wirklich tun müssen, ist, nur die Spans anzusprechen, die unmittelbar einem Bild folgen. Das können wir tun und das Problem lösen, wie folgt:
img {
vertical-align: middle;
z-index: 9999;
position: relative;
}
span {
z-index: 1;
}
img+span {
margin-left: -110px;
}
Das klare Englisch der Nachbar-Geschwister-Selektor-Anweisung lautet: "Suche nach Spans, die unmittelbar auf Bilder folgen, und schiebe sie nach links." Der allein stehende Span bleibt unberührt, aber die oberen beiden werden nach links geschoben. Der negative linke Außenabstand bewirkt das Verschieben und kann den Text dank des hohen z-index-Werts **unter** das Bild schieben. Die relative Positionierung ist tatsächlich erforderlich, um den z-index zum Funktionieren zu bringen.
Ich habe mich für die Lösung mit dem negativen Außenabstand entschieden, da diese Methode auch bei deaktivierten Bildern zugängliche Daten liefert. Wenn der zu verbergende Text jedoch zu groß ist, um hinter das Bild zu passen (oder das Bild transparent ist), wäre dies ein Problem. Sie könnten auch "visibility: hidden;" oder "display: none" anstelle des negativen linken Außenabstands in Betracht ziehen, was absolut funktionieren würde, aber weniger zugänglich wäre.
Schön!
Ist diese Technik mit der CSS 2-Spezifikation verfügbar? Oder nur mit Version 3?
Ich habe es in Safari, Opera, Firefox und IE 7 getestet und es schien in allen zu funktionieren. Muss CSS 2.1 sein =)
Schön. Das könnte sehr hilfreich sein. Tolle Arbeit Chris – guter Fund!
Hallo Chris, css-tricks.com ist wirklich hilfreich, ich bin einmal zufällig hierher gekommen, aber ich kann mich nicht beschweren, ich mochte diesen letzten Trick. Frieden für alle css-tricker
Können Sie mir bitte sagen, welche Schriftart für das Wort "image" in Ihrer Demo verwendet wurde?
Es ist gut, wieder etwas CSS zu sehen und sich eine Weile von der ganzen JavaScript-Szene zu lösen. Gut gemacht übrigens!
@Noddy: Ich glaube, es ist Agenda-SemiBold, aber in dieser Größe sieht es ziemlich wie Trebuchet MS aus (alles groß, Buchstabensperrung 1px)
Der Nachbar-Geschwister-Selektor funktioniert nicht in IE6 ... trotzdem ein guter Einsatz des Selektors.
Ein schönes und einfaches Beispiel für den Nachbar-Geschwister-Selektor. Guter.
Wirklich hilfreich... aber funktioniert nicht in IE6. Der Nachbar-Selektor ist schon lange CSS-Standard, aber nur moderne Browser unterstützen dies.
Das ist verdammt fantastisch! Das ist genau die Lösung für mein Problem mit den unterschiedlichen Kombinationen von Überschriften und Absätzen; H1 ist groß, daher soll es mehr margin-bottom haben als H3 zum Beispiel, aber noch mehr, wenn eine Überschrift unter einer Überschrift verschachtelt ist... und so weiter.
Ich habe das schon vor langer Zeit als Problem identifiziert und dachte, es gäbe keine Lösung. Ich liebe es, in solchen Fällen widerlegt zu werden.
Ja, nur *moderne* Browser unterstützen es – kein IE6. Irgendwo muss man die Grenze ziehen :) IE6 ist, was, sieben Jahre alt? Ich bin an dem Punkt, an dem ich sicherstelle, dass meine Websites unter IE6 zugänglich sind, aber sie müssen nicht immer Pixel für Pixel perfekt sein.
Tolle Technik, ich kann diese Funktionalität tatsächlich in einem aktuellen Projekt verwenden! Nur zur Info, Sitepoint CSS Ref besagt, dass Safari und Firefox volle Unterstützung haben, IE6 keine Unterstützung hat und IE7 und Opera fehlerhafte Unterstützung haben (obwohl es beim Lesen so scheint, als wäre es für die meisten Zwecke in IE7 und Opera sicher).