Sistema grid
Use nosso poderoso, mobile-first, grid flexbox para fazer layouts de todas as formas e tamanhos, graças ao sistema de doze colunas, cinco breakpoints responsivos, variáveis e mixins Sass, além de várias classes pré-definidas.
Como funciona
O sistema grid Bootstrap usa vários containers, linhas e colunas para arranjar e alinhar conteúdo. Ele é feito com flexbox e é, totalmente, responsivo. Abaixo, temos um exemplo e aprofundamento sobre como o grid funciona.
Novo ou não sabe muito sobre flexbox? Leia este guia flexbox, do CSS Tricks, para background, terminologia, diretrizes e snippets.
O exemplo acima cria três colunas de larguras idênticas em dispositivos pequenos, médios, grandes e extra grandes, usando nossas classes grid pré-definidas. Estas colunas são centralizadas na página, usando o elemento pai .container
.
Resumindo, assim é como funciona:
- Containers criam meios para centralizar e, horizontalmente, preencher os conteúdos de seu site;
- Use
.container
para ter uma largura responsiva em pixel ou.container-fluid
para terwidth: 100%
, em todas viewports e tamanhos de disposivos.
- Use
- Rows são elemntos para envolver colunas;
- Cada coluna tem
padding
horizontal (gutter) para controlar o espaço, entre elas.- Este
padding
, depois, é cancelado com rows usando margens negativas. Assim, todo conteúdo em suas colunas é, visualmente, alinhado a esquerda.
- Este
- Cada coluna tem
- Em um layout grid, o conteúdo deve ser posicionado dentro de colunas e só elas podem ser filhos imediatos de
.row
s; - Graças ao flexbox, colunas grid sem
width
declarado vão, automaticamente, se dimensionar com larguras iguais;- Por exemplo, quatro exemplos de
.col-sm
vão, automaticamente, ter 25% de largura, no breakpointsm
ou maior; - Veja a seção colunas com layout automático, para mais exemplos.
- Por exemplo, quatro exemplos de
- Classes de colunas indicam o número de colunas que você quer usar, dentro de uma possibilidade de 12, por row;
- Se você quiser três colunas de larguras idênticas, pode usar
.col-4
, por exemplo.
- Se você quiser três colunas de larguras idênticas, pode usar
- Largura de colunas são definidas em porcentagem para que, então, elas sejam sempre fluidas e dimensionadas com relação a seus elementos pais;
- Colunas possuem
padding
horizontal para criar gutters, entre cada coluna.- No entanto, você pode remover a
margin
das rows epadding
das colunas, usando.no-gutters
na.row
.
- No entanto, você pode remover a
- Para fazer o grid responsivo, existem cinco breakpoints, um para cada breakpoint responsivo: extra small (implícito), small, medium, large e extra large;
- Breakpoints grid são baseados em media queries
min-width
, significando que elas aplicam estilos para o dado breakpoint e outros maiores;- Exemplo:
.col-sm-4
aplica ao small, medium, large e extra large, mas não ao primeiro breakpointxs
.
- Exemplo:
- Você pode usar classes grid pré-definidas (como
.col-4
) ou mixins Sass com uma marcação mais semântica.
Se atente as limitações e bugs flexbox, tipo a impossibilidade de usar alguns elementos HTML como container flex.
Parâmetros grid
Enquanto Bootstrap usa em
ou rem
para definir a maioria das dimensões, px
é usado para breakpoints grid e largura de containers. Isto se deve a largura da viewport ser em pixels e não se alterar com mudança no tamanho de fonte.
Veja como aspectos do sistema grid Bootstrap funciona, através de diferentes dispositivos, numa bela tabela.
Extra small <576px |
Small ≥576px |
Medium ≥768px |
Large ≥992px |
Extra large ≥1200px |
|
---|---|---|---|---|---|
Largura máxima do container | Não tem (auto) | 540px | 720px | 960px | 1140px |
Prefixo em classe | .col- |
.col-sm- |
.col-md- |
.col-lg- |
.col-xl- |
Número de colunas | 12 | ||||
Largura da gutter | 30px (15px em cada lado da coluna) | ||||
Aninhável | Sim | ||||
Ordenamento de coluna | Sim |
Layout automático de colunas
Use classes de breakpoints específicos para dimensionamento de colunas fácil, sem uma classe numerada explícita, como .col-sm-6
.
Largura idêntica
Por exemplo, aqui estão dois layouts grid que aparecem em todo dispositivo e viewport, desde xs
até xl
. Use qualquer quantidade de classes sem números, para cada breakpoint necessário e, então, todas colunas terão a mesma largura.
Colunas com larguras idênticas podem ser quebradas em diversas linhas, mas tem um bug flexbox do Safari que evita isso de funcionar, sem flex-basis
ou border
declarado. Há soluções para versões antigas de browsers, mas não são necessárias, se você estiver atualizado.
Definindo largura de uma coluna
Layout automático em colunas flexbox do grid também significa que você pode definir a largura de uma coluna e ter suas colunas irmãs redimensionadas, automaticamente. Você também pode usar classes grid pré-definidas (como mostrado abaixo), mixins grid ou larguras inline. Perceba que as outras colunas vão se redimensionar, não importa a largura da coluna do meio.
Conteúdo com largura variável
Use classes col-{breakpoint}-auto
para dimensionar colunas, baseando-se na largura natural de seus conteúdos.
Larguras idênticas em várias linhas
Crie colunas de larguras idênticas que se extendem por várias linhas, colocando .w-100
onde você quer que as colunas quebrem, em uma nova linha. Faça com que as quebras sejam responsivas, misturando .w-100
com algum utilitário de display responsivo.
Classes responsivas
O grid Bootstrap possui cinco graus de classes pré-definidas, para construir layouts responsivos complexos. Customize o tamanho de suas colunas em dispositivos extra small, small, medium, large ou extra large.
Todos breakpoints
Para grids que são iguais, independente do tamanho dox dispositivos, use as classes .col
e .col-*
. Especifique uma classe numerada quando você precisar que uma coluna específica seja dimensionada. Caso contrário, sinta-se a vontade de usar só .col
.
De vertical para horizontal
Usando só um conjunto de classes .col-sm-*
, você pode criar um sistema de grid básico que inicia empilhado e termina na horizontal, a partir do breakpoint small (sm
).
Misture e combine
Não quer que suas colunas, simplesmente, empilhem-se em alguns breakpoints? Use uma combinação de diferentes classes, para cada breakpoint necessário. Veja o exemplo abaixo, para ter uma melhor ideia de como isso tudo funciona.
Gutters
Gutters podem ser ajustadas, responsivamente, por utilitários de margem negativa e padding. Para alterar as gutters em uma certa row, combine utilitários de margem negativa (na .row
) e um padding correspondente nas .col
s.
Aqui está um exemplo de customização do grid Bootstrap no breakpoint large (lg
) e acima. Nós aumentamos o padding do .col
com .px-lg-5
e, então, o neutralizamos com .mx-lg-n5
na .row
pai.
Alinhamento
Use utilitários flexbox de alinhamento para, verticalmente e horizontalmente, alinhar colunas.
Alinhamento vertical
Alinhamento horizontal
Sem gutters
As gutters, entre colunas, podem ser removidas com uma de nossas classes pré-definidas: .no-gutters
. Isto remove a margem negativa do .row
e padding
horizontal de todas colunas filhas imediatas.
Aqui está o código fonte para criar estes estilos. Perceba que sobrescrição de colunas só são cabíveis na primeira coluna e são selecionadas pelo seletor de atributo. Apesar de gerar um seletor mais específico, padding
de coluna ainda pode ser estilizado com utilitários de espaçamento.
Precisa de um design de ponta-a-ponta? Deixe as classes .container
ou .container-fluid
, de lado.
Na prática, é assim que fica. Perceba que você pode continuar a fazer isso com todas as classes grid pré-definidas, incluindo as de largura, breakpoint responsivo, reordenamento e muito mais.
Limite de colunas
Se mais de 12 colunas são colocadas dentro de só uma .row
, cada grupo de colunas extras vai pular para a próxima linha.
Já que 9 + 4 é maior que 12, esta div de quatro colunas pula para essa nova linha.
Colunas subsequentes pulam junto para a nova linha.
Quebra de colunas
Quebrar colunas, em uma nova linha, exige um pequeno hack: adicionar um elemento com width: 100%
, aonde quer que você queira que suas colunas pulem para uma nova linha. Normalmente, isso é conseguido com múltiplos .row
, mas isso não se encaixa em toda situação.
Você também pode aplicar esta quebra em breakpoints específicos, usando nossos utilitários de display responsivos.
Reordenamento
Classes de ordem
Use classes .order-
para controlar a ordem visual de seu conteúdo. Estas classes são responsivas, então, você pode definir a ordem por breakpoint (ex: .order-1.order-md-2
). Inclui suporte para ordenamento de 1
até 12
, em todos breakpoints do grid.
Também tem as classes responsivas .order-first
e .order-last
, as quais alteram a order
do elemento, aplicando order: -1
e order: 13
(order: $columns + 1
), respectivamente. Estas classes também podem ser misturadas com as classes numeradas .order-*
, se necessário.
Deslocando colunas
Você pode deslocar colunas, de duas maneiras: com nossas classes responsivas .offset-
e nossos utilitários de margem. Classes do grid podem ser combinadas para dimensionar colunas, enquato classes de margem são mais úteis para rápidos layouts, onde a largura do deslocamento é variável.
Classes offset
Mova colunas para a direita, usando classes .offset-md-*
. Estas classes crescem a margem esquerda da coluna, em *
colunas. Por exemplo , .offset-md-4
desloca o elemento .col-md-4
, por quatro colunas.
Além da limpeza de coluna, em breakpoints responsivos, você pode precisar resetar deslocamentos. Veja isso, em ação, no grid exemplo.
Utilitários de margem
Graças a migração para o flexbox, na v4, você você usar utilitários de margem (como .mr-auto
) para forçar colunas irmãs se distanciarem, uma das outras.
Aninhamento
Para aninhar seu conteúdo no grid padrão, coloque um .row
com um conjunto de colunas .col-sm-*
, dentro de uma coluna .col-sm-*
existente. Rows aninhados devem ter um conjunto de 12 colunas ou menos (não é obrigatório usar todo o espaço disponível para 12 colunas).
Mixins Sass
Quando usando os arquivos fonte Sass do Bootstrap, você tem a opção de usar variáveis e mixins Sass para criar layouts personalizados, semânticos e responsivos. Nossas classes grid pré-definidas usam as mesmas variáveis e mixins para gerarem todo um conjunto de classes prontas para usar, em layouts responsivos rápidos.
Variáveis
Variáveis e mapas determinam o número de colunas, largura da gutter e o ponto media query de começar a flutuar colunas. Nós usamos elas para gerar as classes pré-definidas mostradas acima, assim como os mixins listados abaixo.
Mixins
Mixins são usados em conjunto com as variáveis grid para gerar CSS semântico, em colunas individuais.
Exemplo de uso
Você pode modificar as variáveis para seus próprios valores ou, apenas, usar os mixins com seus valores padrões. Aqui está um exemplo, usando configurações padrões para criar um layout de duas colunas e um espaço, entre elas.
Personalizando o grid
Usando nossas variáveis e mapas Sass integrados, é possível customizar as classes grid pré-definidas, completamente. Altere a quantia de breakpoints, dimensões de media queries, largura de containers e recompile.
Colunas e gutters
O número de colunas pode ser modificado com variáveis Sass. $grid-columns
é usada para gerar as larguras (em porcentagem) de cada coluna individual, enquanto $grid-gutter-width
gera larguras para a coluna gutters.
Breakpoints
Além das colunas, você pode querer customizar o número de breakpoints. Se quiser só quatro deles, você atualizar $grid-breakpoints
e $container-max-widths
para algo assim:
Quando fazendo mudanças nos mapas ou variáveis Sass, você vai precisar salvar as mudanças e recompilar. Fazendo isso, um novo conjunto de classes pré-definidas para larguras, deslocamento e ordenamento, será gerado. Utilitários de visibilidade responsivos também serão atualizados para usarem os breakpoints customizados. Se assegure de colocar os valores grid em px
(não em rem
, em
ou %
).