Grupo de input
Facilmente, extenda os controles de formulário com textos, botões, selects personalizados, etc.
Exemplo básico
Coloque um add-on ou botão em qualquer um dos lados de um input. Você também pode colocar um botão em cada lado do input. No entanto, lembre-se de colocar o <label>
fora do grupo de input.
<div class= "input-group mb-3" >
<div class= "input-group-prepend" >
<span class= "input-group-text" id= "basic-addon1" > @</span>
</div>
<input type= "text" class= "form-control" placeholder= "Usuário" aria-label= "Usuário" aria-describedby= "basic-addon1" >
</div>
<div class= "input-group mb-3" >
<input type= "text" class= "form-control" placeholder= "Recipiente para nickname" aria-label= "Recipiente para nickname" aria-describedby= "basic-addon2" >
<div class= "input-group-append" >
<span class= "input-group-text" id= "basic-addon2" > @exemplo.com</span>
</div>
</div>
<label for= "basic-url" > Sua tão honrada URL</label>
<div class= "input-group mb-3" >
<div class= "input-group-prepend" >
<span class= "input-group-text" id= "basic-addon3" > https://exemplo.com.br/users/</span>
</div>
<input type= "text" class= "form-control" id= "basic-url" aria-describedby= "basic-addon3" >
</div>
<div class= "input-group mb-3" >
<div class= "input-group-prepend" >
<span class= "input-group-text" > R$</span>
</div>
<input type= "text" class= "form-control" aria-label= "Quantia" >
<div class= "input-group-append" >
<span class= "input-group-text" > .00</span>
</div>
</div>
<div class= "input-group" >
<div class= "input-group-prepend" >
<span class= "input-group-text" > Addon com textarea</span>
</div>
<textarea class= "form-control" aria-label= "Com textarea" ></textarea>
</div>
Tamanhos
Use as classes de dimensionamento de formulário no .input-group
e conteúdos dentro dele vão, automaticamente, redimensionar (não é necessário classes de dimensionamento em cada elemento).
Dimensionamento em elementos individuais do grupo de inputs, não é possível.
<div class= "input-group input-group-sm mb-3" >
<div class= "input-group-prepend" >
<span class= "input-group-text" id= "inputGroup-sizing-sm" > Pequeno</span>
</div>
<input type= "text" class= "form-control" aria-label= "Exemplo do tamanho do input" aria-describedby= "inputGroup-sizing-sm" >
</div>
<div class= "input-group mb-3" >
<div class= "input-group-prepend" >
<span class= "input-group-text" id= "inputGroup-sizing-default" > Padrão</span>
</div>
<input type= "text" class= "form-control" aria-label= "Exemplo do tamanho do input" aria-describedby= "inputGroup-sizing-default" >
</div>
<div class= "input-group input-group-lg" >
<div class= "input-group-prepend" >
<span class= "input-group-text" id= "inputGroup-sizing-lg" > Grande</span>
</div>
<input type= "text" class= "form-control" aria-label= "Exemplo do tamanho do input" aria-describedby= "inputGroup-sizing-lg" >
</div>
Checkboxes e radios
Coloque qualquer checkbox ou radio dentro do addon de grupo de input, invés de texto.
<div class= "input-group mb-3" >
<div class= "input-group-prepend" >
<div class= "input-group-text" >
<input type= "checkbox" aria-label= "Chebox para permitir input text" >
</div>
</div>
<input type= "text" class= "form-control" aria-label= "Input text com checkbox" >
</div>
<div class= "input-group" >
<div class= "input-group-prepend" >
<div class= "input-group-text" >
<input type= "radio" aria-label= "Botão radio para acompanhar input text" >
</div>
</div>
<input type= "text" class= "form-control" aria-label= "Input text com botão radio" >
</div>
Apesar de múltiplos <input>
serem suportados (visualmente), estilos de validação só estão disponíveis para grupos de input com um único <input>
.
<div class= "input-group" >
<div class= "input-group-prepend" >
<span class= "input-group-text" > Nome e sobrenome</span>
</div>
<input type= "text" aria-label= "First name" class= "form-control" >
<input type= "text" aria-label= "Last name" class= "form-control" >
</div>
Múltiplos addons
Múltiplos add-ons são suportados e podem ser misturados com input checkbox e radio.
<div class= "input-group mb-3" >
<div class= "input-group-prepend" >
<span class= "input-group-text" > R$</span>
<span class= "input-group-text" > 0.00</span>
</div>
<input type= "text" class= "form-control" aria-label= "Quantia em Dollar (com ponto e duas casas decimais)" >
</div>
<div class= "input-group" >
<input type= "text" class= "form-control" aria-label= "Quantia em Dollar (com ponto e duas casas decimais)" >
<div class= "input-group-append" >
<span class= "input-group-text" > R$</span>
<span class= "input-group-text" > 0.00</span>
</div>
</div>
Botões addons
<div class= "input-group mb-3" >
<div class= "input-group-prepend" >
<button class= "btn btn-outline-secondary" type= "button" id= "button-addon1" > Botão</button>
</div>
<input type= "text" class= "form-control" placeholder= "" aria-label= "Example text with button addon" aria-describedby= "button-addon1" >
</div>
<div class= "input-group mb-3" >
<input type= "text" class= "form-control" placeholder= "Recipient's username" aria-label= "Recipient's username" aria-describedby= "button-addon2" >
<div class= "input-group-append" >
<button class= "btn btn-outline-secondary" type= "button" id= "button-addon2" > Botão</button>
</div>
</div>
<div class= "input-group mb-3" >
<div class= "input-group-prepend" id= "button-addon3" >
<button class= "btn btn-outline-secondary" type= "button" > Botão</button>
<button class= "btn btn-outline-secondary" type= "button" > Botão</button>
</div>
<input type= "text" class= "form-control" placeholder= "" aria-label= "Example text with two button addons" aria-describedby= "button-addon3" >
</div>
<div class= "input-group" >
<input type= "text" class= "form-control" placeholder= "Recipient's username" aria-label= "Recipient's username with two button addons" aria-describedby= "button-addon4" >
<div class= "input-group-append" id= "button-addon4" >
<button class= "btn btn-outline-secondary" type= "button" > Botão</button>
<button class= "btn btn-outline-secondary" type= "button" > Botão</button>
</div>
</div>
<div class= "input-group mb-3" >
<div class= "input-group-prepend" >
<button class= "btn btn-outline-secondary dropdown-toggle" type= "button" data-toggle= "dropdown" aria-haspopup= "true" aria-expanded= "false" > Dropdown</button>
<div class= "dropdown-menu" >
<a class= "dropdown-item" href= "#" > Ação</a>
<a class= "dropdown-item" href= "#" > Outra ação</a>
<a class= "dropdown-item" href= "#" > Algo mais aqui</a>
<div role= "separator" class= "dropdown-divider" ></div>
<a class= "dropdown-item" href= "#" > Link isolado</a>
</div>
</div>
<input type= "text" class= "form-control" aria-label= "Input text com botão dropdown" >
</div>
<div class= "input-group" >
<input type= "text" class= "form-control" aria-label= "Input text com botão dropdown" >
<div class= "input-group-append" >
<button class= "btn btn-outline-secondary dropdown-toggle" type= "button" data-toggle= "dropdown" aria-haspopup= "true" aria-expanded= "false" > Dropdown</button>
<div class= "dropdown-menu" >
<a class= "dropdown-item" href= "#" > Ação</a>
<a class= "dropdown-item" href= "#" > Outra ação</a>
<a class= "dropdown-item" href= "#" > Algo mais aqui</a>
<div role= "separator" class= "dropdown-divider" ></div>
<a class= "dropdown-item" href= "#" > Link isolado</a>
</div>
</div>
</div>
Botões segmentados
<div class= "input-group mb-3" >
<div class= "input-group-prepend" >
<button type= "button" class= "btn btn-outline-secondary" > Ação</button>
<button type= "button" class= "btn btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-toggle= "dropdown" aria-haspopup= "true" aria-expanded= "false" >
<span class= "sr-only" > Dropdown</span>
</button>
<div class= "dropdown-menu" >
<a class= "dropdown-item" href= "#" > Ação</a>
<a class= "dropdown-item" href= "#" > Outra ação</a>
<a class= "dropdown-item" href= "#" > Algo mais aqui</a>
<div role= "separator" class= "dropdown-divider" ></div>
<a class= "dropdown-item" href= "#" > Link isolado</a>
</div>
</div>
<input type= "text" class= "form-control" aria-label= "Input dropdown com botão dropdown segmentado" >
</div>
<div class= "input-group" >
<input type= "text" class= "form-control" aria-label= "Input dropdown com botão dropdown segmentado" >
<div class= "input-group-append" >
<button type= "button" class= "btn btn-outline-secondary" > Ação</button>
<button type= "button" class= "btn btn-outline-secondary dropdown-toggle dropdown-toggle-split" data-toggle= "dropdown" aria-haspopup= "true" aria-expanded= "false" >
<span class= "sr-only" > Dropdown</span>
</button>
<div class= "dropdown-menu" >
<a class= "dropdown-item" href= "#" > Ação</a>
<a class= "dropdown-item" href= "#" > Outra ação</a>
<a class= "dropdown-item" href= "#" > Algo mais aqui</a>
<div role= "separator" class= "dropdown-divider" ></div>
<a class= "dropdown-item" href= "#" > Link isolado</a>
</div>
</div>
</div>
Grupos de input possuem suporte para selects e inputs de arquivos personalizados. As versões padrões de browsers deles não é suportada.
Select personalizado
<div class= "input-group mb-3" >
<div class= "input-group-prepend" >
<label class= "input-group-text" for= "inputGroupSelect01" > Opções</label>
</div>
<select class= "custom-select" id= "inputGroupSelect01" >
<option selected > Escolher...</option>
<option value= "1" > Um</option>
<option value= "2" > Dois</option>
<option value= "3" > Três</option>
</select>
</div>
<div class= "input-group mb-3" >
<select class= "custom-select" id= "inputGroupSelect02" >
<option selected > Escolher...</option>
<option value= "1" > Um</option>
<option value= "2" > Dois</option>
<option value= "3" > Três</option>
</select>
<div class= "input-group-append" >
<label class= "input-group-text" for= "inputGroupSelect02" > Opções</label>
</div>
</div>
<div class= "input-group mb-3" >
<div class= "input-group-prepend" >
<button class= "btn btn-outline-secondary" type= "button" > Botão</button>
</div>
<select class= "custom-select" id= "inputGroupSelect03" aria-label= "Exemplo de select com botão addon" >
<option selected > Escolher...</option>
<option value= "1" > Um</option>
<option value= "2" > Dois</option>
<option value= "3" > Três</option>
</select>
</div>
<div class= "input-group" >
<select class= "custom-select" id= "inputGroupSelect04" aria-label= "Exemplo de select com botão addon" >
<option selected > Escolher...</option>
<option value= "1" > Um</option>
<option value= "2" > Dois</option>
<option value= "3" > Três</option>
</select>
<div class= "input-group-append" >
<button class= "btn btn-outline-secondary" type= "button" > Botão</button>
</div>
</div>
<div class= "input-group mb-3" >
<div class= "input-group-prepend" >
<span class= "input-group-text" id= "inputGroupFileAddon01" > Upload</span>
</div>
<div class= "custom-file" >
<input type= "file" class= "custom-file-input" id= "inputGroupFile01" aria-describedby= "inputGroupFileAddon01" >
<label class= "custom-file-label" for= "inputGroupFile01" > Escolher arquivo</label>
</div>
</div>
<div class= "input-group mb-3" >
<div class= "custom-file" >
<input type= "file" class= "custom-file-input" id= "inputGroupFile02" >
<label class= "custom-file-label" for= "inputGroupFile02" aria-describedby= "inputGroupFileAddon02" > Escolher arquivo</label>
</div>
<div class= "input-group-append" >
<span class= "input-group-text" id= "inputGroupFileAddon02" > Upload</span>
</div>
</div>
<div class= "input-group mb-3" >
<div class= "input-group-prepend" >
<button class= "btn btn-outline-secondary" type= "button" id= "inputGroupFileAddon03" > Botão</button>
</div>
<div class= "custom-file" >
<input type= "file" class= "custom-file-input" id= "inputGroupFile03" aria-describedby= "inputGroupFileAddon03" >
<label class= "custom-file-label" for= "inputGroupFile03" > Escolher arquivo</label>
</div>
</div>
<div class= "input-group" >
<div class= "custom-file" >
<input type= "file" class= "custom-file-input" id= "inputGroupFile04" aria-describedby= "inputGroupFileAddon04" >
<label class= "custom-file-label" for= "inputGroupFile04" > Escolher arquivo</label>
</div>
<div class= "input-group-append" >
<button class= "btn btn-outline-secondary" type= "button" id= "inputGroupFileAddon04" > Botão</button>
</div>
</div>
Acessibilidade
Leitores de telas vão ter problemas com seus formulários se você não incluir um <label>
para cada input. Para estes grupos de input, se assegure de que qualquer label ou funcionalidade extra seja percebida pelas tecnologias assistivas.
A melhor técnica (elementos <label>
escondidos usando a classe .sr-only
ou o uso dos atributos aria-label
e aria-labelledby
, possivelmente, acompanhados do aria-describedby
) e informação a ser transmitida vai variar, dependendo do tipo de interface que você está implementando. Os exemplos, nesta seção, dão algumas sugestões, para casos diferentes.