As respostas aqui funcionam para apenas 2 células, mas, assim que essas colunas tiverem mais, elas podem levar a um pouco mais de complexidade. Acho que encontrei uma solução generalizada para qualquer número de células em várias colunas.
Metas
Obtenha uma sequência vertical de tags no celular para organizar-se na ordem que o design exigir no tablet / computador. Neste exemplo concreto, uma tag deve inserir o fluxo mais cedo do que normalmente e outra depois do que normalmente.
Móvel
[1 headline]
[2 image]
[3 qty]
[4 caption]
[5 desc]
Tablet +
[2 image ][1 headline]
[ ][3 qty ]
[ ][5 desc ]
[4 caption][ ]
[ ][ ]
Portanto, as manchetes precisam ser reproduzidas diretamente no tablet + e, tecnicamente, o mesmo acontece com a desc - ela fica acima da tag de legenda que a precede no celular. Você verá em um momento que 4 legendas também estão com problemas.
Vamos supor que todas as células possam variar de altura e precisam ser niveladas de cima para baixo com a próxima célula (descartando truques fracos como uma tabela).
Como em todos os problemas do Bootstrap Grid, a etapa 1 é perceber que o HTML precisa estar em ordem móvel, 1 2 3 4 5, na página. Em seguida, determine como fazer com que o tablet / desktop se reorganize dessa maneira - idealmente sem Javascript.
A solução para obter 1 headlinee 3 qtysentar-se à direita e não à esquerda é simplesmente definir os dois pull-right. Isso aplica CSS float: right, o que significa que eles encontram o primeiro espaço aberto que cabem à direita. Você pode pensar no processador CSS do navegador funcionando na seguinte ordem: 1 se encaixa no canto superior direito. 2 é o próximo e é regular ( float: left), então ele vai para o canto superior esquerdo. Então 3, que é float: rightassim que pula por baixo de 1.
Mas essa solução não foi suficiente 4 caption; porque as 2 células da direita são tão curtas 2 imageà esquerda, tendem a ser mais longas do que as duas juntas. Bootstrap Grid é um hack flutuador glorificado, significado 4 caption é float: left. Com a 2 imageocupação de tanto espaço à esquerda, 4 captiontentativas de caber no próximo espaço disponível - geralmente a coluna da direita, não a esquerda onde queríamos.
A solução aqui (e de maneira mais geral para qualquer problema como esse) foi adicionar uma tag de hack, oculta no celular, que existe no tablet + para empurrar a legenda, que é coberta por uma margem negativa - assim:
[2 image ][1 headline]
[ ][3 qty ]
[ ][4 hack ]
[5 caption][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; }
}
Portanto, a solução generalizada aqui é adicionar tags de hackers que podem desaparecer no celular. No tablet +, as tags de hack permitem que as tags exibidas apareçam mais cedo ou mais tarde no fluxo e, em seguida, são puxadas para cima ou para baixo para encobrir essas tags de hack.
Nota: Eu usei alturas fixas para o exemplo simples no jsfiddle vinculado, mas o conteúdo real do site em que eu estava trabalhando varia em altura nas 5 tags. É renderizado corretamente com uma variação relativamente grande na altura das tags, especialmente imagem e descrição.
Nota 2: Dependendo do seu layout, você pode ter uma ordem de colunas consistente o suficiente no tablet + (ou resoluções maiores), para evitar o uso de tags de hackers, usando margin-bottomassim:
Nota 3: Isso usa o Bootstrap 3. O Bootstrap 4 usa um conjunto de grade diferente e não funciona com esses exemplos.
http://jsfiddle.net/b9chris/52VtD/16632/