Conversor gratuito de CSS a JavaScript

Convierte propiedades CSS en objetos de estilo JavaScript. Transforma las propiedades kebab-case en camelCase. Perfecto para React y styled-components.

Formato de salida:
Ejemplo: background-color: #007bff;
padding: 10px 20px;
border-radius: 4px;
Se convierte en: { backgroundColor: '#007bff', padding: '10px 20px', borderRadius: '4px' }

Cómo usar

Esta herramienta analiza las propiedades CSS y las convierte a sintaxis de objeto JavaScript. Los nombres de propiedades en kebab-case (como background-color) se convierten automáticamente a camelCase (backgroundColor). Los valores CSS se preservan tal cual. Puedes introducir propiedades individuales o una regla CSS completa con selectores.

El movimiento CSS-in-JS, brevemente

¿Por qué existe este problema de conversión? Porque en 2014 una generación de desarrolladores frontend decidió que CSS en hojas de estilo separadas había fallado a escala. El momento fundacional fue la charla de Christopher «Vjeux» Chedeau «CSS in JS» en NationJS el 15 de noviembre de 2014: un ingeniero de Facebook argumentando que la cascada global de CSS, la falta de seguimiento de dependencias y la acumulación de código muerto lo convertían en la peor parte de las grandes web apps. La charla encendió un movimiento. JSS (Oleg Slobodskoi) salió a finales de 2014 como la primera biblioteca CSS-in-JS de propósito general. CSS Modules llegó en 2015 como un enfoque al scoping en tiempo de build. styled-components (Glen Maddern + Max Stoiber) salió en octubre de 2016, popularizando la API de tagged-template-literal donde escribes CSS dentro de backticks adjuntos a una definición de componente. Emotion (Kye Hohenberger) salió el 10 de julio de 2017 con tanto la API estilo styled-components como un prop css más flexible que tomaba objetos JavaScript directamente, exactamente el formato que esta herramienta produce. Stitches (Modulz/Pedro Duarte) salió en 2020 con una API basada en variantes pero quedó sin mantener a mediados de 2023 y fue archivado formalmente en abril de 2026.

El péndulo ha vuelto a oscilar. El artículo de Sam Magura «Why We're Breaking Up with CSS-in-JS» el 16 de octubre de 2022 (escrito por un mantenedor de Emotion) fue el punto de inflexión. El argumento técnico: CSS-in-JS en runtime ralentiza mensurablemente los renders de React (el propio benchmark de Magura sobre el Spot Member Browser bajó la mediana del tiempo de render de 54,3 ms a 27,7 ms tras migrar fuera de Emotion, aproximadamente 2× más rápido); los tamaños de bundle son más grandes; los costes de serialización se acumulan. El argumento arquitectónico: React Server Components (estabilizados por Next.js 13.4 el 4 de mayo de 2023) no pueden usar React Context, del que la mayoría de bibliotecas CSS-in-JS dependen para theming. La oleada de reemplazo: Tailwind CSS (Adam Wathan, con el lanzamiento v4 el 22 de enero de 2025); Vanilla Extract (Mark Dalgleish en Seek, 26 de marzo de 2021) para CSS-in-TypeScript en build-time; CSS Modules para nombres de clase scoped sin coste de runtime; y la cohorte compile-a-estático superviviente nombrada en el propio post de Magura: vanilla-extract, Linaria, Compiled, StyleX y Pigment CSS. JSS mismo fue deprecated el 14 de mayo de 2024; styled-components pasó a modo mantenimiento el 17 de marzo de 2025. CSS-in-JS en runtime ya no es el por defecto para nuevos proyectos React en 2026, pero una codebase gigantesca de styled-components y Emotion existentes persiste, y convertir CSS a la forma objeto de esas bibliotecas sigue siendo la realidad diaria para muchos equipos.

Las superficies de API de las bibliotecas principales

El inline style de React (el prop style) es la baseline universal, cada componente React acepta un objeto style cuyas claves son propiedades CSS en camelCase. Sin soporte para pseudo-clases (:hover), media queries o !important; esto es «inline style» en el sentido del antiguo atributo HTML style="...", solo que con un objeto JavaScript en lugar de una cadena. La salida de esta herramienta cae directamente en style={...}. styled-components toma tagged template literals que contienen cadenas CSS reales: const Button = styled.div`background: red; padding: 10px;`. El CSS es CSS real, kebab-case y todo, generalmente no necesitas este convertidor para styled-components a menos que estés migrando de inline styles a un componente styled. Emotion soporta ambas APIs: la API styled (template literals como styled-components) y el prop css con un objeto JavaScript (camelCase, exactamente el formato que esta herramienta produce). Para el prop css de Emotion, la salida de este convertidor es directamente usable. JSS usa un formato objeto similar con algunas características adicionales (theming, nombres de clase generados automáticamente) pero la sintaxis de propiedad camelCase básica es la misma. El binding de style de Vue (:style="...") acepta la misma sintaxis de objeto camelCase que el inline style de React. Vanilla Extract usa una forma objeto tipada más estricta con funciones wrapper style({ ... }) explícitas; el objeto camelCase interno tiene la misma forma.

Casos límite y trampas

Casos de uso comunes

Alcance honesto: lo que esta herramienta hace y no hace

Esta herramienta convierte declaraciones CSS a sintaxis de objeto JavaScript con claves camelCase y valores cadena correctamente entrecomillados. Maneja las reglas de mayúsculas de prefijos de proveedor (incluida la excepción minúscula ms). No traduce a la API de una biblioteca específica más allá de producir el objeto camelCase, aún tienes que saber si tu codebase quiere el objeto dentro de styled.div`...`, dentro de una llamada css de Emotion, dentro de un prop style de React, o dentro de un binding :style de Vue. La elección depende de tu biblioteca, no del convertidor. La herramienta tampoco maneja reglas anidadas y pseudo-selectores automáticamente, la sintaxis de objeto anidado de Emotion ('&:hover': {...}) y la anidación de template-literal de styled-components funcionan diferente y necesitan estructuración manual. Para una migración completa de un archivo CSS a una biblioteca CSS-in-JS, espera hacer alguna reestructuración más allá de la conversión propiedad-por-propiedad que esta herramienta proporciona.

Privacidad: por qué el solo-navegador importa aquí

El CSS rara vez contiene secretos, pero las hojas de estilo propietarias revelan información sobre la taxonomía interna de clases de un sitio, sus tokens de design system, y a veces su hipótesis de prueba A/B a través de selectores específicos del experimento. Las herramientas de conversión del lado del servidor requieren subir el CSS, que se queda en sus logs. Para estilos de producto internos, archivos source-of-truth de design system, o branding en progreso, la conversión solo-navegador lo mantiene local. Esta herramienta ejecuta toda la transformación en tu navegador, verifica en la pestaña Network de DevTools mientras haces clic en Convertir, o pon la página offline (modo avión) y el convertidor sigue funcionando.

Preguntas frecuentes

¿Cómo se convierten las propiedades CSS a camelCase?

Cada guion en una propiedad CSS kebab-case se elimina y la siguiente letra se pone en mayúscula: background-colorbackgroundColor, border-radiusborderRadius, margin-topmarginTop. Las propiedades con prefijo de proveedor siguen la misma regla con mayúsculas: -webkit-transformWebkitTransform (W mayúscula), -moz-appearanceMozAppearance. La famosa excepción es el prefijo Microsoft: -ms-flexmsFlex con m minúscula, porque así es como React DOM lo define.

¿Funciona esto para media queries y pseudo-clases?

Los objetos style JavaScript planos (el prop style de React, :style de Vue) no soportan media queries o pseudo-clases, esos son conceptos de hoja de estilo. Las bibliotecas CSS-in-JS que aceptan sintaxis objeto (prop css de Emotion, JSS) las soportan a través de objetos anidados: '&:hover': { background: 'red' }, '@media (min-width: 768px)': { padding: '20px' }. La documentación de la biblioteca de destino mostrará la estructura de anidación exacta. Esta herramienta produce el objeto plano; lo envuelves en la sintaxis de anidación de la biblioteca manualmente.

¿Por qué !important no funciona en los inline styles de React?

El prop style de React ignora silenciosamente las anotaciones !important: no son parte de la gramática de literal objeto JS y el renderer de React no las traduce. Si necesitas sobrescribir una regla de mayor especificidad, usa una hoja de estilo real (CSS Modules, Tailwind, styled-components, CSS plano). El mecanismo de inline-style de React es para estilos puntuales o dinámicos donde la especificidad no es una preocupación; !important pertenece a una hoja de estilo.

¿Debería seguir usando CSS-in-JS en 2026?

Para nuevos proyectos React, el por defecto actual es «no, usa Tailwind, CSS Modules, o Vanilla Extract.» El artículo de Sam Magura de octubre de 2022 desde dentro del equipo Emotion (combinado con la incompatibilidad de Context de React Server Components) empujó al ecosistema hacia soluciones build-time-only. styled-components pasó a modo mantenimiento el 17 de marzo de 2025; JSS fue deprecated el 14 de mayo de 2024. Para codebases existentes con inversión significativa en styled-components o Emotion, sin prisa por migrar, ambas bibliotecas siguen funcionando, y el coste de runtime es el tipo de cosa que optimizas cuando aparece en el profiling. Para un proyecto completamente nuevo en 2026: Tailwind v4 (lanzado el 22 de enero de 2025) es la elección más popular; Vanilla Extract para proyectos que quieren typing TypeScript estricto en estilos; CSS Modules para proyectos que quieren abstracción mínima.

¿Puedo convertir tokens de design-system de esta forma?

Para un snippet puntual, sí. Para un design system entero (típicamente docenas o cientos de tokens organizados por color, espaciado, tipografía, movimiento) usa una herramienta dedicada como Style Dictionary o Theo, ambas toman una única fuente de verdad (JSON, YAML, o JS) y producen a múltiples destinos (propiedades personalizadas CSS, constantes JS, iOS Asset Catalogs, Android XML, etc.). La ventaja de una herramienta de design-token real es la consistencia entre plataformas; este convertidor es para el caso donde tienes un snippet CSS en mano y quieres la forma JS ahora mismo.

¿Mi CSS se envía a algún sitio?

No. La conversión se ejecuta enteramente en tu navegador vía JavaScript. El CSS que pegas nunca cruza la red, verifica en la pestaña Network de DevTools mientras haces clic en Convertir, o pon la página offline tras cargar y confirma que la herramienta sigue funcionando. Seguro para hojas de estilo propietarias, archivos source-of-truth de design system, o cualquier CSS que revele taxonomías internas de clases que no querrías ver copiadas en el disco duro de un desconocido.

Herramientas relacionadas