Estou usando o Twitter Bootstrap 3 e tenho problemas quando quero alinhar verticalmente dois div
, por exemplo - link JSFiddle :
<!-- Latest compiled and minified CSS -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css">
<!-- Optional theme -->
<link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap-theme.min.css">
<!-- Latest compiled and minified JavaScript -->
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.4/js/bootstrap.min.js"></script>
<div class="row">
<div class="col-xs-5">
<div style="height:5em;border:1px solid #000">Big</div>
</div>
<div class="col-xs-5">
<div style="height:3em;border:1px solid #F00">Small</div>
</div>
</div>
O sistema de grade no Bootstrap usa float: left
, não display:inline-block
, portanto a propriedade vertical-align
não funciona. Tentei usar margin-top
para corrigi-lo, mas acho que essa não é uma boa solução para o design responsivo.
html
css
twitter-bootstrap
twitter-bootstrap-3
corinem
fonte
fonte
div
, sem o texto do interior, algo como isto jsfiddle.net/corinem/Aj9H9 mas neste exemplo, eu não uso de bootstrapRespostas:
Você ainda pode usar uma classe personalizada quando precisar:
Bootply
O uso
inline-block
adiciona espaço extra entre os blocos se você deixar um espaço real no seu código (como...</div> </div>...
). Esse espaço extra quebra nossa grade se o tamanho da coluna atingir 12:Aqui, temos espaços extras entre
<div class="[...] col-lg-2">
e<div class="[...] col-lg-10">
(retorno de carro e 2 guias / 8 espaços). E entao...Vamos chutar esse espaço extra !!
Observe os comentários aparentemente inúteis
<!-- ... -->
? Eles são importantes - sem eles, o espaço em branco entre os<div>
elementos ocupará espaço no layout, interrompendo o sistema de grade.Nota: o Bootply foi atualizado
fonte
col-lg-2
ecol-lg-10
). Curiosamente, se você adicionar o seguinte código JS (assumindo jQuery), consegue fixar-se:$('.row').html($('.vcenter'));
inline-block
espaço extra (bem conhecido) . Eu dou uma solução na minha edição.Layout de caixa flexível
Com o advento da CSS Flexible Box , muitos dos pesadelos 1 dos web designers foram resolvidos. Um dos mais hacky, o alinhamento vertical. Agora é possível mesmo em alturas desconhecidas .
O Flexible Box (ou, em resumo, Flexbox), é um novo sistema de layout projetado especificamente para fins de layout. A especificação afirma :
Como isso pode ajudar nesse caso? Bem vamos ver.
Colunas alinhadas verticais
Usando o Twitter Bootstrap, temos
.row
alguns.col-*
s. Tudo o que precisamos fazer é exibir os.row
2 desejados como uma caixa de contêiner flexível e, em seguida, alinhar todos os seus itens flexíveis (as colunas) verticalmente poralign-items
propriedade.EXEMPLO AQUI (Por favor, leia os comentários com cuidado)
A saída
A área colorida exibe a caixa de preenchimento das colunas.
Esclarecendo sobre
align-items: center
Big Alert
Nota importante # 1: O Twitter Bootstrap não especifica as
width
colunas em dispositivos extras pequenos, a menos que você dê uma das.col-xs-#
classes às colunas.Portanto, nesta demonstração em particular, usei
.col-xs-*
classes para que as colunas sejam exibidas corretamente no modo móvel, porque especifica owidth
explicitamente a coluna.Mas como alternativa, você pode desativar o layout do Flexbox simplesmente mudando
display: flex;
paradisplay: block;
tamanhos de tela específicos. Por exemplo:Ou você pode especificar
.vertical-align
apenas em tamanhos de tela específicos como:Nesse caso, eu seguiria a abordagem de @KevinNelson .
Nota importante # 2: prefixos de fornecedores omitidos devido à brevidade. A sintaxe do Flexbox foi alterada ao longo do tempo. A nova sintaxe escrita não funcionará em versões mais antigas de navegadores da Web (mas não tão antigas quanto o Internet Explorer 9! Flexbox é suportada no Internet Explorer 10 e posterior).
Isso significa que você também deve usar propriedades prefixadas pelo fornecedor, como
display: -webkit-box
assim por diante, no modo de produção.Se você clicar em "Alternar exibição compilada" na demonstração , verá a versão prefixada das declarações CSS (graças ao Autoprefixer ).
Colunas de altura total com conteúdo alinhado vertical
Como você vê na demonstração anterior , as colunas (os itens flexíveis) não são mais tão altas quanto o contêiner (a caixa do contêiner flexível).
.row
elemento).Isso ocorre devido ao uso de
center
valor paraalign-items
propriedade. O valor padrão éstretch
para que os itens possam preencher toda a altura do elemento pai.Para corrigir isso, você também pode adicionar
display: flex;
às colunas:EXEMPLO AQUI (Mais uma vez, observe os comentários)
A saída
A área colorida exibe a caixa de preenchimento das colunas.
Por último, mas não menos importante , observe que as demos e os trechos de código aqui têm como objetivo fornecer uma idéia diferente, fornecer uma abordagem moderna para atingir a meta. Observe a seção " Big Alert " se você usar essa abordagem em sites ou aplicativos do mundo real.
Para leitura adicional, incluindo suporte ao navegador, esses recursos seriam úteis:
1. Alinhe verticalmente uma imagem dentro de uma div com a altura de resposta 2. É melhor usar uma classe adicional para não alterar o padrão do Twitter Bootstrap
.row
.fonte
col-*
, seu violino / código não está usando o bootstrap, portanto, eles são enganosos. Seus exemplos não funcionam com bootstrap; seu sistema de grade não é baseadoflex
, portanto, eles são incompatíveis. Simplesmente tente qualquer um dos seus exemplos em uma página alimentada por inicialização e você perceberá que eles não funcionam.O código abaixo funcionou para mim:
fonte
Atualização 2020
Eu sei que a pergunta original era para o Bootstrap 3, mas agora que o Bootstrap 4 foi lançado, aqui estão algumas orientações atualizadas sobre o centro vertical.
Importante! O centro vertical é relativo à altura do pai
Bootstrap 4
Agora que o Bootstrap 4 é o flexbox por padrão, existem muitas abordagens diferentes para o alinhamento vertical usando: margens automáticas , utilitários do flexbox ou os utilitários de exibição junto com os utilitários de alinhamento vertical . A princípio, "utilitários de alinhamento vertical" parece óbvio, mas esses funcionam apenas com elementos de exibição em linha e tabela. Aqui estão algumas opções de centralização vertical do Bootstrap 4.
1 - Centro vertical usando margens automáticas:
Outra maneira de centralizar verticalmente é usar
my-auto
. Isso centralizará o elemento dentro de seu contêiner. Por exemplo,h-100
aumenta a altura da linha emy-auto
centraliza verticalmente acol-sm-12
coluna.Bootstrap 4 - Centro vertical usando margens automáticas demonstração de
my-auto
representa margens no eixo y vertical e é equivalente a:2 - Centro vertical com Flexbox:
Como o Bootstrap 4
.row
é agora,display:flex
você pode simplesmente usaralign-self-center
em qualquer coluna para centralizá-lo verticalmente ...ou use
align-items-center
no todo.row
para alinhar verticalmente todo o alinhamentocol-*
na linha ...Bootstrap 4 - Centro Vertical diferentes colunas de altura Demonstração
3 - Centro vertical usando os utilitários de exibição:
Bootstrap 4 tem utils de visualização que podem ser utilizados para
display:table
,display:table-cell
,display:inline
, etc .. Estes podem ser usados com os utils alinhamento vertical para alinhar em linha, em linha ou bloco de elementos de célula de tabela.Bootstrap 4 - Centro vertical usando os utilitários de exibição Demo
Veja também: Alinhamento vertical centralizado no Bootstrap 4
Bootstrap 3
Método Flexbox no contêiner dos itens a serem centralizados:
Transforme o método translateY:
Exibir método embutido:
Demonstração dos métodos de centralização do Bootstrap 3
fonte
mx-auto
(centralização horizontal), portanto, faz sentidomy-auto
centralizar verticalmente (eixo y).Tente isso no CSS da div:
fonte
Eu pensei em compartilhar minha "solução", caso ajude alguém que não esteja familiarizado com as consultas do @media.
Graças à resposta de @ HashemQolami, criei algumas consultas de mídia que funcionariam para dispositivos móveis, como as classes col- *, para que eu pudesse empilhá-las para dispositivos móveis, mas exibi-las verticalmente alinhadas no centro para telas maiores, por exemplo
.
Layouts mais complicados que exigem um número diferente de colunas por resolução de tela (por exemplo, 2 linhas para -xs, 3 para -sm e 4 para -md, etc.) precisariam de uma finagling mais avançada, mas para uma página simples com -xs empilhados e -sm e maiores em linhas, isso funciona bem.
fonte
clear: both;
às classes dentro das consultas de mídia para que isso funcionasse..row
modificador ... então deve parecerclass="row row-sm-flex-center"
. O BS3.row
definição lida com aclear:both;
clear: both;
novo.Após a resposta aceita, se você não deseja personalizar a marcação, para separar preocupações ou simplesmente porque usa um CMS, a solução a seguir funciona bem:
A limitação aqui é que você não pode herdar o tamanho da fonte do elemento pai porque a linha define o tamanho da fonte como 0 para remover o espaço em branco.
fonte
Prefiro esse método conforme o CSS vertical do centro David Walsh :
O
transform
não é essencial; apenas encontra o centro com um pouco mais de precisão. O Internet Explorer 8 pode estar um pouco menos centralizado como resultado, mas ainda assim não é ruim - Posso usar - Transforma 2d .fonte
Esta é a minha solução. Basta adicionar esta classe ao seu conteúdo CSS.
Então seu HTML ficaria assim:
fonte
Acabei de fazer isso e faz o que quero que faça.
E agora minha página parece
fonte
Eu realmente acho que o código a seguir funciona usando o Chrome e não outros navegadores além da resposta atualmente selecionada:
Link de inicialização
Pode ser necessário alterar as alturas (especificamente ativadas
.v-center
) e remover / alterar a divisão conformediv[class*='col-']
suas necessidades.fonte
Eu encontrei esse mesmo problema. No meu caso, eu não sabia a altura do contêiner externo, mas foi assim que o corrigi:
Primeiro, defina a altura dos seus elementos
html
ebody
para que eles sejam 100%. Isso é importante! Sem isso, os elementoshtml
ebody
simplesmente herdarão a altura de seus filhos.Então eu tive uma classe de contêiner externo com:
E por último o contêiner interno com classe:
HTML é tão simples quanto:
É tudo o que você precisa para alinhar verticalmente o conteúdo. Confira em violino:
Jsfiddle
fonte
Não há necessidade de tabela e células de tabela. Isso pode ser alcançado facilmente usando a transformação.
Exemplo: http://codepen.io/arvind/pen/QNbwyM
Código:
fonte
Se você estiver usando o botão Menos versão do Bootstrap e estiver compilando no CSS, poderá usar algumas classes de utilitário para usar com as classes do Bootstrap.
Descobri que eles funcionam extraordinariamente bem onde quero preservar a capacidade de resposta e a configurabilidade do sistema de grade do Bootstrap (como usar
-md
ou-sm
), mas quero que todas as colunas em uma determinada linha tenham a mesma altura vertical (para que eu possa alinhe verticalmente o conteúdo e faça com que todas as colunas da linha compartilhem um meio comum).CSS / Menos:
HTML:
fonte
Eu elaborei um pouco a resposta do zessx , para facilitar o uso ao misturar diferentes tamanhos de coluna em diferentes tamanhos de tela.
Se você usa o Sass , pode adicioná-lo ao seu arquivo scss:
O que gera o seguinte CSS (que você pode usar diretamente em suas folhas de estilo, se não estiver usando o Sass):
Agora você pode usá-lo em suas colunas responsivas como esta:
fonte
Os comportamentos do Flex são suportados nativamente desde o Bootstrap 4. Adicione
d-flex align-items-center
orow
div. Você não precisa mais modificar seu conteúdo CSS.Exemplo simples: http://jsfiddle.net/vgks6L74/
Com o seu exemplo: http://jsfiddle.net/7zwtL702/
Fonte: Flex · Bootstrap
fonte
OK, acidentalmente misturei algumas soluções, e finalmente funciona agora para o meu layout, onde tentei criar uma tabela 3x3 com colunas Bootstrap na menor resolução.
fonte
fonte
Tente isso,
fonte
Existem várias maneiras de fazer isso:
Usar
e o CSS do contêiner para
Use o preenchimento junto com a tela de mídia para alterar o preenchimento em relação ao tamanho da tela. Tela do Google @media para saber mais.
Use preenchimento relativo
Ou seja, especifique o preenchimento em termos de%
fonte
Com o Bootstrap 4 (atualmente em alfa), você pode usar a
.align-items-center
classe. Assim, você pode manter o caráter responsivo do Bootstrap. Funciona imediatamente bem para mim. Consulte a documentação do Bootstrap 4 .fonte
HTML
CSS
fonte
Corri para a mesma situação em que queria alinhar alguns elementos div verticalmente em uma linha e descobri que as classes do Bootstrap col-xx-xx aplicam estilo à div como float: left.
Eu tive que aplicar o estilo nos elementos div como style = "Float: none" e todos os meus elementos div começaram alinhados verticalmente. Aqui está o exemplo de trabalho:
JsFiddle Link
Apenas no caso de alguém querer ler mais sobre a propriedade float:
W3Schools - Flutuador
fonte