2013-02-20 2 views
10

Dies ist zusätzlich zu meiner letzten Frage: Is it possible to use pseudo-elements to make containing elements wrap around an absolutely-positioned element (like a clearfix)?Können Sie eine Breite auf ein: vor /: nach Pseudo-Element (Inhalt: URL (Bild)) anwenden?

JSFiddle: http://jsfiddle.net/derekmx271/T7A7M/

Ich versuche Pseudo-Elemente zu verwenden, um "clearfix" absolut positionierte Bilder. Ich bin so weit gekommen, das gleiche Bild hinter den Dias zu sehen, aber es scheint nicht möglich zu sein, Breiten auf das eingefügte Bild anzuwenden. Bin ich verrückt, oder können Sie Breiten nicht auf Pseudoelemente anwenden, deren Inhalt Inhalt ist: url (img/image.jpg)? I versucht, verschiedene Varianten der Anzeige: Block usw. ohne Erfolg ...

#slider ul:after { 
    content: url(http://www.cs7tutorials.com/img/slide1.jpg); 
    display: block; 
    position:relative; 
    width:70px; 
} 

I die Breite des Pseudoelement Bild auf 100% und der Max-Breite zu 800 Pixel festlegen müssen, so dass es hat die gleichen Abmessungen wie meine Folien.

+0

Warum nennen Sie Ihr Bild nicht als Hintergrund im Pseudocontainer?Auf diese Weise können Sie seine Dimensionen mit 'background-size: 100%' und Ihren Pseudocontainer mit 'width: 100%; maximale Breite: 800px'. – otinanai

+0

Ich werde es versuchen. Wo würde der Pseudocontainer seine Abmessungen bekommen? @otinanai – derekmx271

+0

Ich brauche das Pseudo-Element, um die gleichen Abmessungen wie die Folien zu erhalten, hinter denen es platziert ist :( – derekmx271

Antwort

23

Sie nicht verrückt sind: es in der Tat nicht möglich ist, die Abmessungen eines Bildes zu ändern, die content eingefügt verwendet. Das Bild wird immer so dargestellt, wie es ist. Dies ist bekannt als ersetzter Inhalt oder eine replaced element (außer wir reden hier nicht über Elemente).

seit ersetzte Elemente jedoch könnenwidth und height, wie in section 10 of the CSS2.1 spec beschrieben geändert werden, stellt sich die Frage, warum die Eigenschaften scheinen nicht hier anzuwenden. Die Antwort darauf, so scheint es, ist, dass die Eigenschaften zutreffen, aber stattdessen auf die Pseudo-Element-Box - Sie können dies sehen, indem Sie Ihrem Pseudo-Element eine Hintergrundfarbe geben. Anstatt die Pseudo-Element-Box selbst zu ersetzen, wird das Bild als Kind der Pseudo-Element-Box gerendert und kann daher überhaupt nicht formatiert werden (da es ein anderes Pseudo-Element erfordern würde, das nicht existiert).

Und das ergibt sich zu einer anderen Frage: Warum ersetzt es nicht die Pseudo-Element-Box insgesamt? Leider hat angeben CSS2.1 überhaupt nicht dieses Verhalten, so the implementation that was agreed on is to render the content as a child of the pseudo-element box instead:

CSS2.1 nicht wirklich klar die Verarbeitung Modell des ‚Inhalts‘ definiert auf :: vor und :: nach, aber die informative Beispiele in CSS 2.1, die Tatsache, dass "content" eine Liste von Dingen angibt, und der Wunsch nach Konsistenz hat dazu geführt, dass UA-Verhalten das Folgende ist: Die 'content'-Eigenschaft gibt eine Liste von Dingen an, die Kinder der :: vor oder :: nach der Box.

-Boris

Hoffentlich wird dies weiter in CSS Generierte Inhalte Ebene 3 adressiert werden, auf dem Umschreiben Arbeit gerade erst begonnen hat. Wenn Sie in der Zwischenzeit die Größe des Pseudoelements :after und das generierte Bild ändern möchten, müssen Sie es stattdessen als Hintergrundbild anwenden und - vorausgesetzt, die Browserunterstützung ist kein Problem - verwenden background-size zusammen mit width und height skalieren (basierend auf der Erkenntnis, dass diese Eigenschaften stattdessen auf die Pseudo-Element-Box angewendet werden).

+0

Weißt du nicht zufällig, wenn diese Einschränkung irgendwo dokumentiert ist? Ich konnte es [hier] nicht finden (http://www.w3.org/TR/CSS2/ generate.html) – user3790069

+2

@ user3790069: Nein, ich konnte es auch nicht finden. Das ist das Problem. Ich habe eine mögliche Erklärung, aber ich denke, ich werde es im www-Stil vorschlagen und sehen, ob ich recht habe und Wenn ja, werde ich Aktualisiere meine Antwort. – BoltClock

+0

Ok, danke für deine Aufmerksamkeit – user3790069

0

Werfen Sie einen Blick auf die Demo mit background-image: http://jsfiddle.net/T7A7M/12/

+0

Es scheint jedoch, dass Sie eine bestimmte Höhe für Ihr Pseudo-Element haben müssen. – otinanai

+0

It hat definitiv die Bildanzeige geschrumpft, aber es hat die Fähigkeit verloren, die Elemente nach unten zu schieben ... Ich denke, ich greife nur nach den Sternen, um das absolut positionierte Dilemma zu lösen. – derekmx271

+0

Wenn Sie eine Höhe für das Pseudo setzen Element wird es das andere Element nach unten schieben – otinanai

Verwandte Themen