Problema
Ao usar o Twitter Bootstrap, encontrei alguns problemas de espaçamento vertical quando as colunas do bootstrap começaram a se empilhar. Por exemplo, vamos dar uma olhada em um layout de 3 colunas para telas de tamanho médio.
<div class="row">
<div class="col-md-4"></div>
<div class="col-md-4"></div>
<div class="col-md-4"></div>
</div>
Se um tablet ou telefone visualizasse esse layout, todas as colunas seriam empilhadas, mas cada coluna pode estar tocando diretamente a coluna anterior.
Uma solução simples para isso é adicionar uma margem inferior a cada coluna:
[class*="col-"] {
margin-bottom: 15px;
}
Isso funciona bem para algumas situações, mas adiciona margem extra desnecessária quando não é necessário.
Solução
Para resolver isso, podemos criar uma nova classe css que aplica a margem superior às colunas quando elas são empilhadas:
.row.row-grid [class*="col-"] + [class*="col-"] {
margin-top: 15px;
}
@media (min-width: 1200px) {
.row.row-grid [class*="col-lg-"] + [class*="col-lg-"] {
margin-top: 0;
}
}
@media (min-width: 992px) {
.row.row-grid [class*="col-md-"] + [class*="col-md-"] {
margin-top: 0;
}
}
@media (min-width: 768px) {
.row.row-grid [class*="col-sm-"] + [class*="col-sm-"] {
margin-top: 0;
}
}
A classe aplica uma margem superior às colunas que possuem uma coluna anterior. As consultas de mídia então removem a margem superior quando não é necessária.row-grid
Em uma observação relacionada, se você quiser adicionar espaçamento vertical entre as linhas, adicione esta linha ao seu css:
.row-grid + .row-grid {
margin-top: 15px;
}
Uso
Basta adicionar a classe às linhas onde deseja ativar o espaçamento vertical das colunas.row-grid
<div class="row row-grid">
<div class="col-md-4"></div>
<div class="col-md-4"></div>
<div class="col-md-4"></div>
</div>