Dos columnas fijas que contienen una caja de desplazamiento con flexbox no funcionan.
Estoy teniendo problemas para que mi configuración de dos columnas flexbox funcione. Básicamente, quiero que la columna izquierda se mantenga fija mientras se desplaza hacia abajo la columna derecha y que la barra de desplazamiento termine en el mismo punto exacto. También debería poder plegarse, como se muestra en el siguiente ejemplo.
Se supone que debe sustituir esta solución que hice usando una cuadrícula regular, que lamentablemente ya no puedo utilizar.
Puedes ver mi progreso actual abajo. Realmente no puedo entender qué hacer a partir de aquí. Como soy novato, esperaba que ustedes supieran.
<section class="page-width">
<div class="wrapper">
<aside class="aside aside-1"><img width="100%" src="https://cdn.shopify.com/s/files/1/0044/2852/9698/files/242370040_4238706352865614_2798039132201744827_n.jpg">Aside 1</aside>
<aside class="aside aside-2">
Aside 2
</aside>
</div>
</section>
.wrapper {
display: flex;
flex-flow: row wrap;
overflow: auto;
gap: 2em;
justify-content: flex-start;
height: auto;
font-weight: bold;
text-align: center;
}
.wrapper > * {
padding: 10px;
flex: 1 100%;
}
.aside-1 {
position: -webkit-sticky;
position: sticky;
background: gold;
height: auto;
top: 0;
align-self: flex-start;
}
.aside-2 {
background: hotpink;
height: 900px;
top: 0;
}
@media all and (min-width: 300px) {
.aside { flex: 1 0 0; }
}
He revisado el foro sin realmente encontrar lo que necesito y espero que alguien pueda ayudarme. ¡Muchas gracias!
davy.ai
Solución
Basado en el código proporcionado, parece que la propiedad
position: sticky;
se aplica correctamente a la primera columna. Sin embargo, se necesitan algunos ajustes para lograr el resultado deseado.En primer lugar, se debe eliminar la propiedad
height: auto;
de la clase.aside-1
, ya que crea espacio innecesario debajo de la columna.En segundo lugar, se debe agregar
align-items: flex-start;
a la clase.wrapper
, para asegurarse de que las dos columnas estén alineadas en la parte superior.En tercer lugar, para hacer que la segunda columna se desplace junto con la primera, se debe eliminar la propiedad
overflow: auto;
de la clase.wrapper
y aplicarla a la clase.aside-2
en su lugar. Además, se debe eliminar la propiedadtop: 0;
de la clase.aside-2
, ya que provoca que la columna se superponga con la primera.Por último, para hacer que la primera columna sea plegable, se puede agregar un botón o un enlace a la página que active una función de JavaScript para ocultar/mostrar la columna. Aquí tienes un ejemplo de cómo lograr esto:
Este código agrega un botón a la página que llama a la función
toggleAside()
cuando se hace clic en él. La función obtiene una referencia a la primera columna utilizandodocument.querySelector('.aside-1')
, verifica su valor de visualización actual y lo alterna entrenone
(para ocultar la columna) yflex
(para mostrarla nuevamente).Con estos ajustes, el código debería funcionar como se desea.