Eu gostaria de criar um efeito paradoxal por meio da propriedade z-index
CSS .
No meu código tenho cinco círculos, como na imagem abaixo, e todos eles estão absolutamente posicionados sem nenhum definido z-index
. Portanto, por padrão, cada círculo se sobrepõe ao anterior.
No momento, o círculo 5 se sobrepõe ao círculo 1 (imagem à esquerda). O paradoxo que gostaria de alcançar é ter, ao mesmo tempo, o círculo 1 abaixo do círculo 2 e no topo do círculo 5 (como na imagem à direita).
(fonte: schramek.cz )
Aqui está o meu código
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; }
Um exemplo ao vivo também está disponível em http://jsfiddle.net/Kx2k5/ .
Eu tentei várias técnicas com empilhamento de ordens, empilhamento de contexto e assim por diante. Li alguns artigos sobre essas técnicas, mas sem sucesso. Como posso resolver isso?
Respostas:
Aqui está a minha tentativa: http://jsfiddle.net/Kx2k5/1/
(testado com sucesso em
Fx27
,Ch33
,IE9
,Sf5.1.10
eOp19
)CSS
Basicamente, sobrepus um
:after
pseudoelemento sobre o primeiro círculo (com algumas propriedades herdadas) e, em seguida, o recortei com aclip()
propriedade, portanto, tornei apenas visível a seção inferior (onde o círculo se#1
sobrepõe ao círculo#5
).Para as propriedades CSS que usei aqui, este exemplo deve ser trabalhar até mesmo em IE8 (
box-sizing
,clip()
,inherit
, e pseudoelements são suportados lá)Captura de tela do efeito resultante
fonte
Minha tentativa também usando
clip
. A ideia era ter meio a meio para odiv
. Dessa forma, a configuraçãoz-index
funcionaria.Portanto, você pode definir a parte superior como
z-index: -1
e a parte inferior comoz-index: 1
.Resultado:
DEMO AQUI
Nota: Testado em IE 10+, FF 26 +, Chrome 33+ e Safari 5.1.7+.
fonte
Aqui está minha chance.
Eu também uso um pseudo elemento posicionado no topo do primeiro círculo, mas em vez de usar o clipe, mantenho o fundo transparente e apenas atribuo a ele uma sombra de caixa que corresponde à cor de fundo dos círculos (prata) e também vermelho borda para cobrir os lados inferiores direitos da borda do círculo.
Demo
CSS (que é diferente do ponto de partida)
Produto final
fonte
Infelizmente, o que se segue é apenas uma resposta teórica, já que por algum motivo não consigo
-webkit-transform-style: preserve-3d;
trabalhar ( devo estar cometendo algum erro óbvio, mas não consigo descobrir). De qualquer forma, depois de ler sua pergunta, eu - como acontece com todo paradoxo - me perguntei por que é apenas uma impossibilidade aparente, ao invés de real. Depois de alguns segundos eu percebi que na vida real as folhas são giradas um pouco, permitindo que tal coisa exista. Então, eu queria inventar uma demonstração simples da técnica, mas sem a propriedade anterior isso é impossível (ela é desenhada para a camada pai plana). De qualquer forma, aqui está o código base, no entantoE o css:
E você pode encontrar o código completo aqui .
fonte
JS Fiddle
HTML
CSS
fonte
item2
eitem3
. E também mudou oposition: absolute
in.ix
e#five
paraitem
,item2
eitem3
JS Fiddle LIVE DEMO
Funciona no IE8 também.
HTML
CSS
fonte