Crea tu web, tutor html, css
Barra lateral fija en web

Menu lateral fijo

Así como es posible tener una barra de navegación fija en la parte superior de las páginas, tambien podemos crear una barra lateral que permanezca fija cuanod se hace scroll en la página. Esta barra es utilizable para menus o para comentarios o cualquier otra funcionalidad. que se os ocurra.

El codigo HTML

Como es habitual primero vamos al código HTML y bosquejamos la estructura de la página: vamos a tener dos bloques, uno para la columna lateral que puede contener un menú y otro para lo que sería el contenido de la página.

<main>
<div class="lateral">
<header>Indice</header>
<ul class="menuVert">
<li><a href="#">item 1</a></li>
<li><a href="#">item 2</a></li>
<li><a href="#">item 3</a></li>
<li><a href="/">item 4</a></li>
</ul>
</div>
<div class="principal">
Aquí está el contenido de este bloque
Rellena con suficiente espadio para que supere
la altura de la pantalla y aparezca el scroll
</div>

Ves los dos bloques con las clases nombradas como lateral (para la barra) y principal, para el contenido. Hemos puesto una header para el título cabecera de la barra lateral, que en este ejemplo contiene un menú.

Todo el contenido está en un bloque main que actúa como contenedor.

Como es normal si ves ahora esta página en el navegador se verá sin ningún formato, y por supuesto todo scrolleable. Nos fatla el CSS.

Estilos CSS.

Las reglas CSS usan la propiedad position: fixed para mantener la barra inmóvil aún al hacer un scroll. Hay que tener en cuenta que este valor hace que la barra tenga como referencia la ventana del navegador, no su contenedor. Por tanto las dimensiones que se especifiquen con porcentajes se referiraán a la ventana y las posiciones también.

@charset "utf-8";
html{
height:100%;
}
main{
width: 80%;
height: auto;
margin:0 auto;
background: aliceblue;
}
.lateral{
box-sizing: border-box;
width: max(8%, 200px);
display: inline-block;
position: fixed; padding-top: 30px
}
.principal{
margin-left: max(10%, 200px);
padding: 0 10px;
height: 100%;
text-align: justify;
background:white;
}
/*Hasta aquí ya tenemos un menu lateral fijo,
ahora viene ponerlo bonito*/
.lateral header{
font-weight: bold;
font-size: 1.5rem;
text-align: center;
border-bottom: 1px solid black;
background: aqua
}
.lateral ul{
list-style:none;
padding-left:0;
margin-top:0;
}
.lateral ul li{
display:block;
position: relative;
padding: 8px 10px;
margin-left:0;
border-bottom:1px solid #060696
}
.lateral ul li a{
color: black;
text-decoration:none;
}
.lateral ul li a:after{
content: ' ';
position:absolute;
width: 100%;
height: 100%;
top:0;
left:0;
}
.lateral ul li:hover, .lateral ul li:hover a{
background: blue;
color: white;
}

Las primeras reglas sirven para crear y fijar la barra lateral. Con ellas ya tienes la bara anclada en el lateral gracias a position: fixed y top:0 . Pero queda muy esquemática.

Estas reglas son bastente responsive, eso se ha conseguido con los anchosy posicionamientos calculados.

La barra fija tiene un ancho variable con un valor mínimo de 200px. Recuerda que el porcentaje se refiere al ancho total de la ventana. La función clc devuelve el máximo entre el 8% de la ventana y 200px, así si la ventana se estrecha demasiado su anchura queda en 200px

El bloque con el contenido, principal, necesita estar desplazado para dejar espacio a la barra. Esto se ha hecho con un margin-left, este margen izquierdo tiene un valor mínimo de 200px. La función da el mázimo entre el 10% del contenedor y 200px

Determnar los porcentajes no es difícil. Se ha buscado que el ancho el margin sean un 10% de main (el contenedor). En el caso del bloue principal se puede usar directamente este porcentaje. Para la barra fija se usa el 10% de main es el 8% el 8% de la ventana (10%*8%).

Pero si prefieres mantener valores fijos puedes hacerlo. Recuerda que el bloque con el contenido debe tener margen izquierdo suficiente para que no se solape con la barra.

Sea un menú o una zona de comentarios u otro contenido qurremos que quede bien a la vista, agradable y fácil de utilizar. Para eso tneos las reglas e la segunda parte: los efectos hover, ampliar el link a todo el div, colores, tipos ....

Como reto si quieres puedes probar este efecto con sticky en lugar de fixed. Si usas este métdo la barra se moverá hasta antes de quedar oculta al hacer scroll.