Ich möchte über die z-index
CSS- Eigenschaft einen paradoxen Effekt erzeugen .
In meinem Code habe ich fünf Kreise, wie im Bild unten, und alle sind absolut ohne Definition positioniert z-index
. Daher überlappt standardmäßig jeder Kreis den vorherigen.
Im Moment überlappt Kreis 5 Kreis 1 (linkes Bild). Das Paradoxon, das ich erreichen möchte, ist, gleichzeitig Kreis 1 unter dem Kreis 2 und über Kreis 5 zu haben (wie im rechten Bild).
(Quelle: schramek.cz )
Hier ist mein Code
Markup:
<div class="item i1">1</div>
<div class="item i2">2</div>
<div class="item i3">3</div>
<div class="item i4">4</div>
<div class="item i5">5</div>
CSS
.item {
width: 50px;
height: 50px;
line-height: 50px;
border: 1px solid red;
background: silver;
border-radius: 50%;
text-align: center;
}
.i1 { position: absolute; top: 30px; left: 0px; }
.i2 { position: absolute; top: 0px; left: 35px; }
.i3 { position: absolute; top: 30px; left: 65px; }
.i4 { position: absolute; top: 70px; left: 50px; }
.i5 { position: absolute; top: 70px; left: 15px; }
Ein Live-Beispiel finden Sie auch unter http://jsfiddle.net/Kx2k5/ .
Ich habe viele Techniken mit Stapelaufträgen, Stapelkontext usw. ausprobiert. Ich habe einige Artikel über diese Techniken gelesen, aber keinen Erfolg. Wie kann ich das lösen?
Antworten:
Hier ist mein Versuch: http://jsfiddle.net/Kx2k5/1/
(erfolgreich getestet auf
Fx27
,Ch33
,IE9
,Sf5.1.10
undOp19
)CSS
Grundsätzlich habe ich ein
:after
Pseudoelement über dem ersten Kreis überlappt (mit einigen geerbten Eigenschaften), dann habe ich es mit derclip()
Eigenschaft abgeschnitten , sodass ich nur den unteren Bereich sichtbar mache (wobei der Kreis#1
den Kreis überlappt#5
).Für die CSS - Eigenschaften ich hier verwendet habe, sollte dieses Beispiel auch auf IE8 arbeiten (
box-sizing
,clip()
,inherit
, und Pseudoelemente werden dort unterstützt)Screenshot des resultierenden Effekts
quelle
Mein Versuch auch mit
clip
. Die Idee war, halb und halb für die zu habendiv
. Auf diese Weisez-index
würde die Einstellung funktionieren.So können Sie den oberen Teil auf
z-index: -1
und den unteren Teil auf einstellenz-index: 1
.Ergebnis:
DEMO HIER
Hinweis: Getestet auf IE 10+, FF 26+, Chrome 33+ und Safari 5.1.7+.
quelle
Hier ist mein Versuch.
Ich verwende auch ein Pseudoelement, das über dem ersten Kreis positioniert ist, aber anstatt einen Clip zu verwenden, halte ich seinen Hintergrund transparent und gebe ihm nur einen eingefügten Kastenschatten, der der Hintergrundfarbe der Kreise (Silber) sowie einem Rot entspricht Rand, um die unteren rechten Seiten des Kreisrandes abzudecken.
Demo
CSS (das unterscheidet sich vom Ausgangspunkt)
Endprodukt
quelle
Leider ist das Folgende nur eine theoretische Antwort, da ich aus irgendeinem Grund nicht
-webkit-transform-style: preserve-3d;
zur Arbeit kommen kann (muss einen offensichtlichen Fehler machen, kann es aber nicht herausfinden). Wie auch immer, nachdem ich Ihre Frage gelesen hatte, fragte ich mich - wie bei jedem Paradoxon - warum es nur eine offensichtliche Unmöglichkeit ist und keine echte. Noch ein paar Sekunden merke ich, dass im wirklichen Leben die Blätter ein wenig gedreht sind, so dass so etwas existieren kann. Also wollte ich eine einfache Demonstration der Technik zusammenstellen, aber ohne die vorherige Eigenschaft ist das unmöglich (es wird auf die flache übergeordnete Ebene gezeichnet). In jedem Fall ist hier der BasiscodeUnd die CSS:
Den vollständigen Code finden Sie hier .
quelle
JS Fiddle
HTML
CSS
quelle
item2
und entfernt hättenitem3
. Und bewegte auch dieposition: absolute
in.ix
und#five
initem
,item2
unditem3
JS Fiddle LIVE DEMO
Funktioniert auch mit IE8.
HTML
CSS
quelle