Rumah >hujung hadapan web >tutorial css >Membina penukar gaya dengan CSS tulen menggunakan: diperiksa
3
Beberapa tahun yang lalu, pemaju web tidak dapat melaksanakan dan membina begitu banyak perkara menggunakan CSS sahaja dan tanpa bergantung pada JavaScript. Tetapi hari ini CSS cukup matang sehingga ia mampu melakukan perkara yang kuat tanpa menulis satu baris JavaScript. Anda mungkin juga membaca beberapa artikel mengenai "pendekatan CSS sahaja" yang menunjukkan kuasa CSS.
Takeaways Key
The: Pemilih kelas pseudo yang diperiksa dalam CSS boleh digunakan untuk membina penukar gaya tanpa perlu menulis garis JavaScript. Ia memilih mana -mana elemen radio atau kotak semak yang diperiksa atau dipilih.
The: Pemilih kelas pseudo yang diperiksa berfungsi bersempena dengan elemen input dan label. Atribut 'untuk' dalam elemen label, apabila diklik, memilih atau memeriksa elemen input yang berkaitan, dengan itu membolehkan penggunaan pemilih yang diperiksa.
Dalam demo, anda sepatutnya melihat ikon gear dan bagaimana, apabila diklik, kotak dengan beberapa pilihan muncul. Sebelum kita menerangkan HTML dan CSS yang membentuk kotak itu, lihat kod berikut:
<span>/* we don't want the input fields to appear, all we need is the labels */ </span><span>input<span><span>[type="checkbox"]</span>, input<span>[type="radio"]</span></span> { </span> <span>position: absolute; </span> <span>visibility: hidden; </span><span>} </span> <span><span>.settings-box-element</span> { </span> <span>z-index: 10; </span><span>}</span>
Oleh kerana kami hanya berminat untuk menunjukkan label, kod di atas digunakan untuk menyembunyikan kotak semak dan butang radio. Selain itu, semua label mempunyai kelas-elemen kotak-kotak dengan harta Z-indeks hanya untuk memastikan label akan kekal di atas mana-mana elemen lain di halaman.
Sekarang kita boleh memecahkan kod yang membentuk kotak tetapan. Mari kita mulakan dengan butang gear. Inilah HTML:
<span><!-- the gear icon that opens the box when you click on it --> </span><span><span><span><input</span> id<span>="settings-btn"</span> class<span>="settings-btn"</span> type<span>="checkbox"</span>></span> </span><span><span><span><label</span> for<span>="settings-btn"</span> class<span>="settings-box-element"</span>></span><span><span></label</span>></span></span>
dan CSS:
<span><span>.settings-btn + label</span> { </span> <span>position: fixed; </span> <span>top: 130px; </span> <span>right: 0; </span> <span>display: block; </span> <span>width: 35px; </span> <span>color: #e83737; </span> <span>text-align: center; </span> <span>background: #fff; </span> <span>cursor: pointer; </span><span>}</span>
Jika anda telah membaca artikel atau dua tentang menggunakan elemen borang sebagai penggantian JavaScript, maka anda harus tahu bahawa kita perlu menggunakan unsur -unsur input dan label bersama -sama, supaya jika salah satu daripada kedua -duanya telah dikeluarkan, tiada apa yang akan berfungsi. Oleh itu, kami mempunyai input kotak semak dengan dan label dengan atribut yang sesuai dengan nilai ID. Saya juga telah menambah kelas Tetapan-BTN untuk digunakan untuk cangkuk CSS kami.
Di CSS, label diberi kedudukan: pengisytiharan tetap dengan sifat arah/nilai yang sesuai (atas dan kanan).
seterusnya adalah kotak putih yang akan hampir mengandungi butang:
HTML pertama:
<span><!-- the white box that contains the buttons --> </span><span><span><span><div</span> class<span>="buttons-wrapper settings-box-element"</span>></span><span><span></div</span>></span></span>
dan CSS:
<span><span>.buttons-wrapper</span> { </span> <span>position: fixed; </span> <span>top: 130px; </span> <span>right: -200px; /* should match element width */ </span> <span>width: 200px; </span> <span>height: 240px; </span> <span>background: #fff; </span><span>}</span>
Kotak adalah elemen div tunggal dengan kelas "butang-pembalut" dan "tetapan-kotak-elemen". Seperti yang saya katakan sebelum ini, kelas yang kedua digunakan terutamanya untuk memberikan unsur-unsur nilai z-indeks. "Butang-pembalut" digunakan untuk gaya elemen Div. Dan seperti yang anda lihat, div diberi lebar 200px dan ketinggian 240px untuk menampung 5 butang yang anda lihat dalam demo. Juga, div diberi nilai kedudukan tetap dan sifat kanan dan atas yang sesuai. Satu -satunya perkara yang anda perlu ingat di sini adalah bahawa harta yang betul harus mempunyai nilai yang sama seperti lebar tetapi dalam negatif (untuk membuatnya hilang dari viewport).
sekarang lihat kod untuk markup yang tinggal, iaitu, 5 butang. Komen menunjukkan gaya latar belakang yang mereka kendalikan:
<span><!-- background styles --> </span><span><!-- light background (#eaeaea) --> </span><span><span><span><input</span> id<span>="light-layout"</span> class<span>="light-layout"</span> type<span>="radio"</span> name<span>="layout"</span> checked></span> </span><span><span><span><label</span> for<span>="light-layout"</span> class<span>="layout-buttons settings-box-element"</span>></span> </span>Light Background<span><span><span></label</span>></span> </span> <span><!-- dark background (#494949) --> </span><span><span><span><input</span> id<span>="dark-layout"</span> class<span>="dark-layout"</span> type<span>="radio"</span> name<span>="layout"</span>></span> </span><span><span><span><label</span> for<span>="dark-layout"</span> class<span>="layout-buttons settings-box-element"</span>></span> </span>Dark Background <span><span><span></label</span>></span> </span> <span><!-- image background --> </span><span><span><span><input</span> id<span>="image-layout"</span> class<span>="image-layout"</span> type<span>="radio"</span> name<span>="layout"</span>></span> </span><span><span><span><label</span> for<span>="image-layout"</span> class<span>="layout-buttons settings-box-element"</span>></span> </span>Image Background<span><span><span></label</span>></span> </span> <span><!-- pattern background --> </span><span><span><span><input</span> id<span>="pattern-layout"</span> class<span>="pattern-layout"</span> type<span>="radio"</span> name<span>="layout"</span>></span> </span><span><span><span><label</span> for<span>="pattern-layout"</span> class<span>="layout-buttons settings-box-element"</span>></span> </span>Pattern Background<span><span><span></label</span>></span> </span> <span><!-- hide/show content --> </span><span><span><span><input</span> id<span>="hide-show-content"</span> class<span>="hide-show-content"</span> type<span>="checkbox"</span>></span> </span><span><span><span><label</span> for<span>="hide-show-content"</span> class<span>="layout-buttons settings-box-element"</span>></span> </span>Hide/Show content<span><span><span></label</span>></span></span>
dan inilah CSS:
<span><span>.layout-buttons</span> { </span> <span>display: block; </span> <span>width: 150px; </span> <span>padding: 10px 0; </span> <span>text-align: center; </span> <span>border: 2px solid black; </span> <span>box-sizing: border-box; </span> <span>font-size: 0.875em; </span> <span>cursor: pointer; </span><span>} </span> <span><span>.light-layout + label</span> { </span> <span>position: fixed; </span> <span>top: 140px; </span> <span>right: -150px; </span><span>} </span> <span><span>.dark-layout + label</span> { </span> <span>position: fixed; </span> <span>top: 185px; </span> <span>right: -150px; </span><span>} </span> <span><span>.image-layout + label</span> { </span> <span>position: fixed; </span> <span>top: 230px; </span> <span>right: -150px; </span><span>} </span> <span><span>.pattern-layout + label</span> { </span> <span>position: fixed; </span> <span>top: 275px; </span> <span>right: -150px; </span><span>} </span> <span><span>.hide-show-content + label</span> { </span> <span>position: fixed; </span> <span>top: 320px; </span> <span>right: -150px; </span><span>}</span>
Perhatikan bahawa kotak semak pertama diberikan atribut "diperiksa". Itu kerana kita mahu ia menjadi yang diserlahkan secara lalai.
Setiap medan input mempunyai ID dan setiap label mempunyai atribut yang sepadan dengan ID untuk salah satu medan input. Dan seperti yang anda mungkin atau mungkin tidak tahu, rahsia di sebalik teknik sedemikian adalah untuk atribut, kerana apabila label dengan atribut diklik, elemen yang dikaitkan dengan label tertentu akan dipilih/diperiksa dan ini membolehkan kita Untuk menggunakan: pemilih yang diperiksa.
Semua label di atas mempunyai kelas "susun atur". Kelas ini digunakan untuk memberikan butang lalai dan gaya biasa seperti lebar, padding, sempadan, dan lain -lain. Kelas -kelas lain digunakan untuk menambah gaya unik untuk masing -masing. Dan seperti yang anda lihat untuk ikon gear dan kotak putih, sifat kedudukan digunakan dengan nilai tetap dan sifat atas dan kanan yang sesuai. Perhatikan bahawa nilai teratas untuk setiap label adalah 45px lebih besar daripada yang sebelum ini; Ini adalah untuk membuat butang timbunan di atas satu sama lain dengan baik dan tanpa tumpang tindih. Perhatikan juga bahawa nilai harta yang betul adalah sama dengan lebar butang tetapi dalam negatif.
sekarang lihat bahagian terakhir kod CSS kami:
<span>/* we don't want the input fields to appear, all we need is the labels */ </span><span>input<span><span>[type="checkbox"]</span>, input<span>[type="radio"]</span></span> { </span> <span>position: absolute; </span> <span>visibility: hidden; </span><span>} </span> <span><span>.settings-box-element</span> { </span> <span>z-index: 10; </span><span>}</span>
CSS di atas digunakan untuk menukar gaya lalai label yang berkaitan dengan butang radio yang dipilih (kami mempunyai 4 butang radio). Saya menggunakan pemilih saudara bersebelahan untuk menargetkan setiap label yang didahului oleh medan input jenis "Radio". Jadi seperti yang anda lihat, latar belakang dan sifat sempadan diberi nilai #e83737 (warna kemerahan) dan sifat warna #FFF nilai. Tidak ada yang benar -benar mewah atau kompleks.
unsur -unsur yang tinggal di HTML akan dibungkus di dalam div:
<span><!-- the gear icon that opens the box when you click on it --> </span><span><span><span><input</span> id<span>="settings-btn"</span> class<span>="settings-btn"</span> type<span>="checkbox"</span>></span> </span><span><span><span><label</span> for<span>="settings-btn"</span> class<span>="settings-box-element"</span>></span><span><span></label</span>></span></span>
notis dalam kod di atas yang saya letakkan setiap elemen kotak tetapan secara bebas di mana saya hanya boleh membungkusnya semua di dalam elemen div atau bahagian dan meletakkan satu elemen tunggal ini, oleh itu membuat perkara lebih mudah. Ini dilakukan semata -mata kerana anda tidak boleh memilih elemen induk, hanya adik beradik.
Jadi dalam kes ini, semua kandungan utama dibalut di dalam div dengan. Dan seperti yang anda lihat kemudian, untuk dapat mengubah gaya untuk div ini, kita perlu memilih div itu dengan menulis sesuatu yang serupa dengan ini:
<span><span>.settings-btn + label</span> { </span> <span>position: fixed; </span> <span>top: 130px; </span> <span>right: 0; </span> <span>display: block; </span> <span>width: 35px; </span> <span>color: #e83737; </span> <span>text-align: center; </span> <span>background: #fff; </span> <span>cursor: pointer; </span><span>}</span>
di sini saya menggunakan pemilih saudara umum untuk memilih div utama, yang merupakan satu -satunya cara untuk melakukannya.
Klik ikon gear harus membuat kotak tetapan muncul. Inilah kod untuk membuatnya berlaku:
<span><!-- the white box that contains the buttons --> </span><span><span><span><div</span> class<span>="buttons-wrapper settings-box-element"</span>></span><span><span></div</span>></span></span>
Apabila pengguna mengklik ikon gear, kotak semak dengan akan dipilih, dan di sini datang sihir. Sebaik sahaja ikon gear diklik, yang berikut akan berlaku:
Menggunakan pemilih saudara bersebelahan (), label yang datang segera selepas kotak semak itu akan dipilih dan kemudian memindahkan 200 piksel dari kanan viewport.
Menggunakan pemilih saudara umum ~, unsur-unsur dengan kelas "butang-pembungkus" dan "susun atur-button" akan dipilih dan kemudian dipindahkan supaya mereka 0 piksel dan 30 piksel, dari kanan Viewport.
Menukar latar belakang
<span>/* we don't want the input fields to appear, all we need is the labels */ </span><span>input<span><span>[type="checkbox"]</span>, input<span>[type="radio"]</span></span> { </span> <span>position: absolute; </span> <span>visibility: hidden; </span><span>} </span> <span><span>.settings-box-element</span> { </span> <span>z-index: 10; </span><span>}</span>
Latar belakang yang akan kita ubah adalah latar belakang elemen .main-wrapper. Inilah CSS:
<span><!-- the gear icon that opens the box when you click on it --> </span><span><span><span><input</span> id<span>="settings-btn"</span> class<span>="settings-btn"</span> type<span>="checkbox"</span>></span> </span><span><span><span><label</span> for<span>="settings-btn"</span> class<span>="settings-box-element"</span>></span><span><span></label</span>></span></span>
anda dapat melihat bahawa dalam HTML kita mempunyai 4 elemen input Type = "Radio" dan 4 label. Apabila mana-mana label diklik, input yang dikaitkan dengan label tertentu akan dipilih dan oleh itu dipadankan dengan: kelas pseudo yang diperiksa. Kemudian, bergantung pada label mana yang diklik, salah satu daripada empat gaya di atas akan digunakan untuk pembungkus utama.
Untuk elemen pertunjukan/menyembunyikan, saya menggunakan kotak semak:
<span><span>.settings-btn + label</span> { </span> <span>position: fixed; </span> <span>top: 130px; </span> <span>right: 0; </span> <span>display: block; </span> <span>width: 35px; </span> <span>color: #e83737; </span> <span>text-align: center; </span> <span>background: #fff; </span> <span>cursor: pointer; </span><span>}</span>
dan inilah CSS:
<span><!-- the white box that contains the buttons --> </span><span><span><span><div</span> class<span>="buttons-wrapper settings-box-element"</span>></span><span><span></div</span>></span></span>
Dalam kes ini, kami memberitahu penyemak imbas untuk memilih elemen dengan dan menetapkannya untuk memaparkan: tiada "apabila pengguna mengklik pada label yang berkaitan, oleh itu memilih kotak semak.
Terdapat banyak perkara lain yang boleh anda lakukan menggunakan teknik pemilih ini dan hadnya adalah kreativiti anda sendiri. Jika teknik ini baru kepada anda, saya harap artikel ini dapat berfungsi sebagai titik permulaan bagi anda untuk bereksperimen dengan kemungkinan lain.
Di bawah anda akan menemui demo yang lengkap:
Lihat pena gaya pena dengan CSS tulen menggunakan: diperiksa oleh SitePoint (@SitePoint) pada codepen.
Atas ialah kandungan terperinci Membina penukar gaya dengan CSS tulen menggunakan: diperiksa. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!