Prácticas recomendadas

Prácticas recomendadas para JS

La API de Maps JavaScript solo funciona con un entorno estándar de ECMAScript y W3C DOM. Esto significa que, si se modifica o anula el comportamiento de las clases y los objetos integrados que proporciona el navegador, la API de Maps JavaScript podría no funcionar. A veces, otras bibliotecas pueden entrar en conflicto con la API de Maps JavaScript si cambian el comportamiento del navegador para que ya no sea un entorno estándar de ECMAScript. La API de Maps JavaScript no es compatible con esas bibliotecas.

Bibliotecas que se sabe que son incompatibles con la API de Maps JavaScript:

  • Prototype: Anula Array.from() de forma no estándar.
  • MooTools (versiones anteriores): Anula Array.from() de forma no estándar.
  • DateJS (versiones anteriores): Anula Date.now() de forma no estándar.

A veces, es posible modificar las bibliotecas incompatibles para quitar las anulaciones no estándares.

Prácticas recomendadas para CSS

Cuando agregas o personalizas un mapa con la API de Maps JavaScript, es posible que algunos de los diseños que apliques en tu página web anulen los diseños del mapa y generen conflictos de CSS. Si usas un framework de CSS o un componente de JavaScript para definir los diseños, esto podría generar conflictos de CSS adicionales con los diseños del mapa.

Los frameworks de CSS y los componentes de diseño de JavaScript suelen usar un restablecimiento de CSS o un normalizador para controlar las diferencias de renderización entre los navegadores. Los frameworks suelen usar el elemento box-sizing para escalar los márgenes y los bordes de los elementos de las páginas web. Por lo general, esto implica cambiar el comportamiento predeterminado del navegador de content-box a border-box.

Este tipo de restablecimiento de CSS puede causar conflictos de CSS con la API de Maps JavaScript porque la API no admite cambios en la hoja de estilo del usuario-agente. Pueden ocurrir conflictos de CSS adicionales si el framework o el componente hacen referencia a clases de CSS o elementos del DOM de la API de Maps JavaScript.

Para evitar estos conflictos, tenemos varias recomendaciones que se deben considerar.

Especificidad

El código CSS incorporado y vinculado se aplica a tu mapa antes que los diseños de los mapas de Google Maps. Si todos los diseños de tu página están definidos en CSS incorporados o vinculados, sigue las reglas de especificidad para asegurarte de que se apliquen los diseños correctos en tu mapa.

Los elementos comunes de CSS, como img, button y a, se pueden reemplazar por los diseños de tu página. Una de las situaciones más comunes es cuando el atributo max-width del elemento img se establece en 100%. Esto puede generar que los componentes del mapa se distorsionen o queden ocultos, en especial, si usas InfoWindow.

Para solucionar este problema, puedes actualizar el elemento img de tu mapa a fin de que el atributo max-width se establezca en none. Por ejemplo:

#map img
{
    max-width : none;
}

Nombres de clases

No hagas referencia a nombres de clases ni elementos del DOM internos de la API de Maps JavaScript. Esto no se admite y puede causar cambios rotundos en tu sitio web sin previo aviso. En cambio, te recomendamos que crees tus propias clases de CSS como contenedores para tu mapa.

Si un framework de CSS o un componente de JavaScript usan este tipo de referencias, nuestra recomendación de anulación de tamaño del cuadro puede servir como solución.

Anulación del tamaño del cuadro de CSS

Las anulaciones de tamaño de cuadros de CSS brindan una posible solución para los conflictos de diseños de mapas. Esto puede ser especialmente útil si usas un framework de CSS o un componente de diseño de JavaScript. Por ejemplo, si box-sizing se estableció como border-box, prueba lo siguiente:

  • Crea una anulación de box-sizing que establezca el elemento <html> en border-box.
  • Usa box-sizing: inherit para todos los elementos que no sean tu mapa.
  • Crea un contenedor de mapa personalizado que restablezca el elemento box-sizing a initial.

Ejemplo de CSS:

html {
  box-sizing: border-box;
}

*,
*::before,
*::after {
  box-sizing: inherit;
}

.container-map {
  box-sizing: initial;
}