Konverter CSS ke JavaScript Gratis
Konversi properti CSS ke objek gaya JavaScript. Ubah properti kebab-case menjadi camelCase. Sempurna untuk React dan styled-components.
background-color: #007bff;
padding: 10px 20px;
border-radius: 4px;
Berkonversi menjadi:
{ backgroundColor: '#007bff', padding: '10px 20px', borderRadius: '4px' }
Cara penggunaan
Alat ini menguraikan properti CSS dan mengonversinya menjadi sintaks objek JavaScript. Nama properti dalam kebab-case (seperti background-color) secara otomatis diubah menjadi camelCase (backgroundColor). Nilai CSS dipertahankan sebagaimana adanya. Anda dapat memasukkan properti individual atau aturan CSS lengkap dengan selektor.
Gerakan CSS-in-JS, Secara Singkat
Mengapa masalah konversi ini ada sama sekali? Karena pada 2014 segenerasi pengembang frontend memutuskan bahwa CSS dalam stylesheet terpisah telah gagal pada skala. Momen pendiri adalah talk Christopher "Vjeux" Chedeau "CSS in JS" di NationJS pada 15 November 2014: insinyur Facebook yang berargumen bahwa cascade global CSS, kurangnya pelacakan dependensi, dan akumulasi kode-mati membuatnya menjadi bagian terburuk dari aplikasi web besar. Talk itu menyalakan gerakan. JSS (Oleg Slobodskoi) dirilis pada akhir 2014 sebagai pustaka CSS-in-JS general-purpose pertama. CSS Modules tiba pada 2015 sebagai pendekatan waktu-build untuk scoping. styled-components (Glen Maddern + Max Stoiber) dirilis pada Oktober 2016, mempopulerkan API tagged-template-literal di mana Anda menulis CSS di dalam backtick yang dilampirkan ke definisi komponen. Emotion (Kye Hohenberger) dirilis pada 10 Juli 2017 baik dengan API gaya styled-components maupun prop css yang lebih fleksibel yang langsung menerima objek JavaScript: persis format yang dihasilkan alat ini. Stitches (Modulz/Pedro Duarte) dirilis pada 2020 dengan API berbasis-varian tetapi menjadi tidak dipelihara di pertengahan 2023 dan secara resmi diarsipkan pada April 2026.
Pendulum telah berayun kembali. "Why We're Breaking Up with CSS-in-JS" Sam Magura pada 16 Oktober 2022: ditulis oleh seorang pemelihara Emotion: adalah titik infleksi. Kasus teknis: CSS-in-JS waktu-runtime secara terukur memperlambat render React (benchmark Magura sendiri di Spot Member Browser menurunkan waktu render median dari 54,3 md menjadi 27,7 md setelah migrasi dari Emotion, sekitar 2× lebih cepat); ukuran bundel lebih besar; biaya serialisasi terakumulasi. Kasus arsitektural: React Server Components (distabilisasi oleh Next.js 13.4 pada 4 Mei 2023) tidak dapat menggunakan React Context, yang sebagian besar pustaka CSS-in-JS bergantung untuk theming. Gelombang penggantinya: Tailwind CSS (Adam Wathan, peluncuran v4 22 Januari 2025); Vanilla Extract (Mark Dalgleish di Seek, 26 Maret 2021) untuk CSS-in-TypeScript waktu-build; CSS Modules untuk nama kelas scoped tanpa biaya runtime; dan kelompok compile-to-static yang bertahan yang disebutkan dalam pos Magura sendiri: vanilla-extract, Linaria, Compiled, StyleX, dan Pigment CSS. JSS sendiri dideprecate pada 14 Mei 2024; styled-components masuk ke mode pemeliharaan pada 17 Maret 2025. CSS-in-JS waktu-runtime tidak lagi merupakan default untuk proyek React baru pada 2026: tetapi codebase raksasa kode styled-components dan Emotion yang ada bertahan, dan mengonversi CSS ke bentuk objek pustaka tersebut masih merupakan kenyataan harian bagi banyak tim.
Permukaan API Pustaka Utama
Style inline React (prop style) adalah baseline universal: setiap komponen React menerima objek style yang kuncinya adalah properti CSS camelCase. Tidak ada dukungan untuk pseudo-class (:hover), media query, atau !important; ini adalah "inline style" dalam pengertian atribut HTML style="..." lama, hanya dengan objek JavaScript alih-alih string. Output alat ini langsung masuk ke style={...}. styled-components menggunakan tagged template literal yang berisi string CSS nyata: const Button = styled.div`background: red; padding: 10px;`. CSS-nya adalah CSS nyata, kebab-case dan semuanya: Anda biasanya tidak memerlukan konverter ini untuk styled-components kecuali Anda berpindah dari inline style ke styled component. Emotion mendukung kedua API: API styled (template literal seperti styled-components) dan prop css dengan objek JavaScript (camelCase, persis format yang dihasilkan alat ini). Untuk prop css Emotion, output konverter ini langsung dapat digunakan. JSS menggunakan format objek serupa dengan beberapa fitur tambahan (theming, nama kelas yang dihasilkan secara otomatis) tetapi sintaks properti camelCase dasar sama. Style binding Vue (:style="...") menerima sintaks objek camelCase yang sama dengan inline style React. Vanilla Extract menggunakan bentuk objek tipped yang lebih ketat dengan fungsi pembungkus eksplisit style({ ... }); objek camelCase di dalamnya memiliki bentuk yang sama.
Kasus Tepi dan Trik
- Pengecualian prefiks vendor
ms. Sebagian besar prefiks vendor mengkapital setelah camelCase:-webkit-transform→WebkitTransform,-moz-appearance→MozAppearance,-o-transition→OTransition. Tetapi prefiks Microsoft adalah pengecualiannya:-ms-flex→msFlexdengan m kecil, karena begitulah sumber React DOM mendefinisikannya. Ini adalah trik CSS-to-JS yang paling banyak di-google. - Properti tanpa-unit. React DOM memelihara daftar properti di mana angka telanjang valid (
z-index,opacity,line-height,flex-grow,flex-shrink,order,columns, dan beberapa lainnya). Untuk ini,zIndex: 5baik-baik saja. Untuk yang lain, nilai dimensional memerlukan unit sebagai string:width: '100px', bukanwidth: 100(yang akan diperlakukan React sebagai'100px'oleh default diam: nyaman tetapi lossy jika Anda menginginkan%atauvh). - calc(), var(), dan properti custom CSS. Ini bekerja sebagai nilai string:
width: 'calc(100% - 20px)',color: 'var(--brand-color)'. Properti custom (variabel CSS) memerlukan kutipan di sekitar--name:'--my-var': 'red'. - !important tidak bekerja di style inline React. Prop style React secara diam-diam mengabaikan anotasi
!important. Jika Anda perlu mengganti aturan dengan spesifisitas yang lebih tinggi, gunakan stylesheet nyata (CSS Modules, Tailwind, styled-components): style inline bukan alat yang tepat. - Konten string kosong.
content: ''memerlukan kutipan yang hati-hati di JavaScript:content: "''": nilai string kosong, tetapi nilai itu sendiri adalah literal string kosong CSS yang memerlukan apostrof sekitarnya untuk dipertahankan. - Aturan bersarang dan pseudo-selektor. Konversi CSS-to-JS sederhana menghasilkan objek datar: status hover, media query, dan style pseudo-element memerlukan struktur pustaka tujuan sendiri. Prop
cssEmotion mendukung objek bersarang ('&:hover': { background: 'red' }); style inline React tidak. - Properti shorthand.
margin: 10px 20px 10px 20pxtetap sebagai string dalam bentuk JS:margin: '10px 20px 10px 20px'. React mengizinkan shorthand; beberapa pustaka CSS-in-JS memperingatkan bahwa itu dapat berinteraksi secara tak terduga dengan varian longhand.
Kasus Penggunaan Umum
- Style inline React. Mengonversi snippet CSS dari desainer atau stylesheet ke format objek
style={...}untuk komponen yang tidak memiliki stylesheet terkait. - Prop css Emotion. Bermigrasi dari file CSS terpisah ke prop css sintaks-objek Emotion, di mana camelCase + bentuk JS-objek adalah input native.
- Animasi JavaScript. GSAP, anime.js, Motion One, dan Framer Motion semua menerima objek style sebagai target keyframe. Format camelCase juga diperlukan di sana.
- Token sistem desain. Mengonversi nilai properti custom CSS menjadi konstanta JavaScript untuk digunakan dalam sistem token desain (Style Dictionary, Theo, dll.) di mana TypeScript atau JS adalah sumber kebenaran kanonis.
- Migrasi JSS. Material UI v4 dan sebelumnya banyak menggunakan JSS; mengonversi prototipe CSS ke bentuk objek JSS adalah titik gesekan. Perhatikan bahwa Material UI v5+ pindah ke Emotion secara default; ini lebih merupakan kasus penggunaan legacy.
- Style binding inline Vue.
:style="{...}"dalam template Vue menggunakan format objek camelCase yang sama dengan prop style React; output konverter ini langsung dapat digunakan juga dalam template Vue.
Lingkup Jujur: Apa yang Dilakukan dan Tidak Dilakukan Alat Ini
Alat ini mengonversi deklarasi CSS ke sintaks objek JavaScript dengan kunci camelCase dan nilai string yang dikutip dengan benar. Ia menangani aturan kapitalisasi prefiks-vendor (termasuk pengecualian ms kecil). Ia tidak menerjemahkan ke API pustaka tertentu di luar menghasilkan objek camelCase: Anda masih harus tahu apakah codebase Anda menginginkan objek di dalam styled.div`...`, di dalam panggilan css Emotion, di dalam prop style React, atau di dalam binding :style Vue. Pilihan tergantung pada pustaka Anda, bukan konverter. Alat ini juga tidak menangani aturan bersarang dan pseudo-selektor secara otomatis: sintaks objek bersarang Emotion ('&:hover': {...}) dan penyarangan template-literal styled-components bekerja secara berbeda dan memerlukan strukturisasi manual. Untuk migrasi lengkap dari file CSS ke pustaka CSS-in-JS, harapkan untuk melakukan beberapa restrukturisasi di luar konversi properti-per-properti yang disediakan alat ini.
Privasi: Mengapa Hanya-Browser Penting di Sini
CSS jarang berisi rahasia, tetapi stylesheet proprietary mengungkapkan informasi tentang taksonomi kelas internal situs, token sistem desainnya, dan kadang-kadang hipotesis A/B-test-nya melalui selektor khusus-eksperimen. Alat konversi sisi-server memerlukan upload CSS, yang berada di log mereka. Untuk style produk internal, file kebenaran sumber sistem desain, atau branding work-in-progress, konversi browser-only menjaganya tetap lokal. Alat ini menjalankan seluruh transformasi di browser Anda: verifikasi di tab Network DevTools saat Anda mengklik Konversi, atau bawa halaman offline (mode pesawat) dan konverter masih berfungsi.
Pertanyaan yang Sering Diajukan
Bagaimana properti CSS dikonversi ke camelCase?
Setiap tanda hubung dalam properti CSS kebab-case dihapus dan huruf berikutnya dikapitalisasi: background-color → backgroundColor, border-radius → borderRadius, margin-top → marginTop. Properti dengan prefiks vendor mengikuti aturan yang sama dengan kapitalisasi: -webkit-transform → WebkitTransform (W kapital), -moz-appearance → MozAppearance. Pengecualian terkenal adalah prefiks Microsoft: -ms-flex → msFlex dengan m kecil, karena begitulah React DOM mendefinisikannya.
Apakah ini bekerja untuk media query dan pseudo-class?
Objek style JavaScript biasa (prop style React, :style Vue) tidak mendukung media query atau pseudo-class: itu adalah konsep stylesheet. Pustaka CSS-in-JS yang menerima sintaks objek (prop css Emotion, JSS) mendukungnya melalui objek bersarang: '&:hover': { background: 'red' }, '@media (min-width: 768px)': { padding: '20px' }. Dokumentasi pustaka tujuan akan menunjukkan struktur penyarangan yang tepat. Alat ini menghasilkan objek datar; Anda membungkusnya dalam sintaks penyarangan pustaka secara manual.
Mengapa !important tidak bekerja di style inline React?
Prop style React secara diam-diam mengabaikan anotasi !important: itu bukan bagian dari tata bahasa literal objek JS dan renderer React tidak menerjemahkannya. Jika Anda perlu mengganti aturan dengan spesifisitas yang lebih tinggi, gunakan stylesheet nyata (CSS Modules, Tailwind, styled-components, CSS biasa). Mekanisme inline-style React adalah untuk style satu-kali atau dinamis di mana spesifisitas bukan masalah; !important milik di stylesheet.
Haruskah saya masih menggunakan CSS-in-JS pada 2026?
Untuk proyek React baru, default saat ini adalah "tidak, gunakan Tailwind, CSS Modules, atau Vanilla Extract." Artikel Sam Magura Oktober 2022 dari dalam tim Emotion: dikombinasikan dengan ketidakcocokan Context React Server Components: mendorong ekosistem ke arah solusi waktu-build-saja. styled-components pindah ke mode pemeliharaan pada 17 Maret 2025; JSS dideprecate pada 14 Mei 2024. Untuk codebase yang ada dengan investasi styled-components atau Emotion yang signifikan, tidak ada terburu-buru untuk bermigrasi: kedua pustaka masih berfungsi, dan biaya runtime adalah jenis hal yang Anda optimalkan ketika muncul dalam profiling. Untuk proyek baru di 2026: Tailwind v4 (dirilis 22 Januari 2025) adalah pilihan paling populer; Vanilla Extract untuk proyek yang menginginkan typing TypeScript ketat pada style; CSS Modules untuk proyek yang menginginkan abstraksi minimal.
Bisakah saya mengonversi token sistem desain dengan cara ini?
Untuk snippet satu-kali, ya. Untuk seluruh sistem desain: biasanya puluhan atau ratusan token yang diorganisir berdasarkan warna, jarak, tipografi, motion: gunakan alat khusus seperti Style Dictionary atau Theo, keduanya mengambil satu sumber kebenaran (JSON, YAML, atau JS) dan menghasilkan output ke beberapa tujuan (properti custom CSS, konstanta JS, iOS Asset Catalogs, XML Android, dll.). Keuntungan dari alat token desain nyata adalah konsistensi di seluruh platform; konverter ini adalah untuk kasus di mana Anda memiliki snippet CSS di tangan dan menginginkan bentuk JS sekarang.
Apakah CSS saya dikirim ke mana pun?
Tidak. Konversi berjalan sepenuhnya di browser Anda melalui JavaScript. CSS yang Anda tempel tidak pernah melintasi jaringan: verifikasi di tab Network DevTools saat Anda mengklik Konversi, atau bawa halaman offline setelah dimuat dan konfirmasi alat masih berfungsi. Aman untuk stylesheet proprietary, file kebenaran sumber sistem desain, atau CSS apa pun yang mengungkapkan taksonomi kelas internal yang tidak ingin Anda salin ke hard drive orang asing.