Jadual Kandungan
Mengapa kita membina goofonts
Goofonts dalam tindakan
Bagaimana Kami Membangunnya: Bahagian WordPress
Google Fonts API
php echo $ font; ?>
Bagaimana Kami Membinanya: Bahagian Akhir Depan (Menggunakan NuxtJS)
Pemikiran terakhir
Rumah hujung hadapan web tutorial css Bagaimana kami menandakan font Google dan mencipta goofonts.com

Bagaimana kami menandakan font Google dan mencipta goofonts.com

Apr 12, 2025 pm 12:02 PM

Bagaimana kami menandakan font Google dan mencipta goofonts.com

Goofontsis Sebuah projek sampingan yang ditandatangani oleh seorang pemaju-isteri dan suami pereka, kedua-duanya peminat besar tipografi. Kami telah TaggingGoogle Fontsand membina sebuah laman web yang membuat mencari dan mencari fon yang lebih mudah.

Goofontsuses WordPress di backend andnuxtjs (rangka kerja avue.js) di frontend. Saya ingin memberitahu anda cerita di sebalik goofonts.com dan berkongsi beberapa butiran teknikal mengenai teknologi yang telah kami pilih dan bagaimana kami menyesuaikan diri dan menggunakannya untuk projek ini.

Mengapa kita membina goofonts

Pada saat menulis artikel ini, terdapat 977 typefaces yang ditawarkan oleh Google Fonts. Anda boleh menyemak nombor yang tepat pada bila -bila masa menggunakan pemaju fon fon.

Laman web Google Fonts menyediakan antara muka yang indah di mana anda boleh melihat semua fon, menyusunnya dengan trend, populariti, tarikh, atau nama.

Tetapi bagaimana dengan fungsi carian?

Anda boleh memasukkan dan mengecualikan fon oleh lima kategori: serif, sans-serif, paparan, tulisan tangan, dan monospace.

Anda boleh mencari dalam skrip (Likelatin Extended, Cyrillic, atau Devanagari (mereka yang dipanggil subset dalam font Google). Tetapi anda tidak boleh mencari dalam beberapa subset sekaligus.

Anda boleh mencari dengan empat sifat: ketebalan, slant, lebar, dan "gaya bilangan." Gaya , yang juga dikenali sebagai variasi , merujuk kedua -dua gaya (Italicor biasa) dan berat (100,200, sehingga 900). Sering kali, fon badan memerlukan tiga varian: biasa, berani, dan italic . Properti "Numberof Styles" menyusun fon dengan banyak varian, tetapi ia tidak membenarkan untuk memilih fon yang datang dalam kombo "biasa, berani, italic".

Terdapat juga medan carian tersuai di mana anda boleh menaip pertanyaan anda. Sayangnya, carian dilakukan secara eksklusif ke atas nama -nama fon. Oleh itu, hasilnya termasuk keluarga font secara unik dari perkhidmatan selain fon Google.

Mari ambil pertanyaan "kartun" sebagai contoh. Ia menghasilkan "Cartoonscript" dari linotype foundry luaran.

Saya boleh ingat bekerja pada projek yang menuntut dua typefaces yang sangat bergaya -satu yang membangkitkan Lama Wild West, yang lain meniru skrip. Itulah saat saya memutuskan untuk menandakan fon Google. :)

Goofonts dalam tindakan

Izinkan saya menunjukkan kepada anda bagaimana goofonts berfungsi. Sidebar gelap di sebelah kanan adalah kawasan "carian" anda. Anda boleh menaip kata kunci anda dalam medan carian -ini akan melakukan carian "dan". Sebagai contoh, anda boleh mencari fon yang sekaligus kartun dan papak.

Kami memilih sekumpulan kata kunci -klik mana -mana daripada mereka! Jika projek anda memerlukan beberapa subset tertentu, periksa mereka dalam bahagian subset. Anda juga boleh menyemak semua varian yang anda perlukan untuk fon anda.

Jika anda suka font, klik ikon jantungnya, dan ia akan disimpan di localStorage pelayar anda. Anda boleh menemui fon bookmark anda di thooofonts.com/bookmarkspage.Together dengan kod, anda mungkin perlu membenamkannya.

Bagaimana Kami Membangunnya: Bahagian WordPress

Untuk memulakan, kami memerlukan SomeKind OfInterface di mana kami boleh melihat dan menandai setiap fon. Kami juga memerlukan pangkalan data untuk menyimpan thosetags.

Saya mempunyai pengalaman dengan WordPress. Lebih -lebih lagi, WordPress datang dengan API REST, yang membuka pelbagai kemungkinan untuk menangani data di frontend. ThatChoice dibuat dengan cepat.

Saya pergi untuk persediaan awal yang paling mudah. Setiap fon adalah jawatan, dan kami menggunakan tag pos untuk kata kunci. Acustom post typecould telah bekerja juga, tetapi kerana kami menggunakan WordPress hanya untuk data, jenis kandungan lalai berfungsi dengan baik.

Jelas, kita perlu menambah semua fon secara programatik. Kami juga memerlukan untuk mengemas kini fon secara programatik, termasuk menambah yang baru atau menambah varian dan subset yang tersedia.

Pendekatan yang diterangkan di bawah boleh berguna dengan data lain yang tersedia melalui API luaran. Dalam plugin WordPress tersuai, kami mendaftarkan halaman menu dari mana kami boleh menyemak kemas kini dari API. Untuk kesederhanaan, halaman akan memaparkan tajuk, butang untuk mengaktifkan kemas kini dan bar kemajuan untuk beberapa maklum balas visual.

 /**
 * Daftar halaman menu tersuai. 
 */
fungsi daftar_custom_menu_page () {
  add_menu_page ( 
    'Fon Google ke WordPress', 
    'WP Goofonts', 
    'Manage_Options', 
    'WP-Goofonts-menu', 
  fungsi () {?>        
    <h1 id="Google-Fonts-API"> Google Fonts API </h1>
    <button type="Button"> Run </button>
    <p> </p>        
    <progress max="100" value="0"> </progress>
   php}
  );
}
add_action ('admin_menu', 'register_custom_menu_page');
Salin selepas log masuk


Mari kita mulakan dengan menulis javascriptpart. Walaupun sebahagian besar contoh menggunakan Ajax dengan WordPress melaksanakan jQuery dan theJQuery.ajaxMethod, yang sama boleh diperolehi tanpa jQuery, menggunakanxiosand a helperqs.jsfor serialization data kecil.

Kami mahu toload scriptinthe footer kami, selepas loadingaxiosandqs :

 add_action ('admin_enqueue_scripts' fungsi () {
  wp__script ('axios', 'https://unpkg.com/axios/dist/axios.min.js');
  wp_enqueue_script ('qs', 'https://unpkg.com/qs/dist/qs.js');
  wp_enqueue_script ('wp-goofonts-admin-script', plugin_dir_url (__file__). 'js/wp-goofonts.js', array ('axios', 'qs'), '1.0.0', benar);
});
Salin selepas log masuk

Mari lihat bagaimana rupa JavaScriptcould:

 butang const = document.getElementById ('WP-Goofonts-Button')
const info = document.getElementById ('Info')
Const Progress = Document.GetElementById ('Kemajuan')
const updater = {
  TotalCount: 0,
  TotalChecked: 0,
  Dikemaskini: [],
  init: fungsi async () {
    Cuba {
      const allfonts = menunggu axios.get ('https://www.googleapis.com/webfonts/v1/webfonts?key=api_key&sort=date')
      this.totalcount = allfonts.data.items.length
      Info.textcontent = `diambil $ {this.totalcount} fonts.`
      this.updatePost (allfonts.data.items, 0)
    } menangkap (e) {
      Console.error (e)
    }
  },
  UpdatePost: Fungsi Async (ELS, Indeks) {
    jika (index === this.totalcount) {
      kembali
    }                
    data const = {
      Tindakan: 'goofonts_update_post',
      Font: ELS [indeks],
    }
    Cuba {
       const apirequest = menunggu axios.post (ajaxurl, qs.stringify (data))
       this.totalchecked  
       Kemajuan.setAttribute ('nilai', math.round (100*this.totalChecked/this.totalcount))
       this.updatePost (ELS, indeks 1)
    } menangkap (e) {
       Console.error (e)
      }
   }
}

Button.AdDeventListener ('klik', () => {
  updater.init ()
})
Salin selepas log masuk

TheInitMethod membuat permintaan kepada API TheGoogleFonts. Sebaik sahaja data dari API tersedia, kami memanggil asynchronousupdatePostMethod rekursif yang SendSanIndividual font dalam permintaan pos ke pelayan WordPress.

Sekarang, penting untuk diingat bahawa WordPress melaksanakan Ajax dengan cara tertentu. Pertama sekali, setiap permintaan mesti dihantar TOWP-Admin/Admin-Ajax.php . URL ini boleh didapati di kawasan pentadbiran sebagai javascriptvariabeAjaxurl global .

Kedua, semua permintaan WordPress Ajax mesti termasuk anActionArgument dalam data. Nilai tindakan menentukan tag cangkuk mana yang akan digunakan pada sisi pelayan.

Dalam kes kami, nilai tindakan ISGOOFONTS_UPDATE_POST. Ini bermakna apa yang berlaku di sisi pelayan ditentukan oleh thewp_ajax_goofonts_update_posthook.

 add_action ('wp_ajax_goofonts_update_post', fungsi () {
  jika (isset ($ _post ['font'])) {
    / * jubin pos adalah nama font */
    $ title = wp_strip_all_tags ($ _post ['font'] ['family']);
    $ variants = $ _post ['font'] ['variants'];
    $ subsets = $ _post ['font'] ['subsets'];
    $ kategori = $ _post ['font'] ['kategori'];
    / * periksa sama ada siaran sudah ada */
    $ objek = get_page_by_title ($ title, 'object', 'post');
    jika (null === $ objek) {
      / * Buat catatan baru dan tetapkan kategori, varian dan subset sebagai tag */
      goofonts_new_post ($ title, $ kategori, $ varian, $ subsets);
    } else {
      / * Semak jika $ varian atau $ subset diubah */
      goofonts_update_post ($ objek, $ varian, $ subset);
    }
  }
});

fungsi goofonts_new_post ($ title, $ kategori, $ varian, $ subset) {
  $ post_id = wp_insert_post (array (
    'post_author' => 1,
    'post_name' => sanitize_title ($ title),
    'post_title' => $ tajuk,
    'post_type' => 'pos',
    'post_status' => 'draf',
    )
  );
  jika ($ post_id> 0) {
    / * Bahagian mudah penandaan;) tambah kategori font, varian dan subset (ketiga -tiga ini berasal dari API Google Fonts) sebagai tag */
    wp_set_object_terms ($ post_id, $ kategori, 'post_tag', benar);
    wp_set_object_terms ($ post_id, $ varian, 'post_tag', true);
    wp_set_object_terms ($ post_id, $ subsets, 'post_tag', true);
  }
}
Salin selepas log masuk

Dengan cara ini, dalam masa kurang dari satu minit, kita berakhir dengan hampir seribu draf Post di papan pemuka-semuanya dengan beberapa tag yang sudah ada. Kita perlu mula menambah tag secara manual untuk setiap fon satu demi satu.
Editor WordPress lalai tidak masuk akal dalam kes ini. Apa yang kami perlukan adalah pratonton fon. Pautan ke halaman font di fonts.google.com juga berguna.

Acustom metaboxdoes pekerjaan dengan baik. Dalam kebanyakan kes, anda akan menggunakan kotak meta untuk elemen bentuk tersuai untuk menyimpan beberapa data tersuai yang berkaitan dengan jawatan. Malah, kandungan metabox boleh praktikal mana -mana HTML.

 fungsi display_font_preview ($ post) {
  / * Nama fon, contohnya fatface abril */
  $ font = $ post-> post_title;
  / * font seperti dalam URL, contohnya fatface abril */
  $ font_url_part = implode ('', meletup ('', $ font));
  ?>
  <dana> 
    <link href="<?%20php%20echo%20'https://fonts.googleapis.com/css?family='.%20%24%20font_url_part.%20'&%20paparan%20=%20swap';?>" rel="stylesheet">
    <header>
      <h2 id="php-echo-font-gt">  php echo $ font; ?> </h2>
      <a href="<?%20php%20echo%20'https://fonts.google.com/specimen/'.%20%24%20font_url_part;?>" target="_ blank" rel="noopener"> spesimen di Google Fonts </a>
    </header>
    <div contentedable="true" style="font-family: <? php echo $ font;?>">
      <p> Fox coklat cepat melompat ke atas anjing malas. </p>
      <p style="Text-Transform: Uppercase;"> Fox coklat cepat melompat ke atas anjing malas. </p>
      <p> 1 2 3 4 5 6 7 8 9 0 </p>
      <p> &! ; ? {} [] </p>
    </div>
  
 php}

add_action ('add_meta_boxes', fungsi () {
  add_meta_box (
    'font_preview', / * metabox id * /
    'Pratonton Font', / * Tajuk Metabox * /
    'Display_Font_Preview', / * Confen Callback * /
    'pos' / * di mana untuk memaparkan * /
  );
});</dana>
Salin selepas log masuk

Tagging Font adalah tugas jangka panjang dengan banyak pengulangan. Ia juga memerlukan dos yang besar konsistensi. Itulah sebabnya kita bermula dengan menentukan satu set tag "pratetap." Itu boleh, contohnya:

 {
  / * ... */
  Komik: {
    Tags: 'komik, kasual, tidak rasmi, kartun'
  },
  kursif: {
    Tags: 'kursif, kaligrafi, skrip, manuskrip, tandatangan'
  },
  / * ... */
}
Salin selepas log masuk

Seterusnya dengan beberapa CSS dan JavaScript tersuai, kami "menggodam" editor WordPress dan membentuk tag dengan memperkayakannya dengan set butang pratetap.

Bagaimana Kami Membinanya: Bahagian Akhir Depan (Menggunakan NuxtJS)

TheGoOfonts.cominterface direka Bysylvain Guizard, pereka Graphicandweb Perancis (yang menjadi suami saya). Kami mahukan sesuatu yang mudah dibezakan di kawasan "carian". Sylvain sengaja pergi untuk warna yang tidak jauh dari identiti Font Google. Kami sedang mencari keseimbangan antara membina sesuatu yang unik dan asli yang mengelirukan kekeliruan pengguna.

Walaupun idid tidak hesitatechoosing wordpress fortheback-end, idid not mahu menggunakannya di frontend. Kami mensasarkan pengalaman seperti aplikasi dan saya, secara peribadi, mahu kod dalam JavaScript, menggunakanvue.js khususnya.

Saya melihat contoh laman web yang menggunakan WordPress WordPress dan memutuskan untuk mencubanya. Pilihannya dibuat dengan segera. NUXTJS adalah rangka kerja Vue.js yang sangat popular, dan saya benar -benar menikmati kesederhanaan dan fleksibiliti.
Saya telah bermain -main dengan tetapan NUXTJS yang berbeza untuk berakhir dengan laman web statik 100%. Penyelesaian statik sepenuhnya merasakan yang paling berprestasi; pengalaman keseluruhan seolah -olah paling cair. Itu juga bermakna tapak WordPress saya hanya digunakan semasa proses membina. Oleh itu, ia boleh berjalan di localhost saya. Ini tidak dapat diabaikan kerana ia menghapuskan kos hosting dan yang paling penting, membolehkan saya melangkau konfigurasi WordPress yang berkaitan dengan keselamatan dan melegakan tekanan yang berkaitan dengan keselamatan;);)

Jika anda sudah biasa dengan NUXTJS, anda mungkin tahu bahawa generasi statik penuh tidak (namun) sebahagian daripada NUXTJS. Halaman Prerendered cuba mengambil data lagi apabila anda menavigasi.

Itulah sebabnya kita perlu "menggodam" generasi statik 100%. Dalam kes ini, kami menyimpan bahagian berguna data yang diambil ke AJSONFILE sebelum setiap proses membina. Ini mungkin, terima kasih Tonuxt Hooks, khususnya, cangkuk pembuatnya.

Cangkuk biasanya digunakan dalam modul NUXT:

 / * modul/terdahulu.js */

const fs = memerlukan ('fs')
const axios = memerlukan ('axios')

const sourcePath = 'http: //wpgoofonts.local/wp-json/wp/v2/'
Const Path = 'Static/Allfonts.json'

modul.exports = () => {
  / * Tulis data ke fail, menggantikan fail jika sudah ada */
  const storedata = (data, path) => {
    Cuba {
      Fs.WriteFileSync (Path, JSON.Stringify (data))
    } menangkap (err) {
      Console.error (err)
    }
  }
  fungsi async getData () {    
    const fetchedTags = menunggu axios.get (`$ {sourcePath} tags? per_page = 500`)
      .catch (e => {console.log (e); return false})
    
  / * Bina objek tag_id: tag_slug */
    tag const = fetchedtags.data.reduce ((acc, cur) => {
      acc [cur.id] = cur.slug
      kembali acc
    }, {})
    
  / * Kami ingin mengetahui jumlah atau halaman */
    const mhead = menunggu axios.head (`$ {sourcePath} posts? per_page = 100`)
      .catch (e => {console.log (e); return false})
    const totalPages = mhead.Headers ['X-WP-Totalpages']

  / * mari kita ambil semua fon */
    Biarkan fon = []
    Biarkan i = 0
    sementara (i <totalpages i const response="Tunggu" axios.get posts per_page="100" page="$" fonts.push.apply response.data dan mengurangkannya ke objek dengan entri seperti: roboto tags: ... fon="(fon)" .reduce el> {
      acc [el.slug] = {
        Nama: el.title.rendered,
        Tags: el.tags.map (i => tags [i]),
      }
      kembali acc
    }, {})

  / * Simpan objek fon ke fail .json */
    disimpan (fon, jalan)
  }

  / * pastikan ini berlaku sebelum setiap membina */
  this.nuxt.hook ('Bina: Sebelum', getData)
}</totalpages>
Salin selepas log masuk
 / * nuxt.config.js */
modul.exports = {
  // ...
  BuildModules: [
    ['~ modul/terdahulu']
  ],
// ...
}
Salin selepas log masuk

Seperti yang dapat anda lihat, kami hanya meminta senarai tag dan jawatan senarai.ThatMeans kami hanya menggunakan titik akhir API WordPressRest lalai, dan tiada konfigurasi diperlukan.

Pemikiran terakhir

Bekerja di Goofonts adalah pengembaraan jangka panjang. Ia juga jenis projek yang perlu dikekalkan secara aktif. Kami kerap terus menyemak fon Google untuk typefaces, subset, atau varian baru. Kami menandakan item baru dan mengemas kini pangkalan data kami. Baru -baru ini, saya benar -benar teruja untuk mengetahui bahawa Neuehas bersama keluarga. Kami juga mempunyai favs peribadi kami di kalangan spesimen yang kurang dikenali.

Sebagai jurulatih yang memberikan bengkel biasa, saya dapat melihat pengguna sebenar bermain dengan Goofonts. Pada peringkat projek ini, kami ingin mendapatkan sebanyak mungkin maklum balas. Kami akan suka Goofonts menjadi alat yang berguna, berguna dan intuitif untuk pereka web. Satu ciri tugasan adalah mencari font dengan namanya. Kami juga suka menambah kemungkinan untuk berkongsi set bookmark dan membuat pelbagai "koleksi" fon.

Sebagai pemaju, saya benar-benar menikmati aspek pelbagai disiplin projek ini. Ia adalah kali pertama saya bekerja dengan API REST WordPress, ia adalah projek besar pertama saya di Vue.js, dan saya belajar banyak tentang tipografi.

Adakah kita akan melakukan apa -apa yang berbeza jika kita boleh? Sudah tentu. Ia adalah proses pembelajaran. Sebaliknya, saya tidak fikir kita akan mengubah alat utama. Fleksibiliti kedua -dua wordpress dan nuxt.js terbukti menjadi pilihan yang tepat. Bermula hari ini, saya pasti akan mengambil masa untuk meneroka, dan saya mungkin akan melaksanakannya pada masa akan datang.

Saya harap anda dapati beberapa kaedah yang dibincangkan berguna. Seperti yang saya katakan sebelum ini, maklum balas anda sangat berharga. Jika anda mempunyai sebarang pertanyaan atau ucapan, sila beritahu saya dalam komen!

Atas ialah kandungan terperinci Bagaimana kami menandakan font Google dan mencipta goofonts.com. 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