Ditulis oleh Rob O'Leary✏️
Bagaimana dan bekerjasama?
Apabila pengguna mengklik pada widget atau memfokus padanya dan menekan bar ruang, ia membuka dan mendedahkan maklumat tambahan. Penanda segi tiga menunjuk ke bawah untuk menunjukkan bahawa ia berada dalam keadaan terbuka:
Widget pendedahan mempunyai label yang sentiasa ditunjukkan dan disediakan oleh
Anda juga boleh menyediakan berbilang elemen selepas
<details> <summary>Do you want to know more?</summary> <h3 id="Additional-info">Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
Menggayakan dan
Terdapat beberapa isu kesalingoperasian yang harus dipertimbangkan semasa menggayakan
Widget pendedahan mempunyai dua unsur pseudo untuk menggayakan bahagian konstituennya:
- Unsur pseudo penanda ::: Mewakili penanda segi tiga yang terletak pada permulaan
. Kisah penggayaan untuk ini agak rumit. Kami terhad kepada set kecil sifat CSS. Sokongan penyemak imbas bagus untuk ::marker, tetapi Safari tidak menyokong set lengkap sifat pada masa ini. Saya akan membincangkan perkara ini dengan lebih terperinci dalam bahagian "Menggayakan penanda ringkasan" artikel ini - Elemen semu ::details-content: Mewakili "maklumat tambahan" . Ini adalah tambahan baru-baru ini, jadi sokongan penyemak imbas kini terhad kepada Chrome
Dalam bahagian berikut, saya akan menunjukkan beberapa cara yang lebih baharu dan kurang dikenali untuk menyesuaikan widget pendedahan.
Menghidupkan aksi terbuka dan tutup
Apabila anda membuka widget pendedahan, widget itu akan terbuka serta-merta. Kejap, dan anda akan merinduinya!
Adalah lebih baik untuk beralih dari satu keadaan ke keadaan lain dengan cara yang lebih beransur-ansur untuk menunjukkan kepada pengguna kesan tindakan mereka. Bolehkah kita menambah animasi peralihan pada tindakan pembukaan dan penutupan widget pendedahan? Pendek kata, ya!
Untuk menganimasikan ini, kami mahu ketinggian kandungan tersembunyi beralih daripada sifar kepada ketinggian terakhirnya. Nilai lalai bagi sifat ketinggian ialah auto, yang menyerahkannya kepada penyemak imbas untuk mengira ketinggian berdasarkan kandungan. Menganimasikan kepada nilai auto tidak boleh dilakukan dalam CSS sehingga penambahan sifat [interpolate-size](https://nerdy.dev/interpolate-size). Walaupun sokongan penyemak imbas agak terhad untuk ciri CSS yang lebih baharu yang perlu kami gunakan — terutamanya interpolate-size dan ::details-content — ini adalah contoh hebat peningkatan progresif. Pada masa ini ia akan berfungsi dalam Chrome!
Berikut ialah contoh CodePen bagi animasi.
Bagaimanakah animasi pendedahan berfungsi?
Pertama, kami menambah saiz interpolate supaya kami boleh beralih kepada ketinggian auto:
<details> <summary>Do you want to know more?</summary> <h3 id="Additional-info">Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
Seterusnya, kami ingin menerangkan gaya tertutup. Kami mahu kandungan "maklumat tambahan" mempunyai ketinggian sifar dan memastikan tiada kandungan kelihatan, iaitu, kami mahu mengelakkan limpahan.
Kami menggunakan ::details-content pseudo-element untuk menyasarkan kandungan tersembunyi. Saya menggunakan sifat saiz blok dan bukannya ketinggian kerana ia adalah tabiat yang baik untuk menggunakan sifat logik. Kami perlu memasukkan keterlihatan kandungan dalam peralihan kerana penyemak imbas menetapkan keterlihatan kandungan: tersembunyi pada kandungan apabila ia berada dalam keadaan tertutup — animasi penutup tidak akan berfungsi tanpa memasukkannya:
<details> <summary>Do you want to know more?</summary> <h3 id="Additional-info">Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
Animasi masih tidak akan berfungsi seperti yang diharapkan kerana sifat keterlihatan kandungan ialah sifat animasi diskret. Ini bermakna tiada interpolasi; penyemak imbas akan menyelak antara dua nilai supaya kandungan yang dialihkan ditunjukkan untuk keseluruhan tempoh animasi. Kami tidak mahu ini.
Jika kami memasukkan gelagat peralihan: benarkan diskret;, nilai bertukar pada penghujung animasi, jadi kami mendapat peralihan beransur-ansur kami.
Selain itu, kami mendapat limpahan kandungan dengan menetapkan saiz blok kepada 0 apabila widget pendedahan berada dalam keadaan pertengahan. Kami menunjukkan kebanyakan kandungan semasa ia dibuka. Untuk mengelakkan perkara ini berlaku, kami menambah limpahan: tersembunyi.
Akhir sekali, kami menambah gaya untuk keadaan terbuka. Kami mahu keadaan akhir mempunyai saiz auto:
details { interpolate-size: allow-keywords; }
Itulah sebatan yang luas. Jika anda lebih suka penjelasan video yang lebih terperinci, lihat panduan Kevin Powell untuk cara menghidupkan
Adakah terdapat sebarang pertimbangan lain semasa menganimasikan widget pendedahan?
Widget pendedahan mungkin berkembang secara mendatar jika kandungan "maklumat tambahan" lebih luas daripada
Seperti mana-mana animasi, anda harus mempertimbangkan pengguna yang sensitif terhadap gerakan. Anda boleh menggunakan pertanyaan media pilihan-dikurangkan-gerakan untuk memenuhi senario itu:
/* closed state */ details::details-content { block-size: 0; transition: content-visibility, block-size; transition-duration: 750ms; transition-behavior: allow-discrete; overflow: hidden; }
Melaksanakan kumpulan (akordion eksklusif)
Corak UI biasa ialah komponen akordion. Ia terdiri daripada timbunan widget pendedahan yang boleh dikembangkan untuk mendedahkan kandungannya. Untuk melaksanakan corak ini, anda hanya memerlukan berbilang
/* open state */ details[open]::details-content { block-size: auto; }
Gaya lalai agak mudah:
Setiap
Variasi corak ini adalah untuk menjadikan akordion eksklusif supaya hanya satu daripada widget pendedahan boleh dibuka pada satu-satu masa. Sebaik sahaja satu dibuka, penyemak imbas akan menutup yang lain. Anda boleh membuat kumpulan eksklusif melalui atribut nama
<details> <summary>Do you want to know more?</summary> <h3 id="Additional-info">Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
Sebelum menggunakan akordion eksklusif, pertimbangkan sama ada ia membantu pengguna. Jika pengguna berkemungkinan mahu menggunakan lebih banyak maklumat, ini memerlukan mereka untuk membuka item dengan kerap, yang boleh mengecewakan.
Ciri ini kini disokong dalam semua penyemak imbas moden supaya anda boleh menggunakannya dengan segera.
Menggayakan penanda ringkasan
Widget pendedahan biasanya dibentangkan dengan penanda segi tiga kecil di sebelahnya. Dalam bahagian ini, kami akan membincangkan proses menggayakan penanda ini.
Penanda dikaitkan dengan
- Semua sifat fon
- warna
- ruang putih
- text-combine-upright, [unicode-bidi](https://developer.mozilla.org/en-US/docs/Web/CSS/unicode-bidi) dan sifat arah
- kandungan
- Semua sifat animasi dan peralihan
Seperti yang dinyatakan sebelum ini,
Sebelum beralih ke contoh, kata ringkas tentang sokongan penyemak imbas. Pada masa penulisan, Safari ialah satu-satunya penyemak imbas utama yang tidak menyokong sepenuhnya penggayaan penanda:
- Sokongan Safari pada masa ini terhad untuk menggayakan sifat warna dan saiz fon bagi elemen pseudo penanda ::. Safari menyokong pseudo-element ::-webkit-details-marker bukan standard
- Safari tidak menyokong penggayaan sifat gaya senarai sama sekali. Lihat CanIUse untuk rujukan
Menukar warna dan saiz penanda
Katakan kami mahu menukar warna penanda segi tiga kepada merah dan menjadikannya 50% lebih besar. Kita boleh melakukan perkara berikut:
details { interpolate-size: allow-keywords; }
Ini sepatutnya berfungsi merentas semua penyemak imbas. Berikut ialah contoh CodePen.
Melaraskan jarak penanda
Secara lalai, penanda berada di sisi kandungan teks
Jika kita menetapkan kedudukan gaya senarai ke luar, penanda terletak di luar
<details> <summary>Do you want to know more?</summary> <h3 id="Additional-info">Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
Anda boleh melihat ini dalam contoh kedua dalam tangkapan skrin di atas.
Berikut ialah CodePen bagi contoh ini:
Menukar teks/imej penanda
Jika anda ingin menukar kandungan penanda, anda boleh menggunakan sifat kandungan unsur pseudo penanda ::. Berdasarkan pilihan anda, anda boleh menetapkannya kepada teks. Untuk contoh saya, saya menggunakan emoji mulut zip untuk keadaan tertutup dan emoji mulut terbuka untuk keadaan terbuka:
details { interpolate-size: allow-keywords; }
Untuk menggunakan imej bagi penanda, anda boleh menggunakan sifat kandungan unsur pseudo-penanda :: atau sifat imej gaya senarai bagi
/* closed state */ details::details-content { block-size: 0; transition: content-visibility, block-size; transition-duration: 750ms; transition-behavior: allow-discrete; overflow: hidden; }
Dalam contoh berikut, kami menggunakan dua ikon anak panah daripada Simbol Bahan untuk penanda. Anak panah yang menghadap ke kanan adalah untuk keadaan tertutup dan anak panah yang menghadap ke bawah adalah untuk keadaan terbuka:
Contoh ini akan berfungsi seperti yang diharapkan dalam Chrome dan Firefox, tetapi Safari akan mengabaikan gaya tersebut. Anda boleh mendekati ini sebagai peningkatan progresif dan memanggilnya sehari. Tetapi jika anda mahukan penampilan yang sama pada semua penyemak imbas, anda boleh menyembunyikan penanda dan kemudian menambah imej anda sendiri sebagai stand-in. Ini memberi anda lebih kebebasan:
/* open state */ details[open]::details-content { block-size: auto; }
Anda boleh menunjukkan keadaan secara visual menggunakan ikon penanda baharu, seperti imej sebaris atau melalui elemen pseudo.
<details> <summary>Do you want to know more?</summary> <h3 id="Additional-info">Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
Anda juga boleh memilih untuk meletakkan penanda pada penghujung
details { interpolate-size: allow-keywords; }
Walau bagaimanapun, adalah penting untuk ambil perhatian bahawa menyembunyikan penanda menyebabkan masalah kebolehaksesan dengan pembaca skrin. Firefox, VoiceOver, JAWS dan NVDA semuanya menghadapi masalah dengan mengumumkan secara konsisten keadaan togol bagi widget pendedahan jika penanda dialih keluar. Malangnya, gaya itu terikat dengan negeri. Adalah lebih baik untuk mengelak daripada melakukan ini.
Menggayakan bahagian "maklumat tambahan"
Anda mungkin mahu menggayakan bahagian "maklumat tambahan" widget pendedahan tanpa membocorkan gaya kepada
/* closed state */ details::details-content { block-size: 0; transition: content-visibility, block-size; transition-duration: 750ms; transition-behavior: allow-discrete; overflow: hidden; }
Tujuan saya ialah mengecualikan
/* open state */ details[open]::details-content { block-size: auto; }
Sebagai alternatif, anda boleh menggunakan ::details-content pseudo-element, yang menyasarkan keseluruhan bahagian. Inilah sebabnya anda ingin menggunakan ini untuk menghidupkan peralihan keadaan pembukaan dan penutupan:
>@media (prefers-reduced-motion) { /* styles to apply if a user's device settings are set to reduced motion */ details::details-content { transition-duration: 0.8s; /* slower speed */ } }
Perhatikan perbezaannya? Hanya terdapat satu margin pada permulaan bahagian. Yang
dan
Kesilapan biasa semasa menggayakan widget pendedahan
- Dari segi sejarah, adalah tidak mungkin untuk menukar jenis paparan
unsur. Sekatan ini telah dilonggarkan dalam Chrome - Berhati-hati menukar jenis paparan
. Lalai adalah paparan: senarai-item;; jika anda menukarnya kepada paparan: blok;, ia mungkin menyebabkan penanda disembunyikan dalam sesetengah penyemak imbas. Ini adalah isu dalam Firefox:
<details> <summary>Payment Options</summary> <p>...</p> </details> <details> <summary>Personalise your PIN</summary> <p>...</p> </details> <details> <summary>How can I add an additional cardholder to my Platinum Mastercard</summary> <p>...</p> </details>
- Anda tidak boleh membuat sarang
-
Kerana
elemen mempunyai peranan ARIA lalai butang, ia menanggalkan semua peranan daripada elemen kanak-kanak. Oleh itu, jika anda ingin mempunyai tajuk seperti dalam
, teknologi bantuan seperti pembaca skrin tidak akan mengenalinya sebagai tajuk. Cuba elakkan corak ini:
<details> <summary>Do you want to know more?</summary> <h3 id="Additional-info">Additional info</h3> <p>The average human head weighs around 10 to 11 pounds (approximately 4.5 to 5 kg).</p> </details>
Menyembunyikan penanda menyebabkan masalah kebolehaksesan dengan sesetengah pembaca skrin. Firefox, VoiceOver, JAWS dan NVDA semuanya menghadapi masalah dengan mengumumkan secara konsisten keadaan togol bagi widget pendedahan jika penanda dialih keluar
Adakah terdapat lebih banyak perubahan yang akan datang?
Baru-baru ini, terdapat cadangan besar untuk membantu membuat
- Alih keluar sekatan sifat paparan CSS supaya anda boleh menggunakan jenis paparan lain seperti flex dan grid
- Nyatakan struktur pokok bayangan dengan lebih jelas. Ini sepatutnya membantu dengan kebolehoperasian dengan Flexbox dan Grid CSS
- Tambahkan elemen pseudo-kandungan ::details-content untuk menangani slot kedua supaya bekas untuk "maklumat tambahan" dalam elemen boleh digayakan
Berita menarik ialah item 1 dan 3 dalam senarai di atas telah dihantar dalam Chrome 131 (sehingga November 2024). Fasa seterusnya hendaklah menangani penambahbaikan penggayaan penanda. Selain itu, terdapat satu set perubahan berkaitan yang akan membantu meningkatkan keupayaan untuk menghidupkan elemen ini.
Kesimpulan
Tumit
Adakah bahagian hadapan anda memonopoli CPU pengguna anda?
Memandangkan bahagian hadapan web semakin kompleks, ciri rakus sumber menuntut lebih banyak lagi daripada penyemak imbas. Jika anda berminat untuk memantau dan menjejaki penggunaan CPU pihak pelanggan, penggunaan memori dan banyak lagi untuk semua pengguna anda dalam pengeluaran, cuba LogRocket.
LogRocket adalah seperti DVR untuk apl web dan mudah alih, merakam semua yang berlaku dalam apl web, apl mudah alih atau tapak web anda. Daripada meneka sebab masalah berlaku, anda boleh mengagregat dan melaporkan metrik prestasi bahagian hadapan utama, memainkan semula sesi pengguna bersama-sama dengan keadaan aplikasi, log permintaan rangkaian dan secara automatik memaparkan semua ralat.
Modenkan cara anda menyahpepijat web dan apl mudah alih — mula memantau secara percuma.
Atas ialah kandungan terperinci Menggayakan HTML dan dengan CSS moden. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

@keyframesandcsstransitionsdifferincomplexity:@keyframesallowsfordetailedanimationseSseSeSs, whileCstransitionShandlesImplestateShanges.usecsstransitionsforhovereffectsLikeButtonColorchanges, dan@keyframesforintricateanimation.

Saya tahu, saya tahu: terdapat satu tan pilihan sistem pengurusan kandungan yang tersedia, dan sementara saya telah menguji beberapa, tidak ada yang benar -benar menjadi satu, y ' tahu? Model harga pelik, penyesuaian yang sukar, sesetengahnya akhirnya menjadi keseluruhan &

Menghubungkan fail CSS ke HTML boleh dicapai dengan menggunakan unsur -unsur dalam sebahagian HTML. 1) Gunakan tag untuk menghubungkan fail CSS tempatan. 2) Pelbagai fail CSS boleh dilaksanakan dengan menambahkan beberapa tag. 3) Fail CSS luaran menggunakan pautan URL mutlak, seperti. 4) Pastikan penggunaan laluan fail yang betul dan pesanan pemuatan fail CSS, dan mengoptimumkan prestasi boleh menggunakan preprocessor CSS untuk menggabungkan fail.

Memilih Flexbox atau Grid bergantung kepada keperluan susun atur: 1) Flexbox sesuai untuk susun atur satu dimensi, seperti bar navigasi; 2) Grid sesuai untuk susun atur dua dimensi, seperti susun atur majalah. Kedua -duanya boleh digunakan dalam projek untuk meningkatkan kesan susun atur.

Cara terbaik untuk memasukkan fail CSS adalah menggunakan tag untuk memperkenalkan fail CSS luaran di bahagian HTML. 1. Gunakan tag untuk memperkenalkan fail CSS luaran, seperti. 2. Untuk pelarasan kecil, css sebaris boleh digunakan, tetapi harus digunakan dengan berhati -hati. 3. Projek besar boleh menggunakan preprocessors CSS seperti SASS atau kurang untuk mengimport fail CSS lain melalui @import. 4. Untuk prestasi, fail CSS harus digabungkan dan CDN harus digunakan, dan dimampatkan menggunakan alat seperti CSSNANO.

Ya, youdyhouldlearnbothflexboxandgrid.1) flexboxisidealforone-dimensi, flexiblelayoutslikenavigasiMenus.2)

Apa yang kelihatan seperti refactor kod anda sendiri? John Rhea memisahkan animasi CSS lama yang dia tulis dan berjalan melalui proses pemikiran mengoptimumkannya.

Csanimationsarenotinherenthardbutrequirepracticeandundunderpanderofcsspropertiesandtimingfunctions.1) startwithsimpleanimationslikescalingabuttonhoverusingkeyframes.2)


Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

Video Face Swap
Tukar muka dalam mana-mana video dengan mudah menggunakan alat tukar muka AI percuma kami!

Artikel Panas

Alat panas

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

MantisBT
Mantis ialah alat pengesan kecacatan berasaskan web yang mudah digunakan yang direka untuk membantu dalam pengesanan kecacatan produk. Ia memerlukan PHP, MySQL dan pelayan web. Lihat perkhidmatan demo dan pengehosan kami.

Dreamweaver CS6
Alat pembangunan web visual

ZendStudio 13.5.1 Mac
Persekitaran pembangunan bersepadu PHP yang berkuasa

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan
