Pegue el CSS para ordenarlo y vea qué ahorra exactamente al minificar
El formateador y minificador CSS transforma una misma hoja de estilos en dos direcciones. Formatear (también llamado embellecer o «beautify») toma una línea comprimida como .card{margin:0;padding:16px}, coloca una declaración por línea y ajusta la sangría para que una persona pueda leerla. Minificar hace lo contrario: elimina comentarios, espacios y saltos de línea que el navegador no necesita, de modo que el archivo que se publica pese menos. Ambos resultados deben aplicar exactamente los mismos estilos que el original, y la herramienta está construida para cumplir esa condición.
Quitar los espacios con una expresión regular es la forma más rápida de romper una hoja de estilos, porque también borra los espacios alrededor del signo menos en calc(100% - 2rem) y deja el valor inválido. Esta herramienta lee el código como lo describe la especificación de CSS, es decir, por comentarios, cadenas, paréntesis y declaraciones, y solo después lo vuelve a escribir. Así distingue un espacio que se puede borrar de otro que cambia el significado. Bajo el resultado, el mapa de tamaño dibuja el original y la salida como dos barras con la misma escala, y permite ver cuánto ocupan las reglas, los bloques @media y los comentarios, y cuánto se redujo cada parte. El panel «Hallazgos» señala los errores por número de línea, por ejemplo una sola } sobrante que hace que el navegador descarte la regla siguiente.
Cuándo conviene formatear o minificar
La forma que conviene a una hoja de estilos mientras se edita no es la que conviene al navegador que la descarga. Para editar hace falta código desplegado, y para publicar, código corto. Estas son situaciones en las que la herramienta resulta útil.
- Leer el .min.css de una biblioteca: si solo se dispone del archivo minificado y se quiere saber dónde se define el color de un botón, primero hay que desplegarlo. Se pega en modo Formatear y se busca en el cuadro de resultado.
- Ordenar estilos copiados de las herramientas de desarrollo o de otro sitio: el CSS copiado suele tener sangrías mezcladas o venir en una sola línea. Con una pasada se ve enseguida el límite entre selectores y declaraciones.
- Pegar en el campo de CSS personalizado de un gestor de contenidos o de una tienda online: si el campo es pequeño o tiene límite de caracteres, la versión minificada cabe mejor. Conviene guardar el original aparte y pegar solo la copia minificada.
- Buscar por qué un estilo no se aplica en una parte de la página: la causa suele ser una
}sobrante o un paréntesis sin cerrar en la regla anterior. «Hallazgos» indica la línea y el selector que se descarta. - Comprobar cuánto ahorra realmente minificar: el porcentaje que se reduce en bytes no coincide con el que se reduce en la red cuando el servidor envía el archivo con gzip. La barra gzip del mapa de tamaño muestra ambos valores.
Cómo se usa
- Pegue el CSS en el cuadro de entrada de la izquierda (encima, en pantallas estrechas). También puede pulsar «Abrir archivo» o arrastrar un archivo .css al cuadro. Se admiten archivos de hasta 5 MB.
- Elija Formatear o Minificar en la parte superior. El resultado se actualiza mientras escribe.
- En Formatear se puede elegir la sangría (2 espacios, 4 espacios o tabulación), si se conservan los comentarios y si los selectores se separan en una línea por cada coma. En Minificar se elige el tratamiento de los comentarios (solo /*!, quitar todos, conservar todos) y si se abrevian los colores hexadecimales.
- En el mapa de tamaño, al pulsar un tramo de la barra se resalta esa parte en el cuadro de resultado. Al pulsar el botón con el número de línea en «Hallazgos», esa línea queda seleccionada en la entrada.
- «Copiar resultado» lo envía al portapapeles y «Guardar archivo» lo descarga. El resultado minificado se guarda con la terminación .min.css.
Qué cambia al formatear
Formatear no altera el orden de nada: solo vuelve a colocar saltos de línea y espacios. Cada declaración va en su propia línea, con un espacio tras los dos puntos y un punto y coma al final, y las reglas anidadas se sangran un nivel más. Entre bloques queda una línea en blanco, y un comentario que estaba al final de una declaración sigue al final de esa declaración.
| Entrada | Resultado formateado | Regla |
|---|---|---|
.a{color:red;margin:0} | .a { / color: red; / margin: 0; / } | Una declaración por línea y un espacio tras los dos puntos |
h1,h2>a{…} | h1, / h2 > a { | Salto de línea en cada coma de primer nivel; espacios alrededor de > + ~ |
rgba(0,0,0,.5) | rgba(0, 0, 0, .5) | Un espacio tras las comas dentro de los valores |
@media (min-width:600px) | @media (min-width: 600px) | Un espacio tras los dos puntos dentro de la condición |
color:red!important | color: red !important; | Un espacio antes de !important |
.menu{&:hover{…}} | .menu { / &:hover { | Las reglas anidadas se sangran un nivel más |
--list: a,b | --list: a,b; | En las propiedades personalizadas (--) solo se reducen los espacios a uno |
Como muestra la última fila, en una propiedad personalizada que empieza por -- no se añade espacio tras las comas. El valor de una propiedad personalizada se conserva tal como se escribió y el método getPropertyValue() de JavaScript devuelve ese mismo texto, así que un espacio añadido por estética podría cambiar lo que lee un script. La separación de selectores en cada coma se puede desactivar; en ese caso queda h1, h2 > a { en una sola línea.
Qué elimina la minificación y qué conserva a propósito
Minificar acorta el texto solo mientras el resultado sea idéntico. Casi todos los espacios se pueden borrar, pero algunos forman parte de la gramática y, si se quitan, el código pasa a ser otro. Las seis últimas filas de la tabla son lugares donde otros minificadores suelen estropear el CSS, y esta herramienta los deja intactos.
| Elemento | Al minificar | Motivo |
|---|---|---|
| Comentarios | Se eliminan (los que empiezan por /*! se conservan por defecto) | /*! es la convención para mantener un aviso de licencia, y la limpieza de comentarios de cssnano también lo conserva por defecto |
| Saltos de línea, sangría y espacios alrededor de { } : ; , | Se eliminan | Son espacios que no hacen falta para separar los tokens |
| Punto y coma al final de un bloque | Se elimina | El ; tras la última declaración da igual que esté o no |
#FFFFFF, #AABBCCDD | #fff, #abcd | Un color hexadecimal con los dígitos repetidos de dos en dos es el mismo color en su forma de 3 o 4 dígitos (CSS Color 4 §5.2) |
Espacios alrededor de + y − en calc(100% - 2rem) | Se conservan | Los espacios a ambos lados de + y − son obligatorios (Values 4 §10.8). 100%-2rem no es válido |
El espacio en and ( y not ( | Se conserva | Sin él, and( se lee como una función (Media Queries 4 §3) |
El espacio en .card :hover | Se conserva | El espacio es el combinador de descendientes; si se borra queda .card:hover, otro selector distinto (Selectors 4 §14.1) |
La unidad de 0px y 0% | Se conserva | En flex: 1 0px, si se quita la unidad el 0 se lee como factor de reducción (Flexbox §7.1), y el selector de fotograma clave 0% solo admite porcentajes (Animations 1 §3) |
Reglas vacías y bloques @layer vacíos | Se conservan | El orden de las capas es el de su primera declaración (Cascade 5 §6.4.3), de modo que hasta un @layer base {} vacío fija el orden |
Valores de propiedades personalizadas, cadenas y contenido de url() | Solo se ordenan los espacios; el texto no cambia | El valor de una propiedad personalizada es el texto tal como se escribió, y el contenido de cadenas y URL son datos |
Por eso un valor como --brand: #C44A00 sigue con el hexadecimal en mayúsculas después de minificar, mientras que color: #FFFFFF, en una propiedad normal, pasa a #fff. La lista «Qué se cambió» indica por separado los comentarios eliminados y sus bytes, los puntos y coma quitados, los colores abreviados y los bytes que se ahorraron en espacios.
Cuánto se ahorra: proporción y tamaño de transferencia con gzip
Los bytes que se ahorran al minificar no son los que viajan por la red. La mayoría de los servidores comprimen el CSS otra vez con gzip o brotli, y ese tipo de compresión aprovecha muy bien los patrones repetidos, de modo que la sangría y los saltos de línea que se eliminan ya estaban en gran parte comprimidos. La tabla siguiente minifica con esta herramienta el ejemplo de esta página y el archivo publicado de Bootstrap 5.3.8, y mide el tamaño con gzip usando el compresor del propio navegador (Chromium).
| Archivo | Original | Minificado | gzip original → minificado |
|---|---|---|---|
| Ejemplo «Original con comentarios» (6 comentarios) | 718 B | 469 B (−34,7%) | 469 B → 352 B (−24,9%) |
| El mismo ejemplo, sin ningún comentario | 718 B | 414 B (−42,3%) | 469 B → 303 B (−35,4%) |
Bootstrap 5.3.8 bootstrap.css | 280.311 B | 232.759 B (−17,0%) | 33.326 B → 30.776 B (−7,7%) |
Como referencia: el bootstrap.min.css oficial | 280.311 B | 232.111 B (−17,2%) | 33.326 B → 30.823 B (−7,5%) |
En un archivo grande como Bootstrap, minificar reduce un 17% los bytes, pero el tamaño con gzip baja solo un 8% aproximadamente, porque gzip ya había eliminado casi todo el espacio en blanco. En un archivo muy pequeño ocurre lo contrario: gzip añade 18 bytes fijos de cabecera y cola (RFC 1952), así que apenas tiene margen de mejora. Aun así, minificar reduce el número de caracteres que el navegador debe leer e interpretar y, donde no se usa gzip, el ahorro es el de la transferencia. El archivo minificado oficial de Bootstrap va más lejos, porque reordena selectores y reescribe valores como rgba(0,0,0,0) a transparent; por eso pesa 648 B menos, pero tras gzip el resultado de esta herramienta fue 47 B menor. Cuando el navegador interpretó la salida de esta herramienta, las 2.660 entradas, incluidas las reglas dentro de @media, resultaron idénticas a las del original. La única diferencia fue el espacio junto a las comas en los valores con var().
Las cifras de gzip se midieron con la configuración por defecto del navegador, así que pueden variar algo según el nivel de compresión de su servidor o si usa brotli. En el mapa de tamaño, 1 KB equivale a 1.024 B.
Errores que hacen desaparecer una regla
El CSS no se detiene ante un error: descarta la parte defectuosa y sigue leyendo. Eso evita que la página se desmorone, pero tampoco avisa de lo que se ha descartado, y por eso cuesta encontrar la causa. Los seis casos siguientes se basan en cómo leen realmente el CSS los navegadores (CSS Syntax 3); la herramienta lo lee igual y muestra cada caso en «Hallazgos» con su número de línea.
| Error | Cómo lo lee el navegador | En esta herramienta |
|---|---|---|
Una } sobrante fuera de una regla (.nav{…}}) | Se pega delante del selector siguiente y se obtiene el selector inválido } .logo; esa regla entera se descarta (§5.5.3) | Indica el selector que se descarta y también muestra } .logo { en la salida |
Un ( sin cerrar (calc(100% - 20px;) | Hasta que aparezca el ) correspondiente, todo, incluidos ; y }, queda dentro del valor, y se pierden todas las reglas posteriores | Indica la línea del paréntesis de apertura |
Una { sin cerrar | Se da por cerrada al final del archivo. Si después se añade otro archivo a continuación, todo su contenido queda dentro de esa regla | Añade un } a la salida e indica la línea donde se abrió |
| Unas comillas sin cerrar antes del final de la línea | Se lee como una cadena inválida y se descarta esa declaración | Indica la línea donde se abrieron las comillas |
Un comentario /* sin cerrar | Todo hasta el final del archivo pasa a ser comentario | Indica la línea donde empieza el comentario |
Una declaración sin dos puntos (font-size 20px) | Solo se descarta esa declaración y se sigue leyendo después del siguiente ; (§5.5.6) | Se muestra como advertencia |
También se muestran algunos casos que no son errores, pero conviene revisar. Si una misma propiedad aparece dos veces en una regla, solo se aplica el último valor. Como display: -webkit-box; display: flex; puede ser un respaldo deliberado para navegadores antiguos, solo se muestra como nota. Una regla vacía, sin declaraciones, también se señala como nota, pero al minificar no se elimina.
El CSS anidado y la sintaxis nueva se leen tal cual
El anidamiento de CSS permite escribir &:hover { … } o @media directamente dentro de una regla, y hoy todos los navegadores principales lo admiten. La herramienta distingue reglas anidadas y declaraciones como lo hace la especificación: dentro de un bloque, si aparece una { antes que un ; o una }, se trata de una regla, y si no, de una declaración. Al formatear, cada nivel se sangra una vez. Al minificar, se conserva el ; entre una declaración y la regla anidada que la sigue.
| Función | Chrome | Firefox | Safari | En esta herramienta |
|---|---|---|---|---|
| Anidamiento CSS (&) | 120 | 117 | 17.2 | Sangría de un nivel cada vez; al minificar se conserva el ; entre una declaración y una regla |
@layer | 99 | 97 | 15.4 | Las formas de sentencia y de bloque conservan su orden, y los bloques vacíos se mantienen |
| Medición con gzip (CompressionStream) | 80 | 113 | 16.4 | En navegadores más antiguos se oculta la línea de gzip |
Las versiones son las primeras que admiten cada función, según los datos de compatibilidad de MDN consultados el 2026-10-22. Desde las versiones indicadas, el anidamiento incluye también las reglas que empiezan por el nombre de una etiqueta, como a { … }; Chrome 112 a 119 y Safari 16.5 a 17.1 no admitían esa forma. Otras at-rules como @container, @supports, @scope y @property se leen de la misma manera.
Errores frecuentes
- Editar el archivo minificado y volver a minificarlo: se puede formatear un archivo minificado y modificarlo, pero los comentarios que se eliminaron no vuelven. Conviene mantener aparte el archivo original que se edita y generar la copia minificada a partir de él en cada publicación.
- Ordenar las propiedades alfabéticamente: en
margin-top: 8px; margin: 0;gana el margin: 0 posterior y el margen superior es 0, pero al ordenar alfabéticamente margin pasa delante, gana margin-top: 8px y el margen superior pasa a 8px. Por eso la herramienta no incluye una opción de ordenar. - Borrar los comentarios de licencia /*!: mucho código, incluido el de licencia MIT, exige que el aviso de copyright permanezca en las copias. Al minificar el CSS de otra persona, conviene mantener el valor por defecto (solo /*!).
- Sustituir todos los 0px por 0: hay lugares donde la unidad es necesaria, como
flex: 1 0px, el0%de un fotograma clave ocalc(0px + 10%). No debe hacerse con una búsqueda y reemplazo general. - Dejar comentarios // de SCSS en el CSS: el CSS no tiene comentarios //. En la regla de la línea siguiente a
// botón, ese texto se pega al selector y la regla se descarta. Si en el resultado formateado aparece // delante de un selector, es lo que ha ocurrido. - Concatenar archivos cuando a uno le falta la última }: al unir varios archivos CSS, un bloque sin cerrar en el primero se traga todo el siguiente. Antes de unirlos, conviene pegar cada archivo y comprobar que «Hallazgos» queda vacío.
Límites y precauciones
- Solo lee CSS estándar. Las funciones propias de SCSS y Less, como las $variables, @mixin y @include, los comentarios // y las operaciones, no se interpretan como CSS; para esos archivos conviene usar el compilador de Sass o Less, o bien Prettier.
- No hace optimizaciones estructurales: fusionar selectores idénticos, eliminar declaraciones sobrescritas, reunir margin-top y similares en un único margin o depurar prefijos de fabricante. De ese trabajo se encargan herramientas de compilación como cssnano, Lightning CSS y esbuild.
- No genera mapas de origen. Un
/*# sourceMappingURL=… */final es un comentario normal y la configuración de minificado por defecto lo elimina; si lo necesita, cambie los comentarios a «conservar todos». - La comprobación de sintaxis llega hasta paréntesis, comillas, comentarios y dos puntos. No juzga un nombre de propiedad mal escrito como
colr: red, una unidad incorrecta en un valor ni si un navegador admite algo. - Se abren archivos de hasta 5 MB y, si el resultado supera los 300.000 caracteres, se omite el coloreado de sintaxis por rapidez y se muestra el texto sin colores.
- El tamaño con gzip se midió con la compresión por defecto del navegador y puede diferir de la configuración de su servidor.
Fecha de referencia Las especificaciones CSS del W3C (Syntax 3, Values 4, Media Queries 4, Color 4, Flexbox 1, Cascade 5, Nesting 1) y los datos de compatibilidad de navegadores de MDN se comprobaron en sus textos originales el 2026-10-22. La tabla de tamaños usa valores medidos ese mismo día con CompressionStream de Chromium, y las cifras de Bootstrap corresponden a los archivos de distribución de la versión 5.3.8.
Fuentes
- 01W3C: CSS Syntax Module Level 3CRD 2026-10-01. §4.3.2 comentarios, §4.3.5 cadenas, §5.5.3 una } sobrante en el nivel superior, §5.5.5 distinguir declaraciones y reglas dentro de un bloque, §5.5.6 declaraciones sin dos puntos
- 02W3C: CSS Values and Units Module Level 4WD 2024-03-12. §10.8 los espacios alrededor de + y − en calc() son obligatorios; * y / pueden ir sin espacios
- 03W3C: Media Queries Level 4CRD 2026-02-19. §3 si no hay espacio entre and, not u or y el (, el texto pasa a ser un token de función
- 04W3C: CSS Color Module Level 4CRD 2026-10-20. §5.2 notación hexadecimal de 3, 4, 6 y 8 dígitos
- 05W3C: CSS Flexible Box Layout Module Level 1CRD 2025-10-14. §7.1 el 0 sin unidad en la propiedad abreviada flex
- 06W3C: CSS Cascading and Inheritance Level 5CR 2022-01-13. §6.4.3 las capas se ordenan según su primera declaración
- 07W3C: CSS Nesting Module Level 1WD 2026-01-22. Reglas anidadas y el selector &
- 08MDN: datos de compatibilidad de navegadoresConsultado el 2026-10-22. Anidamiento Chrome 120, Firefox 117, Safari 17.2; @layer 99, 97, 15.4; CompressionStream gzip 80, 113, 16.4
- 09cssnano: discardCommentsLos comentarios especiales marcados con ! (/*! … */) se conservan por defecto
- 10IETF RFC 1952: GZIP file formatCabecera de 10 bytes más una cola de 8 bytes (CRC32 e ISIZE)
- 11Archivos de distribución de Bootstrap 5.35.3.8 dist/css/bootstrap.css y bootstrap.min.css (MIT), descargados y medidos el 2026-10-22
Preguntas frecuentes
¿Qué diferencia hay entre formatear y minificar CSS?
Formatear (embellecer, «beautify») despliega las declaraciones una por línea y ajusta la sangría para que una persona lea el código con comodidad. Minificar elimina los comentarios, espacios y saltos de línea innecesarios y deja intacto el significado que lee el navegador, con lo que el archivo pesa menos. Los dos resultados aplican los mismos estilos, así que lo más seguro es mantener formateado el original que se edita y minificar solo la copia que se publica.
¿Puede romperse el CSS al minificar?
Un minificador que borra mecánicamente todos los espacios sí puede romperlo. Si se quitan los espacios alrededor del signo menos de calc(100% - 2rem), el valor deja de ser válido, y si se quita el espacio de .card :hover, queda un selector distinto. Esta herramienta lee el CSS token a token, como la especificación, y deja tal cual esos espacios, la unidad de 0px y 0% y el contenido de cadenas y url(). Aun así, si el original ya está roto, el resultado se romperá del mismo modo, así que conviene corregir antes los errores de «Hallazgos».
¿Al minificar se eliminan todos los comentarios?
Por defecto solo se conservan los comentarios que empiezan por /*! y se eliminan los demás. /*! es la convención para los avisos de licencia y de derechos de autor, y minificadores como cssnano también los conservan por defecto. Se puede cambiar el ajuste para quitar todos los comentarios o conservarlos todos.
¿Por qué no se cambia 0px por 0?
En la mayoría de los casos sería inofensivo, pero en algunos sitios cambia el significado. En flex: 1 0px, escribir 0 hace que el segundo número se lea como factor de reducción; el 0% de @keyframes no es válido si se escribe 0; y calc(0px + 10%) deja de ser un cálculo válido cuando pasa a 0. El ahorro es de 2 o 3 bytes por sitio, y aún menor tras gzip, de modo que se optó por conservar la unidad.
¿Ordena las propiedades alfabéticamente?
No. Cuando dos declaraciones tienen la misma prioridad, gana la posterior. Una regla con margin-top: 8px seguido de margin: 0 tiene margen superior 0, pero al ordenarla alfabéticamente margin pasa delante, gana margin-top: 8px y el margen superior pasa a 8px. El orden se mantiene tal como se escribió, y «Hallazgos» solo avisa de las propiedades que aparecen dos veces.
¿Por qué es un problema una sola } sobrante?
El navegador no ignora una } que sobra fuera de una regla: la pega delante del selector de la regla siguiente y queda algo como «} .logo», que no es válido, de modo que esa regla se descarta por completo. Es un caso típico en el que solo una parte de la página se ve mal y cuesta encontrar la causa, por lo que la herramienta muestra tanto la línea como el selector que se descarta.
¿Puede formatear SCSS o Less?
Lee CSS estándar, así que se formatea la sintaxis que también existe en CSS, como el anidamiento (&) y las declaraciones dentro de @media. La sintaxis exclusiva de SCSS y Less, como los comentarios de línea //, las $variables, @mixin y @include y las operaciones, no se interpreta como CSS y el resultado puede salir mal. Para esos archivos conviene usar el compilador de Sass o Less, o bien Prettier.
¿Se guarda o se envía a algún sitio el CSS que introduzco?
No. El formateado, el minificado, el cálculo de tamaños y la medición con gzip se hacen dentro de este navegador, y no se envía ni se guarda nada en un servidor. Al cerrar la página, lo introducido desaparece, así que copie el resultado o guárdelo como archivo si lo necesita.