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 scroll
evento 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
position
propiedades en un:stuck
selector deben ignorarse? (una regla para los proveedores de navegadores, quiero decir, similar a las reglas sobre cómoleft
tiene prioridad sobre,right
etc.)):stuck
que cambia eltop
valor de0
a300px
, luego desplázate hacia abajo150px
... ¿debería quedarse o no? O pensar acerca de un elemento conposition: sticky
ybottom: 0
en el que:stuck
tal vez cambiafont-size
y por lo tanto el tamaño de los elementos (por lo tanto, cambiar el momento en el que debe pegarse) ...while
ciclo está mal diseñado porque permite un bucle sin fin :) Sin embargo, gracias por aclarar esto;)En algunos casos, un simple
IntersectionObserver
puede 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 delstuck
atributo ...Ejemplo aquí: https://codepen.io/anon/pen/vqyQEK
fuente
stuck
clase sería mejor que un atributo personalizado ... ¿Hay alguna razón específica para su elección?padding-top: 60px
en 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:sticky
elemento. Establece el atributo con elstuck
que puede hacer coincidir en CSSheader[stuck]
:HTML:
JS:
fuente