Barra superior fija en una página web
Cuando la página web no puede mostrar todo su contenido en la ventana del navegador aparece el scroll: una barra para desplazarnos hacia arriba y abajo, o hacia los laddros, y poder seguir viendo el contenido. Fácil y elemental, estás totalmene acostumbrado a esto, sobre todo al scroll vertical: arriba y abajo..
Pero al hacer scroll la parte superior de la página sale de la ventana del navegador y deja de ser visible. Y o en esa parte se suele colocar el menú de navegación (la navbar) con lo que este menú quedará oculto. Es cesario volver arriba del todo de la página para poder usarlo
¿Como se soluciona esto? pues poniendo la barra de navegación estática en la posición superior de la ventana, no de la página. De esta forma la página se desplazará pero la barra superior se mantienene fija, estáttica
Esto se logra con los estilos CSS que nos permite fijar un bloque en la ventana del navegador en posición fija, anclada a la ventana.
El código HTML
Para que veas este efecto y como implementarlo vas a crear una página muy simple: solo una barra superior y un bloque bien grande para forzar a que aparezca la barra de scroll vertical.
El contenido de la barra va a ser solo texto, no va a haber un menú funcional, solo una muestra. Si quieres puedes ver como crear una barra de navegación y probar todo junto.
La barra de navegación que queremos mantener fija es un elemento <nav>, dentro hay dos bloques uno para el logo (aquí la palabra LOGO, pero puedes poner una imagen) y otro para el bloque del menú de navegación.
Esto es el esquema de la página. El relleno del bloque de contenido es para darle altura. Si te falta relleno para mostrar el scroll puedes repeitr este texto. De todas formas con los estilos vamos a darle el tamaño adecuado.
Los estilos CSS
Si has creado la página de ejemplo verás que ahi no existe ninguna barra y todo anda desordenado. Bueno las reglas CSS van a soluconarlo todo.
La barra se construye con el layout grid, otra forma para distribuir elementos en la página. Este grid tiene dos columnas: logo y bloque menú.
El bloque menú es también un grid con tantas columnas como items.
@charset "utf-8";
nav{
display:grid;
grid-template-columns: 1fr auto;
align-items: center;
background: aliceblue;
font-family: sans-serif;
position:fixed;
top:0;
width:100%;
}
nav .logo{
font-size: 24px;
font-weight:black;
}
nav .barnav{
display:grid;
grid-template-columns: repeat(4,auto);
margin-right: 30px;
}
nav .barnav div{
padding: 10px 20px;
}
nav .barnav div:hover{
cursor: pointer;
background:#CDDC39;
}
.contenido{
height: 1100px;
margin-top: 60px;
}
La regla .contenido es para darle altura a la página. Lo importante es la propiedad position: fixed en la regla nav, se pone arriba (top:0) y a todo el ancho de la página (width:100%). Normalmente esto es suficiente, pero si por cualquier circunstancia algun elemento de la página tapara a la barra, basta con añadirle a nav la propiedad z-index con un valor bien alto, 1000 por ejemplo. De esta manera la barra se pondrá por encima de los demás elementos de la página.
Con esto deberás ver la página con la barra fija arriba.