Jadual Kandungan
sokongan pelayan untuk berfungsi dengan betul, bermakna seterusnya, remix, atau mana -mana alat lain yang anda gunakan pada pelayan akan memerlukan beberapa kuasa pemprosesan khas.
Saya akan menunjukkan kepada anda cara menggunakan Shoelace dan, lebih penting lagi, bagaimana untuk menyesuaikannya. Kami akan membincangkan Shadow Dom dan gaya luaran yang mereka blok (dan gaya yang tidak disekat). Kami juga akan membincangkan pemilih CSS
Pengenalan Shoelace
Berinteraksi dengan API: Kaedah dan Peristiwa
tags
Dialog
Sesuaikan semua gaya!
elemen tag kami mencipta bekas div dengan
diwarisi, cuba tetapkan nilai baru, seperti
. Mari gunakan fakta ini untuk mencari tag aktif dan tukar kursor:
Animasi Custom
Ringkasan
Rumah hujung hadapan web tutorial css Memperkenalkan Shoelace, perpustakaan UX berasaskan komponen bebas kerangka

Memperkenalkan Shoelace, perpustakaan UX berasaskan komponen bebas kerangka

Mar 10, 2025 am 10:46 AM

Introducing Shoelace, a Framework-Independent Component-Based UX Library

Artikel ini memperkenalkan Shoelace, perpustakaan komponen yang dicipta oleh Cory Laviska, tetapi ia unik. Ia mentakrifkan semua komponen UX standard: tag, kotak modal, akordion, autocomplete, dan banyak lagi. Komponen ini keluar dari kotak, cantik, mudah digunakan, dan sepenuhnya disesuaikan. Tetapi ia tidak membuat komponen ini menggunakan rangka kerja seperti React, Solid, atau Svelte, tetapi menggunakan komponen web;

Penyediaan

Komponen web hebat, tetapi masih terdapat beberapa isu kecil untuk memberi perhatian pada masa ini.

React

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.

Satu lagi pilihan yang saya suka secara peribadi adalah untuk membuat komponen React Lightweight yang menerima nama tag komponen web dan semua sifatnya, dan kemudian berurusan dengan kekurangan React. Saya membincangkan pilihan ini dalam jawatan terdahulu. Saya suka skim ini kerana ia direka untuk dikeluarkan. Cawangan eksperimen React telah menyelesaikan masalah interoperabilitas komponen web sehingga setelah diterbitkan, mana -mana komponen interoperabilitas komponen web ringan yang digunakan dapat dicari dan dikeluarkan, meninggalkan penggunaan komponen web langsung tanpa sebarang pembalut 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

sokongan pelayan untuk berfungsi dengan betul, bermakna seterusnya, remix, atau mana -mana alat lain yang anda gunakan pada pelayan akan memerlukan beberapa kuasa pemprosesan khas.

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.

Saya akan menunjukkan kepada anda cara menggunakan Shoelace dan, lebih penting lagi, bagaimana untuk menyesuaikannya. Kami akan membincangkan Shadow Dom dan gaya luaran yang mereka blok (dan gaya yang tidak disekat). Kami juga akan membincangkan pemilih CSS

- yang mungkin baru kepada anda - kami juga akan melihat bagaimana Shoelace membolehkan kami menimpa dan menyesuaikan pelbagai animasinya.

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).

Pengenalan Shoelace

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>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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.

Berinteraksi dengan API: Kaedah dan Peristiwa

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.

tags

Komponen tag

(<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;
Salin selepas log masuk
Salin selepas log masuk

... dan mengikatnya:

<sl-tab-group bind:this="{tabs}"></sl-tab-group>
Salin selepas log masuk
Salin selepas log masuk

sekarang kita boleh menambah butang untuk memanggilnya:

<button on:click="{()"> tabs.show("custom")}>Show custom</button>
Salin selepas log masuk
Begitu juga dengan peristiwa

. 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>
Salin selepas log masuk

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.

Dialog

Komponen dialog

(<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>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

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;
Salin selepas log masuk
Salin selepas log masuk

Akhirnya, mari kita sambungkan butang dialog terbuka kami:

<sl-tab-group bind:this="{tabs}"></sl-tab-group>
Salin selepas log masuk
Salin selepas log masuk

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.

Sesuaikan semua gaya!

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;

elemen tag kami mencipta bekas div dengan

dan

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

akan mengganggu tag ini. Ternyata ini bukan masalah; Gaya di luar akar bayangan tidak menjejaskan apa yang ada di dalam akar bayang -bayang (dengan beberapa pengecualian, yang akan kita bincangkan kemudian), dan sebaliknya.

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

sifat adat CSS (biasanya dipanggil "pembolehubah CSS") adalah pengecualian yang berkaitan. Root Shadow pasti boleh membaca sifat CSS yang ditakrifkan di luar Shadow Root;

pemilih ::part

bagaimana dengan gaya yang tidak diwarisi? Jika kita mahu menyesuaikan sesuatu di dalam akar bayangan (seperti

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

mari kita lihat aplikasi praktikal kaedah ini. Setakat ini, banyak gaya kasut (termasuk fon) menerima nilai lalai dari CSS Custom Properties. Untuk menyelaraskan fon ini dengan gaya aplikasi, mengatasi sifat tersuai yang berkaitan. Lihat dokumentasi yang menggunakan Shoelace pembolehubah CSS, atau anda hanya boleh menyemak gaya dalam mana -mana elemen yang diberikan dalam DevTools.

mewarisi gaya melalui bayang -bayang akar

Buka fail app.css dalam direktori SRC projek Stackblitz. Dalam bahagian di bahagian bawah, anda harus melihat pernyataan

. Oleh kerana atribut

diwarisi, cuba tetapkan nilai baru, seperti

. Selepas menyimpan, semua kandungan (termasuk tajuk tag yang ditakrifkan dalam Shadow Root) akan diselaraskan dengan sewajarnya.

:root Overwrite Shoelace CSS Variables letter-spacing: normal; Komponen letter-spacing 2px membaca

CSS Custom Property untuk garis bawah tag aktif. Kita boleh menggunakan beberapa CSS asas untuk mengatasinya:

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>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Dalam versi kasut yang saya gunakan sekarang (2.0.0-beta.83), mana-mana tag tidak diselaraskan mempunyai kursor penunjuk. Mari kita ubah ke kursor lalai untuk tag aktif (dipilih). Kami telah melihat elemen

tambah atribut

pada bekas tajuk tag. Di samping itu, tag yang dipilih sekarang menerima atribut

. Mari gunakan fakta ini untuk mencari tag aktif dan tukar kursor:

<sl-tab></sl-tab> itu sahaja! part="base"

Animasi Custom

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>
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk
Salin selepas log masuk

Kod ini terletak dalam fail app.svelte. Komennya untuk melihat animasi lalai asal.

Ringkasan

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!

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

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Artikel Panas

R.E.P.O. Kristal tenaga dijelaskan dan apa yang mereka lakukan (kristal kuning)
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Tetapan grafik terbaik
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Cara Memperbaiki Audio Jika anda tidak dapat mendengar sesiapa
3 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Cara Membuka Segala -galanya Di Myrise
4 minggu yang lalu By 尊渡假赌尊渡假赌尊渡假赌

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)

Bekerja dengan Caching Graphql Bekerja dengan Caching Graphql Mar 19, 2025 am 09:36 AM

Sekiranya anda baru -baru ini mula bekerja dengan GraphQL, atau mengkaji semula kebaikan dan keburukannya, anda tidak akan ragu -ragu mendengar perkara seperti "Graphql tidak menyokong caching" atau

Menjadikan Peralihan Svelte Khas pertama anda Menjadikan Peralihan Svelte Khas pertama anda Mar 15, 2025 am 11:08 AM

API Peralihan Svelte menyediakan cara untuk menghidupkan komponen apabila mereka memasuki atau meninggalkan dokumen, termasuk peralihan svelte adat.

Tunjukkan, jangan beritahu Tunjukkan, jangan beritahu Mar 16, 2025 am 11:49 AM

Berapa banyak masa yang anda habiskan untuk merancang persembahan kandungan untuk laman web anda? Semasa anda menulis catatan blog baru atau membuat halaman baru, adakah anda memikirkan

Membina aplikasi Ethereum menggunakan redwood.js dan fauna Membina aplikasi Ethereum menggunakan redwood.js dan fauna Mar 28, 2025 am 09:18 AM

Dengan pendakian harga bitcoin baru -baru ini lebih dari 20k $ USD, dan baru -baru ini melanggar 30k, saya fikir ia patut mengambil menyelam yang mendalam kembali ke dalam mewujudkan Ethereum

Bagaimana anda menggunakan CSS untuk membuat kesan teks, seperti bayang -bayang teks dan kecerunan? Bagaimana anda menggunakan CSS untuk membuat kesan teks, seperti bayang -bayang teks dan kecerunan? Mar 14, 2025 am 11:10 AM

Artikel ini membincangkan menggunakan CSS untuk kesan teks seperti bayang -bayang dan kecerunan, mengoptimumkannya untuk prestasi, dan meningkatkan pengalaman pengguna. Ia juga menyenaraikan sumber untuk pemula. (159 aksara)

Apa yang ada perintah npm? Apa yang ada perintah npm? Mar 15, 2025 am 11:36 AM

Perintah NPM menjalankan pelbagai tugas untuk anda, sama ada sebagai satu-satunya atau proses berjalan terus untuk perkara seperti memulakan pelayan atau menyusun kod.

Membuat Bragdoc anda sendiri dengan sebelas Membuat Bragdoc anda sendiri dengan sebelas Mar 18, 2025 am 11:23 AM

Tidak kira tahap tahap anda sebagai pemaju, tugas yang kami selesaikan -sama ada besar atau kecil -membuat kesan besar dalam pertumbuhan peribadi dan profesional kami.

Mari kita gunakan (x, x, x, x) untuk bercakap mengenai kekhususan Mari kita gunakan (x, x, x, x) untuk bercakap mengenai kekhususan Mar 24, 2025 am 10:37 AM

Saya hanya berbual dengan Eric Meyer pada hari yang lain dan saya teringat cerita Eric Meyer dari tahun -tahun pembentukan saya. Saya menulis catatan blog mengenai kekhususan CSS, dan

See all articles