Las respuestas aquí funcionan para solo 2 celdas, pero tan pronto como esas columnas tengan más en ellas, puede conducir a un poco más de complejidad. Creo que he encontrado una solución generalizada para cualquier número de celdas en varias columnas.
# Objetivos Obtenga una secuencia vertical de etiquetas en dispositivos móviles para organizarse en el orden que requiera el diseño en la tableta / escritorio. En este ejemplo concreto, una etiqueta debe ingresar al flujo antes de lo normal y otra más tarde de lo normal.
##Móvil
[1 headline]
[2 image]
[3 qty]
[4 caption]
[5 desc]
## Tablet +
[2 image ][1 headline]
[ ][3 qty ]
[ ][5 desc ]
[4 caption][ ]
[ ][ ]
Por lo tanto, el título debe mezclarse directamente en la tableta +, y técnicamente, también lo hace desc - se encuentra sobre la etiqueta de título que lo precede en el móvil. Verá en un momento 4 subtítulos también está en problemas.
Supongamos que cada celda puede variar en altura, y debe estar alineada de arriba a abajo con su siguiente celda (descartando trucos débiles como una tabla).
Al igual que con todos los problemas de Bootstrap Grid, el paso 1 es darse cuenta de que el HTML debe estar en orden móvil, 1 2 3 4 5, en la página. Luego, determine cómo hacer que una tableta / escritorio se reordene de esta manera, idealmente sin Javascript.
La solución para obtener 1 headline
y 3 qty
sentarse a la derecha, no a la izquierda es simplemente establecerlos a ambos pull-right
. Esto aplica CSS float: right
, lo que significa que encuentran el primer espacio abierto en el que encajarán correctamente. Puede pensar en el procesador CSS del navegador funcionando en el siguiente orden: 1 encaja en la esquina superior derecha. 2 es el siguiente y es regular ( float: left
), por lo que va a la esquina superior izquierda. Luego 3, que es float: right
así, salta por debajo de 1.
Pero esta solución no fue suficiente para 4 captions
; porque las 2 celdas de la derecha son tan cortas 2 image
a la izquierda tienden a ser más largas que las dos combinadas. Bootstrap Grid es un hack de flotador glorificado, 4 caption
es decir float: left
. Al 2 images
ocupar tanto espacio a la izquierda, 4 caption
intenta encajar en el siguiente espacio disponible, a menudo la columna derecha, no la izquierda donde la queríamos.
La solución aquí (y en general para cualquier problema como este) fue agregar una etiqueta de pirateo, oculta en el móvil, que existe en la tableta + para eliminar los subtítulos, que luego se cubre con un margen negativo, como este:
[2 image ][1 headline]
[ ][3 qty ]
[ ][4 hack ]
[5 captions][6 desc ^^^]
[ ][ ]
http://jsfiddle.net/b9chris/52VtD/16633/
HTML:
<div id=headline class="col-xs-12 col-sm-6 pull-right">Product Headline</div>
<div id=image class="col-xs-12 col-sm-6">Product Image</div>
<div id=qty class="col-xs-12 col-sm-6 pull-right">Qty, Add to cart</div>
<div id=hack class="hidden-xs col-sm-6">Hack</div>
<div id=caption class="col-xs-12 col-sm-6">Product image caption</div>
<div id=desc class="col-xs-12 col-sm-6 pull-right">Product description</div>
CSS:
#hack { height: 50px; }
@media (min-width: @screen-sm) {
#desc { margin-top: -50px; }
}
Entonces, la solución generalizada aquí es agregar etiquetas de pirateo que pueden desaparecer en dispositivos móviles. En la tableta + el pirateo, las etiquetas permiten que las etiquetas mostradas aparezcan más temprano o más tarde en el flujo, luego se levantan o bajan para cubrir esas etiquetas de pirateo.
Nota: He usado alturas fijas por el simple ejemplo en el jsfiddle vinculado, pero el contenido real del sitio en el que estaba trabajando varía en altura en las 5 etiquetas. Se procesa correctamente con una variación relativamente grande en las alturas de las etiquetas, especialmente imagen y desc.
Nota 2: Dependiendo de su diseño, puede tener un orden de columnas lo suficientemente consistente en la tableta + (o resoluciones más grandes), que puede evitar el uso de etiquetas de pirateo, utilizando en su margin-bottom
lugar, así:
Nota 3: Esto usa Bootstrap 3. Bootstrap 4 usa un conjunto de cuadrícula diferente y no funcionará con estos ejemplos.
http://jsfiddle.net/b9chris/52VtD/16632/