Memperkenalkan API popover

Popover ada di mana-mana di web. Anda dapat melihatnya di menu, tips beralih, dan dialog, yang dapat muncul sebagai setelan akun, widget pengungkapan, dan pratinjau kartu produk. Terlepas dari betapa umumnya komponen ini, membangunnya di browser masih sangat rumit. Anda perlu menambahkan pembuatan skrip untuk mengelola fokus, status terbuka dan tertutup, hook yang dapat diakses ke dalam komponen, binding keyboard untuk masuk dan keluar dari pengalaman, dan itu semua bahkan sebelum Anda mulai membangun fungsi inti yang berguna, unik, dan inti dari popover Anda.

Untuk mengatasi hal ini, kumpulan baru API HTML deklaratif untuk membangun popover akan segera hadir di browser, dimulai dengan popover API di Chromium 114.

Atribut popover

Dukungan Browser

  • 114
  • 114
  • 125
  • 17

Sumber

Daripada mengelola semua kerumitan sendiri, Anda dapat mengizinkan browser menanganinya dengan atribut popover dan rangkaian fitur berikutnya. Dukungan popover HTML:

  • Promosi ke lapisan atas. Popover akan muncul di lapisan terpisah di atas bagian halaman lainnya, jadi Anda tidak perlu mencari-cari indeks z.
  • Fungsi tutup ringan. Mengeklik di luar area pop-up akan menutup pop-up dan mengembalikan fokus.
  • Pengelolaan fokus default. Membuka pop-up akan membuat tab berikutnya berhenti di dalam popover.
  • Binding keyboard yang dapat diakses. Menekan tombol esc akan menutup popover dan mengembalikan fokus.
  • Binding komponen yang dapat diakses. Menghubungkan elemen popover ke pemicu popover secara semantik.

Sekarang Anda dapat membangun popover dengan semua fitur ini tanpa menggunakan JavaScript. Pop-up dasar memerlukan tiga hal:

  • Atribut popover pada elemen yang berisi popover.
  • id pada elemen yang berisi popover.
  • popovertarget dengan nilai id pop-up pada elemen yang membuka pop-up.
<button popovertarget="my-popover"> Open Popover </button>

<div id="my-popover" popover>
  <p>I am a popover with more information.</p>
</div>

Sekarang Anda memiliki pop-up dasar yang berfungsi penuh.

Pop-up ini dapat digunakan untuk menyampaikan informasi tambahan atau sebagai widget pengungkapan.

Default dan penggantian

Secara default, seperti dalam cuplikan kode sebelumnya, menyiapkan pop-up dengan popovertarget berarti tombol atau elemen yang membuka pop-up akan mengalihkannya menjadi buka dan tutup. Namun, Anda juga dapat membuat popover eksplisit menggunakan popovertargetaction. Tindakan ini akan menggantikan tindakan tombol default. popovertargetaction opsi mencakup:

popovertargetaction="show": Menampilkan popover. popovertargetaction="hide": Menyembunyikan pop-up.

Dengan menggunakan popovertargetaction="hide", Anda dapat membuat tombol “tutup” dalam popover, seperti dalam cuplikan berikut:

<button popovertarget="my-popover" popovertargetaction="hide">
    <span aria-hidden="true">❌</span>
    <span class="sr-only">Close</span>
</button>

Popover otomatis versus manual

Menggunakan atribut popover itu sendiri sebenarnya merupakan pintasan untuk popover="auto". Saat dibuka, popover default akan menutup paksa popover otomatis lainnya, kecuali untuk popover ancestor. Iklan ini dapat ditutup melalui tombol tutup terang atau tombol tutup.

Di sisi lain, menyetel popover=manual akan membuat jenis pop-up lain: pop-up manual. Tombol ini tidak memaksa menutup jenis elemen lain dan tidak menutup melalui light-Dismiss. Anda harus menutupnya melalui timer atau tindakan penutup yang eksplisit. Jenis popover yang sesuai untuk popover=manual adalah elemen yang muncul dan menghilang, tetapi tidak akan memengaruhi bagian halaman lainnya, seperti notifikasi toast.

Jika menjelajahi demo di atas, Anda dapat melihat bahwa mengklik di luar area pop-up tidak menutup pop-up secara ringan. Selain itu, jika ada pop-up lain yang terbuka, pop-up tersebut tidak akan ditutup.

Untuk meninjau perbedaannya:

Popover dengan popover=auto:

  • Saat dibuka, tutup paksa popover lainnya.
  • Dapat menutup dengan terang.

Popover dengan popover=manual:

  • Jangan tutup paksa jenis elemen lainnya.
  • Jangan tutup ringan. Tutup folder tersebut menggunakan tombol atau tindakan tutup.

Menata gaya popover

Sejauh ini Anda telah belajar tentang popover dasar dalam HTML. Namun, ada juga beberapa fitur gaya visual menarik yang disertakan dengan popover. Salah satunya adalah kemampuan menata gaya ::backdrop.

Pada pop-up auto, ini adalah lapisan tepat di bawah lapisan atas (tempat popover berada), yang berada di atas bagian halaman lainnya. Dalam contoh berikut, ::backdrop diberi warna semi-transparan:

#size-guide::backdrop {
  background: rgb(190 190 190 / 50%);
}

Perbedaan antara popover dan dialog

Penting untuk diperhatikan bahwa atribut popover tidak menyediakan semantik sendiri. Meskipun sekarang Anda dapat membangun pengalaman seperti dialog modal menggunakan popover="auto", ada beberapa perbedaan utama di antara keduanya:

Elemen dialog yang dibuka dengan dialog.showModal (dialog modal) merupakan pengalaman yang memerlukan interaksi pengguna secara eksplisit untuk menutup modal. popover mendukung penutupan ringan. Modal dialog tidak. Dialog modal membuat sisa halaman inert. popover tidak demikian.

Demo di atas adalah dialog semantik dengan perilaku popover. Artinya, bagian lain halaman tersebut tidak inert dan popover dialog mendapatkan perilaku penutupan terang. Anda dapat membuat dialog ini dengan perilaku popover menggunakan kode berikut:

<button popovertarget="candle-01">
  Quick Shop
</button>
<dialog popover id="candle-01">
  <button class="close-btn" popovertarget="candle-01" popovertargetaction="hide">...</button>
  <div class="product-preview-container">
    ...
  </div>
</dialog>

Segera hadir

Masuk dan keluar interaktif

Kemampuan untuk menganimasikan properti terpisah, termasuk menganimasikan ke dan dari display: none serta menganimasikan ke dan dari lapisan atas belum tersedia di browser. Namun, fitur tersebut direncanakan untuk versi Chromium berikutnya, yang akan segera dirilis setelah rilis ini.

Dengan kemampuan untuk menganimasikan properti terpisah, dan menggunakan :popover-open dan @starting-style, Anda akan dapat menyiapkan gaya sebelum perubahan dan setelah perubahan untuk memungkinkan transisi yang lancar saat membuka dan menutup popover. Lihat contoh sebelumnya. Menggambarkan animasinya ke dalam dan ke luar terlihat jauh lebih halus dan mendukung pengalaman pengguna yang lebih lancar:

Penempatan anchor

Popover sangat cocok jika Anda ingin memosisikan peringatan, modal, atau notifikasi berdasarkan area pandang. Tetapi {i>popover<i} juga berguna untuk menu, tooltip, dan elemen lain yang perlu diposisikan relatif terhadap elemen lain. Di sinilah anchor CSS berperan.

Demo menu radial berikut menggunakan API popover bersama dengan pemosisian anchor CSS untuk memastikan bahwa #menu-items popover selalu ditambatkan ke pemicu tombolnya, yaitu tombol #menu-toggle.

Menyiapkan anchor mirip dengan menyiapkan popover:

<button id="menu-toggle" popovertarget="menu-items">
  Open Menu
</button>
<ul id="menu-items" popover anchor="menu-toggle">
  <li class="item">...</li>
  <li class="item">...</li>
</ul>

Anda menyiapkan anchor dengan memberinya id (dalam contoh ini, #menu-toggle), lalu menggunakan anchor="menu-toggle" untuk menghubungkan kedua elemen. Sekarang, Anda dapat menggunakan anchor() untuk menata gaya pop-up. Menu pop-up tengah yang ditambatkan ke dasar tombol alih anchor dapat diberi gaya sebagai berikut:

#menu-items {
  bottom: anchor(bottom);
  left: anchor(center);
  translate: -50% 0;
}

Sekarang Anda memiliki menu pop-up yang berfungsi penuh yang ditambatkan ke tombol beralih dan memiliki semua fitur bawaan popover, tidak diperlukan JavaScript!

Kesimpulan

API popover adalah langkah pertama dalam serangkaian kemampuan baru untuk membuat aplikasi web lebih mudah dikelola dan lebih mudah diakses secara default. Saya tidak sabar ingin melihat bagaimana Anda menggunakan popover!

Bacaan Tambahan