Como entender el redondeo de píxeles en los navegadores

24/11/2023

foto del autor de la noticia

José Antonio Rodríguez Navarro

¿Tú sabes que es el redondeo de píxeles en los navegadores? Pues resulta que cuando una imagen, un contenedor o cualquier otro elemento de tu web, por ejemplo, tiene en su medida un número decimal por algún motivo los navegadores lo gestionan de manera distinta. Sí, es una paranoia y a mí también me ha costado pillarlo un poco. Voy a intentar explicártelo.

El tema del redondeo de píxeles en los navegadores es una cuestión compleja y relevante para los desarrolladores web. Este artículo combina información de dos fuentes para proporcionar una visión más completa del problema y su impacto en el desarrollo web.

¿Qué es el Redondeo de Píxeles en Navegadores?

El redondeo de píxeles se refiere a cómo los navegadores manejan los valores de ancho (y otros valores de tamaño) que contienen decimales. Diferentes navegadores tratan estos valores de manera distinta, lo que puede afectar significativamente el diseño y la disposición de las páginas web. Por ejemplo, mientras algunos navegadores redondean los píxeles fraccionarios al entero más cercano, otros los redondean hacia abajo, y los navegadores más modernos utilizan el renderizado de subpíxeles para representar visualmente fracciones de un píxel​​.

Diferentes Tratamientos en Navegadores

La investigación ha revelado que hay dos acciones principales tomadas por los navegadores:

  1. Truncamiento o Redondeo de Porcentajes: Navegadores como Internet Explorer 7-11 truncarán cualquier porcentaje a dos decimales, mientras que navegadores más modernos redondearán a un mayor número de decimales​​.
  2. Redondeo de Valores de Píxeles Resultantes: Después de calcular el valor en píxeles a partir de un porcentaje, los navegadores decidirán cómo redondear este valor. Este paso varía significativamente entre los diferentes navegadores y versiones​​.

Aquí, a continuación te comparto una imagen que encontré en el sitio web de Tyler Tate que intenta mostrar un poco de forma visual como tratan los diferentes navegadores ciertas medidas.

Gráfica sobre como gestionan ciertos navegadores diferentes medidas

En esa imagen se muestra la salida de una página de ejemplo en los principales navegadores. En este caso se está probando 4 columnas, cada 25% de ancho, dentro de tres contenedores de diferentes tamaños: 49px, 50px y 51px. El número que se muestra debajo de cada contenedor es el ancho teórico de píxeles de una de las columnas (por ejemplo. 50px * .25 = 12.5).

A la vista está que los navegadores usan diferentes estrategias de redondeo. Lo único bueno de todo esto es que el ejemplo ya se ha quedado un poco atrás en el pasado pues el uso de Internet Explorer como tal ha quedado un poco en el pasado, pero igualmente me servía bien para el ejemplo y así os hacíais un poco de la idea.

Impacto en el Diseño Web

El tratamiento de los píxeles fraccionarios y los porcentajes puede tener un impacto considerable en el diseño web. Los desarrolladores a menudo tienen que tener en cuenta estas diferencias al crear diseños responsivos y al asegurarse de que sus sitios web se vean consistentemente en diferentes navegadores.

Especificación HTML5 y Redondeo

Es importante destacar que la especificación HTML5 no menciona la «truncación» o el redondeo de decimales. En cambio, sugiere continuar el proceso hasta que «la posición esté más allá del final de la entrada, luego devolver el valor como una longitud»​​. Esto significa que no hay una guía estandarizada en la especificación HTML5 sobre cómo manejar los decimales en los valores de longitud.

Tabla Comparativa de Redondeo de Píxeles en Navegadores

A continuación, se presenta una tabla que muestra cómo diferentes navegadores tratan los valores de porcentaje y píxeles con decimales:

NavegadorPorcentajesRedondeo de píxeles desde porcentajeRedondeo de píxeles
Internet Explorer 7Truncar a 2 decimalesEntero más cercanoHacia abajo
Internet Explorer 8Truncar a 2 decimalesEntero más cercanoEntero más cercano
Internet Explorer 9Truncar a 2 decimalesEntero más cercanoEntero más cercano
Internet Explorer 10Truncar a 2 decimalesRenderizado de sub-píxelesRenderizado de sub-píxeles
Internet Explorer 11Truncar a 2 decimalesRenderizado de sub-píxelesRenderizado de sub-píxeles
Firefox 3.0Truncar a 3 decimalesEntero más cercanoEntero más cercano
Firefox 3.5Truncar a 3 decimalesRenderizado de sub-píxelesRenderizado de sub-píxeles
Firefox 31Truncar a 3 decimalesRenderizado de sub-píxelesRenderizado de sub-píxeles
Chrome 20Redondear a 15 decimalesHacia abajoHacia abajo
Chrome 21Redondear a 15 decimalesRenderizado de sub-píxelesRenderizado de sub-píxeles
Chrome 37Redondear a 13 decimalesRenderizado de sub-píxelesRenderizado de sub-píxeles
Safari 6 (OSX Lion)Redondear a 15 decimalesHacia abajoHacia abajo
Safari 6.1 (OSX Mountain Lion)Redondear a 15 decimalesRenderizado de sub-píxelesRenderizado de sub-píxeles
Safari 7 (OSX Mavericks)Redondear a 15 decimalesRenderizado de sub-píxelesRenderizado de sub-píxeles
Mobile Safari 7 (iOS7)Redondear a 15 decimalesHacia abajoHacia abajo
Mobile Safari 8 (iOS8)Redondear a 15 decimalesRenderizado de sub-píxelesRenderizado de sub-píxeles
Chrome 36 (Jelly Bean) [Nexus5]Redondear a 15 decimalesRenderizado de sub-píxelesRenderizado de sub-píxeles
Chrome 30 (KitKat) [S5]Redondear a 15 decimalesRenderizado de sub-píxelesRenderizado de sub-píxeles
Android Browser 4 (Jelly Bean) [Nexus7,Nexus4,S4,S3]Redondear a 15 decimalesHacia abajoHacia abajo
Android Browser 4 (Ice Cream Sandwich) [Nexus,KindleFire2]Redondear a 15 decimalesHacia abajoHacia abajo
Android Browser 4 (Gingerbread) [S2]Truncar a 3 decimalesHacia abajoHacia abajo
Opera 12Truncar a 2 decimalesHacia abajoHacia abajo
Opera Next 24Redondear a 13 decimalesRenderizado de sub-píxelesRenderizado de sub-píxeles
Fuente de información de la tabla comparativa: Cruft

Conclusión

El redondeo de píxeles en los navegadores es un tema complejo que afecta directamente al desarrollo web. La falta de estandarización y las diferentes aproximaciones adoptadas por los navegadores requieren que los desarrolladores sean conscientes de estas diferencias y diseñen con flexibilidad para asegurar una experiencia de usuario coherente en diversos navegadores.