CSS Wrapped: 2023!
Langsung ke konten:
- Desain responsif
- Kueri penampung
- Kueri gaya
- :has selector
- Memperbarui kueri media
- Membuat skrip kueri media
- Kueri media transparansi
Wow! Tahun 2023 adalah tahun yang luar biasa bagi CSS.
Dari #Interop2023 hingga banyak landing baru di ruang CSS dan UI yang memungkinkan kemampuan yang sebelumnya dianggap tidak mungkin oleh developer di platform web. Sekarang, setiap browser modern mendukung kueri container, subgrid, pemilih :has()
, serta sejumlah besar fungsi dan ruang warna baru. Kami memiliki dukungan di Chrome untuk animasi berbasis scroll khusus CSS dan menganimasikan dengan lancar di antara tampilan web dengan transisi tampilan. Selain itu, ada begitu banyak primitif baru yang telah diluncurkan untuk pengalaman developer yang lebih baik seperti gaya penyematan CSS dan cakupan.
Tahun yang luar biasa! Oleh karena itu, kami ingin mengakhiri tahun pencapaian ini dengan merayakan dan mengakui semua kerja keras dari developer browser dan komunitas web yang memungkinkan semua ini terjadi.
Dasar-dasar arsitektur
Mari kita mulai dengan pembaruan pada bahasa dan kemampuan inti CSS. Ini adalah fitur yang menjadi dasar cara Anda menulis dan mengatur gaya, serta memberikan kekuatan besar ke tangan developer.
Fungsi trigonometri
Chrome 111 menambahkan dukungan untuk fungsi trigonometri sin()
, cos()
, tan()
, asin()
, acos()
, atan()
, dan atan2()
, sehingga tersedia di semua mesin utama. Fungsi ini sangat berguna untuk tujuan animasi dan tata letak. Misalnya, sekarang jauh lebih mudah untuk meletakkan elemen pada lingkaran di sekitar pusat yang dipilih.
Pelajari fungsi trigonometri di CSS lebih lanjut.
Pilihan nth-* kompleks
Dukungan Browser
Dengan pemilih pseudo-class :nth-child()
, Anda dapat memilih elemen di DOM berdasarkan indeksnya. Dengan menggunakan mikrosintaksis An+B
, Anda mendapatkan kontrol yang lebih baik atas elemen yang ingin dipilih.
Secara default, pseudo :nth-*()
memperhitungkan semua elemen turunan. Mulai Chrome 111, Anda dapat meneruskan daftar pemilih ke :nth-child()
dan :nth-last-child()
secara opsional. Dengan begitu, Anda dapat memfilter daftar turunan sebelum An+B
melakukan hal itu.
Dalam demo berikut, logika 3n+1
hanya diterapkan ke boneka kecil dengan memfilternya terlebih dahulu menggunakan of .small
. Gunakan dropdown untuk mengubah pemilih yang digunakan secara dinamis.
Pelajari lebih lanjut pemilihan nth-* yang kompleks.
Cakupan
Chrome 118 menambahkan dukungan untuk @scope
, aturan at yang memungkinkan Anda menjangkau pencocokan pemilih ke sub-pohon tertentu dari dokumen. Dengan gaya visual cakupan, Anda dapat menentukan elemen yang dipilih dengan sangat spesifik tanpa harus menulis pemilih yang terlalu spesifik atau mengaitkannya dengan erat ke struktur DOM.
Subhierarki cakupan ditentukan oleh root cakupan (batas atas) dan batas cakupan opsional (batas bawah).
@scope (.card) { … } /* scoping root */
@scope (.card) to (.card__content) { … } /* scoping root + scoping limit*/
Aturan gaya yang ditempatkan di dalam blok cakupan hanya akan menargetkan elemen dalam subpohon yang diukir. Misalnya, aturan gaya cakupan berikut hanya menargetkan elemen <img>
yang berada di antara elemen .card
dan komponen bertingkat yang cocok dengan pemilih [data-component]
.
@scope (.card) to ([data-component]) {
img { … }
}
Dalam demo berikut, elemen <img>
dalam komponen carousel tidak cocok karena batas cakupan yang diterapkan.
Screenshot Demo Cakupan
Demo Live Cakupan
Cari tahu @scope
lebih lanjut dalam artikel "Cara menggunakan @scope
untuk membatasi jangkauan pemilih Anda". Dalam artikel ini, Anda akan mempelajari pemilih :scope
, cara penanganan kekhususan, cakupan tanpa pengantar, dan pengaruh @scope
terhadap kaskade.
Penetasan
Sebelum menyusun bertingkat, setiap pemilih harus dideklarasikan secara eksplisit, secara terpisah satu sama lain. Hal ini menyebabkan pengulangan, stylesheet massal, dan pengalaman penulisan yang tersebar. Sekarang, pemilih dapat dilanjutkan dengan aturan gaya terkait yang dikelompokkan di dalamnya.
dl {
/* dt styles */
dt {
/* dl dt styles */
}
dd {
/* dl dd styles */
}
}
/* same as */
dt {
/* dt styles */
}
dl dt {
/* dl dt styles */
}
dl dd {
/* dl dd styles */
}
Screencast Bertingkat
Demo Live Penyusunan Bertingkat
Penyusunan bertingkat dapat mengurangi bobot stylesheet, mengurangi overhead pemilih berulang, dan memusatkan gaya komponen. Sintaksis awalnya dirilis dengan batasan yang mewajibkan penggunaan &
di berbagai tempat, tetapi sejak itu telah dicabut dengan update sintaksis longgar bertingkat.
Pelajari penyematan lebih lanjut.
Subpetak
subgrid
CSS memungkinkan Anda membuat petak yang lebih kompleks dengan perataan yang lebih baik di antara tata letak turunan. Hal ini memungkinkan petak yang berada di dalam petak lain, untuk mengadopsi baris dan kolom petak luar sebagai miliknya sendiri, dengan menggunakan subgrid
sebagai nilai untuk baris atau kolom petak.
Screencast Subgrid
Demo Langsung Sub-Petak
Subpetak sangat berguna untuk menyelaraskan saudara dengan konten dinamis satu sama lain. Dengan demikian, para copywriter, penulis UX, dan penerjemah tidak akan kesulitan membuat teks proyek yang "sesuai" dalam tata letak. Dengan subgrid, tata letak dapat disesuaikan agar cocok dengan konten.
Pelajari sub-petak lebih lanjut.
Tipografi
Tipografi web mengalami beberapa pembaruan utama pada tahun 2023. Penyempurnaan progresif yang sangat bagus adalah properti text-wrap
. Properti ini memungkinkan penyesuaian tata letak tipografi, yang tersusun di browser tanpa memerlukan skrip tambahan. Usir panjang baris yang canggung dan nikmati tipografi yang lebih dapat diprediksi.
Huruf awal
Mulai awal tahun di Chrome 110, properti initial-letter
merupakan fitur CSS kecil tetapi canggih yang menetapkan gaya untuk penempatan huruf awal. Anda dapat memosisikan huruf dalam status diturunkan atau dinaikkan. Properti menerima dua argumen: yang pertama untuk seberapa dalam Anda harus meletakkan huruf ke dalam paragraf terkait, dan kedua untuk menentukan seberapa dalam huruf untuk menaikkan huruf di atasnya. Anda bahkan dapat melakukan kombinasi keduanya, seperti dalam demo berikut.
Screenshot Huruf Awal
Demo Huruf Awal
Pelajari huruf awal lebih lanjut.
text-wrap: seimbang dan menarik
Sebagai developer, Anda tidak mengetahui ukuran akhir, ukuran font, atau bahkan bahasa judul atau paragraf. Semua variabel yang diperlukan untuk penanganan penggabungan teks yang efektif dan estetik, ada di browser. Karena browser memang mengetahui semua faktor, seperti ukuran font, bahasa, dan area yang dialokasikan, browser menjadi kandidat yang tepat untuk menangani tata letak teks lanjutan dan berkualitas tinggi.
Di sinilah dua teknik pengemasan teks baru hadir, salah satunya disebut balance
dan yang lainnya pretty
. Nilai balance
berupaya membuat blok teks yang harmonis, sedangkan pretty
berupaya mencegah kata yang tertinggal dan memastikan tanda hubung yang baik. Kedua tugas ini biasanya dilakukan secara manual, dan sangat luar biasa untuk memberikan tugas tersebut kepada browser dan membuatnya berfungsi untuk bahasa terjemahan apa pun.
Screencast dengan Pengemasan Teks
Demo Langsung Teks-wrap
Pelajari text-wrap: balance lebih lanjut.
Warna
2023 adalah tahun warna untuk platform web. Dengan ruang warna dan fungsi baru yang memungkinkan tema warna dinamis, tidak ada yang dapat menghentikan Anda untuk membuat tema yang cerah dan kaya warna yang pantas diterima pengguna, dan membuatnya dapat disesuaikan juga.
Ruang Warna HD (Tingkat Warna 4)
Dari hardware hingga software, CSS hingga lampu berkedip; komputer memerlukan banyak pekerjaan untuk mencoba dan menampilkan warna sebaik yang dapat dilihat oleh mata manusia. Pada tahun 2023, kami memiliki warna baru, lebih banyak warna, ruang warna baru, fungsi warna, dan kemampuan baru.
CSS dan warna kini dapat:
- Memeriksa apakah hardware layar pengguna mampu menampilkan warna HDR gamut lebar.
- Periksa apakah browser pengguna memahami sintaks warna seperti Oklch atau Tampilan P3.
- Menentukan warna HDR dalam Oklab, Oklch, HWB, Display P3, Rec.2020, XYZ, dan lainnya.
- Membuat gradien dengan warna HDR,
- Menginterpola gradien dalam ruang warna alternatif.
- Mencampur warna dengan color-mix()
.
- Membuat varian warna dengan sintaksis warna relatif.
Screencast Warna 4
Demo Color 4
Pelajari Warna 4 dan ruang warna lebih lanjut.
fungsi color-mix
Mencampur warna adalah tugas klasik dan pada tahun 2023 CSS juga dapat melakukannya. Anda tidak hanya dapat mencampurkan putih atau hitam ke warna, tetapi juga transparansi, dan melakukan semua ini di ruang warna apa pun yang Anda pilih. Fitur ini sekaligus merupakan fitur warna dasar dan fitur warna lanjutan.
Screencast color-mix()
Demo color-mix()
Anda dapat menganggap color-mix()
sebagai momen dari gradien. Jika gradien menampilkan semua langkah yang diperlukan untuk berubah dari biru ke putih, color-mix()
hanya menampilkan satu langkah. Segala sesuatunya akan menjadi lebih maju setelah Anda mulai mempertimbangkan ruang warna dan mempelajari betapa berbedanya ruang warna campuran terhadap hasilnya.
Pelajari color-mix() lebih lanjut.
Sintaksis warna relatif
Sintaksis warna relatif (RCS) adalah metode pelengkap color-mix()
untuk membuat varian warna. Fungsi ini sedikit lebih canggih daripada color-mix(), tetapi juga merupakan strategi yang berbeda untuk menggunakan warna. color-mix()
dapat mencampur warna putih untuk mencerahkan warna, dengan RCS memberikan akses yang akurat ke saluran kecerahan dan kemampuan untuk menggunakan calc()
di saluran untuk mengurangi atau meningkatkan kecerahan secara terprogram.
Screencast RCS
Demo Live RCS
RCS memungkinkan Anda melakukan manipulasi relatif dan absolut pada warna. Perubahan relatif adalah perubahan tempat Anda mengambil nilai saturasi atau kecerahan saat ini dan mengubahnya dengan calc()
. Perubahan absolut adalah perubahan saat Anda mengganti nilai saluran dengan nilai yang benar-benar baru, seperti menetapkan opasitas ke 50%. Sintaksis ini memberi Anda alat yang berguna untuk penerapan tema, hanya untuk varian waktu, dan banyak lagi.
Pelajari sintaksis warna relatif lebih lanjut.
Desain Responsif
Desain responsif berkembang pada tahun 2023. Tahun yang inovatif ini memungkinkan fitur baru yang sepenuhnya mengubah cara kita membuat pengalaman web responsif, dan menghadirkan model baru desain responsif berbasis komponen. Kombinasi kueri penampung dan :has()
mendukung komponen yang memiliki gaya visual responsif dan logis berdasarkan ukuran induknya, serta kehadiran atau status turunannya. Artinya, Anda akhirnya dapat memisahkan tata letak tingkat halaman dari tata letak tingkat komponen, dan menulis logika satu kali untuk menggunakan komponen di mana saja.
Kueri penampung ukuran
Daripada menggunakan informasi ukuran global area pandang untuk menerapkan gaya CSS, kueri penampung mendukung kueri elemen induk dalam halaman. Artinya, komponen dapat diberi gaya secara dinamis di beberapa tata letak dan dalam beberapa tampilan. Kueri penampung untuk ukuran menjadi stabil di semua browser modern pada Hari Valentine tahun ini (14 Februari).
Untuk menggunakan fitur ini, pertama-tama siapkan pembatasan pada elemen yang Anda kueri, lalu, seperti kueri media, gunakan @container
dengan parameter ukuran untuk menerapkan gaya. Bersama dengan kueri container, Anda juga akan mendapatkan ukuran kueri container. Pada demo berikut, ukuran kueri container cqi
(mewakili ukuran container inline), digunakan untuk mengukur header kartu.
Screencast @container
Demo @container
Pelajari lebih lanjut cara menggunakan kueri penampung.
Kueri penampung gaya
Kueri gaya diluncurkan dengan implementasi parsial di Chrome 111. Dengan kueri gaya saat ini, Anda dapat membuat kueri nilai properti kustom pada elemen induk saat menggunakan @container style()
. Misalnya, buat kueri apakah nilai properti kustom ada, atau ditetapkan ke nilai tertentu, seperti @container style(--rain: true)
.
Screenshot kueri gaya
Demo kueri gaya
Meskipun terdengar mirip dengan penggunaan nama class di CSS, kueri gaya memiliki beberapa keunggulan. Yang pertama adalah dengan kueri gaya, Anda dapat memperbarui nilai di CSS sesuai kebutuhan untuk status pseudo. Selain itu, dalam versi penerapan mendatang, Anda akan dapat membuat kueri rentang nilai untuk menentukan gaya yang diterapkan, seperti style(60 <= --weather <= 70)
, dan gaya berdasarkan pasangan nilai properti seperti style(font-style: italic)
.
Pelajari lebih lanjut cara menggunakan kueri gaya.
Pemilih:has()
Selama hampir 20 tahun, developer meminta "pemilih induk" di CSS. Dengan pemilih :has()
yang dikirimkan di Chrome 105, hal ini sekarang dapat dilakukan. Misalnya, penggunaan .card:has(img.hero)
akan memilih elemen .card
yang memiliki gambar hero sebagai turunan.
Screenshot Demo :has()
Demo Langsung :has()
Karena :has()
menerima daftar pemilih relatif sebagai argumennya, Anda dapat memilih lebih dari elemen induk. Dengan menggunakan beragam kombinator CSS, kita tidak hanya bisa naik hierarki DOM, tetapi juga melakukan pilihan sideway. Misalnya, li:has(+ li:hover)
akan memilih elemen <li>
yang mendahului elemen <li>
yang sedang diarahkan kursor.
Screencast :has()
Demo :has()
Pelajari pemilih :has()
CSS lebih lanjut.
Memperbarui kueri media
Kueri media update
memberi Anda cara untuk menyesuaikan UI dengan kecepatan refresh perangkat. Fitur ini dapat melaporkan nilai fast
, slow
, atau none
yang terkait dengan kemampuan berbagai perangkat.
Sebagian besar perangkat yang Anda desain cenderung memiliki kecepatan refresh yang cepat. Hal ini mencakup desktop dan sebagian besar perangkat seluler. Perangkat eReader dan perangkat seperti sistem pembayaran dengan daya rendah, mungkin memiliki kecepatan refresh yang lambat. Dengan mengetahui bahwa perangkat tidak dapat menangani animasi atau update yang sering dilakukan, Anda dapat menghemat penggunaan baterai atau update tampilan yang rusak.
Mengupdate Screencast
Perbarui Demo
Pelajari @media (update) lebih lanjut.
Membuat skrip kueri media
Kueri media skrip dapat digunakan untuk memeriksa apakah JavaScript tersedia atau tidak. Hal ini sangat bagus untuk progressive enhancement. Sebelum kueri media ini, strategi untuk mendeteksi apakah JavaScript tersedia adalah dengan menempatkan class nojs
di HTML, dan menghapusnya dengan JavaScript. Skrip ini dapat dihapus karena CSS kini memiliki cara untuk mendeteksi JavaScript dan menyesuaikannya.
Pelajari cara mengaktifkan dan menonaktifkan JavaScript di halaman untuk pengujian melalui Chrome DevTools di sini.
Screencast Pembuatan Skrip
Demo Pembuatan Skrip
Pertimbangkan pengalihan tema di situs, kueri media pembuatan skrip dapat membantu membuat pengalihan berfungsi terhadap preferensi sistem karena tidak ada JavaScript yang tersedia. Atau pertimbangkan komponen tombol—jika JavaScript tersedia, tombol dapat digeser dengan gestur, bukan hanya diaktifkan dan dinonaktifkan. Ada banyak peluang bagus untuk mengupgrade UX jika pembuatan skrip tersedia sekaligus memberikan pengalaman dasar yang bermakna jika pembuatan skrip dinonaktifkan.
Pelajari skrip lebih lanjut.
Kueri media dengan transparansi yang dikurangi
Antarmuka yang tidak buram dapat menyebabkan sakit kepala atau menimbulkan kesulitan visual untuk berbagai jenis kekurangan penglihatan. Itulah sebabnya Windows, macOS, dan iOS memiliki preferensi sistem yang dapat mengurangi atau menghapus transparansi dari UI. Kueri media untuk prefers-reduced-transparency
ini cocok dengan kueri media preferensi lainnya, yang memungkinkan Anda menjadi kreatif sekaligus menyesuaikan untuk pengguna.
Screencast Transparansi yang Dikurangi
Demo Transparansi yang Dikurangi
Dalam beberapa kasus, Anda dapat memberikan tata letak alternatif yang tidak memiliki konten yang menempatkan konten lain. Dalam kasus lain, opasitas warna dapat disesuaikan agar buram atau hampir buram. Postingan blog berikut memiliki lebih banyak demo inspiratif yang beradaptasi dengan preferensi pengguna. Lihat demo tersebut jika Anda ingin mengetahui kapan kueri media ini bernilai.
Pelajari @media (prefers-reduced-transparency) lebih lanjut.
Interaksi
Interaksi adalah fondasi pengalaman digital. Hal ini membantu pengguna mendapatkan masukan tentang apa yang mereka klik dan posisi mereka di ruang virtual. Tahun ini, ada banyak fitur menarik yang diluncurkan yang telah membuat interaksi lebih mudah disusun dan diterapkan, sehingga memungkinkan perjalanan pengguna yang lancar dan pengalaman web yang lebih halus.
Melihat transisi
Transisi tampilan memiliki dampak besar pada pengalaman pengguna halaman. Dengan View Transitions API, Anda dapat membuat transisi visual antara dua status halaman Aplikasi Web Satu Halaman. Transisi ini bisa berupa transisi halaman penuh, atau hal-hal yang lebih kecil di halaman seperti menambahkan atau menghapus item baru ke daftar.
Inti dari View Transitions API adalah fungsi document.startViewTranstion
. Teruskan fungsi yang mengupdate DOM ke status baru, dan API akan menangani semuanya untuk Anda. Hal ini dilakukan dengan mengambil snapshot sebelum dan sesudah, lalu melakukan transisi di antara keduanya. Dengan CSS, Anda dapat mengontrol apa yang akan diambil dan secara opsional menyesuaikan cara animasi snapshot ini.
Screencast VT
Demo VT
View Transitions API untuk Aplikasi Web Satu Halaman yang diluncurkan di Chrome 111. Pelajari Transisi Tampilan lebih lanjut.
Fungsi easing linear
Dukungan Browser
Nama fungsi ini tidak membingungkan Anda. Fungsi linear()
(jangan dikelirukan dengan kata kunci linear
) memungkinkan Anda membuat fungsi easing yang kompleks dengan cara yang sederhana, dengan mengorbankan beberapa presisi.
Sebelum linear()
, yang diluncurkan di Chrome 113, membuat efek pantulan atau pegas dalam CSS tidak mungkin dilakukan. Berkat linear()
, Anda dapat memperkirakan easing ini dengan menyederhanakannya menjadi serangkaian titik, lalu melakukan interpolasi secara linear di antara titik-titik ini.
Screencast dengan easing linear
Demo Linear-easing
Pelajari lebih lanjut tentang linear()
. Untuk membuat kurva linear()
, gunakan generator easing linear.
Akhir Scroll
Banyak antarmuka mencakup interaksi scroll, dan terkadang antarmuka perlu menyinkronkan informasi yang relevan dengan posisi scroll saat ini, atau mengambil data berdasarkan status saat ini. Sebelum peristiwa scrollend
, Anda harus menggunakan metode waktu tunggu yang tidak akurat yang dapat diaktifkan saat jari pengguna masih ada di layar. Dengan peristiwa scrollend
, Anda memiliki peristiwa scrollend yang waktunya tepat dan memahami apakah pengguna masih melakukan gestur atau tidak.
Screencast Scroll
Demo Scrollend
Ini penting bagi browser untuk dimiliki karena JavaScript tidak dapat melacak kehadiran jari di layar selama menggulir, informasi tersebut hanya tidak tersedia. Bagian kode percobaan scroll yang tidak akurat kini dapat dihapus dan diganti dengan peristiwa presisi tinggi milik browser.
Pelajari scrollend lebih lanjut.
Animasi berbasis scroll
Animasi berbasis scroll adalah fitur menarik yang tersedia dari Chrome 115. Dengan API ini, Anda dapat mengambil animasi CSS yang ada atau animasi yang dibuat dengan Web Animations API, dan menggabungkannya dengan offset scroll dari penggeser. Saat Anda men-scroll ke atas dan ke bawah–atau ke kiri dan ke kanan di penggeser horizontal–animasi tertaut akan bergerak maju dan mundur sebagai respons langsung.
Dengan ScrollTimeline, Anda dapat melacak progres keseluruhan scroll, seperti yang ditunjukkan dalam demo berikut. Saat Anda men-scroll ke bagian akhir halaman, teks akan muncul karakter demi karakter.
Screencast SDA
Demo SDA
Dengan ViewTimeline, Anda dapat melacak elemen saat elemen melintasi area scroll. Cara kerjanya mirip dengan cara IntersectionObserver melacak elemen. Dalam demo berikut, setiap gambar akan ditampilkan sejak memasuki scrollport hingga berada di tengah.
Screencast Demo SDA
Demo Langsung SDA
Karena animasi berbasis scroll berfungsi dengan animasi CSS dan Web Animations API, Anda dapat memanfaatkan semua keuntungan yang diberikan API ini. Hal ini mencakup kemampuan untuk menjalankan animasi ini dari thread utama. Kini Anda dapat memiliki animasi yang halus, yang didorong oleh scroll, yang berjalan dari thread utama hanya dengan beberapa baris kode tambahan.
Untuk mempelajari animasi yang didorong scroll lebih lanjut, lihat artikel ini dengan semua detailnya atau buka scroll-driven-animations.style yang menyertakan banyak demo.
Lampiran linimasa yang ditangguhkan
Saat menerapkan animasi berbasis scroll melalui CSS, mekanisme pencarian untuk menemukan penggeser pengontrol selalu berjalan ke atas pohon DOM sehingga hanya terbatas pada ancestor scroll. Namun, sering kali elemen yang perlu dianimasikan bukan merupakan turunan dari penggeser, tetapi elemen yang terletak di sub-pohon yang sama sekali berbeda.
Untuk memungkinkan elemen animasi menemukan linimasa scroll bernama dari non-ancestor, gunakan properti timeline-scope
pada induk bersama. Hal ini memungkinkan scroll-timeline
atau view-timeline
yang ditentukan dengan nama tersebut untuk dilampirkan, sehingga memberikan cakupan yang lebih luas. Dengan demikian, setiap turunan dari induk bersama tersebut dapat menggunakan linimasa dengan nama tersebut.
Screencast Demo
Demo Langsung
Pelajari lebih lanjut tentang timeline-scope
.
Animasi properti terpisah
Kemampuan baru lainnya pada tahun 2023 adalah kemampuan untuk menganimasikan animasi terpisah, seperti menganimasikan ke dan dari display: none
. Mulai Chrome 116, Anda dapat menggunakan display
dan content-visibility
dalam aturan keyframe. Anda juga dapat mentransisikan properti terpisah apa pun pada titik 50%, bukan pada titik 0%. Hal ini dicapai dengan properti transition-behavior
menggunakan kata kunci allow-discrete
, atau dalam properti transition
sebagai singkatan.
Animasi Diskret. Screencast
Anim Diskret. Demo
Pelajari lebih lanjut cara mentransisikan animasi terpisah.
@starting-style
Aturan CSS @starting-style
dibuat berdasarkan kemampuan web baru untuk menganimasikan ke dan dari display: none
. Aturan ini memberikan cara untuk memberi elemen gaya "sebelum dibuka" yang dapat dicari browser sebelum elemen dibuka di halaman. Hal ini sangat berguna untuk animasi entri, dan untuk menganimasikan elemen seperti popover atau dialog. Hal ini juga berguna setiap kali Anda membuat elemen dan ingin memberinya kemampuan untuk dianimasikan. Ambil contoh berikut yang menganimasikan atribut popover
(lihat bagian berikutnya) ke dalam tampilan dan ke lapisan atas dengan lancar dari luar area pandang.
Screencast @starting-style
Demo @start-style
Pelajari @starting-style dan animasi entri lainnya lebih lanjut.
Overlay
Properti overlay
CSS yang baru dapat ditambahkan ke transisi Anda untuk mengaktifkan elemen dengan gaya lapisan atas—seperti popover
dan dialog
—untuk dianimasikan dari lapisan atas dengan lancar. Jika Anda tidak melakukan transisi overlay, elemen akan langsung kembali ke posisi terpotong, ditransformasikan, dan ditutup, dan Anda tidak akan melihat transisi terjadi. Demikian pula, overlay
memungkinkan ::backdrop
untuk dianimasikan dengan lancar saat ditambahkan ke elemen lapisan atas.
Screencast Overlay
Demo Live Overlay
Pelajari overlay dan animasi keluar lainnya lebih lanjut.
Komponen
Tahun 2023 adalah tahun yang penting bagi persimpangan gaya dan komponen HTML, dengan popover
yang diluncurkan dan banyak pekerjaan yang dilakukan seputar pemosisian anchor dan masa depan gaya dropdown. Komponen ini memudahkan pembuatan pola UI umum tanpa perlu mengandalkan library tambahan atau membuat sistem pengelolaan status Anda sendiri dari awal setiap kali.
Popover
Popover API membantu Anda membuat elemen yang diletakkan di atas bagian halaman lainnya. Menu ini dapat meliputi menu, pilihan, dan tooltip. Anda dapat membuat popover sederhana dengan menambahkan atribut popover
dan id
ke elemen yang muncul, dan menghubungkan atribut id
-nya ke tombol pemanggilan menggunakan popovertarget="my-popover"
. Popover API mendukung:
- Promosi ke lapisan atas. Popover akan muncul di lapisan terpisah di atas bagian lain halaman, sehingga Anda tidak perlu bermain-main dengan indeks z.
- Fungsi tutup ringan. Mengklik di luar area popover akan menutup popover dan mengembalikan fokus.
- Pengelolaan fokus default. Membuka popover akan membuat tab berikutnya berhenti di dalam popover.
- Binding keyboard yang dapat diakses. Menekan tombol
esc
atau mengalihkan dua kali akan menutup popover dan mengembalikan fokus. - Binding komponen yang dapat diakses. Menghubungkan elemen popover ke pemicu popover secara semantik.
Screencast Popover
Demo Langsung Popover
Aturan horizontal di tertentu
Perubahan kecil lainnya pada HTML yang muncul di Chrome dan Safari tahun ini adalah kemampuan untuk menambahkan elemen garis horizontal (tag <hr>
) ke elemen <select>
untuk membantu membagi konten Anda secara visual. Sebelumnya, menempatkan tag <hr>
ke dalam pilihan tidak akan dirender. Namun, tahun ini, Safari dan Chrome mendukung fitur ini, sehingga memungkinkan pemisahan konten yang lebih baik dalam elemen <select>
.
Pilih Screenshot
Pilih Demo Live
Pelajari lebih lanjut cara menggunakan jam di tertentu
:class pseudo yang valid dan tidak valid untuk pengguna
Stabil di semua browser tahun ini, :user-valid
dan :user-invalid
berperilaku mirip dengan pseudo-class :valid
dan :invalid
, tetapi hanya mencocokkan kontrol formulir setelah pengguna berinteraksi secara signifikan dengan input. Kontrol formulir yang diperlukan dan kosong akan cocok dengan :invalid
meskipun pengguna belum mulai berinteraksi dengan halaman. Kontrol yang sama tidak akan cocok dengan :user-invalid
hingga pengguna mengubah input dan membiarkannya dalam status yang tidak valid.
Dengan pemilih baru ini, tidak perlu lagi menulis kode stateful untuk melacak input yang telah diubah pengguna.
Screencast :user-*
:user-* Demo Langsung
Pelajari lebih lanjut cara menggunakan elemen pseudo validasi formulir user-*.
Akordeon eksklusif
Dukungan Browser
Pola UI umum di web adalah komponen akordeon. Untuk menerapkan pola ini, Anda menggabungkan beberapa elemen <details>
, sering kali mengelompokkannya secara visual untuk menunjukkan bahwa elemen tersebut saling terkait.
Yang baru di Chrome 120 adalah dukungan untuk atribut name
pada elemen <details>
. Saat atribut ini digunakan, beberapa elemen <details>
yang memiliki nilai name
yang sama membentuk grup semantik. Paling banyak satu elemen dalam grup dapat dibuka sekaligus: saat Anda membuka salah satu elemen <details>
dari grup, elemen yang sebelumnya terbuka akan otomatis ditutup. Jenis akordeon ini disebut akordeon eksklusif.
Elemen <details>
yang merupakan bagian dari akordeon eksklusif tidak harus merupakan elemen yang sama. Elemen ini dapat tersebar di seluruh dokumen.
CSS telah mengalami kebangkitan dalam beberapa tahun terakhir, dan terutama selama tahun 2023. Jika Anda baru mengenal CSS atau hanya ingin mengingat kembali dasar-dasarnya, lihat kursus Belajar CSS gratis kami bersama dengan kursus gratis lainnya yang ditawarkan di web.dev.
Selamat menikmati musim liburan dan semoga Anda segera dapat menggunakan beberapa fitur CSS dan UI baru yang luar biasa ini dalam pekerjaan Anda.
⇾ Tim DevRel UI Chrome,