Je voudrais créer un effet paradoxal via la propriété z-index
CSS .
Dans mon code, j'ai cinq cercles, comme dans l'image ci-dessous, et ils sont tous positionnés de manière absolue sans définition z-index
. Par conséquent, par défaut, chaque cercle chevauche le précédent.
À l'heure actuelle, le cercle 5 chevauche le cercle 1 (image de gauche). Le paradoxe que j'aimerais réaliser est d'avoir, en même temps, le cercle 1 sous le cercle 2 et au-dessus du cercle 5 (comme sur l'image de droite).
(source: schramek.cz )
Voici mon code
Balisage:
<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; }
Un exemple en direct est également disponible sur http://jsfiddle.net/Kx2k5/ .
J'ai essayé beaucoup de techniques avec l'empilement des commandes, l'empilement du contexte, etc. J'ai lu quelques articles sur ces techniques, mais sans succès. Comment puis-je resoudre ceci?
Réponses:
Voici ma tentative: http://jsfiddle.net/Kx2k5/1/
(testé avec succès sur
Fx27
,Ch33
,IE9
,Sf5.1.10
etOp19
)CSS
Fondamentalement, j'ai superposé un
:after
pseudo-élément sur le premier cercle (avec certaines propriétés héritées), puis je l'ai découpé avec uneclip()
propriété, donc je ne fais que sa section inférieure visible (où le cercle#1
chevauche le cercle#5
).Pour les propriétés CSS que j'ai utilisé ici, cet exemple devrait fonctionner même sur IE8 (
box-sizing
,clip()
,inherit
et pseudoelements y sont pris en charge)Capture d'écran de l'effet résultant
la source
Ma tentative utilise également
clip
. L'idée était d'en avoir la moitié et la moitié pour lediv
. De cette façon, le réglagez-index
fonctionnerait.Ainsi, vous pouvez définir la partie supérieure sur
z-index: -1
et la partie inférieure surz-index: 1
.Résultat:
DÉMO ICI
Remarque: testé sur IE 10+, FF 26+, Chrome 33+ et Safari 5.1.7+.
la source
Voici mon essai.
J'utilise également un pseudo élément positionné au-dessus du premier cercle, mais plutôt que d'utiliser le clip, je garde son arrière-plan transparent et je lui donne juste une ombre-boîte en médaillon qui correspond à la couleur de fond des cercles (argent) ainsi qu'un rouge bordure pour couvrir les côtés inférieurs droit de la bordure du cercle.
Démo
CSS (qui est différent du point de départ)
Produit final
la source
Malheureusement, ce qui suit n'est qu'une réponse théorique, car pour une raison quelconque, je ne peux pas me rendre
-webkit-transform-style: preserve-3d;
au travail (je dois faire une erreur évidente, mais je n'arrive pas à la comprendre). Quoi qu'il en soit, après avoir lu votre question, je me suis demandé - comme pour tout paradoxe - pourquoi ce n'est qu'une impossibilité apparente, plutôt qu'une réelle. Encore quelques secondes, je me rends compte que dans la vraie vie, les feuilles tournent un peu, permettant ainsi à une telle chose d'exister. Alors j'ai voulu concocter une simple démonstration de la technique, mais sans la propriété précédente c'est impossible (elle est attirée vers le calque parent plat). Quoi qu'il en soit, voici le code de base néanmoinsEt le css:
Et vous pouvez trouver le code complet ici .
la source
JS Fiddle
HTML
CSS
la source
item2
etitem3
. Et aussi déplacé leposition: absolute
in.ix
et#five
intoitem
,item2
etitem3
DÉMO EN DIRECT DE JS Fiddle
Fonctionne aussi sur IE8.
HTML
CSS
la source