¿Cómo convierto px a rem?+
Divide el valor en píxeles entre el tamaño de fuente raíz: rem = px ÷ raíz. Con la raíz predeterminada del navegador, de 16px, 24px ÷ 16 = 1.5rem, 14px ÷ 16 = 0.875rem y 12px ÷ 16 = 0.75rem. Si tu hoja de estilos define otra raíz, divide entre ella: con una raíz de 10px, 24px son 2.4rem. La raíz es el tamaño de fuente del elemento html, no el de body ni el del elemento al que estás dando estilo.
¿Cuántos px es 1rem?+
1rem equivale al tamaño de fuente raíz, que es 16px de serie en todos los navegadores principales. Aun así, no es un número fijo. Si una hoja de estilos define html { font-size: 62.5% }, 1rem pasa a ser 10px, y si un visitante sube a 20px el tamaño de fuente predeterminado en los ajustes de su navegador, 1rem pasa a ser 20px para él en todos los sitios que no tocan la raíz. Esa variabilidad es precisamente la razón de ser de la unidad.
¿Cómo convierto rem a px?+
Multiplica por el tamaño de fuente raíz: px = rem × raíz. Con la raíz predeterminada de 16px, 1.5rem × 16 = 24px, 0.875rem × 16 = 14px y 2.25rem × 16 = 36px. Cuando compares una implementación con un archivo de diseño, recuerda que el resultado es el tamaño para un visitante con la configuración predeterminada; quien haya elegido un tamaño predeterminado mayor ve todos los valores rem ampliados en proporción.
¿Qué diferencia hay entre rem y em?+
rem siempre se mide respecto al tamaño de fuente raíz (html), así que 1.5rem significa lo mismo en cualquier parte de la página. em se mide respecto a un tamaño de fuente local: para la propiedad font-size es el tamaño de fuente del padre, y para padding, margin, width y otras longitudes es el tamaño de fuente calculado del propio elemento. Por eso em se acumula al anidarse. Una lista a 0.875em dentro de otra lista a 0.875em queda en 0.875 × 0.875 = 0.766 del tamaño exterior, 12.25px partiendo de 16px. rem nunca se acumula, y por eso es la opción habitual para los tamaños de fuente, mientras que em sigue siendo útil para espaciados que deben escalar con el texto que rodean, como el padding de un botón.
¿Por qué usar rem en lugar de px para los tamaños de fuente?+
Porque rem respeta el tamaño de fuente predeterminado del visitante. La mayoría de los navegadores de escritorio permiten subir ese valor, y muchas personas con baja visión lo hacen; el ajuste cambia la raíz, así que todo lo dimensionado en rem o em crece con él. Un tamaño de fuente escrito en px ignora el ajuste por completo. El zoom de la página amplía px y rem por igual, así que el zoom no marca la diferencia; la marca la preferencia de tamaño de fuente, que es el ajuste que la gente elige cuando quiere un texto más grande sin que todo lo demás crezca también.
¿Qué hace html { font-size: 62.5% } y es buena idea?+
El 62.5% de los 16px predeterminados es 10px, así que hace que 1rem sea 10px y convierte la aritmética en un simple desplazamiento del punto decimal: 24px son 2.4rem y 14px son 1.4rem. Como es un porcentaje, sigue respetando un tamaño predeterminado mayor del visitante (un valor predeterminado de 20px da una raíz de 12.5px). Los inconvenientes: el texto cae a 10px allí donde olvides definir un tamaño, así que necesitas body { font-size: 1.6rem }; los componentes de terceros que dan por hecha una raíz de 16px se muestran al 62.5% de su tamaño previsto; la escala de espaciado de Tailwind se reduce con ella, de modo que p-4 pasa a ser 10px; y las media queries la ignoran por completo. Nunca definas la raíz en px en su lugar (html { font-size: 10px }), porque eso anula el ajuste del visitante.
¿Los bordes deberían ir en rem?+
Normalmente no. Un borde de 1px es una línea fina que debe seguir siéndolo. Escrito como 0.0625rem, crece con la raíz hasta anchos fraccionarios, como 1.25px con una raíz de 20px, y los navegadores suelen ajustar el ancho de los bordes a píxeles enteros del dispositivo, así que las líneas pueden salir desiguales de un elemento a otro. Los bordes decorativos gruesos y los contornos que deben escalar con el texto están bien en rem o em. Por eso el conversor por lotes puede mantener los valores de 1px en píxeles mientras convierte todo lo demás.
¿rem funciona en las media queries?+
Funciona, pero no significa lo mismo que en otros sitios. Dentro de una media query, rem y em se miden respecto al tamaño de fuente inicial del navegador, que es el predeterminado del visitante (16px salvo que lo haya cambiado), y nunca respecto al tamaño de fuente que defines en html. Así, con html { font-size: 62.5% }, @media (min-width: 48rem) sigue activándose a 768px con la configuración predeterminada, no a 480px. Los puntos de corte escritos en rem o em se desplazan a viewports más anchos cuando un visitante sube su tamaño de fuente predeterminado, de modo que el texto grande recibe el diseño estrecho, más holgado, en lugar de quedar apretado en columnas. Esta página deja las media queries sin tocar por defecto, y cuando decides convertirlas divide entre 16, sea cual sea la raíz que hayas definido.
¿Por qué el valor rem tiene tantos decimales?+
Porque la mayoría de los tamaños en píxeles no son fracciones redondas de la raíz. 15px son 0.9375rem y 13px son 0.8125rem con una raíz de 16px, ambos exactos; 10px con una raíz de 18px son 0.5555 periódico. Cuatro decimales mantienen cualquier valor con raíz de 16px a menos de 0.0008px del original, muy por debajo de lo que una pantalla puede mostrar, mientras que dos decimales pueden desviarse hasta 0.08px. Los ceros finales se recortan, así que 1.5000 se escribe 1.5.
¿Puedo convertir un archivo CSS entero de forma segura?+
En gran medida, siempre que revises el resultado. El conversor por lotes es una transformación de texto cuidadosa, no un analizador de CSS completo: omite comentarios, cadenas entre comillas, valores url(), nombres de clase escapados y condiciones de media queries, y convierte cualquier otro valor px que encuentre. No puede ver dónde se usa un valor, así que un punto de corte guardado en una variable de Sass o pasado a un mixin se convierte donde está escrito, igual que un desplazamiento de background-position dentro de un sprite dimensionado en píxeles. La lista de cambios muestra cada edición por línea, así que revisa esos casos antes de publicar.