Jadual Kandungan
::after kaedah pemilih
Some Heading
Rumah hujung hadapan web tutorial css Mewujudkan Kad Animasi, Diklik dengan: Mempunyai () Kelas Pseudo Relasi

Mewujudkan Kad Animasi, Diklik dengan: Mempunyai () Kelas Pseudo Relasi

Mar 10, 2025 pm 12:21 PM

Creating Animated, Clickable Cards With the :has() Relational Pseudo Class

penyemak imbas krom dan safari telah menyokong sepenuhnya pseudo-kelas CSS, yang secara beransur-ansur dilancarkan dalam banyak penyemak imbas. Ia sering dipanggil "pemilih induk" - kita boleh memilih dan menetapkan gaya elemen induk melalui pemilih kanak -kanak - tetapi

digunakan jauh lebih daripada itu. Salah satu kegunaannya adalah untuk mengubah reka bentuk mod kad yang boleh diklik yang sering digunakan oleh ramai orang. :has() :has() kami akan meneroka

bagaimana untuk membantu kami dengan kad pautan, tetapi pertama ...

:has()

Apakah kelas pseudo?

:has() Terdapat banyak artikel yang sangat baik yang menjelaskan tujuan

dengan baik, tetapi ia masih agak baru, jadi kita juga harus memperkenalkannya secara ringkas di sini.

:has()

adalah kelas pseudo relasi yang merupakan sebahagian daripada draf W3C Level 4 Working W3C. Inilah kurungan untuk: elemen perlawanan yang berkaitan dengan elemen kanak -kanak tertentu (lebih tepatnya, mengandungi elemen kanak -kanak tertentu).

:has()

supaya anda dapat memahami mengapa kita mungkin merujuknya sebagai pemilih "ibu bapa". Tetapi kita juga boleh menggunakannya bersempena dengan kelas pseudo berfungsi lain untuk mendapatkan perlawanan yang lebih spesifik. Katakan kita mahu gaya artikel
<code>/* 匹配包含图像元素的article元素 */
article:has(img) { }

/* 匹配article元素,其内部直接包含图像 */
article:has(> img) { }</code>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
tidak mengandungi sebarang imej. Kita boleh menggabungkan keupayaan hubungan

dengan keupayaan negatif untuk mencapai ini: :has() :not() tetapi ini hanya permulaan bagaimana kita dapat menggabungkan pelbagai keupayaan untuk mencapai lebih banyak fungsi menggunakan

. Sebelum kita menyelesaikan teka -teki kad yang boleh diklik, mari kita lihat beberapa cara untuk menangani mereka tanpa menggunakan
<code>/* 匹配不包含图像的article元素 */
article:not(:has(img)) { }</code>
Salin selepas log masuk
Salin selepas log masuk
.

:has() bagaimana kita sekarang berurusan dengan kad yang boleh diklik :has()

Pada masa kini, terdapat tiga cara utama bagi orang untuk membuat kad yang boleh diklik sepenuhnya.

"pautan sebagai pembungkus" kaedah

Kaedah ini sering digunakan. Saya tidak pernah menggunakan kaedah ini, tetapi saya mencipta demo cepat untuk menunjukkannya:

Terdapat banyak isu di sini, terutamanya ketika datang ke aksesibilitas. Apabila pengguna melayari laman web anda menggunakan ciri pemutar, mereka mendengar teks penuh di dalam elemen

tajuk, teks, dan pautan. Sesetengah orang mungkin tidak mahu mendengar semua ini. Kita boleh melakukan yang lebih baik. Bermula dengan HTML5, kita boleh bersarang unsur -unsur blok dalam

elemen. Tetapi ini selalu terasa salah kepada saya, terutamanya atas sebab ini.

<a></a> <a></a> Pro:

cepat melaksanakan

    semantik betul
  • Kekurangan:

Isu Kebolehcapaian

    teks tidak boleh dipilih
  • sangat menyusahkan untuk mengatasi gaya yang digunakan dalam pautan lalai
  • kaedah javascript
Dengan JavaScript, kita boleh melampirkan pautan ke kad dan bukannya menulisnya ke dalam tag. Saya dapati demo Codepen yang hebat ini oleh Costdev, yang juga menjadikan teks kad pilihan dalam proses:

Kaedah ini mempunyai banyak faedah. Pautan kami boleh diakses apabila difokuskan dan kami juga boleh memilih teks. Tetapi terdapat beberapa kelemahan dari segi gaya. Sebagai contoh, jika kita mahu menghidupkan kad ini, kita perlu menambah gaya .card dalam pembungkus utama :hover dan bukannya pautan itu sendiri. Kami juga tidak mendapat manfaat daripada animasi apabila pautan difokuskan melalui kekunci tab papan kekunci.

Pro:

  • kebolehcapaian penuh dapat dicapai
  • teks yang boleh dipilih

Kekurangan:

  • JavaScript diperlukan
  • tidak boleh klik kanan (walaupun ia boleh diperbaiki dengan beberapa skrip tambahan)
  • Banyak gaya yang diperlukan untuk dilakukan pada kad itu sendiri, yang tidak berfungsi apabila memberi tumpuan kepada pautan

::after kaedah pemilih

Kaedah ini menghendaki kami menetapkan kad ke kedudukan relatif dan kemudian tetapkan kedudukan mutlak pada pemilih pseudo yang dipautkan. Ini tidak memerlukan mana -mana JavaScript dan mudah dilaksanakan: ::after

Terdapat beberapa kelemahan di sini, terutamanya apabila memilih teks. Anda tidak akan dapat memilih teks melainkan anda memberikan indeks Z yang lebih tinggi pada badan kad, tetapi jika anda lakukan, ketahui bahawa mengklik pada teks tidak akan mengaktifkan pautan anda. Sama ada anda mahukan teks yang boleh dipilih terpulang kepada anda. Saya fikir ini mungkin isu UX, tetapi ia bergantung kepada kes penggunaan. Teks ini masih boleh diakses melalui pembaca skrin, tetapi masalah utama saya dengan pendekatan ini adalah kekurangan kemungkinan animasi.

Pro:

    mudah dilaksanakan
  • pautan yang boleh diakses, tiada teks berlebihan
  • dilaksanakan ketika melayang dan fokus

Kekurangan:

    teks tidak boleh dipilih
  • Anda hanya boleh menghidupkan pautan kerana ini adalah elemen yang anda hover.
Kaedah baru: Gunakan

gabungan dengan ::after :has()

Sekarang kami telah mengenal pasti kaedah sedia ada untuk kad yang boleh diklik, saya ingin menunjukkan cara menambah

campuran untuk menyelesaikan kebanyakan kekurangan ini. :has()

Malah, mari kita mendasarkan pendekatan ini pada kaedah yang terakhir kita lihat menggunakan

pada elemen pautan. Kita sebenarnya boleh menggunakan ::after di sana untuk mengatasi batasan animasi kaedah. :has()

mari kita mulakan dengan penanda:

<code>/* 匹配包含图像元素的article元素 */
article:has(img) { }

/* 匹配article元素,其内部直接包含图像 */
article:has(> img) { }</code>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Untuk memastikan ia mudah, saya akan meletakkan unsur -unsur secara langsung dalam CSS, bukannya menggunakan kelas.

Untuk demo ini, kami akan menambah skala imej dan bayang -bayang ke kad untuk melayang dan menghidupkan pautan supaya anak panah muncul dan mengubah warna teks pautan. Untuk memudahkan operasi, kami akan menambah beberapa sifat tersuai scoped ke kad. Ini adalah gaya asas:

<code>/* 匹配包含图像元素的article元素 */
article:has(img) { }

/* 匹配article元素,其内部直接包含图像 */
article:has(> img) { }</code>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

sangat bagus! Kami telah menambah penskalaan awal (--img-scale: 1.001), warna awal tajuk kad (--title-color: black) dan beberapa sifat tambahan yang akan kami gunakan untuk membuat anak panah muncul dari pautan. Kami juga menetapkan keadaan kosong pengisytiharan box-shadow untuk menghidupkannya kemudian. Ini menetapkan asas untuk kad yang boleh diklik yang perlu kita buat sekarang, jadi mari tambahkan beberapa reset dan gaya dengan menambahkan sifat -sifat tersuai ini kepada unsur -unsur yang kita ingin menghidupkan:

<code>/* 匹配不包含图像的article元素 */
article:not(:has(img)) { }</code>
Salin selepas log masuk
Salin selepas log masuk

mari kita mesra pengguna dan tambahkan kelas yang tersembunyi di pembaca skrin di belakang pautan:

<img src="/static/imghw/default1.png" data-src="https://img.php.cn/" class="lazy" alt="Creating Animated, Clickable Cards With the :has() Relational Pseudo Class "><div clas="article-body">
    <h2 id="Some-Heading">Some Heading</h2>
    <p>Curabitur convallis ac quam vitae laoreet. Nulla mauris ante, euismod sed lacus sit amet, congue bibendum eros. Etiam mattis lobortis porta. Vestibulum ultrices iaculis enim imperdiet egestas.</p>
    <a href="https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15b">
      Read more
       <svg fill="currentColor" viewbox="0 0 20 20" xmlns="http://www.w3.org/2000/svg"><path clip-rule="evenodd" d="M12.293 5.293a1 1 0 011.414 0l4 4a1 1 0 010 1.414l-4 4a1 1 0 01-1.414-1.414L14.586 11H3a1 1 0 110-2h11.586l-2.293-2.293a1 1 0 010-1.414z" fill-rule="evenodd"></path></svg></a>
  </div>
Salin selepas log masuk

kad kami mula kelihatan cantik. Sudah tiba masanya untuk menambah sihir kepadanya. Menggunakan kelas pseudo :has(), kini kami boleh menyemak sama ada pautan kami dilegakan atau difokuskan, kemudian kemas kini sifat tersuai kami dan tambah box-shadow. Dengan kod CSS yang kecil ini, kad kami benar -benar hidup:

/* 卡片元素 */
article {
  --img-scale: 1.001;
  --title-color: black;
  --link-icon-translate: -20px;
  --link-icon-opacity: 0;

  position: relative;
  border-radius: 16px;
  box-shadow: none;
  background: https://www.php.cn/link/93ac0c50dd620dc7b88e5fe05c70e15bfff;
  transform-origin: center;
  transition: all 0.4s ease-in-out;
  overflow: hidden;
}
/* 链接的::after伪元素 */
article a::after {
  content: "";
  position: absolute;
  inset-block: 0;
  inset-inline: 0;
  cursor: pointer;
}
Salin selepas log masuk

adakah anda melihat kandungan di atas? Sekarang, jika ada unsur -unsur kanak -kanak di dalam kad yang dilegakan atau difokuskan, kami akan mendapat gaya terkini. Walaupun elemen pautan adalah satu -satunya elemen yang boleh mengandungi keadaan hover atau fokus dalam kaedah kad yang boleh diklik, kita boleh menggunakannya untuk memadankan elemen induk dan menggunakan transformasi. itu sahaja. Satu lagi kes penggunaan yang kuat untuk pemilih. Kita bukan sahaja boleh memadankan elemen induk dengan mengisytiharkan elemen lain sebagai parameter, tetapi juga menggunakan kelas pseudo untuk dipadankan dan menetapkan gaya elemen induk. ::after

Pro: :has()

boleh diakses

anime boleh ditetapkan
  • Tiada JavaScript diperlukan
  • Gunakan pada elemen yang betul
  • :hover Kekurangan:

teks tidak mudah dipilih.

Sokongan penyemak imbas terhad kepada Chrome dan Safari (di Firefox, ia disokong di belakang logo).
  • Ini adalah demonstrasi menggunakan teknik ini. Anda mungkin melihat pembungkus tambahan di sekitar kad, tetapi ini hanya beberapa percubaan yang saya buat semasa menggunakan pertanyaan kontena, yang merupakan salah satu daripada beberapa ciri hebat lain yang dilancarkan di semua pelayar utama.
  • Adakah anda mempunyai beberapa contoh lain yang ingin anda kongsi? Bahagian komen sangat dialu -alukan untuk penyelesaian atau idea lain.

Atas ialah kandungan terperinci Mewujudkan Kad Animasi, Diklik dengan: Mempunyai () Kelas Pseudo Relasi. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

Video Face Swap

Video Face Swap

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

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Vue 3 Vue 3 Apr 02, 2025 pm 06:32 PM

Ia &#039; s! Tahniah kepada pasukan Vue untuk menyelesaikannya, saya tahu ia adalah usaha besar dan lama datang. Semua dokumen baru juga.

Bolehkah anda mendapatkan nilai harta CSS yang sah dari penyemak imbas? Bolehkah anda mendapatkan nilai harta CSS yang sah dari penyemak imbas? Apr 02, 2025 pm 06:17 PM

Saya mempunyai seseorang yang menulis dengan soalan yang sangat legit ini. Lea hanya blog tentang bagaimana anda boleh mendapatkan sifat CSS yang sah dari penyemak imbas. That &#039; s seperti ini.

Sedikit di CI/CD Sedikit di CI/CD Apr 02, 2025 pm 06:21 PM

Saya &#039;

Kad yang disusun dengan kedudukan melekit dan sasaran sass Kad yang disusun dengan kedudukan melekit dan sasaran sass Apr 03, 2025 am 10:30 AM

Pada hari yang lain, saya melihat sedikit ini sangat indah dari laman web Corey Ginnivan di mana koleksi kad timbunan di atas satu sama lain semasa anda menatal.

Menggunakan Markdown dan Penyetempatan di Editor Blok WordPress Menggunakan Markdown dan Penyetempatan di Editor Blok WordPress Apr 02, 2025 am 04:27 AM

Jika kita perlu menunjukkan dokumentasi kepada pengguna secara langsung dalam editor WordPress, apakah cara terbaik untuk melakukannya?

Membandingkan penyemak imbas untuk reka bentuk responsif Membandingkan penyemak imbas untuk reka bentuk responsif Apr 02, 2025 pm 06:25 PM

Terdapat beberapa aplikasi desktop ini di mana matlamat menunjukkan laman web anda pada dimensi yang berbeza pada masa yang sama. Oleh itu, anda boleh menulis

Cara menggunakan grid CSS untuk tajuk dan kaki melekit Cara menggunakan grid CSS untuk tajuk dan kaki melekit Apr 02, 2025 pm 06:29 PM

CSS Grid adalah koleksi sifat yang direka untuk menjadikan susun atur lebih mudah daripada yang pernah berlaku. Seperti apa -apa, ada sedikit keluk pembelajaran, tetapi grid adalah

Fon Font Google Fon Fon Font Google Fon Apr 09, 2025 am 10:42 AM

Saya melihat Font Google melancarkan reka bentuk baru (tweet). Berbanding dengan reka bentuk besar yang terakhir, ini terasa lebih berulang. Saya hampir tidak dapat memberitahu perbezaannya

See all articles