Penyediaan
Komponen web hebat, tetapi masih terdapat beberapa isu kecil untuk memberi perhatian pada masa ini.Saya telah berkata sebelum ini bahawa mereka boleh digunakan dalam mana -mana rangka kerja JavaScript, tetapi saya juga menulis sebelum sokongan React untuk komponen web kini miskin. Untuk menyelesaikan masalah ini, Shoelace mencipta pembalut khusus untuk React.
Rendering Server-Side (SSR)
Sehingga penulisan ini, sokongan untuk SSR juga miskin. Secara teori, terdapat teknik yang dipanggil Declarative Shadow Dom (DSD) yang boleh melaksanakan SSR. Tetapi sokongan penyemak imbas adalah terhad, dan DSD sebenarnya memerlukan
iaitu, ada cara lain untuk membuat komponen web "berfungsi dengan betul" dengan aplikasi web yang menggunakan alat seperti seterusnya untuk SSR. Singkatnya, skrip yang mendaftarkan komponen web perlu dijalankan dalam skrip menyekat sebelum menguraikan tag. Tetapi ini akan menjadi subjek jawatan lain. Sudah tentu, jika anda membina apa -apa jenis spa yang diberikan pelanggan, ini bukan masalah. Inilah yang akan kita gunakan dalam siaran ini.
Mula
Oleh kerana saya mahu siaran ini memberi tumpuan kepada Shoelace dan ciri -ciri komponen webnya, saya akan menggunakan Svelte untuk segala -galanya. Saya juga akan menggunakan projek StackBlitz ini untuk demonstrasi. Kami akan membina langkah demo ini dengan langkah bersama, tetapi anda boleh membuka REPT pada bila -bila masa untuk melihat hasil akhir.
Jika anda mendapati diri anda menikmati kasut selepas membaca artikel ini dan ingin mencubanya dalam projek React anda, cadangan saya adalah menggunakan pembungkus yang disebutkan dalam pengenalan saya. Ini akan membolehkan anda menggunakan mana -mana komponen kasut dan anda boleh mengeluarkannya sepenuhnya apabila React melepaskan komponen web yang sudah ada (cari dalam versi 19).
Shoelace mempunyai arahan pemasangan yang terperinci. Cara paling mudah ialah menambah tag <script></script>
dan <link>
ke dokumen HTML anda, dan itu sahaja. Walau bagaimanapun, untuk sebarang aplikasi pengeluaran, anda mungkin hanya mahu mengimport apa yang anda mahukan, dan terdapat juga arahan yang sewajarnya.
Selepas memasang Shoelace, mari buat komponen svelte untuk menjadikan beberapa kandungan, dan kemudian pergi melalui langkah -langkah menyesuaikan sepenuhnya. Untuk memilih beberapa kandungan yang lebih kompleks, saya menggunakan tag dan dialog (sering dipanggil kotak modal) komponen. Berikut adalah beberapa tag yang kebanyakannya berasal dari dokumentasi:
<sl-tab-group> <sl-tab panel="general" slot="nav">General</sl-tab> <sl-tab panel="custom" slot="nav">Custom</sl-tab> <sl-tab panel="advanced" slot="nav">Advanced</sl-tab> <sl-tab disabled panel="disabled" slot="nav">Disabled</sl-tab> <sl-tab-panel name="general">This is the general tab panel.</sl-tab-panel> <sl-tab-panel name="custom">This is the custom tab panel.</sl-tab-panel> <sl-tab-panel name="advanced">This is the advanced tab panel.</sl-tab-panel> <sl-tab-panel name="disabled">This is a disabled tab panel.</sl-tab-panel> </sl-tab-group> <sl-dialog label="Dialog" no-header=""> Hello World! <sl-button> open = false}>Close</sl-button> </sl-dialog> <br><br> <button> open = true}>Open Dialog</button>
Ini akan membentangkan beberapa label yang cantik dan bergaya. Tanda -tag aktiviti yang menggariskan dengan baik dan slaid dari satu tag aktiviti ke seterusnya.
Saya tidak akan membuang masa anda memperincikan setiap API yang telah didokumenkan secara terperinci di laman web Shoelace. Sebaliknya, mari kita lihat cara terbaik untuk berinteraksi dan menyesuaikan sepenuhnya komponen web ini.
Kaedah panggilan dan peristiwa langganan pada komponen web mungkin sedikit berbeza dari kerangka biasa yang anda gunakan, tetapi ini tidak terlalu rumit. Mari lihat bagaimana melakukannya.
(<sl-tab-group></sl-tab-group>
) mempunyai kaedah show
yang memaparkan tag tertentu secara manual. Untuk memanggilnya, kita perlu mengakses elemen DOM yang mendasari tag. Dalam Svelte, ini bermakna menggunakan bind:this
. Dalam React, ia akan menjadi ref. dll. Oleh kerana kita menggunakan Svelte, mari kita mengisytiharkan pemboleh ubah contoh tag:
let tabs;
... dan mengikatnya:
<sl-tab-group bind:this="{tabs}"></sl-tab-group>
sekarang kita boleh menambah butang untuk memanggilnya:
<button on:click="{()"> tabs.show("custom")}>Show custom</button>
. Apabila tag baru dipaparkan, acara sl-tab-show
dicetuskan. Kita boleh menggunakan tabs
untuk pembolehubah addEventListener
kita, atau kita boleh menggunakan pintasan Svelte on:event-name
.
<sl-tab-group bind:this="{tabs}" on:sl-tab-show="{e"> console.log(e)}></sl-tab-group>
ini berfungsi dan log objek acara apabila tag yang berbeza dipaparkan.
Biasanya kami memberikan tag dan biarkan pengguna mengklik di antara mereka, jadi kerja ini biasanya tidak diperlukan, tetapi jika anda memerlukannya, ada di sana. Sekarang mari kita buat komponen dialog interaktif.
(<sl-dialog></sl-dialog>
) menerima atribut open
yang mengawal sama ada kotak dialog ... dibuka. Mari kita nyatakan dalam komponen svelte kita:
<sl-tab-group> <sl-tab panel="general" slot="nav">General</sl-tab> <sl-tab panel="custom" slot="nav">Custom</sl-tab> <sl-tab panel="advanced" slot="nav">Advanced</sl-tab> <sl-tab disabled panel="disabled" slot="nav">Disabled</sl-tab> <sl-tab-panel name="general">This is the general tab panel.</sl-tab-panel> <sl-tab-panel name="custom">This is the custom tab panel.</sl-tab-panel> <sl-tab-panel name="advanced">This is the advanced tab panel.</sl-tab-panel> <sl-tab-panel name="disabled">This is a disabled tab panel.</sl-tab-panel> </sl-tab-group> <sl-dialog label="Dialog" no-header=""> Hello World! <sl-button> open = false}>Close</sl-button> </sl-dialog> <br><br> <button> open = true}>Open Dialog</button>
Ia juga mempunyai acara sl-hide
untuk menyembunyikan kotak dialog. Mari lulus harta open
kami dan mengikat ke acara tersembunyi supaya apabila pengguna mengklik untuk menutupnya di luar kandungan dialog, kami boleh menetapkannya semula. Mari tambahkan pengendali klik ke butang Tutup untuk menetapkan harta open
kami kepada FALSE, yang juga akan menutup dialog.
let tabs;
Akhirnya, mari kita sambungkan butang dialog terbuka kami:
<sl-tab-group bind:this="{tabs}"></sl-tab-group>
itu sahaja. Interaksi dengan API perpustakaan komponen lebih kurang langsung. Jika artikel ini hanya melakukan ini, ia akan menjadi agak membosankan.
Tetapi Shoelace - dibina dengan komponen web - bermakna sesuatu, terutama gaya, berfungsi sedikit berbeza daripada apa yang kita gunakan.
Pada masa penulisan, Shoelace masih dalam beta, dan pencipta sedang mempertimbangkan untuk mengubah beberapa gaya lalai, dan mungkin juga mengeluarkan beberapa gaya lalai sama sekali supaya mereka tidak menulis semula gaya aplikasi tuan rumah lagi. Konsep -konsep yang akan kami perkenalkan adalah relevan, tetapi jangan terkejut jika beberapa butiran kasut yang saya nyatakan berbeza apabila anda menggunakannya.
Gaya lalai Shoelace adalah baik, tetapi aplikasi web kami juga mungkin mempunyai reka bentuk sendiri dan berharap komponen UX kami sepadan dengannya. Mari lihat bagaimana untuk melakukan ini di dunia komponen web.
Kami tidak cuba untuk memperbaiki apa -apa. Pencipta Shoelace lebih baik pada reka bentuk daripada saya. Sebaliknya, kami hanya melihat cara menukar barangan supaya anda boleh menyesuaikan diri dengan aplikasi web anda sendiri. paparan cepat bayangan dom
Lihat salah satu tajuk tag di devtools anda;kelas dan A
, sementara juga memaparkan teks yang kami masukkan untuk tag itu. Tetapi sila ambil perhatian bahawa ia terletak di dalam Shadow Root .tab
. Ini membolehkan penulis komponen web menambah tag mereka sendiri ke komponen web, sementara juga menyediakan tempat untuk meletakkan apa yang kami sediakan. Perhatikan unsur -unsur .tab--active
? Ini pada dasarnya bermaksud "meletakkan apa sahaja yang digunakan oleh pengguna antara tag komponen web di tabindex
di sini ".
<slot></slot>
jadi komponen mencipta akar bayangan, menambah sesuatu kepadanya untuk menjadikan tajuk label gaya yang bagus serta pemegang tempat () di mana ia menjadikan kandungan kami.
Gaya Pembungkusan <sl-tab></sl-tab>
<slot></slot>
Masalah klasik dan lebih mengecewakan dalam pembangunan web selalu menjadi gaya yang meleleh di mana kita tidak mahu mereka muncul. Anda mungkin bimbang bahawa sebarang peraturan gaya dalam aplikasi yang menentukan sesuatu seperti
Pengecualian ini adalah gaya yang diwarisi. Sudah tentu, anda tidak perlu memohon gaya font-family
untuk setiap elemen dalam aplikasi web anda. Sebaliknya, anda boleh menentukan :root
atau html
terakhir kali dan biarkan ia mewarisi segala -galanya di bawahnya. Warisan ini sebenarnya akan menembusi akar bayangan. font-family
::part
yang tidak mewarisi), adakah kita tidak bernasib baik? Ternyata kita tidak. Semak imej elemen label di atas dan akar bayangannya sekali lagi. Perhatikan atribut pada div? Ini membolehkan anda mencari dan gaya elemen dari luar akar bayangan menggunakan pemilih . Kami akan memperkenalkan contoh langkah demi langkah. cursor
part
Mengatasi Gaya Shoelace ::part
Buka fail app.css dalam direktori SRC projek Stackblitz. Dalam bahagian di bahagian bawah, anda harus melihat pernyataan
. Oleh kerana atribut
:root
Overwrite Shoelace CSS Variables letter-spacing: normal;
Komponen letter-spacing
2px
membaca
itu sahaja, kita kini mempunyai penunjuk hijau! <sl-tab-group></sl-tab-group>
--indicator-color
bahagian pertanyaan
<sl-tab-group> <sl-tab panel="general" slot="nav">General</sl-tab> <sl-tab panel="custom" slot="nav">Custom</sl-tab> <sl-tab panel="advanced" slot="nav">Advanced</sl-tab> <sl-tab disabled panel="disabled" slot="nav">Disabled</sl-tab> <sl-tab-panel name="general">This is the general tab panel.</sl-tab-panel> <sl-tab-panel name="custom">This is the custom tab panel.</sl-tab-panel> <sl-tab-panel name="advanced">This is the advanced tab panel.</sl-tab-panel> <sl-tab-panel name="disabled">This is a disabled tab panel.</sl-tab-panel> </sl-tab-group> <sl-dialog label="Dialog" no-header=""> Hello World! <sl-button> open = false}>Close</sl-button> </sl-dialog> <br><br> <button> open = true}>Open Dialog</button>
tambah atribut
pada bekas tajuk tag. Di samping itu, tag yang dipilih sekarang menerima atribut
<sl-tab></sl-tab>
itu sahaja! part="base"
Untuk menambah icing pada kek, mari kita lihat bagaimana Shoelace membolehkan kita menyesuaikan animasi. Shoelace menggunakan API Animasi Web dan mendedahkan API setDefaultAnimation
untuk mengawal bagaimana unsur -unsur yang berbeza menghidupkan pelbagai interaksi mereka. Lihat dokumentasi untuk maklumat lanjut, tetapi sebagai contoh, inilah cara menukar animasi dialog lalai Shoelace dari mengembangkan dan mengecut ke dalam untuk memasuki dari animasi teratas dan bergerak ke bawah apabila tersembunyi.
<sl-tab-group> <sl-tab panel="general" slot="nav">General</sl-tab> <sl-tab panel="custom" slot="nav">Custom</sl-tab> <sl-tab panel="advanced" slot="nav">Advanced</sl-tab> <sl-tab disabled panel="disabled" slot="nav">Disabled</sl-tab> <sl-tab-panel name="general">This is the general tab panel.</sl-tab-panel> <sl-tab-panel name="custom">This is the custom tab panel.</sl-tab-panel> <sl-tab-panel name="advanced">This is the advanced tab panel.</sl-tab-panel> <sl-tab-panel name="disabled">This is a disabled tab panel.</sl-tab-panel> </sl-tab-group> <sl-dialog label="Dialog" no-header=""> Hello World! <sl-button> open = false}>Close</sl-button> </sl-dialog> <br><br> <button> open = true}>Open Dialog</button>
Kod ini terletak dalam fail app.svelte. Komennya untuk melihat animasi lalai asal.
Shoelace adalah perpustakaan komponen yang sangat bercita -cita yang dibina menggunakan komponen web. Oleh kerana komponen web bebas kerangka, mereka boleh digunakan dengan rangka kerja untuk sebarang projek. Oleh kerana rangka kerja baru mula menunjukkan ciri -ciri prestasi yang menakjubkan dan kemudahan penggunaan, dapat menggunakan komponen pengalaman pengguna yang berkualiti yang tidak terikat dengan kerangka kerja sama ada lebih menarik dari sebelumnya.
Atas ialah kandungan terperinci Memperkenalkan Shoelace, perpustakaan UX berasaskan komponen bebas kerangka. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!