Los pop-ups están en todas partes de la Web. Puedes verlos en menús, sugerencias de activación y diálogos, que se usan para funciones como la configuración de la cuenta, los widgets de divulgación y las vistas previas de las tarjetas de productos. A pesar de lo comunes que son estos componentes, compilarlos en navegadores sigue siendo sorprendentemente engorroso. Para resolver este problema, los navegadores incorporarán un nuevo conjunto de APIs de HTML declarativas para compilar ventanas emergentes, la primera de las cuales es la API de Popover.
El cuadro emergente forma parte de Baseline Newly Available.
Por lo general, se confunde un popover con un diálogo. Sin embargo, existen algunas diferencias
clave en su comportamiento. Un elemento dialog
abierto con dialog.showModal
(un diálogo modal) es una experiencia que requiere una interacción explícita del usuario para cerrar el diálogo modal. Un popover
admite la eliminación ligera. Un dialog
modal no lo hace.
Un diálogo modal inhabilita el resto de la página. Un popover
no lo hace.
Obtén más información sobre las diferencias.
Este artículo forma parte de una serie en la que se analiza cómo las empresas de comercio electrónico mejoraron sus sitios web con nuevas funciones de CSS y IU. En este artículo, descubre cómo Tokopedia implementó la API de Popover y se benefició de ella.
Tokopedia
El uso de atributos de popover redujo hasta un 70% las líneas de código en React. El elemento modal se puede controlar de forma nativa con HTML en lugar de requerir el manejo de eventos en JavaScript y usar
React.createPortal
para mover el DOM modal al final dedocument.body
. También podemos usar@starting-style
para animar la apertura y el cierre del popover.—Andy Wihalim, Ingeniero sénior de software, Tokopedia.
Las páginas de detalles del producto (PDP) de Tokopedia contienen varias imágenes de cada producto. Cuando se hace clic en la miniatura del producto, se abre un cuadro modal para mostrar la imagen ampliada. Este es un patrón común que se usa en los sitios web de comercio electrónico.
Código
Tokopedia usa React para su desarrollo de frontend. Antes de implementar la API de popover para este modal, usaron un modal de DOM y un botón. El botón
cambia el estado de React para abrir el cuadro modal. Con la API de popover, especifican un atributo popovertarget
en el elemento que abre el popover con un valor que es el mismo que el ID del elemento popover.
Con esta implementación básica, el popover funciona, pero aparece y desaparece sin ninguna animación. Para crear una animación de entrada y salida fluida para el popover, usa :popover-open
y @starting-style
, y permite la animación de propiedades discretas.
En el siguiente ejemplo de código, el popover se acerca y se aleja con la propiedad transform: 'scale()'
.
En este ejemplo de código, se muestra cómo implementar animaciones de entrada y salida para la API de popover.
<Thumbnail popovertarget="medialightbox" />
<MediaLightbox popover id="medialightbox" />
export const cssModalWrapper = css({
background: NN0,
border: 'none',
borderRadius: '.625rem',
width: 1024,
padding: 24,
'&::backdrop': {
opacity: 0,
transitionProperty: 'opacity, display',
transition: '.25s ease-out',
transitionBehavior: 'allow-discrete',
},
transitionProperty: 'transform, opacity, display',
transition: '.25s ease-out',
transitionBehavior: 'allow-discrete',
transform: 'scale(0.8)',
opacity: 0,
'@starting-style': {
transform: 'scale(1)',
opacity: 1,
},
'&:popover-open': {
transform: 'scale(1)',
opacity: 1,
'@starting-style': {
transform: 'scale(0.8)',
opacity: 0,
},
},
});
Para satisfacer a los navegadores que no admiten la API de popover, Tokopedia implementó el popover-polyfill de oddbird, que solo tiene 3.2 KB con compresión gzip. Estaban conformes con el polyfill, ya que funcionó bien y no causó regresiones de rendimiento. En general, pudieron reducir hasta el 70% de las líneas de código en React con la API de popover.
Aspectos que debes tener en cuenta cuando usas la API de Popover
Tokopedia usa React, y el equipo logró la división de código desmontando el componente del popover para las páginas que no lo usan y, luego, realizando una división de código para el contenido del popover. De esta manera, redujo el tamaño de su solicitud inicial.
Considera combinar los pop-overs con el posicionamiento de anclas de CSS (próximamente en Chrome) para posicionarlos en relación con otros elementos. Esto es útil para los menús y las herramientas de ayuda, por ejemplo.
Recursos
- Presentamos la API de popover
- La diferencia entre un popover y un diálogo
- ¿Quieres informar un error o solicitar una función nueva? Queremos conocer tu opinión.
Explora los otros artículos de esta serie en los que se habla de cómo las empresas de comercio electrónico se beneficiaron de usar nuevas funciones de CSS y IU, como animaciones impulsadas por el desplazamiento, popovers, consultas de contenedores y el selector has()
.