posición: pegajosa funciona ahora en algunos navegadores móviles, por lo que puede hacer que una barra de menú se desplace con la página, pero luego se quede en la parte superior de la ventana gráfica cada vez que el usuario se desplace más allá de ella.
Pero, ¿qué pasa si desea cambiar un poco el estilo de su barra de menú pegajosa cada vez que se `` pega ''? por ejemplo, es posible que desee que la barra tenga esquinas redondeadas cada vez que se desplaza con la página, pero tan pronto como se adhiera a la parte superior de la ventana gráfica, desea deshacerse de las esquinas redondeadas superiores y agregar una pequeña sombra paralela debajo eso.
¿Existe algún tipo de pseudoelector (p ::stuck. Ej. ) Para apuntar a elementos que se han adherido position: sticky y están actualmente pegados? ¿O los proveedores de navegadores tienen algo como esto en proceso? Si no es así, ¿dónde lo solicitaría?
NÓTESE BIEN. Las soluciones de javascript no son buenas para esto porque en los dispositivos móviles, por lo general, solo obtiene un scrollevento cuando el usuario suelta el dedo, por lo que JS no puede saber el momento exacto en que se pasó el umbral de desplazamiento.
fuente

positionpropiedades en un:stuckselector deben ignorarse? (una regla para los proveedores de navegadores, quiero decir, similar a las reglas sobre cómolefttiene prioridad sobre,rightetc.)):stuckque cambia eltopvalor de0a300px, luego desplázate hacia abajo150px... ¿debería quedarse o no? O pensar acerca de un elemento conposition: stickyybottom: 0en el que:stucktal vez cambiafont-sizey por lo tanto el tamaño de los elementos (por lo tanto, cambiar el momento en el que debe pegarse) ...whileciclo está mal diseñado porque permite un bucle sin fin :) Sin embargo, gracias por aclarar esto;)En algunos casos, un simple
IntersectionObserverpuede hacer el truco, si la situación permite pegarse a un píxel o dos fuera de su contenedor raíz, en lugar de alinearlo correctamente. De esa manera, cuando se encuentra un poco más allá del borde, el observador dispara y nos ponemos en marcha.Pegue el elemento fuera de su contenedor con
top: -2px, y luego apunte a través delstuckatributo ...Ejemplo aquí: https://codepen.io/anon/pen/vqyQEK
fuente
stuckclase sería mejor que un atributo personalizado ... ¿Hay alguna razón específica para su elección?padding-top: 60pxen su caso :)Alguien en el blog de Google Developers afirma haber encontrado una solución de rendimiento basada en JavaScript con un IntersectionObserver .
Bit de código relevante aquí:
No lo he replicado yo mismo, pero tal vez ayude a alguien a tropezar con esta pregunta.
fuente
Realmente no soy un fanático de usar js hacks para diseñar cosas (es decir, getBoudingClientRect, escuchar scroll, escuchar cambiar de tamaño), pero así es como estoy resolviendo el problema actualmente. Esta solución tendrá problemas con las páginas que tienen contenido minimizable / maximizable (<detalles>), o desplazamiento anidado, o realmente cualquier bola curva. Dicho esto, es una solución simple para cuando el problema también es simple.
fuente
if (requestedFrame) { return; }No es un "asesino del rendimiento" debido al procesamiento por lotes de cuadros de animación. Sin embargo, Intersection Observer sigue siendo una mejora.Una forma compacta para cuando tienes un elemento encima del
position:stickyelemento. Establece el atributo con elstuckque puede hacer coincidir en CSSheader[stuck]:HTML:
JS:
fuente