Saya ingin membuat efek paradoks melalui properti z-index
CSS .
Dalam kode saya, saya memiliki lima lingkaran, seperti pada gambar di bawah, dan semuanya diposisikan secara mutlak tanpa ditentukan z-index
. Oleh karena itu, secara default, setiap lingkaran tumpang tindih dengan yang sebelumnya.
Sekarang, lingkaran 5 tumpang tindih dengan lingkaran 1 (gambar kiri). Paradoks yang ingin saya capai adalah, pada saat yang sama, lingkaran 1 di bawah lingkaran 2 dan di atas lingkaran 5 (seperti pada gambar kanan).
(sumber: schramek.cz )
Ini kode saya
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; }
Contoh langsung juga tersedia di http://jsfiddle.net/Kx2k5/ .
Saya mencoba banyak teknik dengan perintah susun, konteks susun, dan sebagainya. Saya membaca beberapa artikel tentang teknik ini, tetapi tidak berhasil. Bagaimana saya bisa memecahkan masalah ini?
Jawaban:
Berikut upaya saya: http://jsfiddle.net/Kx2k5/1/
(berhasil diuji pada
Fx27
,Ch33
,IE9
,Sf5.1.10
danOp19
)CSS
Pada dasarnya saya telah tumpang tindih
:after
pseudoelement di atas lingkaran pertama (dengan beberapa properti yang diwarisi), lalu saya telah memotongnya denganclip()
properti, jadi saya hanya membuat bagian bawahnya terlihat (di mana lingkaran#1
tumpang tindih dengan lingkaran#5
).Untuk properti CSS yang saya gunakan di sini, contoh ini harus bekerja bahkan pada IE8 (
box-sizing
,clip()
,inherit
, dan pseudoelements didukung di sana)Tangkapan layar dari efek yang dihasilkan
sumber
Upaya saya juga menggunakan
clip
. Idenya adalah memiliki setengah dan setengah untukdiv
. Setting seperti ituz-index
akan berhasil.Jadi Anda bisa mengatur bagian atas ke
z-index: -1
dan bawah kez-index: 1
.Hasil:
DEMO DI SINI
Catatan: Diuji di IE 10+, FF 26 +, Chrome 33+, dan Safari 5.1.7+.
sumber
Inilah tujuan saya.
Saya juga menggunakan elemen semu yang diposisikan di atas lingkaran pertama, tetapi daripada menggunakan klip, saya menjaga latar belakangnya transparan dan hanya memberikannya sebuah kotak-bayangan sisipan yang cocok dengan warna latar belakang lingkaran (perak) serta merah perbatasan untuk menutupi sisi kanan bawah dari batas lingkaran.
Demo
CSS (yang berbeda dari titik awal)
Produk akhir
sumber
Sayangnya, berikut ini hanyalah jawaban teoritis, karena untuk beberapa alasan saya tidak bisa
-webkit-transform-style: preserve-3d;
bekerja (harus membuat kesalahan yang jelas, tetapi sepertinya tidak bisa memahaminya). Either way, setelah membaca pertanyaan Anda, saya - seperti halnya setiap paradoks - bertanya-tanya mengapa itu hanya kemustahilan yang tampak, daripada yang nyata. Beberapa detik lagi saya menyadari bahwa dalam kehidupan nyata daunnya diputar sedikit, sehingga memungkinkan hal seperti itu ada. Jadi saya ingin membuat demonstrasi sederhana dari teknik ini, tetapi tanpa properti sebelumnya itu tidak mungkin (itu akan ditarik ke lapisan induk datar). Bagaimanapun, berikut adalah kode dasarnyaDan cssnya:
Dan Anda dapat menemukan kode lengkapnya di sini .
sumber
JS Fiddle
HTML
CSS
sumber
item2
danitem3
. Dan juga pindahposition: absolute
masuk.ix
dan#five
masukitem
,item2
danitem3
JS Fiddle DEMO LANGSUNG
Bekerja di IE8 juga.
HTML
CSS
sumber