Dada una plantilla en la que el HTML no se puede modificar debido a otros requisitos, ¿cómo es posible mostrar (reorganizar) un div
encima de otro div
cuando no están en ese orden en el HTML? Ambas div
contienen datos que varían en altura y ancho.
<div id="wrapper">
<div id="firstDiv">
Content to be below in this situation
</div>
<div id="secondDiv">
Content to be above in this situation
</div>
</div>
Other elements
Con suerte, es obvio que el resultado deseado es:
Content to be above in this situation
Content to be below in this situation
Other elements
Cuando se fijan las dimensiones, es fácil colocarlas donde sea necesario, pero necesito algunas ideas para cuando el contenido es variable. En aras de este escenario, solo considere que el ancho sea del 100% en ambos.
Estoy buscando específicamente una solución solo para CSS (y probablemente tenga que encontrarme con otras soluciones si eso no funciona).
Hay otros elementos que siguen a esto. Se mencionó una buena sugerencia dado el escenario limitado que demostré, dado que podría ser la mejor respuesta, pero también estoy buscando asegurarme de que los elementos que siguen no se vean afectados.
img { max-width: 100% }
no funcionará dentro de los elementos reordenados.Una solución solo para CSS (funciona para IE10 + ): use la
order
propiedad de Flexbox :Demostración: http://jsfiddle.net/hqya7q6o/596/
Más información: https://developer.mozilla.org/en-US/docs/Web/CSS/order
fuente
#flex { display: flex; flex-direction: column; }
mostrará filas de 100% de ancho. jsfiddle.net/2fcj8s9etransform
con un soporte de navegador más amplioComo otros han dicho, esto no es algo que quieras hacer en CSS. Puede evitarlo con un posicionamiento absoluto y márgenes extraños, pero no es una solución sólida. La mejor opción en su caso sería recurrir a javascript. En jQuery, esta es una tarea muy simple:
o más genéricamente:
fuente
Esto se puede hacer usando Flexbox.
Cree un contenedor que aplique ambas pantallas: flex y flex-flow: column-reverse .
Fuentes:
fuente
No hay absolutamente ninguna manera de lograr lo que desea a través de CSS solo mientras se admiten agentes de usuario pre-flexbox ( principalmente IE antiguo ), a menos que :
Si lo anterior es cierto, puede hacer lo que quiera colocando absolutamente los elementos:
Una vez más, si no conoce la altura deseada para al menos #firstDiv, no hay forma de que pueda hacer lo que quiera a través de CSS solo. Si alguno de estos contenidos es dinámico, tendrá que usar javascript.
fuente
Aquí hay una solución:
Pero sospecho que tienes algo de contenido que sigue al contenedor ...
fuente
Con el módulo de diseño CSS3 flexbox, puede ordenar divs.
fuente
Si sabe o puede imponer el tamaño del elemento que debe ser superior, puede usar
En tu css y dale a los divs su posición.
de lo contrario, javascript parece ser el único camino a seguir:
o algo similar.
editar: acabo de encontrar esto que podría ser útil: w3 document css3 move-to
fuente
Los márgenes superiores negativos pueden lograr este efecto, pero tendrían que personalizarse para cada página. Por ejemplo, este marcado ...
... y este CSS ...
... te permitiría tirar del segundo párrafo sobre el primero.
Por supuesto, tendrá que ajustar manualmente su CSS para diferentes longitudes de descripción para que el párrafo de introducción salte la cantidad adecuada, pero si tiene un control limitado sobre las otras partes y control total sobre el marcado y CSS, esta podría ser una opción .
fuente
Bueno, con un poco de posicionamiento absoluto y algunos ajustes de margen dudosos, puedo acercarme, pero no es perfecto ni bonito:
El "margin-top: 4em" es el bit particularmente desagradable: este margen debe ajustarse de acuerdo con la cantidad de contenido en firstDiv. Dependiendo de sus requisitos exactos, esto puede ser posible, pero de todos modos espero que alguien pueda construir sobre esto para una solución sólida.
El comentario de Eric sobre JavaScript probablemente debería seguirse.
fuente
¡Esto se puede hacer solo con CSS!
Por favor revise mi respuesta a esta pregunta similar:
https://stackoverflow.com/a/25462829/1077230
No quiero publicar mi respuesta dos veces, pero en resumen, el padre debe convertirse en un elemento flexbox. P.ej:
(solo usando el prefijo de proveedor de webkit aquí).
Luego, intercambie divs indicando su orden con:
fuente
En tu CSS, flota el primer div por izquierda o derecha. Flota el segundo div por izquierda o derecha igual que el primero. Aplicar
clear: left
oright
lo mismo que los dos divs anteriores para el segundo div.Por ejemplo:
fuente
Si solo usa css, puede usar flex.
fuente
Estaba buscando una manera de cambiar el orden de los divs solo para la versión móvil para poder diseñarlo bien. Gracias a la respuesta de Nickf, pude hacer este código que funcionó bien para lo que quería, así que pensé en compartirlo con ustedes:
fuente
Una solución con un soporte de navegador más grande que el flexbox (funciona en IE≥9):
A diferencia de la
display: table;
solución, esta solución funciona cuando.wrapper
tiene cualquier cantidad de niños.fuente
Simplemente use flex para el div padre especificando
display: flex
yflex-direction : column
. Luego use el orden para determinar cuál de los div hijos es el primerofuente
CSS realmente no debería usarse para reestructurar el backend HTML. Sin embargo, es posible si conoce la altura de ambos elementos involucrados y se siente hackear. Además, la selección de texto estará en mal estado cuando vaya entre los divs, pero eso es porque el orden HTML y CSS son opuestos.
Donde XXX e YYY son las alturas de firstDiv y secondDiv respectivamente. Esto funcionará con elementos finales, a diferencia de la respuesta principal.
fuente
Tengo un código mucho mejor, hecho por mí, es tan grande, solo para mostrar ambas cosas ... crear una tabla 4x4 y alinear verticalmente más de una celda.
No utiliza ningún hack de IE, no vertical-align: middle; en absoluto...
No se utiliza para centrar verticalmente display-table, display: table-rom; display: table-cell;
Utiliza el truco de un contenedor que tiene dos divs, uno oculto (la posición no es la correcta pero hace que el padre tenga el tamaño variable correcto), uno visible justo después del oculto pero con la parte superior: -50%; entonces es el motor para corregir la posición.
Ver clases div que hacen el truco: BloqueTipoContenedor BloqueTipoContenedor_VerticalmenteCentrado BloqueTipoContenido_VerticalmenteCentrado_Oculto BloqueTipoContenido_VerticalmenteCentrado_Visible
Perdón por usar el español en los nombres de las clases (es porque hablo español y esto es tan complicado que si uso el inglés me pierdo).
El código completo:
fuente
Un poco tarde para la fiesta, pero también puedes hacer esto:
fuente
O establezca una posición absoluta para el elemento y trabaje fuera de los márgenes declarándolos desde el borde de la página en lugar del borde del objeto. Utilice% como más adecuado para otros tamaños de pantalla, etc. Así es como superé el problema ... Gracias, espero que sea lo que estás buscando ...
fuente
Para la solución CSS Only 1. La altura del contenedor debe ser fija o la altura del segundo div debe ser fija
fuente
fuente
Es fácil con CSS, solo use
display:block
yz-index
propiedadAquí hay un ejemplo:
HTML:
CSS:
Editar: Es bueno establecer alguna
background-color
aldiv-s
ver las cosas correctamente.fuente
Tengo una manera simple de hacer esto.
fuente