Por que os botões e as entradas não se alinham bem no Bootstrap?
Eu tentei algo simples como:
<input type="text"/><button class="btn">button</button>
O botão é mais 5px
baixo que a entrada no chrome / firefox.
Por que os botões e as entradas não se alinham bem no Bootstrap?
Eu tentei algo simples como:
<input type="text"/><button class="btn">button</button>
O botão é mais 5px
baixo que a entrada no chrome / firefox.
Respostas:
No Twitter Bootstrap 4, entradas e botões podem ser alinhados usando as classes input-group-prepend
e input-group-append
(consulte https://getbootstrap.com/docs/4.0/components/input-group/#button-addons )
<div class="input-group mb-3">
<div class="input-group-prepend">
<button class="btn btn-outline-secondary" type="button">Button</button>
</div>
<input type="text" class="form-control">
</div>
<div class="input-group mb-3">
<div class="input-group-append">
<button class="btn btn-outline-secondary" type="button">Button</button>
</div>
<input type="text" class="form-control">
</div>
Conforme mostrado na resposta de @abimelex, entradas e botões podem ser alinhados usando as .input-group
classes (consulte http://getbootstrap.com/components/#input-groups-buttons )
<div class="input-group">
<span class="input-group-btn">
<button class="btn btn-default" type="button">Go!</button>
</span>
<input type="text" class="form-control">
</div>
<div class="input-group">
<input type="text" class="form-control">
<span class="input-group-btn">
<button class="btn btn-default" type="button">Go!</button>
</span>
</div>
Esta solução foi adicionada para manter minha resposta atualizada, mas faça seu voto positivo na resposta fornecida por @abimelex .
O Bootstrap oferece uma .input-append
classe, que funciona como um elemento wrapper e corrige isso para você:
<div class="input-append">
<input name="search" id="search"/>
<button class="btn">button</button>
</div>
Como apontado por @OleksiyKhilkevich em sua resposta, existe uma segunda maneira de alinhar input
e button
usando a .form-horizontal
classe:
<div class="form-horizontal">
<input name="search" id="search"/>
<button class="btn">button</button>
</div>
A diferença entre essas duas classes é que .input-append
colocará button
o input
elemento contra o elemento (para que pareçam estar anexados), onde .form-horizontal
colocará um espaço entre eles.
-- Nota --
Para permitir a input
e button
elementos de ser ao lado do outro sem espaçamento, o font-size
foi definido como 0
na .input-append
classe (isto remove o espaçamento branco entre os inline-block
elementos). Isso pode ter um efeito adverso no tamanho da fonte do input
elemento, se você deseja substituir os padrões usando em
ou %
medidas.
.input-append
aula.
margin-bottom: 9px
mas os botões não, para que eles não ocupem o mesmo espaço vertical. Como os dois elementos têm um middle
alinhamento vertical, o botão é deslocado devido à diferença. O uso do .input-append
wrapper remove esse valor da margem inferior.
você pode usar a propriedade do botão do grupo de entrada para aplicar o botão diretamente ao campo de entrada.
Bootstrap 3 e 4
<div class="input-group">
<input type="text" class="form-control">
<span class="input-group-btn">
<button class="btn btn-default" type="button">Go!</button>
</span>
</div><!-- /input-group -->
Dê uma olhada no documento do grupo de entrada do BS4 para muitos outros exemplos.
<div class="form-group input-group-btn">
Apenas o aviso, parece haver uma classe CSS especial para isso chamada form-horizontal
input-append tem outro efeito colateral, que reduz o tamanho da fonte a zero
font-size: 0
e aprenderam algo novo :) Obrigado!
Use .form-inline = Isso alinhará os rótulos à esquerda e os controles de bloco em linha para um layout compacto.
Exemplo: http://jsfiddle.net/hSuy4/292/
<div class="form-inline">
<input type="text">
<input type="button" class="btn" value="submit">
</div>
.form-horizontal = Alinhe os rótulos à direita e flutue-os para a esquerda para fazê-los aparecer na mesma linha dos controles, o que é melhor para o layout de formulário de 2 colunas.
(e.g.
Label 1: [textbox]
Label 2: [textbox]
: [button]
)
Exemplos: http://twitter.github.io/bootstrap/base-css.html#forms
form-inline
funciona para o Bootstrap 3. Obrigado.
Tentei acima de tudo e terminei com poucas alterações que gostaria de compartilhar. Aqui está o código que funciona para mim (encontre a captura de tela em anexo):
<div class="input-group">
<input type="text" class="form-control" placeholder="Search text">
<span class="input-group-btn" style="width:0;">
<button class="btn btn-default" type="button">Go!</button>
</span>
</div>
Se você quiser vê-lo funcionando, basta usar o código abaixo no seu editor:
<html>
<head>
<link type='text/css' rel='stylesheet' href='https://maxcdn.bootstrapcdn.com/bootstrap/3.0.0/css/bootstrap.min.css' />
</head>
<body>
<div class="container body-content">
<div class="form-horizontal">
<div class="input-group">
<input type="text" class="form-control" placeholder="Search text">
<span class="input-group-btn" style="width:0;">
<button class="btn btn-default" type="button">Go!</button>
</span>
</div>
</div>
</div>
</body>
</html>
Espero que isto ajude.
style="width:0;"
?
<div class="col-md-4">
Não há necessidade dewidth: 0
Eu também estava lutando com o mesmo problema. As classes de inicialização que eu uso não estão funcionando para mim. Eu vim com uma solução alternativa, como abaixo:
<form action='...' method='POST' class='form-group'>
<div class="form-horizontal">
<input type="text" name="..."
class="form-control"
placeholder="Search People..."
style="width:280px;max-width:280px;display:inline-block"/>
<button type="submit"
class="btn btn-primary"
style="margin-left:-8px;margin-top:-2px;min-height:36px;">
<i class="glyphicon glyphicon-search"></i>
</button>
</div>
</form>
Basicamente, substituí a propriedade display da classe "form-control" e usei outras propriedades de estilo para corrigir o tamanho e a posição.
A seguir está o resultado:
Bootstrap 4:
<div class="input-group">
<input type="text" class="form-control">
<div class="input-group-append">
<button class="btn btn-success" type="button">Button</button>
</div>
</div>
<form class="form-inline">
<div class="form-group">
<label class="sr-only" for="exampleInputEmail3">Email address</label>
<input type="email" class="form-control" id="exampleInputEmail3" placeholder="Email">
</div>
<button type="submit" class="btn btn-default">Sign in</button>
</form>
Tentei todos os códigos acima e nenhum deles corrigiu meus problemas. Aqui está o que funcionou para mim. Eu usei input-group-addon.
<div class = "input-group">
<span class = "input-group-addon">Go</span>
<input type = "text" class = "form-control" placeholder="you are the man!">
</div>
Não está diretamente relacionado, a menos que você tenha um código semelhante, mas notei um comportamento estranho ao formulário em linha, bootstrap 3.3.7
Eu não usei linha e células para isso, pois é um projeto de área de trabalho, se a tag de abertura estivesse abaixo da tabela (neste caso):
<table class="form-inline">
<form>
<tr>
Os elementos do formulário seriam empilhados.
Interruptor e alinhado corretamente.
<form>
<table class="form-inline">
<tr>
O Safari 10.0.2 e o Chrome mais recente não fizeram nenhuma diferença. Talvez meu layout estivesse errado, mas não perdoasse muito.
Pegue um flutuador de entrada como à esquerda. Então pegue o botão e flutue para a direita. Você pode corrigir a classe quando levar mais de um para distanciar.
<input style="width:65%;float:left"class="btn btn-primary" type="text" name="name">
<div style="width:8%;float:left"> </div>
<button class="btn btn-default" type="button">Go!</button>
<div class="clearfix" style="margin-bottom:10px"> </div>