Estou criando um layout responsivo com uma barra de navegação fixa superior. Abaixo, tenho duas colunas, uma para a barra lateral (3) e outra para o conteúdo (9). Que na área de trabalho se parece com isso
barra de navegação
[3] [9]
Quando eu o resize
celular navbar
é compactado e oculto, a barra lateral é empilhada na parte superior do conteúdo, assim:
barra de navegação
[3]
[9]
Gostaria do conteúdo principal na parte superior, por isso preciso alterar a ordem no celular para isso:
barra de navegação
[9]
[3]
Encontrei este artigo que aborda os mesmos pontos, mas a resposta aceita foi editada para dizer que a solução não se aplica à versão atual do Bootstrap.
Como posso reordenar essas colunas no celular? Ou então, como posso inserir o grupo de listas da barra lateral na minha barra de navegação em expansão?
Aqui está o meu código:
<div class="navbar navbar-inverse navbar-static-top">
<div class="container">
<a href="#" class="navbar-brand">Brand Title</a>
<button class="navbar-toggle" data-toggle="collapse" data-target=".navHeaderCollapse">
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<div class="collapse navbar-collapse navHeaderCollapse">
<ul class="nav navbar-nav navbar-right"><!--original navbar-->
<li class="active"><a href="#">Home</a></li>
<li><a href="#">FAQ</a></li>
</ul>
</div>
</div>
</div><!--End Navbar Div-->
<div class="container">
<div class="row">
<div class="col-lg-3">
<div class="list-group">
<a href="#" class="list-group-item">
<h4 class="list-group-item-heading">Lorem ipsum</h4>
<p class="list-group-item-text">Lorem Ipsum is simply dummy text.</p></a>
</div>
</div><!--end sidebar-->
<div class="col-lg-9">
<div class="panel panel-default">
<div class="panel-body">
<div class="page-header">
Main Content
</div>
</div>
</div><!--end main content area-->
fonte
positioning cols absolutely
e tal!Atualizado 2018
Para a pergunta original baseada no Bootstrap 3 , a solução foi usar push-pull .
Agora, no Bootstrap 4 , agora é possível alterar a ordem, mesmo quando as colunas estão empilhadas na largura total verticalmente, graças ao flexbox do Bootstrap 4. OFC, o método push pull ainda funcionará, mas agora existem outras maneiras de alterar a ordem das colunas no Bootstrap 4, possibilitando reordenar as colunas de largura total.
Método 1 - Use
flex-column-reverse
paraxs
telas:Método 2 - Use
order-first
paraxs
telas:Bootstrap 4 (alpha 6): http://www.codeply.com/go/bBMOsvtJhD
Bootstrap 4.1: https://www.codeply.com/go/e0v77yGtcr
Resposta original 3.x
Para a pergunta original baseada no Bootstrap 3 , a solução era usar push-pull para larguras maiores e as colunas mostrarão sua ordem natural em larguras menores (xs). (AB reverso para BA).
Bootstrap 3: http://www.codeply.com/go/wgzJXs3gel
@emre declarou: " Você não pode alterar a ordem das colunas em telas menores, mas pode fazer isso em telas grandes ". No entanto, isso deve ser esclarecido para indicar: "Você não pode alterar a ordem das colunas" empilhadas "de largura total .." no Bootstrap 3.
fonte
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
Tablet +
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 headline
e3 qty
sentar-se à direita e não à esquerda é simplesmente definir os doispull-right
. Isso aplica CSSfloat: 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: right
assim 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 curtas2 image
à esquerda, tendem a ser mais longas do que as duas juntas. Bootstrap Grid é um hack flutuador glorificado, significado4 caption
éfloat: left
. Com a2 image
ocupação de tanto espaço à esquerda,4 caption
tentativas 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:
http://jsfiddle.net/b9chris/52VtD/16633/
HTML:
CSS:
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-bottom
assim: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/
fonte
Outubro 2017
Eu gostaria de adicionar outra solução Bootstrap 4. Um que funcionou para mim.
A propriedade CSS "Order", combinada com uma consulta de mídia, pode ser usada para reordenar colunas quando elas são empilhadas em telas menores.
Algo assim:
Link CodePen: https://codepen.io/preston206/pen/EwrXqm
Ajuste o tamanho da tela e você verá as colunas serem empilhadas em uma ordem diferente.
Vou amarrar isso com a pergunta do pôster original. Com CSS, a barra de navegação, a barra lateral e o conteúdo podem ser direcionados e, em seguida, ordenar as propriedades aplicadas em uma consulta de mídia.
fonte
No Bootstrap 4 , se você quiser fazer algo assim:
É necessário reverter a ordem de B , em seguida, C , em seguida, aplicar
order-{breakpoint}-first
a B . E aplique duas configurações diferentes, uma que fará com que compartilhem as mesmas colunas e outra que fará com que elas tenham toda a largura das 12 colunas:Telas menores: 12 cols para B e 12 cols para C
Telas maiores: 12 cols entre a soma deles ( B + C = 12)
Como isso
Demonstração: https://codepen.io/anon/pen/wXLGKa
fonte
Isso é bastante fácil com o jQuery usando insertAfter () ou insertBefore ().
<div class="left">content</div> <div class="right">sidebar</div>
Que simples
se você deseja definir a condição para dispositivos móveis, pode fazê-lo assim
exemplo https://jsfiddle.net/w9n27k23/
fonte
Começando pela versão móvel primeiro, você pode conseguir o que deseja, na maioria das vezes.
Exemplos aqui:
http://jsbin.com/wulexiq/edit?html,css,output
fonte