Otro evento para la posición CSS: pegajoso

¿Alguna vez te has preguntado cómo rastrear cuando los elementos con positions: sticky fijos se vuelven fijos? Eric Bidelman tiene una publicación increíble sobre este tema, ve y léelo ahora.


He encontrado algunas dificultades al usarlo en mi proyecto. Aquí están:


  1. Rompe la encapsulación. sticky-change evento de sticky-change fijo se relaciona con el elemento de encabezado, pero debe insertar centinelas en el elemento primario del encabezado (y colocarlo en position: relative ).
  2. Involucra muchos factores que deberían ser consistentes y su conexión no siempre es obvia. Por ejemplo, no puede establecer --default-padding mayor que 40px , que es la altura del centinela superior.
  3. No puedes rastrear el bloque en medio de un artículo.

¡Intentemos mejorarlo!


Todos esos problemas reflejan el mismo problema: la solución de Eric se trata de rastrear la posición de los padres, no el bloque en sí. Mejoremos esto manteniendo la idea original. Como? Agregaremos centinelas al encabezado y observaremos su intersección con el contenedor.


ejemplo


Aquí está cómo hacerlo:


  1. Necesita un centinela para cada lado adhesivo que desea observar.
  2. Establecer la primera propiedad top centinela es igual a la top encabezado pero con signo inverso menos 1. Por ejemplo, si su encabezado tiene la top: 10px , establezca el encabezado centinela en -11px . Puede usar algo como top: calc(-1px + -1 * var( -- header-sticky-top)) o simplemente establecer -1px si la cabecera superior es igual a cero.
  3. Agregue otros centinelas si es necesario.
  4. Observe la intersección de los centinelas con el contenedor.
  5. Puede decir que el encabezado se atascó si el registro de intersección centinela tiene isIntersecting = true , intersectionRatio = 0 e intersectionRect.top = rootBounds.top
  6. Los mismos otros lados, solo mire abajo, izquierda o derecha en lugar de arriba.
  7. No olvide agregar visibility: hidden pointer-events: none visibility: hidden y de pointer-events: none a los centinelas.

Mira la demostración y las fuentes aquí

Source: https://habr.com/ru/post/es436182/


All Articles