Este foro ya no está activo, así que no puedes publicar nuevas preguntas ni responder a las preguntas existentes.

Reorganización de <div>

7 de septiembre de 2015

Tengo el siguiente código simple:

<div id="wrapper">
   <div id="header"><!-- Contenido... --></div>
   <div id="main_content">
      <div class="left_content"><!-- Contenido... --></div>
      <div class="sidebar"><!-- Contenido... --></div>
   </div>
   <div id="footer"><!-- Contenido... --></div>
</div>

El tema es el siguiente: tal y como se ve en el código y en tamaño móvil, el div con clase left_content se mostraría primero y el div con clase sidebar se mostraría a continuación, ambos en bloque uno debajo de otro, como es lógico.

Me han propuesto que, sin tocar el código HTML, esto es, solo pudiendo modificar el archivo CSS y JS conseguir que en tamaño móvil el div con clase "sidebar" se muestre el primero.

No hay Bootstrap, solo un archivo CSS y la librería jQuery con la que, en principio, se podría copiar esa capa, hacer un "prepend" y removerla del final, pero, ¿con CSS es posible conseguir lo mismo?

Gracias de antemano.


Respuestas

#1

Aunque no puedes usar Bootstrap, sí que puedes aplicar en tu CSS los mismos estilos que usa Bootstrap para resolver este problema. De hecho, reordenar columnas con Bootstrap es facilísimo.

Si quieres un ejemplo real, en la portada del foro de este sitio puedes ver que en la lista de discusiones, reordeno la posición del contador de respuestas mediante el col-md-push-2 y col-md-pull-10. Sólo tendrías que aplicar la misma técnica con las propiedades left y right de CSS.

@javiereguiluz

7 septiembre 2015, 9:53
#2

Bien, la idea está bien, pero es en tamaño móvil donde quiero conseguir que ambas ocupen el 100% y la segunda se muestre por encima de la primera y no lo consigo ver cómo se podría hacer...

@ucip3

7 septiembre 2015, 10:32
#3

Un truco alternativo que acabo de descubrir en esta respuesta de Stack Overflow sería el siguiente:

#main_content { display: table; }
#left_content { display: table-footer-group; }
#sidebar      { display: table-header-group; }

@javiereguiluz

7 septiembre 2015, 10:45
#4

Redondo!! Ha funcionado perfecto!! Muchas gracias!!

@ucip3

7 septiembre 2015, 11:00
#5

Otra solución en CSS3 que también funciona de lujo:

#main_content { display: flex; flex-direction: column; }
#left_content { order: 2; }
#sidebar      { order: 1; }

Por si os es de ayuda también.

@ucip3

28 octubre 2015, 11:14