Escolar Documentos
Profissional Documentos
Cultura Documentos
Descubra o Bootstrap, o framework mais conhecido do mundo para criar sites responsivos e mobile, comece
com o BootstrapCDN e nosso template inicial.
The new generation of project management tools is here and it’s visual.ads via Carbon
Visão rápida
Tentando adicionar rapidamente o Bootstrap ao seu projeto? Use o BootstrapCDN, fornecido gratuitamente
pelo pessoal da MaxCDN. Usando um gerenciador de pacotes ou precisa do código fonte? Vá para a página
de downloads.
CSS
Copie e cole o arquivo de estilo <link> dentro da sua <head> antes de todos os outros arquivos de estilo
para carregar nosso CSS.
Copy
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO"
crossorigin="anonymous">
JS
Muitos dos nossos componentes precisam de JavaScript para funcionar. Mais especificamente, eles precisam
do jQuery, Popper.js e do nossos próprios plugins JavaScript. Coloque os seguintes <script>s perto do final
da sua página, logo antes do fechamento da tag </body>. jQuery tem que vir antes, depois o Popper.js e só
depois nossos plugins JavaScript.
Nós usamos a build slim do jQuery, mas a versão completa também é suportada.
Copy
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-
q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"
integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49"
crossorigin="anonymous"></script>
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-
ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
Curiosidade para saber quais componentes precisam de jQuery, nosso JS e Popper.js? Clique em “Mostrar
componentes dependentes de JavaScript” logo abaixo. Se ainda tem dúvidas sobre a estrutura da página em
geral, continue lendo para um templete de exemplo de página.
Our bootstrap.bundle.js and bootstrap.bundle.min.js include Popper, but not jQuery. For more
information about what’s included in Bootstrap, please see our contents section.
Copy
<!DOCTYPE html>
<html lang="pt-br">
<head>
<!-- Meta tags Obrigatórias -->
<meta charset="utf-8">
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
<title>Olá, mundo!</title>
</head>
<body>
<h1>Olá, mundo!</h1>
Importância geral
O Bootstrap usa um punhado de estilos globais e configurações importantes que você precisará ficar atento,
quando tiver usando, os quais são guiados a normalização de estilos cross browsers. Vamos lá!
HTML5 doctype
Bootstrap exige o uso do doctype HTML5. Sem isso, você verá alguns estilos incompletos e esquisitos.
Copy
<!DOCTYPE html>
<html lang="pt-br">
...
</html>
Bootstrap tem uma abordagem mobile first, uma estratégia que optimizamos o código para dispositivos
móveis primeiro e, então, é que começamos a pensar em media queries para aparelhos maiores. Por isso,
para garantir renderização adequada e touch zooming em todos eletrônicos, use a tag responsiva
viewport no <head>.
Copy
<meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no">
Você pode ver um exemplo disso em ação, neste template iniciante.
Box-sizing
Para um redimensionamento mais intuitivo no CSS, nós trocamos o valor do box-sizingglobal de content-
box para border-box. Dessa maneira, garantimos que o padding não afetará a largura computada final de um
elemento, apesar de isto poder causar problemas em alguns softwares de terceiros, como Google Maps e
Google Search Engine.
Copy
.seletor-para-algum-widget {
box-sizing: content-box;
}
Com o snippet acima, elementos aninhados (incluindo conteúdo gerado via ::before e ::after) vão herdar
o box-sizing especificado no seletor-para-algum-widget.
Reboot
Para uma renderização cross-browser melhorada, nós usamos o Reboot para corrigir inconsistências através
dos browsers, enquanto provemos resets um pouquinho customizados para elementos HTML comuns.
Comunidade
Fique atualizado no desenvolvimento do Bootstrap e encontre nossa comunidade através destas fontes
úteis:
Você também pode seguir o @getbootstrap no Twitter, para as melhores fofocas e vídeo clipes. =)
Download
Baixe o Bootstrap e obtenha o CSS e JavaScript compilado, além do código fonte. Também, você pode
incluir o framework no seu gerenciador de pacotes predileto como npm, RubyGems, etc.
All the tools your team needs in one place. Slack: Where work happens.ads via Carbon
CSS e JS compilado
Baixe o código compilado e pronto para uso do Bootstrap v4.1.3 para, facilmente, começar seu projeto. O
download inclui:
Este download não inclui documentação, códigos fontes ou qualquer dependências JavaScripts (jQuery ou
Popper.js).
Baixar
Arquivos fontes
Compile o Bootstrap com suas próprias ferramentas, baixando nosso Sass, JavaScript e arquivos da
documentação. Esta opção requer algumas ferramentas adicionais:
Ferramentas de build são usadas para desenvolver o Bootstrap e sua documentação, mas pode ser que
sejam desncessárias para você.
Baixar fonte
BootstrapCDN
Evite o download, usando a BootstrapCDN para ter uma versão em cache dos CSS e JS compilados, em seu
porjeto.
Copy
<link rel="stylesheet" href="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/css/bootstrap.min.css"
integrity="sha384-MCw98/SFnGE8fJT3GXwEOngsV7Zt27NXFoaoApmYm81iuXoPkFOJwJ8ERdknLPMO"
crossorigin="anonymous">
<script src="https://stackpath.bootstrapcdn.com/bootstrap/4.1.3/js/bootstrap.min.js" integrity="sha384-
ChfqqxuZUCnJSK3+MXmPNIyE6ZbWh2IMqE241rYiqJxyMiZ6OW/JmZQ5stwEULTy" crossorigin="anonymous"></script>
Se você está usando nosso JavaScript compilado, não esqueça de incluir as versões em CDN do jQuery e
Popper.js, antes dele.
Copy
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js" integrity="sha384-
q8i/X+965DzO0rT7abK41JStQIAqVgRVzpbzo5smXKp4YfRvH+8abtTE1Pi6jizo" crossorigin="anonymous"></script>
<script src="https://cdnjs.cloudflare.com/ajax/libs/popper.js/1.14.3/umd/popper.min.js"
integrity="sha384-ZMP7rVo3mIykV+2+9J3UJ46jBk0WLaUAdn689aCwoqbBJiSnjAK/l8WvCWPIPm49"
crossorigin="anonymous"></script>
Gerenciador de pacotes
Use o código fonte Bootstrap em qualquer projeto, com ajuda dos mais populares gerenciadores de
pacotes. Não importa o gerenciador de pacotes, o Bootstrap vai precisar de um compilador Sass e
do Autoprefixer, para se ter uma configuração compatível com nossa versão compilada oficial.
npm
Copy
npm install bootstrap
require('bootstrap') vai carregar todos os plugins jQuery no objeto jQuery. O próprio
módulo bootstrap não exporta nada. Você pode, manualmente, carregar os plugins jQuery Bootstrap
individualmente, carregando os arquivos /js/*.js dentro do diretório principal dos pacotes.
RubyGems
Instale o Bootstrap em seus apps Ruby, usando o Bundler (recomendado) e RubyGems, adicionando a
seguinte linha ao seu Gemfile:
Copy
gem 'bootstrap', '~> 4.1.3'
Alternativamente, se você não está usando o Bundler, pode instalar a gem executando este comando:
Copy
gem install bootstrap -v 4.1.3
Veja o README da gem, para mais detalhes.
Composer
Você também pode instalar e gerenciar o Sass e JavaScript do Bootstrap, usando o Composer:
Copy
composer require twbs/bootstrap:4.1.3
NuGet
Se você desenvolve em .NET, também pode instalar e gerenciar CSS, Sass e Javascript, usando NuGet:
Copy
Install-Package bootstrap
Copy
Install-Package bootstrap.sass
Conteúdos
Descubra oquê têm no Bootstrap, incluindo nosso código fonte e compilado. Lembrando-se, também, que
os plugins JavaScript precisam de jQuery.
All the tools your team needs in one place. Slack: Where work happens.ads via Carbon
Bootstrap compilado
Uma vez baixado, descompacte a pasta comprimida e verá algo como isso:
Copy
bootstrap/
├── css/
│ ├── bootstrap-grid.css
│ ├── bootstrap-grid.css.map
│ ├── bootstrap-grid.min.css
│ ├── bootstrap-grid.min.css.map
│ ├── bootstrap-reboot.css
│ ├── bootstrap-reboot.css.map
│ ├── bootstrap-reboot.min.css
│ ├── bootstrap-reboot.min.css.map
│ ├── bootstrap.css
│ ├── bootstrap.css.map
│ ├── bootstrap.min.css
│ └── bootstrap.min.css.map
└── js/
├── bootstrap.bundle.js
├── bootstrap.bundle.js.map
├── bootstrap.bundle.min.js
├── bootstrap.bundle.min.js.map
├── bootstrap.js
├── bootstrap.js.map
├── bootstrap.min.js
└── bootstrap.min.js.map
Basicamente, isto é o Bootstrap: arquivos compilados, para uso rápido em qualquer projeto web. Nós
provemos CSS e JS compilados (bootstrap.*), assim como CSS e JS compilados e minificados
(bootstrap.min*). Source maps CSS (bootstrap.*.map) estão disponíveis para uso em certas ferramentas de
desenvolvedores dos browsers. Arquivos JS bundle (bootstrap.bundle.js e a versão
minificada bootstrap.bundle.min.js) usam Popper, mas não jQuery.
Arquivos CSS
Bootstrap te da um punhado de opções para usar alguns ou todos os nossos CSSs compilados.
bootstrap-grid.css Apenas o sistema de grid Não incluído Não incluído Apenas utilitários f
Arquivos CSS Layout Conteúdo Componentes Utilitários
bootstrap-grid.min.css
Arquivos JS
Similarmente, nós temos opções para uso de alguns ou todos os nosso scripts compilados.
Copy
bootstrap/
├── dist/
│ ├── css/
│ └── js/
├── docs/
│ └── examples/
├── js/
└── scss/
Os diretórios scss/ e js/ são os códigos fontes do nosso CSS e JavaScript. A pasta dist/inclui tudo listado
no download precompilado, que vimos na seção acima. O docs/ possui o código fonte da documentação e
no examples/ temos a código para exemplos de uso do Bootstrap. Além disso, qualquer outro arquivo tem
papel de dar suporte à pacotes, informações de licenças e desenvolvimento.
Browsers e dispositivos
Aprenda sobre os browsers e dispositivos (dos modernos até os antigos) que suportam o Bootstrap,
incluindo quirks e bugs conhecidos, em cada.
Start sending beautiful transactional email in minutes with Postmark.ads via Carbon
Suporte de browsers
Bootstrap é suportado pelas versões mais recentes e estáveis dos maiores navegadores e plataformas. No
Windows, somos suportados pelo Internet Explorer 10, 11 e Microsoft Edge.
Navegadores alternativos que usam a versão mais recente do WebKit, Blink ou Gecko (tanto diretamente,
quanto através da API web view da plataforma) não suportam explicitamente o Bootstrap. Contudo, o
framework funciona normalmente (na maioria dos casos) nesses browsers. Informações mais específicas a
respeito estão abaixo.
Você pode consultar nosso leque de browsers com suporte e suas versões no nosso
arquivo browserslistrc.json:
Copy
# https://github.com/browserslist/browserslist#readme
>= 1%
last 1 major version
not dead
Chrome >= 45
Firefox >= 38
Edge >= 12
Explorer >= 10
iOS >= 9
Safari >= 9
Android >= 4.4
Opera >= 30
Nós usamos o Autoprefixer para obter o suporte esperado (usando prefixos CSS), o qual
usa Browserslist para gerenciar as versões destes navegadores.
Dispositivos móveis
No geral, Bootstrap é suportado pelas versões mais recentes das maiores plataformas padrões dos browsers.
No entanto, lembre-se que proxy browsers (como o Opera Mini, modo turbo do Opera Mobile, UC Browser
Mini, Amazon Silk) não são suportados.
De forma parecida, as versões mais recentes da maioria dos navegadores desktops são suportadas.
No Firefox, em adição ao release mais recente e estável, nós também temos suporte da recente versão
“Extended Support Release (ESR)”.
Não oficialmente, Bootstrap vai se apresentar e comportar bem no Chromium, Chrome e Firefox para Linux,
além do Internet Explorer 9 (apesar de não termos suporte oficial).
Para consultar alguns bugs que o Bootstrap enfrenta, veja nosso Mural de bugs.
Internet Explorer
Do Internet Explorer 10 acima, nós temos suporte. No entanto, do IE9 para baixo, não temos. Portanto,
esteja atento que algumas propriedades CSS3 e elementos HTML5 não são, totalmente, suportadas no IE10
ou requerem prefixos para compatilidade. Visite o site Can I use… para detalhes sobre suporte CSS3 em
browsers e recursos HTML5.
Se você precisa de suporte no IE8 ou 9, use o Bootstrap 3. É a versão mais estável do nosso código e
nosso time ainda dá suporte para reparar bugs críticos e alterar a documentação. Contudo, nem um recurso
novo será adicionado a ela.
Suporte para overflow: hidden; no elemento <body> é um pouco limitado, no iOS e Android. Nesse sentido,
quando você rola perto da parte superior ou inferior do modal (em algum dos browsers destes dispositivos),
o conteúdo do <body> vai começar a rolar. Veja o bug do Chrome #175502 (reparado no Chrome v40) e
o bug Webkit #153852.
A partir do iOS 9.2, enquanto o modal está aberto, se o toque inicial do gesto de rolagem está dentro dos
limites de um <input> de texto ou <textarea>, o conteúdo do <body> abaixo do modal vai ser rolado, invés
do modal. Veja o bug Webkit #153856.
Dropdowns navbar
O elemento .dropdown-backdrop não é usando no iOS, por causa da complexidade do z-index. Portanto, para
fechar dropdowns em navbars, você deve clicar diretamente no elemento dropdown ou qualquer outro
elemento que vai acionar o evento de clique no iOS).
Zoom em browsers
Dar zoom em páginas irá mostrar, inevitavelmente, artefatos de renderização em alguns componentes, tanto
no Bootstrap quando no resto da web. Dependendo do problema, poderemos consertá-lo, bastando
pesquisar antes e depois abrir um issue (se necessário). Contudo, nós tendemos a ignorar estes problemas,
já que eles não possuem soluções diretas, aléms de hacks, normalmente.
Durante nossos realeases v4 alpha e beta, nós incluímos códigos incompletos e comentados para dar a
opção de usar uma media query que desativaria estilos hover em dispositivos de toque que emulam estes
estilos. Isto nunca foi finalizado ou ativado, mas para evitar quebra total, nós optamos em defazar isto e
manter os mixins como atalhos para as pseudo-classes.
Impressão
Mesmo em alguns browsers modernos, imprimir pode ser bem chatinho.
A partir do Safari v8.0, o uso da classe .container pode levar o Safari a usar pequenos tamanhos de fontes,
quando imprimindo. Veja o issue #14868 e WebKit bug #138192, para mais detalhes. Uma possível solução
alternativa é o seguinte CSS:
Copy
@media print {
.container {
width: auto;
}
}
Menu Select
Em elementos <select>, o app Browser não irá mostrar os controles laterais se houver border-
radius ou border aplicadas (veja esta questão no StackOverflow, para mais detalhes). Use o snippet abaixo
para remover o CSS problemático e renderizar o <select> como um elemento não estilizado, no app
Browser do Android. O sniffer do user agent evita interferência com o Chrome, Safari e navegadores Mozilla.
Copy
<script>
$(function () {
var nua = navigator.userAgent
var isAndroid = (nua.indexOf('Mozilla/5.0') > -1 && nua.indexOf('Android ') > -1 &&
nua.indexOf('AppleWebKit') > -1 && nua.indexOf('Chrome') === -1)
if (isAndroid) {
$('select.form-control').removeClass('form-control').css('width', '100%')
}
})
</script>
Quer ver um exemplo? Veja esta demo no JS Bin.
Validação
Pensando em dar a melhor experiência para os antigos e bugados browsers, Bootstrap usa hacks CSS em
diversos locais para conseguir um CSS único em algumas versões de browsers e, consequentemente,
trabalhar em cima dos próprios bugs. Estes hacks, compreensivelmente, levam os validadores CSS a falarem
que o código está inválido. Em outros locais, nós também usamos recursos CSS inovadores que ainda não
foram padronizados. No entanto, eles são usados puramente para progressive enhancement.
Estes avisos de validação não significam nada na prática, já que a parte sem hacks valida normalmente e a
parte com hacks não interfere no funcionamente da parte sem hacks. Portanto, se ignorarmos estes avisos, a
parte com hacks é usada em progressive enhancement.
Nossa documentação HTML, da mesma forma tem alguns avisos de validação triviais e inconsequentes,
devido a inclusão de uma solução para um certo bug no Firefox.
JavaScript
Traga o Bootstrap a vida com nossos plugins opcionais, construídos com jQuery. Aprenda sobre cada plugin,
nossos dados e API programática, entre outras coisas.
All the tools your team needs in one place. Slack: Where work happens.ads via Carbon
Individualmente ou compilado
Plugins podem ser incluídos individualmente, usando os arquivos Bootstrap js/dist/*.jsindividuais.
Também é possível incluir todos de uma vez, usando bootstrap.js ou a versão minificada bootstrap.min.js.
(não inclua ambos juntos).
Se usar algum bundler (Webpack, Rollup…), você pode então use o leitor UMD em cada arquivo
em /js/dist/*.js.
Dependências
Alguns plugins e componentes CSS dependem de outros plugins. Se você incluir plugins individualmente,
tenha certeza de ler sobre estas dependências, na documentação. Também perceba que todos plugins
dependem do jQuery, significando que esta biblioteca deve ser adicionada antes dos arquivos dos
plugins. Consulte o package.json para ver quais versões do jQuery são suportadas.
Atributos data
Quase todos plugins Bootstrap podem ser ativados e configurados somente através do HTML, usando
atributos data (nosso jeito preferido de usar essa funcionalidade JavaScript). Assegure-se de usar apenas
um atributo data, por elemento. Exemplo: você não pode acionar um tooltip e um modal, usando o mesmo
botão.
No entanto, em algumas situações você pode querer desativar esta funcionalidade. Para desativar a API do
atributo data, você pode desvincular todos eventos no documento nomeados com data-api, fazendo algo
como isso:
Copy
$(document).off('.data-api')
Opcionalmente, para desvincular um plugin específico, basta usar o namespace do plugin seguido
do namespace data-api, como isso:
Copy
$(document).off('.alert.data-api')
Escapando seletores
Se você usa algum tipo de seletor especial (como collapse:Example), se garanta de escapá-lo porque ele vai
ser analisado pelo jQuery.
Eventos
Bootstrap provê eventos customizados para a maioria das ações dos plugins. Geralmente, eles aparecem no
infinitivo ou passado particípio, onde o infinitivo (show, por exemplo) é acionado no começo de um evento e
sua forma no passado particípio (shown) é acionada no final de uma ação.
Todos eventos no infinitivo possuem a funcionalidade preventDefault(). Assim, tem-se a habilidade de parar
a execução de uma ação, antes que ela começe. Retornar false em um evento também vai invocar o
método preventDefault(), automaticamente.
Copy
$('#myModal').on('show.bs.modal', function (e) {
if (!data) return e.preventDefault() // Evita que o modal apareça
})
API programática
Nós também acreditamos que você será capaz de usar todos plugins Bootstrap, somente usando a API
JavaScript. Todas APIs públicas são métodos encadeáveis e peculiares, além de retornarem a coleção que
analisaram.
Copy
$('.btn.danger').button('toggle').addClass('fat')
Todos métodos devem aceitar um objeto options opcional, uma string que olha por um método específico
ou nada (oquê inicia o comportamento padrão dos plugins):
Copy
$('#myModal').modal() // inicia com padrões
$('#myModal').modal({ keyboard: false }) // inicia sem teclado
$('#myModal').modal('show') // inicia e invoca show, imediatamente.
Cada plugin também expõe seu construtor na propriedade Constructor($.fn.popover.Constructor). Se você
quer de obter uma instância específica de um plugin, recupere-a de um elemento
($('[rel="popover"]').data('popover')), diretamente.
Todos métodos de API programáticas são assíncronos e retornam o invocador, uma vez que a transição é
iniciada (mas é antes que ela finalize).
Para executar uma ação quando a transição é finalizada, você pode “ouvir” o evento correspondente.
Copy
$('#myCollapse').on('shown.bs.collapse', function (e) {
// Ação a executar, uma vez que a área colapsável é expandida
})
Além disso, a invocação de método num componente em transição vai ser ignorada.
Copy
$('#myCarousel').on('slid.bs.carousel', function (e) {
$('#myCarousel').carousel('2') // Vai deslizar para o slide 2, antes que a transição do slide 1
finalize
})
$('#myCarousel').carousel('1') // Vai começar deslizando para o slide 1 e retornará o invocador
$('#myCarousel').carousel('2') // !! Vai ser ignorado, já que a transição para o slide 1 ainda não
finalizou !!
Configurações padrões
Copy
$.fn.modal.Constructor.Default.keyboard = false // altera o default da opção `keyboard` do plugin modal
para `false`
Sem conflitos
Algumas vezes, pode ser necessário usar plugins Bootstrap com outros frameworks UI. nestas circunstâncias,
colisões de namespace podem ocorrer, ocasionalmente. Se isso acontecer, você pode invocar .noconflict no
plugin que você quiser reverter o valor.
Copy
var bootstrapButton = $.fn.button.noConflict() // retorna $.fn.button para o valor declarado
anteriormente
$.fn.bootstrapBtn = bootstrapButton // dá a funcionalidade Bootstrap ao $().bootstrapBtn
Número de versões
A versão de cada plugin Bootstrap feito com jQuery pode ser acessada usando a propriedade VERSION do
construtor do plugin. Por exemplo, usando o plugin tooltip:
Copy
$.fn.tooltip.Constructor.VERSION // => "4.1.3"
JavaScript desativado
Os plugins Bootstrap não possuem um fallback muito bom, quando o JavaScript está desativado. Se você se
importa com a experiência do usuário, neste caso, use <noscript> para explicar a situação, como reativar o
JavaScript e/ou adicionar seus próprios fallbacks.
Bibliotecas de terceiros
Bootstrap não suporta biblioteca de terceiros, oficialmente, como Prototype ou jQuery UI. Tirando
o .noConflict e eventos com namespace, pode acontecer problemas de compatibilidade que você precisará
consertar sozinho.
Util
Todos arquivos JavaScript Bootstrap dependem do util.js, fazendo com que seja necessário incluí-lo junto
aos outros arquivos JavaScript. Se você está usando o bootstrap.js minificado, não há necessidade de
incluir o util.js porque ele já está incluído no bootstrap.min.js.
O util.js possui funções utilitárias e ajuda básica para eventos transitionEnd, assim como um emulador de
transição CSS. Isso é usado pelos outros plugins para conferir suporte de transições CSS e capturar
transições suspensas.
Customização de temas Bootstrap
Utilize variáveis Sass do Bootstrap 4 para construir, fácilmente, temas e componentes customizados.
It's teamwork, but simpler, more pleasant and more productive.ads via Carbon
Introdução
No Bootstrap 3, tematizações foram amplamente feitas com sobrescrição de variáveis LESS, CSS
customizado e uma folha de estilos separada que nós incluíamos nos nossos arquivos dist. Com algum
esforço, qualquer um podia redesenhar o visual do Bootstrap 3, sem tocar em seus principais arquivos. Já o
Bootstrap 4 tem uma abordagem familiar, mas um pouco diferente.
Agora, tematizações são feitas com variáveis e mapas Sass, além de CSS customizado. Não existe mais, uma
folha de estilos tema dedicada.
Sass
Utilize nossos arquivos fonte Sass para aproveitar as variáveis, mapas, mixins e muito mais.
Estrutura de arquivos
Sempre que possível, evite modificar os arquivos principais do Bootstrap. No Sass, isso significa que
precisará criar sua própria folha de estilos e importar o Bootstrap, para que você possa modificar e extendê-
lo. Assumindo que você usa um gerenciador de pacotes como o npm, terá uma estrutura de arquivos
parecida com essa:
Copy
seu-projeto/
├── scss
│ └── custom.scss
└── node_modules/
└── bootstrap
├── js
└── scss
Se você baixou nossos arquivos fonte e não está usando um gerenciador de pacotes, vai querer fazer algo
semelhante a essa estrutura, manualmente, mantendo os arquivos fontes separados dos seus.
Copy
seu-projeto/
├── scss
│ └── custom.scss
└── bootstrap/
├── js
└── scss
Importando
No seu custom.scss, você vai importar os arquivos Sass Bootstrap. Nesse sentido, você terá duas opções:
incluir todo o Bootstrap ou apenas as partes que você precisa. Nós encorajamos que pegue somente aquilo
que necessite, mas fique atento que há alguns requisitos e dependências, nos componentes. Você também
vai precisar adicionar alguns JavaScripts para nossos plugins.
Copy
// Custom.scss
// Opção A: Importa todo o Bootstrap
@import "../node_modules/bootstrap/scss/bootstrap";
Copy
// Custom.scss
// Opção B: Importa partes do Bootstrap
Partes obrigatórias
@import "../node_modules/bootstrap/scss/functions";
@import "../node_modules/bootstrap/scss/variables";
@import "../node_modules/bootstrap/scss/mixins";
// Partes opcionais
@import "../node_modules/bootstrap/scss/reboot";
@import "../node_modules/bootstrap/scss/type";
@import "../node_modules/bootstrap/scss/images";
@import "../node_modules/bootstrap/scss/code";
@import "../node_modules/bootstrap/scss/grid";
Com essa configuração, você pode começar a modificar quaisquer variáveis e mapas Sass, no
seu custom.scss. Você também pode começar a adicionar partes do Bootstrap, abaixo do comentário “//
Partes adicionais”, sempre que necessário. Nós sugerimos usar toda a pilha de importação do nosso
arquivo bootstrap.scss, como seu ponto inicial.
Variáveis padrão
Toda variável Sass no Bootstrap 4 possui uma flag !default, permitindo que você sobrescreva o valor da
variável padrão, no seu próprio Sass, sem modificar o código fonte Bootstrap. Copie, cole e modifique os
valores das variáveis, sempre que precisar. Sem falar que você também pode remover a flag !default de
variáveis. Se uma variável já recebeu um valor, então, ela não vai ter uma nova atribuição de valores padrões
Bootstrap.
Você vai achar uma lista completa das variáveis Bootstrap, no diretório scss/_variables.scss.
Sobrescrição de variáveis dentro do mesmo arquivo Sass pode acontecer antes ou depois das variáveis
padrões. Contudo, quando for fazer sobrescrições em arquivos Sass, suas sobrescrições devem vir antes de
você importar arquivos Sass do Bootstrap.
Aqui vai um exemplo que muda as propriedades background-color e color do <body>, quando for importar e
compilar Bootstrap via npm:
Copy
// Suas sobrescrições de variáveis
$body-bg: #000;
$body-color: #111;
Bootstrap 4 possui um punhado de mapas Sass, os quais são pares de chave-valor que facilitam gerar
famílias de CSS relacionados. Nós usamos mapas Sass para nossas cores, breakpoints grid e etc. Assim como
as variáveis Sass, todos os mapas Sass possuem a flag!default e podem ser sobrescritos e extendidos.
Alguns de nossos mapas Sass são fundidos em outros vazios, por padrão. Isto é feito para permitir uma fácil
expansão de um dado mapa Sass, apesar de, consequentemente, ser um pouco mais difícil remover ítens de
um mapa.
Alterando o mapa
Para modificar uma cor existente no nosso mapa $theme-colors, você pode adicionar o seguinte ao seu
arquivo Sass customizado:
Copy
$theme-colors: (
"primary": #0074d9,
"danger": #ff4136
);
Adicionando ao mapa
para adicionar uma nova cor ao $theme-colors, adicione a nova chave e valor:
Copy
$theme-colors: (
"custom-color": #900
);
Removendo do mapa
Para remover cores do $theme-colors ou qualquer outro mapa, use map-remove. No entanto, certifique-se de
inserir isso entre as partes obrigatórias e opcionais:
Copy
// Partes obrigatórias
@import "../node_modules/bootstrap/scss/functions";
@import "../node_modules/bootstrap/scss/variables";
@import "../node_modules/bootstrap/scss/mixins";
// Partes adicionais
@import "../node_modules/bootstrap/scss/root";
@import "../node_modules/bootstrap/scss/reboot";
@import "../node_modules/bootstrap/scss/type";
...
Chaves obrigatórias
Bootstrap espera que existam algumas chaves específicas, já que usamos e extendemos elas para
construírmos o framework, nós mesmos. Por isso, assim que você for customizando os mapas, pode
encontrar erros em que uma chave específica está sendo usada.
Por exemplo, nós usamos as chaves primary, success e danger do mapa $theme-colors, para links, botões e
estados de formulários. Substituir os valores dessas chaves não deve apresentar problemas, mas removê-las
pode causar problemas na compilação Sass. Nesses casos, você precisará modificar o código Sass que faz
uso destes valores.
Funções
Bootstrap usa diversas funções Sass, mas só algumas delas são aplicáveis em tematização. Nós usamos três
funções para obter valores dos mapas de cores:
Copy
@function color($key: "blue") {
@return map-get($colors, $key);
}
Copy
.elemento-personalizado {
color: gray("100");
background-color: theme-color("dark");
}
Nós também temos outra função para recuperar um nível de cor específico do mapa $theme-colors. Níveis
com valores negativos vão esclarecer a cor, enquanto níveis maiores vão escurecer.
Copy
@function theme-color-level($color-name: "primary", $level: 0) {
$color: theme-color($color-name);
$color-base: if($level > 0, #000, #fff);
$level: abs($level);
Copy
.elemento-personalizado {
color: theme-color-level(primary, -10);
}
Outras funções podem ser adicionadas, futuramente, ou use seu próprio Sass para criar funções de nível
para outros mapas Sass.
Contraste de cor
Uma outra função que temos no Bootstrap é aquela para contraste de cores: color-yiq. Ela usa o YIQ color
space para, automaticamente, retornar um contraste de cores claras (#fff) ou escuras (#111), baseado na cor
especificada. Esta função é, especialmente, útil para mixins ou loops quando for gerar múltiplas classes.
Por exemplo, para gerar amostras de cores a partir do nosso mapa $theme-colors, use isso:
Copy
@each $color, $value in $theme-colors {
.swatch-#{$color} {
color: color-yiq($value);
}
}
Ela também pode ser usada para retornar o contraste de uma única cor:
Copy
.elemento-personalizado {
color: color-yiq(#000); // retorna `color: #fff`
}
Você também pode especificar uma cor base, com nossas funções de mapa de cores:
Copy
.elemento-personalizado {
color: color-yiq(theme-color("dark")); // retorna `color: #fff`
}
Opções do Sass
Personalize o Bootstrap 4 com nosso arquivo customizado de variáveis e, facilmente, alterne configurações
CSS globais com as novas variáveis Sass $enable-*. Sobrescreva o valor da variável e recompile com npm run
test, sempre que precisar.
Você pode achar e personalizar estas variáveis para opções globais, no arquivo
Bootstrap scss/_variables.scss.
$spacer 1rem é o padrão, mas também pode-se Especifíca o valor padrão para gerar os utilitário de
utilizar valores maior que 0. espaçamento, programaticamente.
$enable-gradients true ou false (padrão) Ativa gradientes pré-definidos via estilos background-i
em vários componentes.
$enable-grid- true (padrão) ou false Ativa a geração de classes CSS para o grid
classes (ex: .container, .row, .col-md-1, etc).
$enable- true (default) or false Enables background-image icons within textual inputs a
validation-icons some custom forms for validation states.
Cor
Muitos dos componentes e utilitários Bootstrap são construídos com uma série de cores definidas em mapas
Sass. Estes mapas podem ser iterados para, rapidamente, gerar vários blocos de regras.
Todas as cores
Todas as cores disponíveis no Bootstrap 4 também estão disponíveis nas variáveis e no mapa Sass, dentro
do arquivo scss/_variables.scss. Isso será expandido, nos próximos pequenos releases com tons adicionais,
como a escala de cores cinzas que já incluímos.
Blue
Indigo
Purple
Pink
Red
Orange
Yellow
Green
Teal
Cyan
Copy
// Com variáveis
.alpha { color: $purple; }
No futuro, vamos se concentrar em prover mapas e variáveis Sass para os tons de cada cor, assim como
fizemos com a escala de cinza abaixo.
Cores do tema
Usamos um subconjunto de todas as cores para criar uma paleta de cores menor e gerar um esquemas de
cores, também disponíveis em variáveis e mapas Sass, no arquivo Bootstrap scss/_variables.scss.
Primary
Secondary
Success
Danger
Warning
Info
Light
Dark
Tons de cinza
Um grande conjunto de variáveis e mapas Sass, no arquivo scss/_variables.scss, para tons de cinzas
consistentes nos seus projetos.
100
200
300
400
500
600
700
800
900
Dentro do arquivo scss/_variables.scss, você vai achar as variáveis e mapas de cores Bootstrap. Aqui está
um exemplo do mapa $colors:
Copy
$colors: (
"blue": $blue,
"indigo": $indigo,
"purple": $purple,
"pink": $pink,
"red": $red,
"orange": $orange,
"yellow": $yellow,
"green": $green,
"teal": $teal,
"cyan": $cyan,
"white": $white,
"gray": $gray-600,
"gray-dark": $gray-800
) !default;
Adicione, remova ou modifique valores dentro do mapa, para atualizar o uso deles em outros componentes.
Infelizmente, atualmente, nem todos componentes utiliza este mapa Sass. Futuras atualizações vão tentar
melhorar essa situação. No entanto, até lá, planeje o uso deste mapa e de variáveis de cores.
Componentes
Muitos componentes e utilitários Bootstrap são construídos com loops @each, os quais iteram sobre um
mapa Sass. Isso é, especialmente, útil para gerar variantes de um componente com nosso $theme-colors e
criando variantes responsivos para cada breakpoint. Assim que você personalizar estes mapas Sass e
recompilar, verá suas mudanças refletidas nestes loops, automaticamente.
Modificadores
Muitos dos componentes Bootstrap são construídos com uma abordagem de classe-modificadora. Isso
significa que o grosso da estilização está em uma classe base (ex: .btn), enquanto variações de estilos estão
em classes modificadoras, como .btn-danger. Estas classes modificadoras são feitas a partir do mapa $theme-
colors, para personalizar a quantidade e nomes delas.
Aqui está dois exemplos de como nós iteramos o mapa $theme-colors para gerar modificadores do
componente .alert e todos nossos utilitários de background .bg-*.
Copy
// Gera classes modificadoras de alertas
@each $color, $value in $theme-colors {
.alert-#{$color} {
@include alert-variant(theme-color-level($color, -10), theme-color-level($color, -9), theme-color-
level($color, 6));
}
}
Responsivo
Estes loops Sass não são limitados a mapas de cores. Você também pode gerar variações responsivas de
seus componentes e utilitários. Por exemplo, pegue nossos utilitários para alinhamento de texto, onde nós
misturamos um loop @each para o mapa Sass $grid-breakpoins, o qual possui integrações de media queries.
Copy
@each $breakpoint in map-keys($grid-breakpoints) {
@include media-breakpoint-up($breakpoint) {
$infix: breakpoint-infix($breakpoint, $grid-breakpoints);
Variáveis CSS
Bootstrap 4 inclui cerca de duas dúzias de propriedades CSS personalizadas (variáveis), em seu CSS
compilado. Elas provêm fácil acsso a valores comumente usados, como nossas cores de tema, breakpoints e
pilhas de fontes primárias (para quando estiver trabalhando no inspetor do browser, sandbox de código ou
uma prototipagem qualquer).
Variáveis disponíveis
Aqui estão as variáveis que incluímos (perceba que o :root é obrigatório). Elas estão localizadas no nosso
arquivo _root.scss.
Copy
:root {
--blue: #007bff;
--indigo: #6610f2;
--purple: #6f42c1;
--pink: #e83e8c;
--red: #dc3545;
--orange: #fd7e14;
--yellow: #ffc107;
--green: #28a745;
--teal: #20c997;
--cyan: #17a2b8;
--white: #fff;
--gray: #6c757d;
--gray-dark: #343a40;
--primary: #007bff;
--secondary: #6c757d;
--success: #28a745;
--info: #17a2b8;
--warning: #ffc107;
--danger: #dc3545;
--light: #f8f9fa;
--dark: #343a40;
--breakpoint-xs: 0;
--breakpoint-sm: 576px;
--breakpoint-md: 768px;
--breakpoint-lg: 992px;
--breakpoint-xl: 1200px;
--font-family-sans-serif: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, "Helvetica Neue",
Arial, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol";
--font-family-monospace: SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New",
monospace;
}
Exemplos
Variáveis CSS oferecem uma flexibilidade similar as do Sass, mas sem precisar compilar antes de usar no
navegador. Por exemplo, com isso estamos resetando os estilos de fonte e links de nossa página, com
variáveis CSS:
Copy
body {
font: 1rem/1.5 var(--font-family-sans-serif);
}
a {
color: var(--blue);
}
Variáveis de breakpoint
Apesar de, originalmente, termos incluídos breakpoints em nossas variáveis CSS (ex: --breakpoint-md), elas
não são suportadas dentro de media queries, mas ainda podem ser usadas dentro de bloco de regras, nas
media queries. Estas variáveis de breakpoint permanecem no CSS compilado, para retro-compatibilidade
(dado que podem ser utilizadas pelo JavaScript). Leia mais na especificação!
Copy
@media (min-width: var(--breakpoint-sm)) {
...
}
E aqui está um exemplo de oquê é suportado:
Copy
@media (min-width: 768px) {
.elemento-personalizado {
color: var(--primary);
}
}
Ferramentas de build
Aprenda a usar os scripts npm incluídos no Bootstrap para construir nossa documentação, compilar o
código fonte, realizar testes, entre outras coisas.
The new generation of project management tools is here and it’s visual.ads via Carbon
Setup de ferramentas
Bootstrap usa scripts NPM no seu sistema de build. Nosso package.json possui métodos convenientes ao
nosso framework, incluindo compilação de código, realização de testes e outras coisas.
Para usar nossa build e executar a documentação localmente, você vai precisar de uma cópia dos arquivos
fontes Bootstrap e do Node.js.
Quando fizer isso, você será capaz de executar diversos comandos disponíveis em cli.
Comando Tarefa
npm run cria o diretório /dist, o qual tem arquivos compilados (usa Sass, Autoprefixer e UglifyJS.).
dist
npm test é a mesma coisa que npm run dist, com a diferença que ele excuta os testes localmente.
npm run Constrói e formata o CSS e JavaScript para documentos. Assim, depois você pode rodar a
docs
documentação localmente, usando npm run docs-serve
Execute npm run para ver todos os scripts npm.
Autoprefixer
Boostrap usa o Autoprefixer (incluído na build) para, automaticamente, adicionar prefixos de fabricantes em
algumas propriedades CSS. Deste modo, poupamos código e tempo porque nos ocupamos só em escrever
as partes chaves do nosso CSS uma vez, sem precisar de mixins para adicionar prefixos (como aqueles da
v3).
1. Leia sobre o setup de ferramentas, acima, para instalar o Jekyll e outras dependências Ruby
com bundle-install;
2. Dentro do diretório raiz /bootstrap, execute npm run docs-serve na linha de comando;
3. Abra http://localhost:9001 no seu browser e voilà.
Solução de problemas
Se você encontrar problemas para instalar dependências, desinstale todas as versões anteriores das
dependências (global e localmente), então, re-execute npm install.
Webpack
Aprenda como integrar o Bootstrap ao seu projeto, usando Webpack 3.
Build the future of communications with Voice, Video, SMS, and WhatsApp APIs.ads via Carbon
Instalação do Bootstrap
Instale o Bootstrap como um módulo do Node.js, usando npm.
Inportação do JavaScript
Importe o JavaScript Bootstrap, adicionando esta linha ao entry point do seu app (index.jsou app.js,
normalmente):
Copy
import 'bootstrap';
Opcionalmente, você também pode importar plugins individualmente, sempre que necessário:
Copy
import 'bootstrap/js/dist/util';
import 'bootstrap/js/dist/alert';
...
Bootstrap depende do jQuery e Popper, os quais são definidos como peerDependencies, significando que
você terá que se certificar de adicionar os dois ao seu package.json, usando npm install --save jquery
popper.js.
Importar estilos
Importação do Sass pré-compilado
Para aproveitar todo potencial e personalizar o Bootstrap do jeito que quiser, use os arquivos fontes como
parte do seu bundling process.
Primeiro, crie seu próprio _custom.scss e use-o para sobrescrever as variáveis integradas de customização.
Assim, use o arquivo Sass principal para importar suas variáveis personalizadas e depois o Bootstrap, em si:
Copy
@import "custom";
@import "~bootstrap/scss/bootstrap";
Para o Bootstrap compilar, certifique-se de instalar e usar os loaders necessários, que são: sass-
loader e postcss-loader com Autoprefixer. Nas mínimas configurações, seu Webpack deve ter esta regra ou
algo parecido:
Copy
...
{
test: /\.(scss)$/,
use: [{
loader: 'style-loader', // injeta CSS na página
}, {
loader: 'css-loader', // traduz CSS em módulos commonJS
}, {
loader: 'postcss-loader', // Executa tarefas do postcss
options: {
plugins: function () { // plugins postcss, podem ser exportados para o postcss.config.js
return [
require('precss'),
require('autoprefixer')
];
}
}
}, {
loader: 'sass-loader' // compila Sass em CSS
}]
},
...
Opcionalmente, você pode usar o CSS Bootstrap pronto para uso, simplesmente, adicionando esta linha
ao entry point do seu projeto:
Copy
import 'bootstrap/dist/css/bootstrap.min.css';
Neste caso, você pode usar suas regras CSS sem nenhuma modificação especial nas configurações webpack.
Assim, você não precisa do sass-loader, apenas do style-loader e css-loader.
Copy
...
module: {
rules: [
{
test: /\.css$/,
use: ['style-loader', 'css-loader']
}
]
}
...
Acessibilidade
Uma breve visão geral dos recursos e limitações do Bootstrap para a criação de conteúdo acessível.
Reliable transactional email for developers that fits seamlessly into any stack.ads via Carbon
O Bootstrap fornece um framework fácil de usar, com estilos prontos, ferramentas de layout e componentes
interativos, permitindo que os desenvolvedores criem sites e aplicações que sejam visualmente atraentes,
ricas em funcionalidades e de rápido acesso.
Marcação estrutural
O estilo e o layout do Bootstrap podem ser aplicados a uma ampla variedade de estruturas de marcações.
Esta documentação tem como objetivo fornecer aos desenvolvedores os melhores exemplos e práticas para
demonstrar o uso do próprio Bootstrap e ilustrar a marcação semântica apropriada, incluindo maneiras pelas
quais possíveis preocupações de acessibilidade podem ser evitadas.
Componentes interativos
Como os componentes do Bootstrap são propositadamente projetados para serem bastante genéricos, os
autores podem precisar incluir mais regras e atributos do ARIA, bem como o comportamento do JavaScript,
para transmitir com mais precisão a natureza e funcionalidade precisas de seus componentes. Isso
geralmente é observado na documentação.
Contraste de cor
A maioria das cores que atualmente compõem a paleta padrão do Bootstrap - usada em toda a estrutura
para variações de botões, variações de alerta, indicadores de validação de formulário - leva a um contraste
de cores insuficiente (abaixo da relação de contraste de cores recomendada WCAG 2.0 color contrast ratio of
4.5:1) quando usado contra um fundo claro. Os autores precisarão modificar / estender manualmente essas
cores padrão para garantir taxas de contraste de cores adequadas.
Copy
<p class="text-danger">
<span class="sr-only">Perigo: </span>
Esta ação não é reversível.
</p>
Para controles interativos visualmente ocultos, como os links “skip” tradicionais, o .sr-onlypode ser
combinado com a classe .sr-only-focusable. Isso garantirá que o controle se torne visível uma vez em foco
(para usuários de teclado com visão).
Copy
<a class="sr-only sr-only-focusable" href="#content">Voltar ao conteúdo principal.</a>
Recursos Adicionais
• Web Content Accessibility Guidelines (WCAG) 2.0
• The A11Y Project
• MDN accessibility documentation
• Tenon.io Accessibility Checker
• Colour Contrast Analyser (CCA)
• “HTML Codesniffer” bookmarklet for identifying accessibility issues
Visão Geral
Componentes e opções para o layout do seu projeto Bootstrap, incluindo wrapping containers, um
poderoso sistema de grid, um objeto de mídia flexível e classes responsivas.
Build the future of communications with Voice, Video, SMS, and WhatsApp APIs.ads via Carbon
Containers
Containers são os elementos de layout mais básico do Bootstrap e são necessários quando usamos o
sistema de grid padrão. Escolha entre um container responsivo de largura fixa (ou seja, com alterações
de max-width em cada ponto de interrupção) ou por um responsivo de largura fluida (ou seja, 100% de
largura o tempo todo).
Embora os containers possam ser aninhados, a maioria dos layouts não exige um container aninhado.
Copy
<div class="container">
<!-- Conteúdo aqui -->
</div>
Use .container-fluid para um container com de largura total, abrangindo toda a largura da sua área de
visualização.
Copy
<div class="container-fluid">
...
</div>
Breakpoints reponsivos
Como o bootstrap é desenvolvido para ser “mobile first” usamos varias media queries para criar sensíveis
breakpoints para nossos layouts e interfaces. Esses pontos são baseadas em larguras de área de visualização
miníma e nos permitem dimensionar conforme muda o tamanho da área de visualização.
Bootstrap usa principalmente os seguintes intervalos de media queries, ou breakpoints, em nossos arquivos
de origem do SASS para os layouts, sistemas de grid e componentes.
Copy
// Dispositivos extra small (telefones em modo retrato, com menos de 576px)
// Sem media query para `xs`, já que este é o padrão, no Bootstrap.
Copy
// No media query necessary for xs breakpoint as it's effectively `@media (min-width: 0) { ... }`
@include media-breakpoint-up(sm) { ... }
@include media-breakpoint-up(md) { ... }
@include media-breakpoint-up(lg) { ... }
@include media-breakpoint-up(xl) { ... }
Copy
// Dispositivos extra small (telefones em modo retrato, com menos de 576px)
@media (max-width: 575.98px) { ... }
Copy
@include media-breakpoint-down(xs) { ... }
@include media-breakpoint-down(sm) { ... }
@include media-breakpoint-down(md) { ... }
@include media-breakpoint-down(lg) { ... }
// No media query necessary for xl breakpoint as it has no upper bound on its width
Copy
// Dispositivos extra small (telefones em modo retrato, com menos de 576px)
@media (max-width: 575.98px) { ... }
Copy
@include media-breakpoint-only(xs) { ... }
@include media-breakpoint-only(sm) { ... }
@include media-breakpoint-only(md) { ... }
@include media-breakpoint-only(lg) { ... }
@include media-breakpoint-only(xl) { ... }
Da mesma forma, as media querias podem abranger várias larguras de breakpoints.
Copy
// Exemplo
// Aplica estilos, começando de dispositivos médios até os extra larges
@media (min-width: 768px) and (max-width: 1199.98px) { ... }
O mixin Sass para selecionar o mesmo tamanho de tela seria:
Copy
@include media-breakpoint-between(md, xl) { ... }
Z-index
Vários componentes Bootstrap usam z-index, a propriedade CSS que ajuda controlar layout, provendo um
terceiro eixo para mover o conteúdo. Nós usamos uma escala z-index padrão, no Bootstrap. Ela foi
desenhada para dispor nvegações, tooltips, popovers, modals e etc, adequadamente.
Estes valores maiores começam em um número arbitrário, grande e específico o suficiente para, com sorte,
evitar conflitos. Nós precisamos de um conjunto de valores padrões desse para que nossos componentes
dispostos em camadas (tooltips, popovers, navbars, dropdowns e modals) sejam, razoavelmente,
consistentes em seus comportamentos. Não há motivos para não termos usado valores maiores
que 100 ou 500, ou não.
Nós não encorajamos a personalização desses valores, individualmente. Se precisar alterar um deles,
provavelmente, vai precisar mudar todos eles.
Copy
$zindex-dropdown: 1000 !default;
$zindex-sticky: 1020 !default;
$zindex-fixed: 1030 !default;
$zindex-modal-backdrop: 1040 !default;
$zindex-modal: 1050 !default;
$zindex-popover: 1060 !default;
$zindex-tooltip: 1070 !default;
Para lidar com sobreposição de bordas dentro de componentes (ex: botões em grupos de inputs), nós
usamos os baixos valores z-index de 1, 2 e 3 para estados padrões, hover e active. Em hover, focus e active,
nós trazemos um elemento específico à frente, usando um valor z-index maior para mostrar suas bordas,
invés de seus elementos.
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.
See how your visitors are really using your website.ads via Carbon
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.
• Containers criam meios para centralizar e, horizontalmente, preencher os conteúdos de seu site;
o Use .container para ter uma largura responsiva em pixel ou .container-fluidpara ter width:
100%, em todas viewports e tamanhos de disposivos.
• Rows são elemntos para envolver colunas;
o 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.
• Em um layout grid, o conteúdo deve ser posicionado dentro de colunas e só elas podem ser filhos
imediatos de .rows;
• Graças ao flexbox, colunas grid sem width declarado vão, automaticamente, se dimensionar com
larguras iguais;
o Por exemplo, quatro exemplos de .col-sm vão, automaticamente, ter 25% de largura, no
breakpoint sm ou maior;
o Veja a seção colunas com layout automático, para mais exemplos.
• Classes de colunas indicam o número de colunas que você quer usar, dentro de uma possibilidade de
12, por row;
o Se você quiser três colunas de larguras idênticas, pode usar .col-4, por exemplo.
• 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.
o No entanto, você pode remover a margin das rows e padding das colunas, usando .no-
gutters na .row.
• 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;
o Exemplo: .col-sm-4 aplica ao small, medium, large e extra large, mas não ao primeiro
breakpoint xs.
• 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.
Número de colunas 12
Largura da gutter 30px (15px em cada lado da coluna)
Aninhável Sim
Ordenamento de coluna Sim
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.
1 de 2
2 de 2
1 de 3
2 de 3
3 de 3
Copy
<div class="container">
<div class="row">
<div class="col">
1 de 2
</div>
<div class="col">
2 de 2
</div>
</div>
<div class="row">
<div class="col">
1 de 3
</div>
<div class="col">
2 de 3
</div>
<div class="col">
3 de 3
</div>
</div>
</div>
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.
Coluna
Coluna
Coluna
Coluna
Copy
<div class="container">
<div class="row">
<div class="col">Coluna</div>
<div class="col">Coluna</div>
<div class="w-100"></div>
<div class="col">Coluna</div>
<div class="col">Coluna</div>
</div>
</div>
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.
1 de 3
2 de 3 (maior)
3 de 3
1 de 3
2 de 3 (maior)
3 de 3
Copy
<div class="container">
<div class="row">
<div class="col">
1 de 3
</div>
<div class="col-6">
2 de 3 (maior)
</div>
<div class="col">
3 de 3
</div>
</div>
<div class="row">
<div class="col">
1 de 3
</div>
<div class="col-5">
2 de 3 (maior)
</div>
<div class="col">
3 de 3
</div>
</div>
</div>
Use classes col-{breakpoint}-auto para dimensionar colunas, baseando-se na largura natural de seus
conteúdos.
1 de 3
Conteúdo com largura variável
3 de 3
1 de 3
Conteúdo com largura variável
3 de 3
Copy
<div class="container">
<div class="row justify-content-md-center">
<div class="col col-lg-2">
1 de 3
</div>
<div class="col-md-auto">
Conteúdo com largura variável
</div>
<div class="col col-lg-2">
3 de 3
</div>
</div>
<div class="row">
<div class="col">
1 de 3
</div>
<div class="col-md-auto">
Conteúdo com largura variável
</div>
<div class="col col-lg-2">
3 de 3
</div>
</div>
</div>
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.
col
col
col
col
Copy
<div class="row">
<div class="col">col</div>
<div class="col">col</div>
<div class="w-100"></div>
<div class="col">col</div>
<div class="col">col</div>
</div>
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.
col
col
col
col
col-8
col-4
Copy
<div class="row">
<div class="col">col</div>
<div class="col">col</div>
<div class="col">col</div>
<div class="col">col</div>
</div>
<div class="row">
<div class="col-8">col-8</div>
<div class="col-4">col-4</div>
</div>
col-sm-8
col-sm-4
col-sm
col-sm
col-sm
Copy
<div class="row">
<div class="col-sm-8">col-sm-8</div>
<div class="col-sm-4">col-sm-4</div>
</div>
<div class="row">
<div class="col-sm">col-sm</div>
<div class="col-sm">col-sm</div>
<div class="col-sm">col-sm</div>
</div>
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.
.col-12 .col-md-8
.col-6 .col-md-4
.col-6 .col-md-4
.col-6 .col-md-4
.col-6 .col-md-4
.col-6
.col-6
Copy
<!-- Empilhe as colunas, em dispositivos móveis, fazendo com que uma tenha largura total e a outra só
metade -->
<div class="row">
<div class="col-12 col-md-8">.col-12 .col-md-8</div>
<div class="col-6 col-md-4">.col-6 .col-md-4</div>
</div>
<!-- Colunas começam com largura de 50%, em dispositivos móveis, e caem para 33.3% nos desktops -->
<div class="row">
<div class="col-6 col-md-4">.col-6 .col-md-4</div>
<div class="col-6 col-md-4">.col-6 .col-md-4</div>
<div class="col-6 col-md-4">.col-6 .col-md-4</div>
</div>
<!-- Colunas sempre com metade da largura disponível, em dispositivos móveis e desktop -->
<div class="row">
<div class="col-6">.col-6</div>
<div class="col-6">.col-6</div>
</div>
Gutters
Gutters can be responsively adjusted by breakpoint-specific padding and negative margin utility classes. To
change the gutters in a given row, pair a negative margin utility on the .rowand matching padding utilities
on the .cols.
Here’s an example of customizing the Bootstrap grid at the large (lg) breakpoint and above. We’ve increased
the .col padding with .px-lg-5 and then counteracted that with .mx-lg-n5on the parent .row.
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.
Copy
.no-gutters {
margin-right: 0;
margin-left: 0;
> .col,
> [class*="col-"] {
padding-right: 0;
padding-left: 0;
}
}
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.
.col-9
.col-4
Já que 9 + 4 é maior que 12, esta div de quatro colunas pula para essa nova linha.
.col-6
Colunas subsequentes pulam junto para a nova linha.
Copy
<div class="row">
<div class="col-9">.col-9</div>
<div class="col-4">.col-4<br>Já que 9 + 4 é maior que 12, esta div de quatro colunas pula para essa
nova linha.</div>
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.
.col-6 .col-sm-3
.col-6 .col-sm-3
.col-6 .col-sm-3
.col-6 .col-sm-3
Copy
<div class="row">
<div class="col-6 col-sm-3">.col-6 .col-sm-3</div>
<div class="col-6 col-sm-3">.col-6 .col-sm-3</div>
.col-6 .col-sm-4
.col-6 .col-sm-4
.col-6 .col-sm-4
.col-6 .col-sm-4
Copy
<div class="row">
<div class="col-6 col-sm-4">.col-6 .col-sm-4</div>
<div class="col-6 col-sm-4">.col-6 .col-sm-4</div>
<!-- Force as próximas colunas quebrarem, em uma nova linha, no breakpoint md ou maior -->
<div class="w-100 d-none d-md-block"></div>
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.
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.
.col-md-4
.col-md-4 .offset-md-4
.col-md-3 .offset-md-3
.col-md-3 .offset-md-3
.col-md-6 .offset-md-3
Copy
<div class="row">
<div class="col-md-4">.col-md-4</div>
<div class="col-md-4 offset-md-4">.col-md-4 .offset-md-4</div>
</div>
<div class="row">
<div class="col-md-3 defset-md-3">.col-md-3 .offset-md-3</div>
<div class="col-md-3 defset-md-3">.col-md-3 .offset-md-3</div>
</div>
<div class="row">
<div class="col-md-6 offset-md-3">.col-md-6 .offset-md-3</div>
</div>
Além da limpeza de coluna, em breakpoints responsivos, você pode precisar resetar deslocamentos. Veja
isso, em ação, no grid exemplo.
.col-sm-5 .col-md-6
.col-sm-5 .offset-sm-2 .col-md-6 .offset-md-0
.col-sm-6 .col-md-5 .col-lg-6
.col-sm-6 .col-md-5 .offset-md-2 .col-lg-6 .offset-lg-0
Copy
<div class="row">
<div class="col-sm-5 col-md-6">.col-sm-5 .col-md-6</div>
<div class="col-sm-5 offset-sm-2 col-md-6 offset-md-0">.col-sm-5 .offset-sm-2 .col-md-6 .offset-md-
0</div>
</div>
<div class="row">
<div class="col-sm-6 col-md-5 col-lg-6">.col-sm-6 .col-md-5 .col-lg-6</div>
<div class="col-sm-6 col-md-5 offset-md-2 col-lg-6 offset-lg-0">.col-sm-6 .col-md-5 .offset-md-2 .col-
lg-6 .offset-lg-0</div>
</div>
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.
.col-md-4
.col-md-4 .ml-auto
.col-md-3 .ml-md-auto
.col-md-3 .ml-md-auto
.col-auto .mr-auto
.col-auto
Copy
<div class="row">
<div class="col-md-4">.col-md-4</div>
<div class="col-md-4 ml-auto">.col-md-4 .ml-auto</div>
</div>
<div class="row">
<div class="col-md-3 ml-md-auto">.col-md-3 .ml-md-auto</div>
<div class="col-md-3 ml-md-auto">.col-md-3 .ml-md-auto</div>
</div>
<div class="row">
<div class="col-auto mr-auto">.col-auto .mr-auto</div>
<div class="col-auto">.col-auto</div>
</div>
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).
Level 1: .col-sm-9
Level 2: .col-8 .col-sm-6
Level 2: .col-4 .col-sm-6
Copy
<div class="row">
<div class="col-sm-9">
Level 1: .col-sm-9
<div class="row">
<div class="col-8 col-sm-6">
Level 2: .col-8 .col-sm-6
</div>
<div class="col-4 col-sm-6">
Level 2: .col-4 .col-sm-6
</div>
</div>
</div>
</div>
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.
Copy
$grid-columns: 12;
$grid-gutter-width: 30px;
$grid-breakpoints: (
// Tela extra small (muito pequena, no português)
xs: 0,
// Tela small (pequena, no português)
sm: 576px,
// Tela média
md: 768px,
// Tela large (grande, no português)
lg: 992px,
// Tela extra large (muito grande, no português)
xl: 1200px
);
$container-max-widths: (
sm: 540px,
md: 720px,
lg: 960px,
xl: 1140px
);
Mixins
Mixins são usados em conjunto com as variáveis grid para gerar CSS semântico, em colunas individuais.
Copy
// Criar um elemento pai para conjuntos de colunas.
@include make-row();
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.
Copy
.container-exemplo {
width: 800px;
@include make-container();
}
.row-exemplo {
@include make-row();
}
.exemplo-conteudo-principal {
@include make-col-ready();
@include media-breakpoint-up(sm) {
@include make-col(6);
}
@include media-breakpoint-up(lg) {
@include make-col(8);
}
}
.exemplo-conteudo-secundario {
@include make-col-ready();
@include media-breakpoint-up(sm) {
@include make-col(6);
}
@include media-breakpoint-up(lg) {
@include make-col(4);
}
}
Conteúdo principal
Conteúdo secundário
Copy
<div class="container-exemplo">
<div class="example-row">
<div class="example-content-main">Conteúdo principal</div>
<div class="example-content-secondary">Conteúdo secundário</div>
</div>
</div>
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-widthgera larguras para a coluna
gutters.
Copy
$grid-columns: 12 !default;
$grid-gutter-width: 30px !default;
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:
Copy
$grid-breakpoints: (
xs: 0,
sm: 480px,
md: 768px,
lg: 1024px
);
$container-max-widths: (
sm: 420px,
md: 720px,
lg: 960px
);
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 %).
Objeto de mídia
Documentação e exemplos para o objeto de mídia Bootstrap, construído para componentes repetitivos
como comentários de blog, tweets, etc.
Build the future of communications with Voice, Video, SMS, and WhatsApp APIs.ads via Carbon
Exemplo
O objeto de mídia ajuda construir componentes complexos e repetitivos, onde alguma mídia é posicionada
ao lado do conteúdo. Além do mais, isso é possível só com duas classes, graças ao flexbox.
Abaixo, temos um exemplo de um objeto de mídia. Apenas duas classes são necessárias (o elemento
pai .media e o corpo .media-body), em volta de seus conteúdos. Margem e padding adicionais podem ser
usados com utilitários de espaçamento.
Cabeçalho da mídia
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in
vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in
faucibus.
Copy
<div class="media">
<img class="mr-3" src=".../64x64" alt="Imagem de exemplo genérica">
<div class="media-body">
<h5 class="mt-0">Cabeçalho da mídia</h5>
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras
purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate
fringilla. Donec lacinia congue felis in faucibus.
</div>
</div>
Flexbug #12: Elementos inline não são tratados como flex items
Internet Explorer 10-11 não renderiza elementos inline, como links ou imagens (ou pseudo-
elementos ::before e ::after), como flex items. A única solução é definir um valor não-
inline display (block, inline-block ou flex). Nós sugerimos usar .d-flex, um de nossos utilitários display,
como uma solução fácil.
Aninhamento
Objetos de mídia podem ser aninhados infinitamente, apesar de sugerirmos que você pare, em algum
ponto. Coloque .media aninhado dentro do .media-body de um objeto mídia pai aninhado.
Cabeçalho da mídia
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in
vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in
faucibus.
Cabeçalho da mídia
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in
vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in
faucibus.
Copy
<div class="media">
<img class="mr-3" src=".../64x64" alt="Imagem de exemplo genérica">
<div class="media-body">
<h5 class="mt-0">Cabeçalho da mídia</h5>
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras
purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate
fringilla. Donec lacinia congue felis in faucibus.
Alinhamento
A mídia, em um objeto de mídia, pode ser alinhada com utilitários flexbox na parte superior, meio ou fim do
conteúdo do .media-body.
Donec sed odio dui. Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et
magnis dis parturient montes, nascetur ridiculus mus.
Copy
<div class="media">
<img class="align-self-start mr-3" src=".../64x64" alt="Imagem de exemplo genérica">
<div class="media-body">
<h5 class="mt-0">Mídia alinhada ao topo</h5>
<p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras
purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate
fringilla. Donec lacinia congue felis in faucibus.</p>
<p>Donec sed odio dui. Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque
penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p>
</div>
</div>
Mídia centralizada
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio,
vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec
lacinia congue felis in faucibus.
Donec sed odio dui. Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et
magnis dis parturient montes, nascetur ridiculus mus.
Copy
<div class="media">
<img class="align-self-center mr-3" src=".../64x64" alt="Imagem de exemplo genérica">
<div class="media-body">
<h5 class="mt-0">Mídia centralizada</h5>
<p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras
purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate
fringilla. Donec lacinia congue felis in faucibus.</p>
<p class="mb-0">Donec sed odio dui. Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis
natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p>
</div>
</div>
Donec sed odio dui. Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis natoque penatibus et
magnis dis parturient montes, nascetur ridiculus mus.
Copy
<div class="media">
<img class="align-self-end mr-3" src=".../64x64" alt="Imagem de exemplo genérica">
<div class="media-body">
<h5 class="mt-0">Mídia alinhada na parte inferior</h5>
<p>Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras
purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate
fringilla. Donec lacinia congue felis in faucibus.</p>
<p class="mb-0">Donec sed odio dui. Nullam quis risus eget urna mollis ornare vel eu leo. Cum sociis
natoque penatibus et magnis dis parturient montes, nascetur ridiculus mus.</p>
</div>
</div>
Ordem
Altere a ordem do conteúdo, em objetos de mídia, modificando o próprio HTML ou usando algum CSS
flexbox customizado para definir o valor da propriedade order em um número inteiro de sua escolha.
Objeto mídia
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio, vestibulum in
vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec lacinia congue felis in
faucibus.
Copy
<div class="media">
<div class="media-body">
<h5 class="mt-0 mb-1">Objeto mídia</h5>
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras
purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate
fringilla. Donec lacinia congue felis in faucibus.
</div>
<img class="ml-3" src=".../64x64" alt="Imagem de exemplo genérica">
</div>
Lista de mídia
Devido as poucas exigências do objeto de mídia, você também pode usar estas classes em elementos HTML
de lista. Em seu <ul> ou <ol>, use a classe .list-unstyled para remover qualquer estilo de lista padrão e,
então, aplique .media no seu <li>. Como sempre: use utilitários de espaçamento, onde quer que precise.
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio,
vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec
lacinia congue felis in faucibus.
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio,
vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec
lacinia congue felis in faucibus.
•
Objeto de mídia baseado em lista
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras purus odio,
vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate fringilla. Donec
lacinia congue felis in faucibus.
Copy
<ul class="list-unstyled">
<li class="media">
<img class="mr-3" src=".../64x64" alt="Imagem de exemplo genérica">
<div class="media-body">
<h5 class="mt-0 mb-1">Objeto de mídia baseado em lista</h5>
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras
purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate
fringilla. Donec lacinia congue felis in faucibus.
</div>
</li>
<li class="media my-4">
<img class="mr-3" src=".../64x64" alt="Imagem de exemplo genérica">
<div class="media-body">
<h5 class="mt-0 mb-1">Objeto de mídia baseado em lista</h5>
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras
purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate
fringilla. Donec lacinia congue felis in faucibus.
</div>
</li>
<li class="media">
<img class="mr-3" src=".../64x64" alt="Imagem de exemplo genérica">
<div class="media-body">
<h5 class="mt-0 mb-1">Objeto de mídia baseado em lista</h5>
Cras sit amet nibh libero, in gravida nulla. Nulla vel metus scelerisque ante sollicitudin. Cras
purus odio, vestibulum in vulputate at, tempus viverra turpis. Fusce condimentum nunc ac nisi vulputate
fringilla. Donec lacinia congue felis in faucibus.
</div>
</li>
</ul>
Own your code from end to end. Resolve errors way faster right in your workflow.ads via Carbon
Alterando display
Use nossos utilitários de display para, responsivamente, alternar valores comuns da propriedade display.
Misture-os com nosso sistema grid, conteúdo e componentes a serem exibidos ou ocultos, em viewports
específicos.
Opções flexbox
Bootstrap 4 é feito com flexbox, mas nem todo display de elementos foram altreados para display: flex, já
que isso faria muitas sobrescrições desnecessárias e mudanças inesperadas em comportamentos chaves de
browsers. A maior parte de nossos componentes são feitos com flexbox ativado.
Se precisar ativar display: flex em um elemento, faça colocando .d-flex ou uma das variações responsivas
(ex: .-sm-flex). Você precisará desta classe ou valor display para conseguir usar o resto de nossos utilitários
flexbox para dimensionamento, alinhamento, espaçamento, etc.
Margem e padding
Use os utilitários de espaçamento de margin e padding para controlar como elementos e componentes são
espaçados e dimensionados. Bootstrap 4 possui uma escala de cinco níveis para utilitários de espaçamento,
baseado no valor padrão 1rem da variável $spacer. Escolha valores para todas viewports (.mr-3, no
caso margin-right: 1rem) ou variações responsivas para mirar em viewports específicas (.mr-md-
3 para margin-right: 1rem em viewports do breakpoint md).
Alternar visibility
Quando alternar o valor da display não é necessário, você pode alternar o valor da visibility de algum
elemento, usando nossos utilitários de visibilidade. Elementos invisíveis vão continuar a afetar o layout da
página, mas são ocultos dos usuários, visualmente.
Reboot
Reboot, uma série de customizações para elementos em único arquivo CSS, ajuda o Bootstrap prover uma
base elegante, consistente e simples de se construir em cima.
All the tools your team needs in one place. Slack: Where work happens.ads via Carbon
Abordagem
O Reboot é construído baseado no Normalize, possibilitando muitos elementos HTML sem estilos baseados
em opiniões e usando apenas seletores de elementos. Por exemplo, nós customizamos alguns estilos
do <table> para uma base mais simples e, então, te damos a oportunidade de usar .table, .table-
bordered e outras classes.
Aqui estão nossas diretrizes e razões para termos escolhidos oquê sobrescrever, no Reboot:
• Atualizar alguns valores padrões de navegadores para usar rems, invés de ems para espaçamento de
componentes escaláveis;
• Evitar margin-top. Margens verticais podem colapsar, resultando em resultados inesperados. Mais importante
ainda: uma única direção de margem é mentalmente mais simples;
• Para escalar facilmente através de diferentes tamanhos de dispositivos, elementos blockdevem usar rems em
suas margens;
• Manter o mínimo de declarações relacionadas a propriedade font, usando o valor inherit sempre que
possível.
Padrões de páginas
Os elementos <html> e <body> são atualizados para possibilitarem melhores padrões, em toda a página. Mais
especificamente:
• box-sizing é configurado globalmente em todos elementos, incluindo *::before e *::after. Isso assegura
que a largura declarada do elemento nunca exceda, devido a padding ou borda;
o Nenhum tamanho de fonte base é declarado no <html>, mas assumimos o padrão do navegador
(16px). É declarado font-size: 1rem no <body> para escalar o texto fácil e responsivamente usando
media queries, enquanto é respeitado as preferências do usuário e garantindo uma abordagem mais
acessível.
• O <body> também configura font-family, line-height e text-align, globalmente. Isso é herdado mais
tarde por alguns elementos de formulário, para previnir inconsistência em fontes.
• Por segurança, o <body> tem background-color padrão de #fff declarado.
Copy
$font-family-sans-serif:
// Safari para OS X e iOS (San Francisco)
-apple-system,
// Chrome < 56 para OS X (San Francisco)
BlinkMacSystemFont,
// Windows
"Segoe UI",
// Android
"Roboto",
// Fallback de fonts web básicas
"Helvetica Neue", Arial, sans-serif,
// Fonts de Emoji
"Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol" !default;
Esta font-family é aplicada ao <body> e herdada Bootstrap adentro, global e automaticamente. Para trocar
a font-family global, basta atualizar a variável $font-family-base e recompilar o Bootstrap.
Cabeçalhos e parágrafos
Todos elementos de cabeçalho e parágrafo são resetados para terem margin-top removido. Cabeçalhos
possuem margin-bottom: .5rem e parágrafos margin-bottom: 1rem para espaçamento mais fácil.
Cabeçalho Exemplo
Listas
Todas listas (<ul>, <ol> e <dl>) possuem seus valores para margin-top removidos e uma margin-bottom:
1rem. Listas aninhadas não possuem nenhuma margin-bottom.
Para estilização mais simples, hierarquia mais limpa e melhor espaçamento, listas de descrição possuem
margens customizadas. <dd>s possuem margin-left com valor 0 e adicionam margin-bottom: .5rem. <dt>s
estão formatadas em negrito.
Lista de descrições
Euismod
Vestibulum id ligula porta felis euismod semper eget lacinia odio sem.
Malesuada porta
Textos pré-formatados
O elemento <pre> é configurado para remover sua margin-top e usar rem em sua margin-bottom.
.example-element {
margin-bottom: 1rem;
}
Tabelas
Tabelas são ajustadas sutilmente para estilizar elementos <caption>, colapsar bordas e garantir que o text-
align seja consistente. Mudanças adicionais para bordas, paddings e outras propriedades são adicionadas
com a classe .table.
Formulários
Vários elementos de formulário são resetados para estilos mais básicos. Aqui vai algumas das mudanças
mais notáveis:
• Os <fieldset>s não possuem bordas, padding ou margem, então, eles podem ser usados facilmente
como wrappers para grupos ou inputs individuais;
• A tag <legend>, como os fieldsets, também foram re-estilizados para serem mostrados como um tipo de
cabeçalho;
• As <label>s são configuradas para terem display: inline-block e permitir que margens sejam aplicadas;
• Os <input>s, <select>s, <textarea>s e <button>s são mais estilizados pelo Normalize, mas o Reboot remove
suas margens e configura line-height: inherit, também;
• Tags <textarea> são modificadas para apenas serem redimensionáveis verticalmente, já que horizontalmente
costuma quebrar o layout da página.
Exemplo de legendas
Exemplo de input
Exemplo de select
Essa é a opção um. A opção dois é algo diferente e é super longa para demonstrar o _wrapping_
desses controles de formulários chiques. Opção três está desativada.
Botão submit
Botão submit
Elementos variados
Address
O elemento <address> é atualizado para resetar os padrões da font-style de itálico para normal. A line-
height é herdada e a margin-bottom: 1rem foi acrescentada. As tags <address>são para apresentar
informações de contato para o ancestral mais próximo ou um determinado trabalho. Preserve sua
formatação, colocando <br> no final de suas linhas.
Twitter, Inc.
Rua Market, 1355, Suíte 900
São Francisco, CA 94103
Tel: (123) 456-7890
Nome completo
fulano.ciclano@exemplo.com
Blockquote
O valor padrão das margens no <blockquote> é 1em 40px, então, nós resetamos para 0 0 1reme conseguimos
algo mais consistente em outros elementos.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
Elementos inline
O elemento <abbr> recebe estilos básicos para se destacar dentro do texto do parágrafo.
Summary
O valor padrão da propriedade cursor é text, então, nós resetamos para pointer para dar a impressão que é
possível interagir com elemento, clicando nele.
Copy
<input type="text" hidden>
Incompatibilidade jQuery
O atributo [hidden] não é compatível com os métodos JQuery $(...).hide() e $(...).show(). Portanto,
atualmente, nós não usamos [hidden] no lugar de outras técnicas para gerenciar o display de elementos.
Para a simples troca de visibilidade de um elemento, sem modificar o valor do display e continuar
permitindo que o elemento tenha efeito no fluxo do documento, use a class .invisible.
Tipografia
Documentação e exemplos para a tipografia Bootstrap, incluindo configurações globais, cabeçalhos, listas,
texto do `<body>` e outros.
See how your visitors are really using your website.ads via Carbon
Configurações globais
O Bootstrap configura estilos básicos para display, tipografia e links, globalmente. Quando precisar de mais
controle, confira as classes utilitárias de texto.
• Usa-se uma pilha de fontes nativas que seleciona a melhor font-family para cada SO e dispositivo;
• Para tipografia mais inclusiva e acessível em escala, nós usamos as font-sizes padrões dos
navegadores (tipicamente 16px), então, visitantes podem customizar os padrões de seus browser,
sempre que necessário;
• Usamos as variáveis $font-family-base, $font-size-base e $line-height-base como nossa base
tipografica aplicada ao <body>;
• Configuramos as cores de links globalmente, através da $link-color e aplicamos underlines só em
estado :hover;
• Utilizamos a variável $body-bg para colocar background-color no <body> (#fff é o valor padrão).
Estes estilos podem ser encontrados dentro do arquivo _reboot.scss e a variáveis globais são declaradas
em _variables.scss. Tenha certeza de configurar $font-size-base usando rem.
Cabeçalhos
Todos cabeçalhos HTML (<h1> até <h6>) estão disponíveis.
Cabeçalho Exemplo
<h1></h1> h1. Cabeçalho Bootstrap
<h2></h2> h2. Cabeçalho Bootstrap
<h3></h3> h3. Cabeçalho Bootstrap
<h4></h4> h4. Cabeçalho Bootstrap
<h5></h5> h5. Cabeçalho Bootstrap
<h6></h6> h6. Cabeçalho Bootstrap
Copy
<h1>h1. Cabeçalho Bootstrap</h1>
<h2>h2. Cabeçalho Bootstrap</h2>
<h3>h3. Cabeçalho Bootstrap</h3>
<h4>h4. Cabeçalho Bootstrap</h4>
<h5>h5. Cabeçalho Bootstrap</h5>
<h6>h6. Cabeçalho Bootstrap</h6>
As classes de .h1 até .h6 também estão disponíveis, para quando você quiser usar os estilos de um
cabeçalho mas não pode usar os elementos em si.
Copy
<p class="h1">h1. Cabeçalho Bootstrap</p>
<p class="h2">h2. Cabeçalho Bootstrap</p>
<p class="h3">h3. Cabeçalho Bootstrap</p>
<p class="h4">h4. Cabeçalho Bootstrap</p>
<p class="h5">h5. Cabeçalho Bootstrap</p>
<p class="h6">h6. Cabeçalho Bootstrap</p>
Customizando cabeçalhos
Display 1
Display 2
Display 3
Display 4
Copy
<h1 class="display-1">Display 1</h1>
<h1 class="display-2">Display 2</h1>
<h1 class="display-3">Display 3</h1>
<h1 class="display-4">Display 4</h1>
Parágrafo destaque
Faça um parágrafo se destacar, adicionando a classe .lead.
Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo luctus.
Copy
<p class="lead">
Vivamus sagittis lacus vel augue laoreet rutrum faucibus dolor auctor. Duis mollis, est non commodo
luctus.
</p>
Esta linha de texto deve ser tratada como uma adição ao documento.
Copy
<p>Você pode usar a tag _mark_ para <mark>destacar</mark> textos.</p>
<p><del>Esta linha de texto deve ser tratada com um texto deletado.</del></p>
<p><s>Esta linha de texto deve ser tratada como algo impreciso.</s></p>
<p><ins>Esta linha de texto deve ser tratada como uma adição ao documento.</ins></p>
<p><u>Esta linha de texto vai ser renderizada com underline.</u></p>
<p><small>Esta linha deve ser usada para letras com tamanhos menores.</small></p>
<p><strong>Esta linha renderiza em negrito.</strong></p>
<p><em>Esta linha renderiza em itálico.</em></p>
As classes .mark e .small também são úteis para aplicar os mesmos estilos que os
elementos <mark> e <small>, sem precisar usar implicações semânticas que viriam com as tags.
Apesar de não ter sido demonstrado, sinta-se livre para usar as tags <b> e <i>, no HTML. O <b> é suposto a
destacar palavras ou frases sem importância adicional, enquanto o <i> é mais para vozes, termos técnicos e
etc.
Utilitários de texto
Altere alinhamento de texto, transform, estilos, espessura e cor com nossos utilitários de texto e utilitários de
cores.
Abreviações
Implementação customizada do elemento HTML <abbr> (para abreviações e acrônimos), o qual mostra
versões expandidas no estado hover. Abreviações tem uma underline padrão e cursor de ajuda, para criar um
contexto mais rico em estado hover e para usuários de tecnologias assistivas.
attr
HTML
Copy
<p><abbr title="attribute">attr</abbr></p>
<p><abbr title="HyperText Markup Language" class="initialism">HTML</abbr></p>
Bloco de citação
Para citar blocos de conteúdos de outras fontes, dentro do seu documento, use <blockquote
class="blockquote"> em volta de qualquer conteúdo HTML.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
Copy
<blockquote class="blockquote">
<p class="mb-0">Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a
ante.</p>
</blockquote>
Declarando a fonte
Use <footer class="blockquote-footer"> para identificar uma fonte. Envolva o nome da fonte do trabalho
usando <cite>.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
Alinhamento
Use utilitários de texto o quanto seja necessário, para alterar o alinhamento de seu bloco de citação.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
Listas
Sem estilos
Remova o list-style padrão e margem à esquerda, nos itens da lista (apenas funciona em filhos
imediatos). Isso só se aplica a itens que são filhos imediatos, significando que você irá precisar usar a
classe em outras listas aninhadas.
Copy
<ul class="list-unstyled">
<li>Lorem ipsum dolor sit amet</li>
<li>Consectetur adipiscing elit</li>
<li>Integer molestie lorem at massa</li>
<li>Facilisis in pretium nisl aliquet</li>
<li>Nulla volutpat aliquam velit
<ul>
<li>Phasellus iaculis neque</li>
<li>Purus sodales ultricies</li>
<li>Vestibulum laoreet porttitor sem</li>
<li>Ac tristique libero volutpat at</li>
</ul>
</li>
<li>Faucibus porta lacus fringilla vel</li>
<li>Aenean sit amet erat nunc</li>
<li>Eget porttitor lorem</li>
</ul>
Inline
Remova as marcações de uma lista e adicione uma leve margem com uma combinação de duas
classes: .list-inline e .list-inline-item.
• Lorem ipsum
• Phasellus iaculis
• Nulla volutpat
Copy
<ul class="list-inline">
<li class="list-inline-item">Lorem ipsum</li>
<li class="list-inline-item">Phasellus iaculis</li>
<li class="list-inline-item">Nulla volutpat</li>
</ul>
Alinhe termos e descrições, horizontalmente, usando nossas classes do nosso sistema de grid(ou mixins
semânticos). Para termos mais longos, você pode usar a classe .text-truncatepara truncar o texto em elipse,
opcionalmente.
Listas de descrições
Uma lista de descrições é perfeita para definir termos.
Euismod
Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.
Donec id elit non mi porta gravida at eget metus.
Malesuada porta
Etiam porta sem malesuada magna mollis euismod.
Truncated term is truncated
Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa
justo sit amet risus.
Aninhamento
Lista de defiinições aninhada
Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc.
Copy
<dl class="row">
<dt class="col-sm-3">Listas de descrições</dt>
<dd class="col-sm-9">Uma lista de descrições é perfeita para definir termos.</dd>
<dt class="col-sm-3">Euismod</dt>
<dd class="col-sm-9">
<p>Vestibulum id ligula porta felis euismod semper eget lacinia odio sem nec elit.</p>
<p>Donec id elit non mi porta gravida at eget metus.</p>
</dd>
<dt class="col-sm-3">Aninhamento</dt>
<dd class="col-sm-9">
<dl class="row">
<dt class="col-sm-4">Lista de defiinições aninhada</dt>
<dd class="col-sm-8">Aenean posuere, tortor sed cursus feugiat, nunc augue blandit nunc.</dd>
</dl>
</dd>
</dl>
Tipografia responsiva
Tipografia responsiva se refere a escala de textos e componentes, simplesmente ajustando a font-size dos
elementos raizes, usando várias media queries. Bootstrap não faz isso por você, mas é muito fácil se você
quiser.
Abaixo vai um exemplo disso, na prática. Escolha qualquer font-size e media querie que quiser.
Copy
html {
font-size: 1rem;
}
@include media-breakpoint-up(sm) {
html {
font-size: 1.2rem;
}
}
@include media-breakpoint-up(md) {
html {
font-size: 1.4rem;
}
}
@include media-breakpoint-up(lg) {
html {
font-size: 1.6rem;
}
}
Código
Documentação e exemplos para mostrar blocos de código em linha ou multi-linhas, usando o Bootstrap.
All the tools your team needs in one place. Slack: Where work happens.ads via Carbon
Código em linha
Envolte pedaços de códigos (aqueles com única linha), usando o elemento <code>. Se assegure de usar
escape, nos colchetes do HTML.
Copy
Por exemplo, isso deve ser envolto em uma linha: <code><section></code>.
Bloco de códigos
Use tags <pre> para diversas linhas de código. Mais uma vez: tenha certeza de usar escape em qualquer
colchete HTML, para que tudo seja renderizado adequadamente. Opcionalmente, você pode adicionar a
classe .pre-scrollable, a qual vai usar max-heightcom valor de 340px e criar uma barra de rolagem vertical.
Variáveis
Para indicar variáveis, use a tag <var>.
y = mx + b
Copy
<var>y</var> = <var>m</var><var>x</var> + <var>b</var>
Input do usuário
Use o <kbd> para indicar um input típico de entrada via teclado.
Para trocar diretórios, digite cd seguido pelo nome do diretório.
Para editar configurações, pressione ctrl + ,
Copy
Para trocar diretórios, digite <kbd>cd</kbd> seguido pelo nome do diretório.<br>
Para editar configurações, pressione <kbd><kbd>ctrl</kbd> + <kbd>,</kbd></kbd>
Amostra de output
Para indicar uma amostra output de um programa, use a tag <samp>.
Este texto deve ser tratado como uma amostra output de um programa de computadores.
Copy
<samp>Este texto deve ser tratado como uma amostra output de um programa de computadores.</samp>
Imagens
Documentação e exemplos para tornar imagens responsivas (nunca crescem mais que os elementos pais) e
adicionar estilos leves a elas, através de classes.
It's teamwork, but simpler, more pleasant and more productive.ads via Carbon
Imagens responsivas
Imagens no Bootstrap são feitas responsivas com a classe .img-fluid. As declarações max-width:
100%; e height: auto; são aplicadas a imagem, de modo que ela escale junto ao elemento pai.
Copy
<img src="..." class="img-fluid" alt="Imagem responsiva">
Imagens SVG e o IE10
No Internet Explorer 10, imagens SVG com .img-fluid são dimensionadas desproporcionalmente. Para
consertar isso, adicione width: 100% \9; quando necessário. Isso conserta dimensões impróprias para outros
formatos de imagens, então, o Bootstrap não aplica isso automaticamente.
Thumbnails
Além de nossos utilitários border-radius, você pode usar .img-thumbnail para dar uma borda arredondada
de 1px a uma imagem.
Copy
<img src="..." alt="..." class="img-thumbnail">
Alinhando imagens
Alinhe imagens com as classes utilitárias de float ou classes para alinhamento de texto. Imagens de block-
level podem ser centralizadas usando a classe utilitária de margem .mx-auto.
Copy
<img src="..." class="rounded float-left" alt="...">
<img src="..." class="rounded float-right" alt="...">
Copy
<img src="..." class="rounded mx-auto d-block" alt="...">
Copy
<div class="text-center">
<img src="..." class="rounded" alt="...">
</div>
Elemento <picture>
Se você está usando o elemento <picture> para especificar várias fontes (<source>) para uma imagem
específica, se assegure de adicionar as classes .img- para as <img> e não para as tags <picture>.
Copy
<picture>
<source srcset="..." type="image/svg+xml">
<img src="..." class="img-fluid img-thumbnail" alt="...">
</picture>
Tabelas
Documentação e exemplos para inclusão de diferentes tipos de tabelas (de acordo com sua necessidade de
plugins JavaScript), no Bootstrap.
All the tools your team needs in one place. Slack: Where work happens.ads via Carbon
Exemplos
Devido ao abrangente uso de tabelas em widgets de terceiros, como calendários e selecionadores da datas,
nós desenvolvemos nossas tabelas de forma que sejam alternativas. Basta adicionar a classe .table em
qualquer <table>, então, customize-a mais usando nossos estilos de costumização ou as diversas classes
modificadoras.
Usando a marcação mais básica para tabelas, assim é como tabelas usando .table irão parecer, no
Bootstrap. Todos os estilos de tabelas são herdados no Bootstrap 4, significando que qualquer tabela
aninhada vai se comportar do mesmo modo que seus pais.
Copy
<table class="table">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Primeiro</th>
<th scope="col">Último</th>
<th scope="col">Nickname</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
Você também pode inverter as cores (texto claro em background escuro), usando a class .table-dark.
Copy
<table class="table table-dark">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Primeiro</th>
<th scope="col">Último</th>
<th scope="col">Nickname</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
Copy
<table class="table">
<thead class="thead-dark">
<tr>
<th scope="col">#</th>
<th scope="col">Primeiro</th>
<th scope="col">Último</th>
<th scope="col">Nickname</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
<table class="table">
<thead class="thead-light">
<tr>
<th scope="col">#</th>
<th scope="col">Primeiro</th>
<th scope="col">Último</th>
<th scope="col">Nickname</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
Linhas zebradas
Use .table-striped para adicionar listras zebradas para qualquer <tbody>.
Copy
<table class="table table-striped">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Primeiro</th>
<th scope="col">Último</th>
<th scope="col">Nickname</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
# Primeiro Último Nickname
Copy
<table class="table table-striped table-dark">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Primeiro</th>
<th scope="col">Último</th>
<th scope="col">Nickname</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
Copy
<table class="table table-bordered">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Primeiro</th>
<th scope="col">Último</th>
<th scope="col">Nickname</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td colspan="2">Larry the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
# Primeiro Último Nickname
Copy
<table class="table table-bordered table-dark">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Primeiro</th>
<th scope="col">Último</th>
<th scope="col">Nickname</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td colspan="2">Larry the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
Copy
<table class="table table-borderless">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Primeiro</th>
<th scope="col">Último</th>
<th scope="col">Nickname</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td colspan="2">Larry the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
.table-borderless também pode ser usada em tabelas mais escuras.
Copy
<table class="table table-borderless table-dark">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Primeiro</th>
<th scope="col">Último</th>
<th scope="col">Nickname</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td colspan="2">Larry the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
Copy
<table class="table table-hover">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Primeiro</th>
<th scope="col">Último</th>
<th scope="col">Nickname</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td colspan="2">Larry the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
# Primeiro Último Nickname
Copy
<table class="table table-hover table-dark">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Primeiro</th>
<th scope="col">Último</th>
<th scope="col">Nickname</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td colspan="2">Larry the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
Tabela pequena
Use .table-sm para fazer com que as tabelas fiquem mais compactas, já que o padding das células serão
cortados ao meio.
Copy
<table class="table table-sm">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Primeiro</th>
<th scope="col">Último</th>
<th scope="col">Nickname</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td colspan="2">Larry the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
# Primeiro Último Nickname
Copy
<table class="table table-sm table-dark">
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Primeiro</th>
<th scope="col">Último</th>
<th scope="col">Nickname</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td colspan="2">Larry the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
Classes contextuais
Use classes contextuais para colorir linhas ou células da tabela.
Classe Cabeçalho Cabeçalho
Copy
<!-- Em linhas -->
<tr class="table-active">...</tr>
<tr class="table-primary">...</tr>
<tr class="table-secondary">...</tr>
<tr class="table-success">...</tr>
<tr class="table-danger">...</tr>
<tr class="table-warning">...</tr>
<tr class="table-info">...</tr>
<tr class="table-light">...</tr>
<tr class="table-dark">...</tr>
<td class="table-primary">...</td>
<td class="table-secondary">...</td>
<td class="table-success">...</td>
<td class="table-danger">...</td>
<td class="table-warning">...</td>
<td class="table-info">...</td>
<td class="table-light">...</td>
<td class="table-dark">...</td>
</tr>
Variantes de background não estão disponíveis em tabelas escuras, mas você pode usar utilitários de texto
ou background para atingir estilos similares.
# Cabeçalho Cabeçalho
1 Célula Célula
2 Célula Célula
3 Célula Célula
4 Célula Célula
5 Célula Célula
6 Célula Célula
# Cabeçalho Cabeçalho
7 Célula Célula
8 Célula Célula
9 Célula Célula
Copy
<!-- Em linhas -->
<tr class="bg-primary">...</tr>
<tr class="bg-success">...</tr>
<tr class="bg-warning">...</tr>
<tr class="bg-danger">...</tr>
<tr class="bg-info">...</tr>
Perceba: já que browsers não suportam, atualmente, range context queries, nós contornamos as limitações
dos prefixos min- e max- e viewports com larguras fracionais (pode ocorrer em algumas circunstâncias, em
dispositivos de alta dpi), usando valores com precisão maior para estas comparações.
Legendas
Um <caption> funciona como um cabeçalho para a tabela. Isso ajuda usários de screen readers achar uma
tabela e descobrir sobre oquê é e decidir se eles querem lê-la.
Lista de usuários
Copy
<table class="table">
<caption>Lista de usuários</caption>
<thead>
<tr>
<th scope="col">#</th>
<th scope="col">Primeiro</th>
<th scope="col">Último</th>
<th scope="col">Nickname</th>
</tr>
</thead>
<tbody>
<tr>
<th scope="row">1</th>
<td>Mark</td>
<td>Otto</td>
<td>@mdo</td>
</tr>
<tr>
<th scope="row">2</th>
<td>Jacob</td>
<td>Thornton</td>
<td>@fat</td>
</tr>
<tr>
<th scope="row">3</th>
<td>Larry</td>
<td>the Bird</td>
<td>@twitter</td>
</tr>
</tbody>
</table>
Tabelas responsivas
Tabelas responsivas permitem tabelas serem roladas horizontalmente, com facilidade. Faça com que
qualquer tabela seja responsiva em todas viewports, simplesmente, envolvendo um .table com .table-
responsive. Além disso, você pode escolher um breakpoint máximo para a tabela ser responsiva, usando a
classe .table-responsive{-sm|-md|-lg|-xl}.
Corte vertical
Tabelas responsivas usam overflow-y: hidden, declaração a qual corta qualquer conteúdo que vai além da
borda de cima ou de baixo, numa tabela. Em particular, isso pode acabar cortando menus dropdowns e
outros widgets de terceiros.
Sempre responsiva
Use .table-responsive para fazer que tabelas rolem horizontalmente, através de todos dispositivos.
Copy
<div class="table-responsive">
<table class="table">
...
</table>
</div>
Breakpoint específico
Use .table-responsive{-sm|-md|-lg|-xl} sempre que necessário, para criar tabelas responsivas em um
breakpoint específico. Desse breakpoint pra cima, a tabela vai se comportar normalmente e não vai rolar
horizontalmente.
These tables may appear broken until their responsive styles apply at specific viewport widths.
Copy
<div class="table-responsive-sm">
<table class="table">
...
</table>
</div>
# Cabeçalho Cabeçalho Cabeçalho Cabeçalho Cabeçalho Cabeçalho Cabeçalho Ca
Copy
<div class="table-responsive-md">
<table class="table">
...
</table>
</div>
# Cabeçalho Cabeçalho Cabeçalho Cabeçalho Cabeçalho Cabeçalho Cabeçalho Ca
Copy
<div class="table-responsive-lg">
<table class="table">
...
</table>
</div>
# Cabeçalho Cabeçalho Cabeçalho Cabeçalho Cabeçalho Cabeçalho Cabeçalho Ca
Copy
<div class="table-responsive-xl">
<table class="table">
...
</table>
</div>
Figuras
Documentação e exemplos para mostrar imagens e textos relacionados usando o componente figure, no
Bootstrap.
Start sending beautiful transactional email in minutes with Postmark.ads via Carbon
Sempre que você precisar mostrar algum tipo de conteúdo como uma imagem com legenda, considere usar
o <figure>.
Use as classes .figure, .figure-img e .figure-caption para conseguir alguns estilos bases para os elementos
HTML5 <figure> e <figcaption>. Imagens na tag <figure> não possuem tamanhos explícitos, por isso, tenha
certeza de colocar a classe .img-fluid no elemento <img>, para fazer com que ela seja responsiva.
Copy
<figure class="figure">
<img src=".../400x300" class="figure-img img-fluid rounded" alt="Imagem de um quadrado genérico com
bordas arredondadas, em uma figure.">
<figcaption class="figure-caption">Uma legenda para a imagem acima.</figcaption>
</figure>
Alinhar a legenda de uma figura é fácil com nossos utilitários de textos.
Copy
<figure class="figure">
<img src=".../400x300" class="figure-img img-fluid rounded" alt="Imagem de um quadrado genérico com
bordas arredondadas, em uma figure.">
<figcaption class="figure-caption text-right">Uma legenda para a imagem acima.</figcaption>
</figure>
Alertas
Apresente mensagens contextuais para ações típicas dos usuários, usando este punhado flexível de
mensagens de alerta.
The new generation of project management tools is here and it’s visual.ads via Carbon
Exemplos
Alertas estão disponíveis para qualquer tamanho de texto, assim como um botão de dispersão opcional.
Para uma estilização adequada, use uma das oito requeridas classes contextuais (ex: .alert-success). Para
dispersão inline, use o plugin jQuery alerts.
Copy
<div class="alert alert-primary" role="alert">
Um simples alerta primary. Olha só!
</div>
<div class="alert alert-secondary" role="alert">
Um simples alerta secondary. Olha só!
</div>
<div class="alert alert-success" role="alert">
Um simples alerta success. Olha só!
</div>
<div class="alert alert-danger" role="alert">
Um simples alerta danger. Olha só!
</div>
<div class="alert alert-warning" role="alert">
Um simples alerta warning. Olha só!
</div>
<div class="alert alert-info" role="alert">
Um simples alerta info. Olha só!
</div>
<div class="alert alert-light" role="alert">
Um simples alerta light. Olha só!
</div>
<div class="alert alert-dark" role="alert">
Um simples alerta dark. Olha só!
</div>
Transmitindo significado a tecnologias assistivas
Usando cor para adicionar significado só fornece uma indicação visual, a qual não será transmitida para
usuários de tecnologias assistivas (como leitores de telas). Se assegure que a informação denotada pela cor
é tanto destacada do conteúdo (ex: o texto visível) ou está incluída em meios alternativos, como textos
extras escondidos com a classe .sr-class.
Cores de links
Use a classe utilitária .alert-link para, rapidamente, conseguir cores de links que combinam com o alerta.
Copy
<div class="alert alert-primary" role="alert">
Um simples alerta primary com <a href="#" class="alert-link">um link de exemplo</a>. Clique nele, se
quiser.
</div>
<div class="alert alert-secondary" role="alert">
Um simples alerta secondary com <a href="#" class="alert-link">um link de exemplo</a>. Clique nele, se
quiser.
</div>
<div class="alert alert-success" role="alert">
Um simples alerta success com <a href="#" class="alert-link">um link de exemplo</a>. Clique nele, se
quiser.
</div>
<div class="alert alert-danger" role="alert">
Um simples alerta danger com <a href="#" class="alert-link">um link de exemplo</a>. Clique nele, se
quiser.
</div>
<div class="alert alert-warning" role="alert">
Um simples alerta warning com <a href="#" class="alert-link">um link de exemplo</a>. Clique nele, se
quiser.
</div>
<div class="alert alert-info" role="alert">
Um simples alerta info com <a href="#" class="alert-link">um link de exemplo</a>. Clique nele, se
quiser.
</div>
<div class="alert alert-light" role="alert">
Um simples alerta light com <a href="#" class="alert-link">um link de exemplo</a>. Clique nele, se
quiser.
</div>
<div class="alert alert-dark" role="alert">
Um simples alerta dark com <a href="#" class="alert-link">um link de exemplo</a>. Clique nele, se
quiser.
</div>
Conteúdo adicional
Alertas também podem conter elementos HTML adicionais como cabeçalhos, parágrafos e divisores.
Muito bem!
Aêêê! Você conseguiu ler essa mensagem de alerta. Esse texto vai ter quer se extender um pouquinho pra
você conseguir ver como o espaçamento dentro de um alerta funciona.
Sempre que precisar, use utilitários de margem para manter as coisas perfeitas.
Copy
<div class="alert alert-success" role="alert">
<h4 class="alert-heading">Muito bem!</h4>
<p>Aêêê! Você conseguiu ler essa mensagem de alerta. Esse texto vai ter quer se extender um pouquinho
pra você conseguir ver como o espaçamento dentro de um alerta funciona.</p>
<hr>
<p class="mb-0">Sempre que precisar, use utilitários de margem para manter as coisas perfeitas.</p>
</div>
Dispersão
Usando o plugin JavaScript de alerta, é possível dispersar qualquer alerta inline, dessa forma:
Você pode ver isso, em ação, com essa demonstração em tempo real:
Copy
<div class="alert alert-warning alert-dismissible fade show" role="alert">
<strong>Oloco, meu!</strong> Olha esse alerta animado, como é chique!
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
</div>
Comportamento JavaScript
Acionadores
Copy
$('.alert').alert()
Também é possível, usando atributos data em um botão dentro do alerta, como vemos abaixo:
Copy
<button type="button" class="close" data-dismiss="alert" aria-label="Close">
<span aria-hidden="true">×</span>
</button>
Perceba que dispersar um alerta irá removê-lo do DOM.
Métodos
Método Descrição
$().alert() Faz um alerta esperar por eventos de cliques em elementos descendentes, os quais possuem o
atributo data-dismiss="alert" (não é necessário, quando usando a auto-inicialização do data-a
$().alert('close') Fecha um alerta, removendo-o do DOM. Se as classes .fade e .show estão presentes no element
alerta vai esmaecer antes de ser removido.
Copy
$(".alert").alert('close')
Eventos
O plugin de alerta do Bootstrap usa alguns eventos para se ligar com a funcionalidade de alerta.
Evento Descrição
close.bs.alert Este evento é acionado, imediadatamente, quando a instância do método close é invocada.
closed.bs.alert Este evento é acionado quando o alerta é fechado (vai esperar a transição CSS se finalizada).
Copy
$('#myAlert').on('closed.bs.alert', function () {
// do something…
})
Badges
Documentação e exemplos sobre os badges, nosso pequeno componente para contagem e rótulos.
All the tools your team needs in one place. Slack: Where work happens.ads via Carbon
Exemplo
Os badges escalam para combinar com o tamanho do elemento pai imediato, usando font-size relativa e
unidade em.
Copy
<h1>Cabeçalho exemplo <span class="badge badge-secondary">Novo</span></h1>
<h2>Cabeçalho exemplo <span class="badge badge-secondary">Novo</span></h2>
<h3>Cabeçalho exemplo <span class="badge badge-secondary">Novo</span></h3>
<h4>Cabeçalho exemplo <span class="badge badge-secondary">Novo</span></h4>
<h5>Cabeçalho exemplo <span class="badge badge-secondary">Novo</span></h5>
<h6>Cabeçalho exemplo <span class="badge badge-secondary">Novo</span></h6>
Badges podem ser usados como parte de links ou botões para realizar contagem.
Notificações 4
Copy
<button type="button" class="btn btn-primary">
Notificações <span class="badge badge-light">4</span>
</button>
Perceba que dependendo do uso, badges podem ser confusos para usuários de leitores de telas e
tecnologias assistivas similares. Apesar do estilo dos badges serem intuitivos, esses usuários vão ser
apresentados só ao conteúdo contido neles. Por isso, dependendo da situação, esses badges podem parecer
palavras ou números quaisquer ao final da frase, link ou botão.
A não ser que o contexto esteja claro (como no exemplo “Notificações”, onde é entendido que o 4 é o
número de notificações), considere criar contexto com um texto adicional escondido visualmente.
Copy
<button type="button" class="btn btn-primary">
Perfil <span class="badge badge-light">9</span>
<span class="sr-only">Mensagens não lidas</span>
</button>
Variações contextuais
Adicione qualquer uma das classes modificadoras mencionadas abaixo para mudar a aparência de um
badge.
Copy
<span class="badge badge-primary">Primary</span>
<span class="badge badge-secondary">Secondary</span>
<span class="badge badge-success">Success</span>
<span class="badge badge-danger">Danger</span>
<span class="badge badge-warning">Warning</span>
<span class="badge badge-info">Info</span>
<span class="badge badge-light">Light</span>
<span class="badge badge-dark">Dark</span>
Transmitindo significado a tecnologias assistivas
Usando cor para adicionar significado só fornece uma indicação visual, a qual não será transmitida para
usuários de tecnologias assistivas (como leitores de telas). Se assegure que a informação denotada pela cor
é tanto destacada do conteúdo (ex: o texto visível) ou está incluída em meios alternativos, como textos
extras escondidos com a classe .sr-class.
Badges em pílulas
Use a classe modificadora .badge-pill para fazer com que os badges fiquem mais arredondados (border-
radius maior e padding horizontal adicional). É útil se você precisa dos badges da v3.
Copy
<span class="badge badge-pill badge-primary">Primary</span>
<span class="badge badge-pill badge-secondary">Secondary</span>
<span class="badge badge-pill badge-success">Success</span>
<span class="badge badge-pill badge-danger">Danger</span>
<span class="badge badge-pill badge-warning">Warning</span>
<span class="badge badge-pill badge-info">Info</span>
<span class="badge badge-pill badge-light">Light</span>
<span class="badge badge-pill badge-dark">Dark</span>
Links
Usando as classes contextuais .badge-*, em um elemento <a>, rapidamente, consiga badges acionáveis com
estados hover e focus.
Copy
<a href="#" class="badge badge-primary">Primary</a>
<a href="#" class="badge badge-secondary">Secondary</a>
<a href="#" class="badge badge-success">Success</a>
<a href="#" class="badge badge-danger">Danger</a>
<a href="#" class="badge badge-warning">Warning</a>
<a href="#" class="badge badge-info">Info</a>
<a href="#" class="badge badge-light">Light</a>
<a href="#" class="badge badge-dark">Dark</a>
Breadcrumb
Indica a localização da página atual, dentro de uma hierarquia de navegação e, automaticamente, coloca
separadores usando CSS.
Exemplo
1. Home
1. Home
2. Biblioteca
1. Home
2. Biblioteca
3. Dados
Copy
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item active" aria-current="page">Home</li>
</ol>
</nav>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#">Home</a></li>
<li class="breadcrumb-item active" aria-current="page">Biblioteca</li>
</ol>
</nav>
<nav aria-label="breadcrumb">
<ol class="breadcrumb">
<li class="breadcrumb-item"><a href="#">Home</a></li>
<li class="breadcrumb-item"><a href="#">Biblioteca</a></li>
<li class="breadcrumb-item active" aria-current="page">Dados</li>
</ol>
</nav>
Copy
$breadcrumb-divider: quote(">");
Também é possível usar um ícone SVG base64 embutido:
Copy
$breadcrumb-divider:
url(Dados:image/svg+xml;base64,PHN2ZyB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciIHdpZHRoPSI4IiBoZWlna
HQ9IjgiPjxwYXRoIGQ9Ik0yLjUgMEwxIDEuNSAzLjUgNCAxIDYuNSAyLjUgOGw0LTQtNC00eiIgZmlsbD0iY3VycmVudENvbG9yIi8+P
C9zdmc+);
O separador pode ser removido definindo o valor de $breadcrumb-divider como none:
Copy
$breadcrumb-divider: none;
Acessibilidade
Já que breadcrumbs provém uma navegação, é uma boa ideia adicionar um atributo significativo
como aria-label="breadcrumb" para descrever o tipo de navegação provida no elemento <nav>, assim como
aplicar um aria-current="page" ao último item para indicar que ele representa a atual página.
Para mais informações, veja: WAI-ARIA Authoring Practices for the breadcrumb pattern.
Botões
Use os botões Bootstrap personalizados para ações em formulários, diálogos e outras coisas. Lembrando
que esse componente tem suporte a escolha de tamanhos, estados e muito mais.
It's teamwork, but simpler, more pleasant and more productive.ads via Carbon
Exemplos
Bootstrap possui vários estilos de botões pré-definidos, cada um com seu próprosito semântico e outros
recursos extras para mais controle.
Copy
<button type="button" class="btn btn-primary">Primary</button>
<button type="button" class="btn btn-secondary">Secondary</button>
<button type="button" class="btn btn-success">Success</button>
<button type="button" class="btn btn-danger">Danger</button>
<button type="button" class="btn btn-warning">Warning</button>
<button type="button" class="btn btn-info">Info</button>
<button type="button" class="btn btn-light">Light</button>
<button type="button" class="btn btn-dark">Dark</button>
Button tags
A classe .btn foi desenhada para ser usada com o elemento <button>. No entanto, você também pode usar
esta classe nos elementos <a> ou <input>, apesar de alguns browser aplicarem um visual um pouco
diferente.
Quando usando classes de botão em elementos <a> que funcionam como gatilhos in-page (igual aos
conteúdos colapsáveis), invés de link para novas páginas ou seções dentro da página atual, estas âncoras
devem receber role="button" para expliciar seu propósito a tecnologias assistivas, como leitores de telas.
Link Botão
Copy
<a class="btn btn-primary" href="#" role="button">Link</a>
<button class="btn btn-primary" type="submit">Botão</button>
<input class="btn btn-primary" type="button" value="Input">
<input class="btn btn-primary" type="submit" value="Submit">
<input class="btn btn-primary" type="reset" value="Reset">
Botões outline
Precisa de um botão, mas sem cor de backround? Substitua as classes modificadoras padrões pelas .btn-
outline-* que removem todas as imagens de background e cores, em qualquer botão.
Copy
<button type="button" class="btn btn-outline-primary">Primary</button>
<button type="button" class="btn btn-outline-secondary">Secondary</button>
<button type="button" class="btn btn-outline-success">Success</button>
<button type="button" class="btn btn-outline-danger">Danger</button>
<button type="button" class="btn btn-outline-warning">Warning</button>
<button type="button" class="btn btn-outline-info">Info</button>
<button type="button" class="btn btn-outline-light">Light</button>
<button type="button" class="btn btn-outline-dark">Dark</button>
Tamanhos
Botões grandes ou pequenos? Use .btn-lg ou .btn-sm para tamanhos alternativos ao padrão.
Copy
<button type="button" class="btn btn-primary btn-lg">Botão grande</button>
<button type="button" class="btn btn-secondary btn-lg">Botão grande</button>
Botão pequeno Botão pequeno
Copy
<button type="button" class="btn btn-primary btn-sm">Botão pequeno</button>
<button type="button" class="btn btn-secondary btn-sm">Botão pequeno</button>
Crie botões block-level (ocupam toda a largura do elemento pai), usando a classe .btn-block.
Copy
<button type="button" class="btn btn-primary btn-lg btn-block">Botão block-level</button>
<button type="button" class="btn btn-secondary btn-lg btn-block">Botão block-level</button>
Estado ativo
Os botões parecem pressionados (background, borda e sombra internas mais escuras), quando estão em
estado ativo. Não há necessidade de usar a classe no <button>, porque eles usam uma pseudo-
classe. No entanto, você ainda pode forçar a aparência de estado ativo com a classe .active e incuir o
atributo aria-pressed="true", se precisar.
Copy
<a href="#" class="btn btn-primary btn-lg active" role="button" aria-pressed="true">Link primário</a>
<a href="#" class="btn btn-secondary btn-lg active" role="button" aria-pressed="true">Link</a>
Estado desativado
Faça botões parecerem inativos, usando o atributo booleano disabled em qualquer elemento <button>.
Copy
<button type="button" class="btn btn-lg btn-primary" disabled>Botão primário</button>
<button type="button" class="btn btn-secondary btn-lg" disabled>Botão</button>
Botões desativados usando o elemento <a> se comportam um pouco diferente:
• O elemento <a> não suport o atributo disabled, então, você deve usar a classe .disabled para fazê-lo parecer
desativado, visualmente;
• Alguns estilos (que ainda não são bem suportados) são usados para desativarem todos os pointer-events,
em botões âncora;
o Em browsers que suportam essa propriedade, você não verá o cursor desativado.
• Botões desativados devem ter o atributo aria-disabled="true" para indicar o estado do elemento para
tecnologias assistivas.
Plugin de botão
Faça mais com botões. Controle estados ou crie grupos de botões, para mais componentes como toolbars.
Alternar estados
Use data-toggle="button" para alternar o estado ativo do botão. Se você pré-ativar o botão, deve usar a
classe .active e o atributo aria-pressed="true", no <button>.
Única alternância
Copy
<button type="button" class="btn btn-primary" data-toggle="button" aria-pressed="false"
autocomplete="off">
Única alternância
</button>
Os estilos do .button Bootstrap podem seren usado em outros elementos, como <label>para se ter um
botão no estilo checkbox ou radio com alternância. Use data-toggle="buttons" em um .btn-group para
estilizar o os inputs dentro de seus botões. Perceba que você pode criar botões com apenas um input ou
grupos deles.
O estado checado destes botões só é atualizado através do evento de clique, no botão. Se você usar
outro método para atualizar o input (ex: <input type="reset"> ou aplicando a propriedade checked,
manualmente), vai precisar anternar a classe .active da <label>, manualmente.
Note que botões pré-checados requerem que você coloque a classe .active, manualmente, no input
do <label>.
Checado
Copy
<div class="btn-group-toggle" data-toggle="buttons">
<label class="btn btn-secondary active">
<input type="checkbox" checked autocomplete="off"> Checado
</label>
</div>
Ativo Radio Radio
Copy
<div class="btn-group btn-group-toggle" data-toggle="buttons">
<label class="btn btn-secondary active">
<input type="radio" name="options" id="option1" autocomplete="off" checked> Ativo
</label>
<label class="btn btn-secondary">
<input type="radio" name="options" id="option2" autocomplete="off"> Radio
</label>
<label class="btn btn-secondary">
<input type="radio" name="options" id="option3" autocomplete="off"> Radio
</label>
</div>
Métodos
Método Descrição
Grupos de botões
Agrupe vários botões em uma única linha e tune eles com JavaScript, usando este componente.
Build the future of communications with Voice, Video, SMS, and WhatsApp APIs.ads via Carbon
Exemplo básico
Envolva vários botões (que possuem .btn) em um elemento com .btn-group. Adicione um comportamento
JavaScript opcional de radio ou checkbox com nosso plugin buttons.
EsquerdaMeioDireita
Copy
<div class="btn-group" role="group" aria-label="Exemplo básico">
<button type="button" class="btn btn-secondary">Esquerda</button>
<button type="button" class="btn btn-secondary">Meio</button>
<button type="button" class="btn btn-secondary">Direita</button>
</div>
Certifique-se de usar o role correto e prover uma label
Para que uma tecnologia assistiva (como leitores de telas) consiga entender que está lidando com uma série
de botões agrupados, um atributo role, apropriado, deve ser usado. Para grupos de botões, o atributo
poder ser role="group". Enquanto que toolbars devem usar role="toolbar".
Além disso, grupos de botões e toolbars devem receber uma label, já que a maioria das tecnologias
assistivas não vão fazer isso, independente da presença do atributo role. Nos exemplos mostrados aqui,
usamos aria-label, mas alternativas como aria-labelledby também podem serem usadas.
Toolbars
Combine grupos de botões para criar uma toolbar e ter um componente mais complexo. Use classes
utilitárias, sempre que precisar, para espaçar grupos, botões e outras coisas.
1234
567
Copy
<div class="btn-toolbar" role="toolbar" aria-label="Toolbar com grupos de botões">
<div class="btn-group mr-2" role="group" aria-label="Primeiro grupo">
<button type="button" class="btn btn-secondary">1</button>
<button type="button" class="btn btn-secondary">2</button>
<button type="button" class="btn btn-secondary">3</button>
<button type="button" class="btn btn-secondary">4</button>
</div>
<div class="btn-group mr-2" role="group" aria-label="Segundo grupo">
<button type="button" class="btn btn-secondary">5</button>
<button type="button" class="btn btn-secondary">6</button>
<button type="button" class="btn btn-secondary">7</button>
</div>
<div class="btn-group" role="group" aria-label="Terceiro grupo">
<button type="button" class="btn btn-secondary">8</button>
</div>
</div>
Sinta-se livre para usar uma mistura de grupos de inputs e botões, em suas toolbars. Similar ao exemplo
acima, você vai precisar de alguns utilitários para espaçar as coisas, provavelmente.
1234
1234
@
Copy
<div class="btn-toolbar mb-3" role="toolbar" aria-label="Toolbar com grupos de botões">
<div class="btn-group mr-2" role="group" aria-label="Primeiro grupo">
<button type="button" class="btn btn-secondary">1</button>
<button type="button" class="btn btn-secondary">2</button>
<button type="button" class="btn btn-secondary">3</button>
<button type="button" class="btn btn-secondary">4</button>
</div>
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text" id="btnGroupAddon">@</div>
</div>
<input type="text" class="form-control" placeholder="Exemplo de grupo de input" aria-label="Exemplo
de grupo de input" aria-describedby="btnGroupAddon">
</div>
</div>
Dimensionamento
Invés de aplicar classes para dimensionamento em cada botão de um grupo, basta adicionar .btn-group-
* para cada .btn-group, incluindo cada um quando aninhar vários grupos.
EsquerdaMeioDireita
EsquerdaMeioDireita
EsquerdaMeioDireita
Copy
<div class="btn-group btn-group-lg" role="group" aria-label="...">...</div>
<div class="btn-group" role="group" aria-label="...">...</div>
<div class="btn-group btn-group-sm" role="group" aria-label="...">...</div>
Aninhamento
Coloque um .btn-group dentro de outro .btn-group quando quiser menus dropdowns misturados com
vários botões.
12
Dropdown
Copy
<div class="btn-group" role="group" aria-label="Grupo de botões com dropdown aninhado">
<button type="button" class="btn btn-secondary">1</button>
<button type="button" class="btn btn-secondary">2</button>
Variação vertical
Faça com que uma série de botões apareça verticalmente, invés de horizontalmente. Botões dropdowns
divididos não são suportados, nesse caso.
BotãoBotãoBotãoBotãoBotãoBotão
BotãoBotão
Dropdown
BotãoBotão
Dropdown
Dropdown
Dropdown
Copy
<div class="btn-group-vertical">
...
</div>
Cards
Os cards Bootstrap proporcionam um container de conteúdo flexível e extensível com múltiplos variantes e
opções.
All the tools your team needs in one place. Slack: Where work happens.ads via Carbon
Sobre
Um card é um container de conteúdo flexível e extensível. Ele tem opções para cabeçalhos e rodapés, uma
larga variedade de conteúdo, cores de background contextuais e opções de display poderosas. Se você é
familiarizado com Bootstrap 3, saiba que os cards substituem nossos antigos panels, wells e thumbnails.
Uma funcionalidade similar a destes componentes está disponível, usando classes modificadoras para cards.
Exemplo
Cards são feitos com menos marcação HTML e estilos possível, mas ainda assim conseguem entregar
bastante controle e personalização. Feitos com flexbox, oferecem fácil alinhamento e combinação com
outros componentes. Por padrão, não possuem margin, então, use utilitários de espaçamento, se necessário.
Abaixo, tem um exemplo de um card básico com conteúdo misto e largura fixa. Cards não possuem largura
fixa, inicialmente, então, eles vão preencher toda a largura de seu elemento pai, naturalmente. Isso é
fácilmente personalizado com nossas várias opções de tamanhos.
Título do card
Um exemplo de texto rápido para construir o título do card e fazer preencher o conteúdo do card.
Visitar
Copy
<div class="card" style="width: 18rem;">
<img class="card-img-top" src=".../100px180/" alt="Imagem de capa do card">
<div class="card-body">
<h5 class="card-title">Título do card</h5>
<p class="card-text">Um exemplo de texto rápido para construir o título do card e fazer preencher o
conteúdo do card.</p>
<a href="#" class="btn btn-primary">Visitar</a>
</div>
</div>
Tipos de conteúdo
Cards suportam uma larga variedade de conteúdos, incluindo imagens, texto, grupo de listas, links e muito
mais. Abaixo, temos oquê é suportado.
Body
A base de um card é o .card-body. Use ele, sempre que precisar de um espaço dentro do card.
Copy
<div class="card">
<div class="card-body">
Isto é um texto dentro de um card.
</div>
</div>
Os títulos dos card são usados adicionando a classe .card-title em uma tag <h*>. Da mesma maneira, links
são adicionados e posicionados próximos um dos outros, colocando .card-link em um elemento <a>.
Subtitulos são criadas usando uma .card-subtitle em uma tag <h*>. Se os itens .card-titlee .card-
subtitle são colocados em um .card-body, os títulos e subtitulos serão alinhados, adequadamente.
Título do card
Subtitulo do card
Um exemplo de texto rápido para construir o título do card e fazer preencher o conteúdo do card.
Copy
<div class="card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">Título do card</h5>
<h6 class="card-subtitle mb-2 text-muted">Subtitulo do card</h6>
<p class="card-text">Um exemplo de texto rápido para construir o título do card e fazer preencher o
conteúdo do card.</p>
<a href="#" class="card-link">Link do card</a>
<a href="#" class="card-link">Outro link</a>
</div>
</div>
Imagens
A .card-img-top posiciona uma imagem no topo do card. Com .card-text, textos podem ser adicionados ao
card. O texto dentro do .card-text também pode ser estilizado com as tags HTML padrões.
Um exemplo de texto rápido para construir o título do card e fazer preencher o conteúdo do card.
Copy
<div class="card" style="width: 18rem;">
<img class="card-img-top" src=".../100px180/?text=Image cap" alt="Imagem de capa do card">
<div class="card-body">
<p class="card-text">Um exemplo de texto rápido para construir o título do card e fazer preencher o
conteúdo do card.</p>
</div>
</div>
Grupo e listas
Baguncinha
Misture e combine vários tipos de conteúdos para ter o card que precisa. Mostrando abaixo, estão estilos de
imagens, blocos, estilos de textos e grupo de listas, todos dentro de um card com largura fixa.
Título do card
Um exemplo de texto rápido para construir o título do card e fazer preencher o conteúdo do card.
Copy
<div class="card" style="width: 18rem;">
<img class="card-img-top" src=".../100px180/?text=Image cap" alt="Imagem de capa do card">
<div class="card-body">
<h5 class="card-title">Título do card</h5>
<p class="card-text">Um exemplo de texto rápido para construir o título do card e fazer preencher o
conteúdo do card.</p>
</div>
<ul class="list-group list-group-flush">
<li class="list-group-item">Cras justo odio</li>
<li class="list-group-item">Dapibus ac facilisis in</li>
<li class="list-group-item">Vestibulum at eros</li>
</ul>
<div class="card-body">
<a href="#" class="card-link">Link do card</a>
<a href="#" class="card-link">Outro link</a>
</div>
</div>
Cabeçalho e rodapé
Destaque
Título especial
Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Visitar
Copy
<div class="card">
<div class="card-header">
Destaque
</div>
<div class="card-body">
<h5 class="card-title">Título especial</h5>
<p class="card-text">Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional.</p>
<a href="#" class="btn btn-primary">Visitar</a>
</div>
</div>
Cabeçalhos de cards podem ser estilizados usando .card-header em elementos <h*>.
Destaque
Título especial
Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Visitar
Copy
<div class="card">
<h5 class="card-header">Destaque</h5>
<div class="card-body">
<h5 class="card-title">Título especial</h5>
<p class="card-text">Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional.</p>
<a href="#" class="btn btn-primary">Visitar</a>
</div>
</div>
Citação
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
Copy
<div class="card">
<div class="card-header">
Citação
</div>
<div class="card-body">
<blockquote class="blockquote mb-0">
<p>Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante. </p>
<footer class="blockquote-footer">Alguém famoso em <cite title="Título da fonte">Título da
fonte</cite></footer>
</blockquote>
</div>
</div>
Destaque
Título especial
Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Visitar
2 dias atrás
Copy
<div class="card text-center">
<div class="card-header">
Destaque
</div>
<div class="card-body">
<h5 class="card-title">Título especial</h5>
<p class="card-text">Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional.</p>
<a href="#" class="btn btn-primary">Visitar</a>
</div>
<div class="card-footer text-muted">
2 dias atrás
</div>
</div>
Tamanhos
Os cards não recebem nenhuma largura inicial específica, então, eles vão ter 100% da largura do pai, se não
for declarado. Você pode mudar isso, se necessário, usando CSS personalizado, classes grid, mixins grid Sass
ou utilitários.
Título especial
Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Visitar
Título especial
Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Visitar
Copy
<div class="row">
<div class="col-sm-6">
<div class="card">
<div class="card-body">
<h5 class="card-title">Título especial</h5>
<p class="card-text">Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional.</p>
<a href="#" class="btn btn-primary">Visitar</a>
</div>
</div>
</div>
<div class="col-sm-6">
<div class="card">
<div class="card-body">
<h5 class="card-title">Título especial</h5>
<p class="card-text">Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional.</p>
<a href="#" class="btn btn-primary">Visitar</a>
</div>
</div>
</div>
</div>
Usando utilitários
Use nosso punhado de utilitários para dimensionamento e defina a largura de um card, rapidamente.
Título do card
Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Botão
Título do card
Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Botão
Copy
<div class="card w-75">
<div class="card-body">
<h5 class="card-title">Título do card</h5>
<p class="card-text">Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional.</p>
<a href="#" class="btn btn-primary">Botão</a>
</div>
</div>
Use CSS personalizado em suas folhas de estilos ou estilos inline para definir a largura.
Título especial
Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Visitar
Copy
<div class="card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">Título especial</h5>
<p class="card-text">Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional.</p>
<a href="#" class="btn btn-primary">Visitar</a>
</div>
</div>
Alinhamento de texto
Você pode alterar o alinhamento de texto de qualquer card, rapidamente, em seu todo ou partes específicas,
com nossas classes de alinhamento.
Título especial
Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Visitar
Título especial
Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Visitar
Título especial
Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Visitar
Copy
<div class="card" style="width: 18rem;">
<div class="card-body">
<h5 class="card-title">Título especial</h5>
<p class="card-text">Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional.</p>
<a href="#" class="btn btn-primary">Visitar</a>
</div>
</div>
Navegação
Adicione alguma navegação no cabeçalho do card com os componentes nav do Bootstrap.
• Ativo
• Link
• Desativado
Título especial
Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Visitar
Copy
<div class="card text-center">
<div class="card-header">
<ul class="nav nav-tabs card-header-tabs">
<li class="nav-item">
<a class="nav-link active" href="#">Ativo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Desativado</a>
</li>
</ul>
</div>
<div class="card-body">
<h5 class="card-title">Título especial</h5>
<p class="card-text">Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional.</p>
<a href="#" class="btn btn-primary">Visitar</a>
</div>
</div>
• Ativo
• Link
• Desativado
Título especial
Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Visitar
Copy
<div class="card text-center">
<div class="card-header">
<ul class="nav nav-pills card-header-pills">
<li class="nav-item">
<a class="nav-link active" href="#">Ativo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Desativado</a>
</li>
</ul>
</div>
<div class="card-body">
<h5 class="card-title">Título especial</h5>
<p class="card-text">Com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional.</p>
<a href="#" class="btn btn-primary">Visitar</a>
</div>
</div>
Imagens
Cards possuem algumas opções para trabalharmos com imagens. Escolha entre anexar “capas com imagens”
no final do card, sobrepor ela com o conteúdo ou, simplesmente, embutir a imagem no card.
Semelhante aos cabeçalhos e rodapés, cards podem ter capas com imagens na parte inferior ou superior.
Título do card
Este é um card maior com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional. Este conteúdo é um pouco maior, para demonstração.
Sobreposição de imagens
Transforme uma imagem em background de card, sobrepondo o texto do seu card. Dependendo da
imagem, você pode precisar de estilos ou utilitários adicionais.
Título do card
Este é um card maior com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional. Este conteúdo é um pouco maior, para demonstração.
Estilos de card
Cards possuem várias opções para customizar seus backgrounds, bordas e cores.
Background e cor
Cabeçalho
Bordas
Use utilitários de bordas para mudar só a cor das bordas de um card. Perceba que você pode usar as
classes .text-{color} no .card pai ou um subconjunto de cards, como mostrado abaixo.
Cabeçalho
Utilitários mixins
Você também pode mudar as bordas no cabeçalho e rodapé do card, como quiser. Ainda pior: pode
remover suas background-color com .bg-transparent.
Cabeçalho
Copy
<div class="card border-success mb-3" style="max-width: 18rem;">
<div class="card-header bg-transparent border-success">Cabeçalho</div>
<div class="card-body text-success">
<h5 class="card-title">Título de Card Success</h5>
<p class="card-text">Um exemplo de texto rápido para construir o título do card e fazer preencher o
conteúdo do card.</p>
</div>
<div class="card-footer bg-transparent border-success">Rodapé</div>
</div>
Layout do card
Além da estilização do conteúdo dentro dos cards, Bootstrap possui algumas opções para a criação de
vários cards. No momento, estas opções de layout ainda não são responsivas.
Grupo de cards
Use grupo de cards para renderizá-los como um único elemento anexado com largura e altura igual. Grupo
de cards usam display: flex; para conseguir seus tamanhos adequados.
Título do card
Este é um card maior com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional. Este conteúdo é um pouco maior, para demonstração.
Título do card
Este é um card com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Título do card
Este é um card maior com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional. Este card tem o conteúdo ainda maior que o primeiro, para mostrar a altura igual, em ação.
Título do card
Este é um card maior com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional. Este conteúdo é um pouco maior, para demonstração.
Atualizados 3 minutos atrás
Título do card
Este é um card com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Atualizados 3 minutos atrás
Título do card
Este é um card maior com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional. Este card tem o conteúdo ainda maior que o primeiro, para mostrar a altura igual, em ação.
Atualizados 3 minutos atrás
Copy
<div class="card-group">
<div class="card">
<img class="card-img-top" src=".../100px180/" alt="Imagem de capa do card">
<div class="card-body">
<h5 class="card-title">Título do card</h5>
<p class="card-text">Este é um card maior com suporte a texto embaixo, que funciona como uma
introdução a um conteúdo adicional. Este conteúdo é um pouco maior, para demonstração.</p>
</div>
<div class="card-footer">
<small class="text-muted">Atualizados 3 minutos atrás</small>
</div>
</div>
<div class="card">
<img class="card-img-top" src=".../100px180/" alt="Imagem de capa do card">
<div class="card-body">
<h5 class="card-title">Título do card</h5>
<p class="card-text">Este é um card com suporte a texto embaixo, que funciona como uma introdução
a um conteúdo adicional.</p>
</div>
<div class="card-footer">
<small class="text-muted">Atualizados 3 minutos atrás</small>
</div>
</div>
<div class="card">
<img class="card-img-top" src=".../100px180/" alt="Imagem de capa do card">
<div class="card-body">
<h5 class="card-title">Título do card</h5>
<p class="card-text">Este é um card maior com suporte a texto embaixo, que funciona como uma
introdução a um conteúdo adicional. Este card tem o conteúdo ainda maior que o primeiro, para mostrar a
altura igual, em ação.</p>
</div>
<div class="card-footer">
<small class="text-muted">Atualizados 3 minutos atrás</small>
</div>
</div>
</div>
Card decks
Precisa de um conjunto de cards com larguras e alturas iguais, mas sem que estejam interligados? Use os
card decks.
Título do card
Este é um card mais longo com suporte a texto embaixo, que funciona como uma introdução a um
conteúdo adicional. Este conteúdo é um pouco maior.
Título do card
Este é um card com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Título do card
Este é um card maior com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional. Este card tem o conteúdo ainda maior que o primeiro, para mostrar a altura igual, em ação.
Título do card
Este é um card maior com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional. Este conteúdo é um pouco maior, para demonstração.
Atualizados 3 minutos atrás
Título do card
Este é um card com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Atualizados 3 minutos atrás
Título do card
Este é um card maior com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional. Este card tem o conteúdo ainda maior que o primeiro, para mostrar a altura igual, em ação.
Atualizados 3 minutos atrás
Copy
<div class="card-deck">
<div class="card">
<img class="card-img-top" src=".../100px180/" alt="Imagem de capa do card">
<div class="card-body">
<h5 class="card-title">Título do card</h5>
<p class="card-text">Este é um card maior com suporte a texto embaixo, que funciona como uma
introdução a um conteúdo adicional. Este conteúdo é um pouco maior, para demonstração.</p>
</div>
<div class="card-footer">
<small class="text-muted">Atualizados 3 minutos atrás</small>
</div>
</div>
<div class="card">
<img class="card-img-top" src=".../100px180/" alt="Imagem de capa do card">
<div class="card-body">
<h5 class="card-title">Título do card</h5>
<p class="card-text">Este é um card com suporte a texto embaixo, que funciona como uma introdução
a um conteúdo adicional.</p>
</div>
<div class="card-footer">
<small class="text-muted">Atualizados 3 minutos atrás</small>
</div>
</div>
<div class="card">
<img class="card-img-top" src=".../100px180/" alt="Imagem de capa do card">
<div class="card-body">
<h5 class="card-title">Título do card</h5>
<p class="card-text">Este é um card maior com suporte a texto embaixo, que funciona como uma
introdução a um conteúdo adicional. Este card tem o conteúdo ainda maior que o primeiro, para mostrar a
altura igual, em ação.</p>
</div>
<div class="card-footer">
<small class="text-muted">Atualizados 3 minutos atrás</small>
</div>
</div>
</div>
Colunas de cards
Cards podem ser organizados de uma maneira parecida com as colunas Masonry, apenas com CSS e
envoltos em uma .card-column. Eles são feitos com propriedades CSS column, invés de flexbox, para fácil
alinhamento. Além do mais, são orientados de cima para baixo, da esquerda para direita.
Atenção! Sua experiência com colunas de cards pode variar. Para evitar cards bugando nas colunas,
devemos defini-los como display: inline-block, já que column-break-inside: avoid ainda não é uma
solução infalível.
Título do card
Este é um card com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Título do card
Este é um card com suporte a texto embaixo, que funciona como uma introdução a um conteúdo adicional.
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer posuere erat a ante.
Título do card
Este é um card maior com suporte a texto embaixo, que funciona como uma introdução a um conteúdo
adicional. Este card tem o conteúdo ainda maior que o primeiro, para mostrar a altura igual, em ação.
Copy
.card-columns {
@include media-breakpoint-only(lg) {
column-count: 4;
}
@include media-breakpoint-only(xl) {
column-count: 5;
}
}
Carousel
Um componente de slideshow para fazer um giro através de elementos (imagens ou slides de texto), como
se fosse um carrosel.
All the tools your team needs in one place. Slack: Where work happens.ads via Carbon
Como funciona
O carousel é um slideshow para fazer um giro em vários coteúdos, construído com CSS 3D transforms e um
pouco de JavaScript. Ele funciona com o uso de imagens, texto ou marcação personalizada. Também possui
suporte para controles anterior, próximo e indicadores.
Nos navegadores onde a API Page Visibility é suportada, o carousel vai evitar deslizar quando a página não
está visível para o usuário (como quando o browser está inativo, janela minimizada, etc).
Por favor, esteja atento que carousels aninhados não são suportados e não são, geralmente, amigáveis aos
padrões de acessibilidades.
Por último, se você está construindo nosso JavaScript a partir da fonte, vai precisar do util.js.
Exemplo
Carousels não normalizam dimensões, automaticamente. Assim, você pode precisar usar utilitários adicionais
ou estilos personalizados para dimensionar conteúdos, apropriadamente. Apesar de carousels suportarem
controles anterior, próximo e indicadores, eles não são obrigatórios, necessariamente. Use e abuse, como
quiser.
A classe .active precisa ser usada em um dos slides, caso contrário, o carousel não ficará visível. Também,
se assegure de definir um único ID no .carousel para os controles opcionais, especialmente, se você está
usando múltiplos carousels em uma página. Elementos de controle e indicador devem ter um atributo data-
target (ou links href) que combinam com o ID do elemento .carousel.
Só slides
Aqui está um carousel só com slides. Perceba a presença do .d-block e .w-100 nas imagens do carousel para
evitar alinhamento padrão de imagens do navegador.
Copy
<div id="carouselExampleSlidesOnly" class="carousel slide" data-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active">
<img class="d-block w-100" src=".../800x400?auto=yes&bg=777&fg=555&text=Primeiro Slide"
alt="Primeiro Slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src=".../800x400?auto=yes&bg=666&fg=444&text=Segundo Slide"
alt="Segundo Slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src=".../800x400?auto=yes&bg=555&fg=333&text=Terceiro Slide"
alt="Terceiro Slide">
</div>
</div>
</div>
Com controles
AnteriorPróximo
Copy
<div id="carouselExampleControls" class="carousel slide" data-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active">
<img class="d-block w-100" src=".../800x400?auto=yes&bg=777&fg=555&text=Primeiro Slide"
alt="Primeiro Slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src=".../800x400?auto=yes&bg=666&fg=444&text=Segundo Slide"
alt="Segundo Slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src=".../800x400?auto=yes&bg=555&fg=333&text=Terceiro Slide"
alt="Terceiro Slide">
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleControls" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Anterior</span>
</a>
<a class="carousel-control-next" href="#carouselExampleControls" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Próximo</span>
</a>
</div>
Com indicadores
AnteriorPróximo
Copy
<div id="carouselExampleIndicators" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
<li data-target="#carouselExampleIndicators" data-slide-to="0" class="active"></li>
<li data-target="#carouselExampleIndicators" data-slide-to="1"></li>
<li data-target="#carouselExampleIndicators" data-slide-to="2"></li>
</ol>
<div class="carousel-inner">
<div class="carousel-item active">
<img class="d-block w-100" src=".../800x400?auto=yes&bg=777&fg=555&text=Primeiro Slide"
alt="Primeiro Slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src=".../800x400?auto=yes&bg=666&fg=444&text=Segundo Slide"
alt="Segundo Slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src=".../800x400?auto=yes&bg=555&fg=333&text=Terceiro Slide"
alt="Terceiro Slide">
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleIndicators" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Anterior</span>
</a>
<a class="carousel-control-next" href="#carouselExampleIndicators" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Próximo</span>
</a>
</div>
Com legenda
Adicione legendas nos seus slides, facilmente, usando o elemento .carousel-caption dentro de
qualquer .carousel-item. Eles podem ser escondidos, facilmente, em qualquer viewport menor, como
mostrado é mostrado abaixo, usando utilitários display. Escondemos eles, inicialmente, com .d-none e
trazemos de volta em dispositivos de tamanho mediano, usando .d-md-block.
AnteriorPróximo
Copy
<div class="carousel-item">
<img src="..." alt="...">
<div class="carousel-caption d-none d-md-block">
<h5>...</h5>
<p>...</p>
</div>
</div>
Crossfade
Use .carousel-fade no seu carousel para animar os slides com uma transição esmaecida, invés de um
simples slide.
AnteriorPróximo
Copy
<div id="carouselExampleFade" class="carousel slide carousel-fade" data-ride="carousel">
<div class="carousel-inner">
<div class="carousel-item active">
<img class="d-block w-100" src=".../800x400?auto=yes&bg=777&fg=555&text=Primeiro Slide"
alt="Primeiro Slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src=".../800x400?auto=yes&bg=666&fg=444&text=Segundo Slide"
alt="Segundo Slide">
</div>
<div class="carousel-item">
<img class="d-block w-100" src=".../800x400?auto=yes&bg=555&fg=333&text=Terceiro Slide"
alt="Terceiro Slide">
</div>
</div>
<a class="carousel-control-prev" href="#carouselExampleFade" role="button" data-slide="prev">
<span class="carousel-control-prev-icon" aria-hidden="true"></span>
<span class="sr-only">Anterior</span>
</a>
<a class="carousel-control-next" href="#carouselExampleFade" role="button" data-slide="next">
<span class="carousel-control-next-icon" aria-hidden="true"></span>
<span class="sr-only">Próximo</span>
</a>
</div>
Modo de uso
Via atributos data
Use atributos data para, facilmente, controlar a posição do carousel. O data-slide aceita as palavras-
chaves prev ou next, as quais alteram a posição do slide, de acordo com sua atual posição. Opcionalmente,
use data-slide-to para passar um index ao carousel, o qual muda a posição do slide para o index específico,
com valores começando em 0 (ex: data-slide-to="2").
O atributo data-ride="carousel" é usado para declarar que o carousel vai começar a animação assim que a
página carregar. Este atributo não pode ser usado em combinação com uma (redundante e
desnecessária) inicialização JavaScript explícita, do mesmo carousel.
Via JavaScript
Copy
$('.carousel').carousel()
Opções
Opções podem ser passadas via atributos data ou JavaScript. Para atributos data, anexe o nome da opção no
prefixo data-, como acontece em data-interval="".
interval number 5000 A quantidade de tempo de espera entre a troca de slides. Se o valor é false, o ca
não vai girar, automaticamente.
keyboard booleano true Diz se o carousel deve reagir aos eventos de teclado.
pause string | booleano "hover" Se tiver definido como "hover", pausa o ciclo do carousel no
evento mouseenter e volta o ciclo no mouseleave. Se definido para false, p
o mouse sobre o carousel não irá pausá-lo.
wrap boolean true Diz se o carousel deve girar continuamente ou ter paradas bruscas.
Métodos
Copy
$('.carousel').carousel({
interval: 2000
})
.carousel('cycle')
Gira pelos itens do carousel, da esquerda para direita.
.carousel('pause')
Impede o carousel de girar pelos itens.
.carousel(Número)
Gira o carousel para um frame particular (começa em 0, como uma array). Retorna ao invocador, antes do
item alvo ser mostrado (antes do evento slid.bs.carousel ocorrer).
.carousel('prev')
Gira para o item anterior. Retorna ao invocador, antes do item anterior ser mostrado(antes do
evento slid.bs.carousel ocorrer).
.carousel('next')
Gira para o próximo item. Retorna ao invocador, antes do próximo item ser mostrado(antes do
evento slid.bs.carousel ocorrer).
.carousel('dispose')
Destroi um elemento do carousel.
Eventos
A classe carousel do Bootstrap tem dois evento para serem ligados a funcionalidade do carousel. Ambos
eventos possuem as seguintes propriedades adicionais:
• direction: a direção na qual o carousel está deslizando (tanto "left" quanto "right");
• relatedTarget: o elemento DOM que está sendo deslizado para o lugar do item ativo;
• from: o index do atual item;
• to: o index do próximo item.
Todos eventos carousel são acionados no próprio carousel (acionados no elemento <div
class="carousel">).
slid.bs.carousel Este evento é acionado quando o carousel acabou de finalizar sua transição.
Copy
$('#myCarousel').on('slide.bs.carousel', function () {
// Faça algo...
})
A duração da transição do .carousel-item pode ser alterada na variável Sass $carousel-transition, antes de
compilar ou em estilos personalizados (se você está usando CSS compilado). Se várias transições são
aplicadas, se assegure da transição transform ser declarada primeiro (ex: transition: transform 2s ease,
opacity .5s ease-out).
Collapse
Alterne a visibilidade do conteúdo de seu projeto com algumas classes e nossos plugins JavaScript.
40+ SDKs. 190+ tutorials. 250,000 developers trust us. Generous free plan.ads via Carbon
Como funciona
O plugin JavaScript collapse é usado para mostrar e esconder conteúdo. Botões ou âncoras são usados
como gatilhos que são mapeados para elementos específicos que você alterna visibilidade. Mostrar um
elemento (de tal maneira) vai animar a height, de seu valor atual, para 0. Dado como CSS lida com
animações, você não pode usar padding em um elemento .collapse. Pelo contrário, use esta classe como um
elemento pai independente.
Exemplo
Clique nos botões abaixo para mostrar e esconder outro elemento, através de mudanças de classes:
Você pode usar um link com o atributo href ou um botão com data-target. Em ambos casos, data-
toggle="collapse" é exigido.
Copy
<p>
<a class="btn btn-primary" data-toggle="collapse" href="#collapseExample" role="button" aria-
expanded="false" aria-controls="collapseExample">
Link com href
</a>
<button class="btn btn-primary" type="button" data-toggle="collapse" data-target="#collapseExample"
aria-expanded="false" aria-controls="collapseExample">
Botão com data-target
</button>
</p>
<div class="collapse" id="collapseExample">
<div class="card card-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid.
Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident.
</div>
</div>
Vários alvos
Um <button> ou uma <a> pode mostrar e esconder vários elementos, referenciando-os com um seletor
jQuery em seu href ou data-target. Vários <button> ou <a> podem mostrar e esconder um elemento, se
cada um deles referenciá-lo com seus href ou data-target.
Copy
<p>
<a class="btn btn-primary" data-toggle="collapse" href="#multiCollapseExample1" role="button" aria-
expanded="false" aria-controls="multiCollapseExample1">Alterna primeiro elemento</a>
<button class="btn btn-primary" type="button" data-toggle="collapse" data-
target="#multiCollapseExample2" aria-expanded="false" aria-controls="multiCollapseExample2">Alterna
segundo elemento</button>
<button class="btn btn-primary" type="button" data-toggle="collapse" data-target=".multi-collapse"
aria-expanded="false" aria-controls="multiCollapseExample1 multiCollapseExample2">Alterna terceiro
elemento</button>
</p>
<div class="row">
<div class="col">
<div class="collapse multi-collapse" id="multiCollapseExample1">
<div class="card card-body">
Anim pariatur cliche reprehenderit, enim alemanha 7x1 brasil life accusamus terry richardson ad
squid. Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident.
</div>
</div>
</div>
<div class="col">
<div class="collapse multi-collapse" id="multiCollapseExample2">
<div class="card card-body">
Anim pariatur cliche reprehenderit, enim eiusmod high life accusamus terry richardson ad squid.
Nihil anim keffiyeh helvetica, craft beer labore wes anderson cred nesciunt sapiente ea proident.
</div>
</div>
</div>
</div>
Exemplo de acordeão
Usando o componente card, você pode extender o comportamento padrão do collapse, para criar um
acordeão.
Acessibilidade
• Se assegure de usar aria-expanded no elemento controle. Este atributo transmite o atual estado do elemento
colapsável, ligado ao contole, para leitores de telas e tecnologias assistivas;
• Se o elemento colapsável é fechado por padrão, o atributo no elemento controle deve ter o valor de aria-
expanded="false";
o Já, se você configurou para que o elemento estivesse aberto, por padrão, usando a classe .show,
defina aria-expanded="true" no controle;
o O plugin vai, automaticamente, alternar este atributo no controle, verificando se o elemento colapsável
foi aberto ou não, via JavaScript ou porque o usuário acionou um outro elemento controle, também
vinculado ao mesmo elemento colapsável.
• Se a tag do elemento controle não é um botão (ex: <a> ou <div>), o atributo role="button" deve ser usado
no elemento;
• Se seu elemento controle está atingindo só um elemento colapsável (data-targetreferenciando um seletor de
id), você deve adicionar o atributo aria-controls no elemento controle.
o Leitores de telas modernos e tecnologias assistivas similares fazem uso desse atributo para dar atalhos
adicionais aos usuários, para navegar diretamente para o próprio elemento colapsável.
Perceba que a atual implementação do Bootstrap não cobre as diversas interações de teclado descritas
no WAI-ARIA Authoring Practices 1.1 accordion pattern. Você vai precisar incluir elas, com seu próprio
JavaScript. d
Modo de uso
O plugin collapse usa algumas classes para cumprir seu dever:
Para criar um acordeão em uma área colapsável, use o atributo data-parent="#seletor". Veja a
demonstração, para ver isso em ação.
Via JavaScript
Copy
$('.collapse').collapse()
Opções
Opções podem ser passadas via atributos data ou JavaScript. Para atributos data, anexe o nome da opção no
prefixo data-, como em data-parent="".
parent seletor | objeto jQuery | elemento DOM false Se o pai é provido, então, todos elementos colapsáveis de
dele vão ser fechados quando este item colapsável é mos
(semelhante ao comportamento do acordeão, dependend
Nome Tipo Padrão Descrição
Métodos
Copy
$('#myCollapsible').collapse({
toggle: false
})
.collapse('toggle')
Alterna um elemento colapsável para mostrar ou escondê-lo. Retorna ao invocador antes do elemento
colapsável ter sido mostrado ou escondido, de fato (antes do
evento shown.bs.collapse ou hidden.bs.collapse ocorrer).
.collapse('show')
Mostra um elemento colapsável. Retorna ao invocador antes do elemento colapsável ter sido mostrado,
de fato (antes do evento shown.bs.collapse ocorrer).
.collapse('hide')
Esconde um elemento colapsável. Retorna ao invocar antes do elemento colapsável ter sido escondido,
de fato (antes do evento hidden.bs.collapse ocorrer).
.collapse('dispose')
Destroi o colapso de um elemento.
Eventos
A classe Bootstrap do collapse tem alguns eventos para ativar a funcionalidade de colapso.
shown.bs.collapse Este evento é acionado quando um elemento colapsável fica visível para o usuário (espera as trans
CSS finalizarem).
hidden.bs.collapse Este evento é acionado quando um elemento colapsável foi escondido do usuário (espera as trans
CSS finalizarem).
Copy
$('#myCollapsible').on('hidden.bs.collapse', function () {
//faça algo, aqui...
})
Dropdowns
Clique em botões para ver um lista de links e outras coisas, usando o plugin Bootstrap dropdown.
All the tools your team needs in one place. Slack: Where work happens.ads via Carbon
Visão Geral
Dropdowns são botões com alternância de visibilidade de listas de links e outras coisas. Conseguem ser
interativos graças a sua construção que foi feita com o plugin JavaScript dropdown. A visibilidade do
conteúdo é alternada com cliques e nunca só ao passar o mouse em cima do botão (uma decisão de design
intencional).
Dropdowns são feitos em cima de uma biblioteca de terceiros, Popper.js, a qual permite posicionamento
dinâmico e detecção de viewport. Se assegure de invocar popper.min.js, antes do JavaScript Bootstrap ou
use bootstrap.bundle.min.js / bootstrap.bundle.js, os quais já possuem o Popper.js. No entanto, Popper.js
não é usada para posicionar dropdowns em navbars, já que posicionamento dinâmico não é necessário.
Se você está construindo nosso JavaScript a partir da fonte, vai precisar do util.js.
Acessibilidade
O padrões WAI ARIA pedem o uso do atributo role="menu", mas ele é específico para menus de aplicações
que ativam ações ou funções. Menus ARIA só podem conter itens de menu, checkbox, grupos e botões
radio, além de sub-menus.
Os dropdowns Bootstrap, por outro lado, são desenhados para serem genéricos e aplicáveis em várias
situações e estruturas de marcação. Por exemplo, é possível criar dropdowns que possuem inputs e form
controls adicionais, como campos de pesquisa ou formulários de login. Por essa razão, Bootstrap não espera
(nem adiciona automaticamente) a presença dos atributos role e aria, exigidos nos reais menus ARIA. Os
autores terão que incluí-los, por si só.
No entanto, Bootstrap tem suporte para a maioria das interações padrões de teclado, como a habilidade de
mover-se através de elementos individuais dropdown-item (usando o as setinhas do teclado) ou fechar o
menu com a tecla ESC.
Exemplos
Envolte os itens ou menu dropdown dentro da classe .dropdown ou qualquer outro elemento que
tenha position: relative; declarado. Dropdowns podem ser acionados de um elemento <a> ou <button>,
te dando mais flexibilidade.
Único botão
Qualquer .btn pode se transformar em um dropdown, com algumas adições na marcação HTML.
Botão dropdown
Copy
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenuButton" data-
toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Botão dropdown
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuButton">
<a class="dropdown-item" href="#">Alguma ação</a>
<a class="dropdown-item" href="#">Outra ação</a>
<a class="dropdown-item" href="#">Alguma coisa aqui</a>
</div>
</div>
Já aqui, temos um exemplo de uso com o elemento <a>:
Link dropdown
Copy
<div class="dropdown">
<a class="btn btn-secondary dropdown-toggle" href="#" role="button" id="dropdownMenuLink" data-
toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Link dropdown
</a>
Primary
Secondary
Success
Info
Warning
Danger
Copy
<!-- Exemplo de único botão danger -->
<div class="btn-group">
<button type="button" class="btn btn-danger dropdown-toggle" data-toggle="dropdown" aria-
haspopup="true" aria-expanded="false">
Ação
</button>
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Alguma ação</a>
<a class="dropdown-item" href="#">Outra ação</a>
<a class="dropdown-item" href="#">Alguma coisa aqui</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Link separado</a>
</div>
</div>
Botão dividido
Similarmente, crie botões divididos com a mesma marcação HTML de botões dropdowns, mas com a adição
da classe .dropdown-toggle-split para espaçamento apropriado, ao redor da setinha.
Nós usamos esta classe extra para reduzir o padding horizontal, em 25% dos lados da setinha e remover
a margin-left que é adicionada em botões dropdowns comuns. Estas mudanças extras mantém a setinha
centralizada e dá uma área de clique maior, no botão principal.
PrimaryDropdown
SecondaryDropdown
SuccessDropdown
InfoDropdown
WarningDropdown
DangerDropdown
Copy
<!-- Exemplo de botão danger dividido -->
<div class="btn-group">
<button type="button" class="btn btn-danger">Ação</button>
<button type="button" class="btn btn-danger 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="#">Alguma ação</a>
<a class="dropdown-item" href="#">Outra ação</a>
<a class="dropdown-item" href="#">Alguma coisa aqui</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Link separado</a>
</div>
</div>
Tamanhos
Tanto os dropdowns padrões, quanto os divididos, funcionam em todos os tamanhos.
Botão grande
Botão pequeno
Copy
<!-- Grupo de botões grandes (padrões e divididos) -->
<div class="btn-group">
<button class="btn btn-secondary btn-lg dropdown-toggle" type="button" data-toggle="dropdown" aria-
haspopup="true" aria-expanded="false">
Botão grande
</button>
<div class="dropdown-menu">
...
</div>
</div>
<div class="btn-group">
<button class="btn btn-secondary btn-lg" type="button">
Botão grande dividido
</button>
<button type="button" class="btn btn-lg btn-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">
...
</div>
</div>
Dropup
Dropup divididoDropdown
Copy
<!-- Botão dropup padrão -->
<div class="btn-group dropup">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-
haspopup="true" aria-expanded="false">
Dropup
</button>
<div class="dropdown-menu">
<!-- Links do menu dropup -->
</div>
</div>
Dropright
Dropright
Copy
<!-- Botão dropright padrão -->
<div class="btn-group dropright">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-
haspopup="true" aria-expanded="false">
Dropright
</button>
<div class="dropdown-menu">
<!-- Links do menu dropright -->
</div>
</div>
Dropleft
Dropleft
Dropleft
Dropleft dividido
Copy
<!-- Botão dropleft padrão -->
<div class="btn-group dropleft">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-
haspopup="true" aria-expanded="false">
Dropleft
</button>
<div class="dropdown-menu">
<!-- Links do menu dropleft -->
</div>
</div>
Itens do menu
Historicamente, o conteúdo dos dropdowns tinham que ser links, mas isso não é mais o caso, na v4. Agora,
você pode usar elementos <button> em seus dropdowns, invés de <a>.
Dropdown
Copy
<div class="dropdown">
<button class="btn btn-secondary dropdown-toggle" type="button" id="dropdownMenu2" data-
toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Dropdown
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenu2">
<button class="dropdown-item" type="button">Ação</button>
<button class="dropdown-item" type="button">Another Ação</button>
<button class="dropdown-item" type="button">Something else here</button>
</div>
</div>
Você também pode criar dropdowns com itens não interativos, usando .dropdown-item-text. Sinta-se livre
para fazer mais estilizações com CSS ou utilitários de texto.
Copy
<div class="dropdown-menu">
<span class="dropdown-item-text">Texto do item dropdown</span>
<a class="dropdown-item" href="#">Alguma ação</a>
<a class="dropdown-item" href="#">Outra ação</a>
<a class="dropdown-item" href="#">Alguma coisa aqui</a>
</div>
Ativo
Use .active nos itens do dropdown para estilizar eles como ativos.
Copy
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Link comum</a>
<a class="dropdown-item active" href="#">Link ativo</a>
<a class="dropdown-item" href="#">Outro link</a>
</div>
Desativado
Coloque .disabled nos itens do dropdown para estilizar eles como desativados.
Copy
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Link comum</a>
<a class="dropdown-item disabled" href="#">Link desativado</a>
<a class="dropdown-item" href="#">Outro link</a>
</div>
Alinhamento de menu
Por padrão, o menu dropdown é, automaticamente, posicionado 100% a partir do topo e esquerda do
elemento pai. Use .dropdown-menu-right em um .dropdown-menu para alinhar o menu dropdown a direita.
Atenção! Dropdowns são posicionados com ajuda do Popper.js (exceto quando estão dentro de uma
navbar).
Menu alinhado a direita
Copy
<div class="btn-group">
<button type="button" class="btn btn-secondary dropdown-toggle" data-toggle="dropdown" aria-
haspopup="true" aria-expanded="false">
Menu alinhado a direita
</button>
<div class="dropdown-menu dropdown-menu-right">
<button class="dropdown-item" type="button">Ação</button>
<button class="dropdown-item" type="button">Another Ação</button>
<button class="dropdown-item" type="button">Algo mais aqui</button>
</div>
</div>
Conteúdo do menu
Cabeçalho
Cabeçalho dropdown
Alguma açãoOutra ação
Copy
<div class="dropdown-menu">
<h6 class="dropdown-header">Cabeçalho dropdown</h6>
<a class="dropdown-item" href="#">Alguma ação</a>
<a class="dropdown-item" href="#">Outra ação</a>
</div>
Divisórias
Link separado
Copy
<div class="dropdown-menu">
<a class="dropdown-item" href="#">Alguma ação</a>
<a class="dropdown-item" href="#">Outra ação</a>
<a class="dropdown-item" href="#">Alguma coisa aqui</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Link separado</a>
</div>
Texto
Coloque qualquer texto dentro do menu dropdown e use utilitários de espaçamentos. Perceba que você
pode precisar estilizar o tamanho da fonte para se adequar a largura do menu.
Copy
<div class="dropdown-menu p-4 text-muted" style="max-width: 200px;">
<p>
Algum exemplo de texto, aqui dentro do menu.
</p>
<p class="mb-0">
Mais um exemplo de texto.
</p>
</div>
Formulários
Coloque um formulário dentro do menu dropdown ou transforme-o em um menu dropdown. Use utilitários
de margem ou padding para conseguir o espaço negativo necessário.
Endereço de email
Senha
Remember me
Entrar
Copy
<div class="dropdown-menu">
<form class="px-4 py-3">
<div class="form-group">
<label for="exampleDropdownFormEmail1">Endereço de email</label>
<input type="email" class="form-control" id="exampleDropdownFormEmail1"
placeholder="email@exemplo.com">
</div>
<div class="form-group">
<label for="exampleDropdownFormPassword1">Senha</label>
<input type="password" class="form-control" id="exampleDropdownFormPassword1" placeholder="Senha">
</div>
<div class="form-check">
<input type="checkbox" class="form-check-input" id="dropdownCheck">
<label class="form-check-label" for="dropdownCheck">
Remember me
</label>
</div>
<button type="submit" class="btn btn-primary">Entrar</button>
</form>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Novo, por aqui? Regitre-se.</a>
<a class="dropdown-item" href="#">Esqueceu a senha?</a>
</div>
Endereço de email
Senha
Lembrar de mim
Entrar
Copy
<form class="dropdown-menu p-4">
<div class="form-group">
<label for="exampleDropdownFormEmail2">Endereço de email</label>
<input type="email" class="form-control" id="exampleDropdownFormEmail2"
placeholder="email@exemplo.com">
</div>
<div class="form-group">
<label for="exampleDropdownFormPassword2">Senha</label>
<input type="password" class="form-control" id="exampleDropdownFormPassword2" placeholder="Senha">
</div>
<div class="form-check">
<input type="checkbox" class="form-check-input" id="dropdownCheck2">
<label class="form-check-label" for="dropdownCheck2">
Lembrar de mim
</label>
</div>
<button type="submit" class="btn btn-primary">Entrar</button>
</form>
Prâmetros do dropdown
Use data-offset ou data-reference para mudar a localização do dropdown.
Offset
ReferênciaDropdown
Copy
<div class="d-flex">
<div class="dropdown mr-1">
<button type="button" class="btn btn-secondary dropdown-toggle" id="dropdownMenuOffset" data-
toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-offset="10,20">
Offset
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuOffset">
<a class="dropdown-item" href="#">Alguma ação</a>
<a class="dropdown-item" href="#">Outra ação</a>
<a class="dropdown-item" href="#">Alguma coisa aqui</a>
</div>
</div>
<div class="btn-group">
<button type="button" class="btn btn-secondary">Referência</button>
<button type="button" class="btn btn-secondary dropdown-toggle dropdown-toggle-split"
id="dropdownMenuReference" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false" data-
reference="parent">
<span class="sr-only">Dropdown</span>
</button>
<div class="dropdown-menu" aria-labelledby="dropdownMenuReference">
<a class="dropdown-item" href="#">Alguma ação</a>
<a class="dropdown-item" href="#">Outra ação</a>
<a class="dropdown-item" href="#">Alguma coisa aqui</a>
<div class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Link separado</a>
</div>
</div>
</div>
Modo de uso
Usando JavaScript ou atributos data, o plugin dropdown alterna a visibilidade de conteúdo invisível (menus
dropdown) trocando a classe .show, no elemento pai da lista. O atributo data-toggle="dropdown" é
acreditado para fechar os menus dropdown em level de aplicação, então, é uma boa ideia sempre usá-lo.
Em dispositivos touch, abrir um menu adiciona manipuladores ($.noop) mouseover vazios em filhos imediatos
do elemento <body>. Essa gambiarra feia é necessária para contornar um problema na delegação de eventos
do iOS, o qual poderia evitar que toques fora do dropdown acionassem o código que fecha o próprio
dropdown. Uma vez que o dropdown é fechado, esses manipuladores mouseover adicionais vazios são
removidos.
Copy
<div class="dropdown">
<button id="dLabel" type="button" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Gatilho dropdown
</button>
<div class="dropdown-menu" aria-labelledby="dLabel">
...
</div>
</div>
Via JavaScript
Copy
$('.dropdown-toggle').dropdown()
data-toggle="dropdown" é obrigatório
Independente se você invoca seu dropdown com JavaScript ou com a data-api, o uso de data-
toggle="dropdown" sempre é obrigatório no gatilho dropdown.
Parâmetros
Parâmetros sempre podem ser passados usando atributos ou JavaScript. Para atributos, anexe o parâmetro
no prefixo data-, como em data-offset="".
offset number | string | função 0 Deslocamento do dropdown, em relação ao seu alvo. Para mais
informações, veja a documentação do offset Popper.js.
display string 'dynamic' Por padrão, nós usamos o posicionamento dinâmico do Popper.js.
Desative isso, usando o valor static.
Nota: quando boundary tem como valor definido qualquer coisa, que não 'scrollParent', o estilo position:
static é aplicado no container .dropdown.
Métodos
Método Descrição
$().dropdown('toggle') Alterna a visibilidade do menu dropdown em uma dada navbar ou navegação por abas.
Método Descrição
Eventos
Todos eventos dropdown são acionados no elemento pai do .dropdown-menu e possuem uma
propriedade relatedTarget, a qual tem o valor referente ao elemento âncora de
alternância.hide.bs.dropdown and hidden.bs.dropdown events have a clickEvent property (only when the
original event type is click) that contains an Event Object for the click event.
Evento Descrição
shown.bs.dropdown Este evento é acionado quando o dropdown se torna visível ao usuário (espera as transições CSS
finalizarem)
hide.bs.dropdown Este evento é acionado, imediatamente, quando o método hide foi invocado.
hidden.bs.dropdown Este evento é acionado quando o dropdown acaba de se esconder do usuário (espera as transições
finalizarem).
Copy
$('#myDropdown').on('show.bs.dropdown', function () {
// Faça algo, aqui…
})
Formulários
Exemplos, instruções para estilizar campos de formulários, opções de layout e componentes personalizados
para criar uma grande variedade de formulários.
See how your visitors are really using your website.ads via Carbon
Visão geral
Campos de formulários Bootstrap extendem os estilos herdados do Reboot, graças a classes. Use estas
classes para conseguir uma exibição personalizada e, portanto, uma renderização nos browsers e
dispositivos, mais consistentes.
Se assegure de usar um atributo type adequado em todos inputs (email em campos de email, por exemplo)
para conseguir se aproveitar dos novos inputs, como seletores de números, verificadores de emails, etc.
Aqui está um rápido exemplo para demonstrar os estilos de formulário Bootstrap. Continue lendo a
documentação para descobrir sobre classes obrigatórias, layout de formulários e muito mais.
Endereço de emailNunca vamos compartilhar seu email, com ninguém.
Senha
Clique em mim
Enviar
Copy
<form>
<div class="form-group">
<label for="exampleInputEmail1">Endereço de email</label>
<input type="email" class="form-control" id="exampleInputEmail1" aria-describedby="emailHelp"
placeholder="Seu email">
<small id="emailHelp" class="form-text text-muted">Nunca vamos compartilhar seu email, com
ninguém.</small>
</div>
<div class="form-group">
<label for="exampleInputPassword1">Senha</label>
<input type="password" class="form-control" id="exampleInputPassword1" placeholder="Senha">
</div>
<div class="form-group form-check">
<input type="checkbox" class="form-check-input" id="exampleCheck1">
<label class="form-check-label" for="exampleCheck1">Clique em mim</label>
</div>
<button type="submit" class="btn btn-primary">Enviar</button>
</form>
Campos de formulário
Campos de formulário textuais como <input>, <select> e <textarea> são estilizados com a classe .form-
control. Ela possui estilos para aparência, estado de foco e muito mais.
Endereço de email
Select de exemplo
Exemplo de select múltiplo
Exemplo de textarea
Copy
<form>
<div class="form-group">
<label for="exampleFormControlInput1">Endereço de email</label>
<input type="email" class="form-control" id="exampleFormControlInput1"
placeholder="nome@exemplo.com">
</div>
<div class="form-group">
<label for="exampleFormControlSelect1">Select de exemplo</label>
<select class="form-control" id="exampleFormControlSelect1">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</div>
<div class="form-group">
<label for="exampleFormControlSelect2">Exemplo de select múltiplo</label>
<select multiple class="form-control" id="exampleFormControlSelect2">
<option>1</option>
<option>2</option>
<option>3</option>
<option>4</option>
<option>5</option>
</select>
</div>
<div class="form-group">
<label for="exampleFormControlTextarea1">Exemplo de textarea</label>
<textarea class="form-control" id="exampleFormControlTextarea1" rows="3"></textarea>
</div>
</form>
Para inputs de arquivo, troque o .form-control por .form-control-file.
Tamanhos
Copy
<input class="form-control form-control-lg" type="text" placeholder=".form-control-lg">
<input class="form-control" type="text" placeholder="Input padrão">
<input class="form-control form-control-sm" type="text" placeholder=".form-control-sm">
Copy
<select class="form-control form-control-lg">
<option>Select grande</option>
</select>
<select class="form-control">
<option>Select padrão</option>
</select>
<select class="form-control form-control-sm">
<option>Select pequeno</option>
</select>
Input só de leitura
Use o atributo booleano readonly em um input para evitar alterações no valor dele. Inputs readonly são mais
esmaecidos (como os desativados), mas preservam o cursor padrão.
Copy
<input class="form-control" type="text" placeholder="Input só de leitura, aqui..." readonly>
Se você quiser elementos <input readonly> em seu formuláro, mas no estilo de texto, use a classe .form-
control-plaintext para remover os estilos padrões do campo, preservando margem e padding.
Senha
Copy
<form>
<div class="form-group row">
<label for="staticEmail" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="text" readonly class="form-control-plaintext" id="staticEmail"
value="email@exemplo.com">
</div>
</div>
<div class="form-group row">
<label for="inputPassword" class="col-sm-2 col-form-label">Senha</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="inputPassword" placeholder="Senha">
</div>
</div>
</form>
Email
Senha
Confirmar identidade
Copy
<form class="form-inline">
<div class="form-group mb-2">
<label for="staticEmail2" class="sr-only">Email</label>
<input type="text" readonly class="form-control-plaintext" id="staticEmail2"
value="email@exemplo.com">
</div>
<div class="form-group mx-sm-3 mb-2">
<label for="inputPassword2" class="sr-only">Senha</label>
<input type="password" class="form-control" id="inputPassword2" placeholder="Senha">
</div>
<button type="submit" class="btn btn-primary mb-2">Confirmar identidade</button>
</form>
Inputs range
Crie um input range, usando .form-control-range.
Checkboxes e radios
Checkboxes e radios padrões são aprimorados com ajuda da .form-check, uma classe para os dois tipos de
input que melhora o layout e comportamento de seus elementos HTML. Checkboxes são para selecionar
várias opções em uma lista, enquanto radios são para selecionar uma em muitas.
Checkboxes e radios desativados são suportados, mas para se ter um cursor not-allowedquando passá-lo
sobre o <label> pai, você precisará adicionar o atributo disabled no elemento com .form-check-input. O
atributo disabled vai aplicar um cor mais clara para indicar o estado do input.
Checkboxes e radios são feitos para terem suporte a validação de formulário HTML e prover labels consisos
e acessíveis. Assim, nossos <input> e <label> são elementos irmãos, diferente de um <input> dentro de
uma <label>. Isso é um pouco mais massante, já que você precisa especificar atributos id e for para vincular
o <input> a <label>.
Padrão (empilhados)
Por padrão, qualquer número de checkboxes e radios, que são irmãos imediatos, vão se empilhar e receber
espaçamento apropriado com a classe .form-check.
Checkbox padrão
Checkbox desativado
Copy
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="defaultCheck1">
<label class="form-check-label" for="defaultCheck1">
Checkbox padrão
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="defaultCheck2" disabled>
<label class="form-check-label" for="defaultCheck2">
Checkbox desativado
</label>
</div>
Radio padrão
Segundo radio padrão
Radio desativado
Copy
<div class="form-check">
<input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios1" value="opcao1"
checked>
<label class="form-check-label" for="exampleRadios1">
Radio padrão
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios2" value="opcao2">
<label class="form-check-label" for="exampleRadios2">
Segundo radio padrão
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="exampleRadios" id="exampleRadios3" value="option3"
disabled>
<label class="form-check-label" for="exampleRadios3">
Radio desativado
</label>
</div>
Inline
3 (desativado)
Copy
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" id="inlineCheckbox1" value="opcao1">
<label class="form-check-label" for="inlineCheckbox1">1</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" id="inlineCheckbox2" value="opcao2">
<label class="form-check-label" for="inlineCheckbox2">2</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="checkbox" id="inlineCheckbox3" value="opcao3" disabled>
<label class="form-check-label" for="inlineCheckbox3">3 (desativado)</label>
</div>
1
3 (desativado)
Copy
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio1"
value="opcao1">
<label class="form-check-label" for="inlineRadio1">1</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio2"
value="opcao2">
<label class="form-check-label" for="inlineRadio2">2</label>
</div>
<div class="form-check form-check-inline">
<input class="form-check-input" type="radio" name="inlineRadioOptions" id="inlineRadio3"
value="opcao3" disabled>
<label class="form-check-label" for="inlineRadio3">3 (desativado)</label>
</div>
Sem labels
Use .position-static em inputs dentro de .form-check, os quais não possuem qualquer texto de label.
Lembre-se de, ainda assim, criar algum tipo de label para tecnologias assistivas (usando aria-label, por
exemplo).
Copy
<div class="form-check">
<input class="form-check-input position-static" type="checkbox" id="blankCheckbox" value="opcao1"
aria-label="...">
</div>
<div class="form-check">
<input class="form-check-input position-static" type="radio" name="blankRadio" id="blankRadio1"
value="opcao1" aria-label="...">
</div>
Layout
Já que Bootstrap aplica display: block e width: 100% em quase todos campos de formulários, eles vão se
empilhar, por padrão. Classes adicionais podem ser usadas para variar este layout.
Grupos de formulários
A classe .form-group é o jeito mais fácil de adicionar alguma estrutura aos formulários. Ela cria uma base
para o agrupamento apropriado de labels, controles, textos de ajuda e mensagens de validação de
formulário. Por padrão, ela só aplica margin-bottom, mas usa alguns estilos adicionais de form-inline,
sempre que necessário. Use-a em <fieldset>, <div>ou quase qualquer outro elemento.
Label exemplo
Outra label
Copy
<form>
<div class="form-group">
<label for="formGroupExampleInput">Label exemplo</label>
<input type="text" class="form-control" id="formGroupExampleInput" placeholder="Input exemplo">
</div>
<div class="form-group">
<label for="formGroupExampleInput2">Outra label</label>
<input type="text" class="form-control" id="formGroupExampleInput2" placeholder="Outro input">
</div>
</form>
Grid de formulário
Formulários mais complexos podem ser feitos usando classes do grid. Use-as para fazer layouts de
formulários que precisam de várias colunas, larguras e outras opções de alinhamento.
Copy
<form>
<div class="row">
<div class="col">
<input type="text" class="form-control" placeholder="Nome">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="Sobrenome">
</div>
</div>
</form>
Form row
Você também pode trocar .row por .form-row, uma variação de nosso grid row padrão, a qual sobrescreve
as gutters padrões das colunas para conseguir layouts mais compactos.
Copy
<form>
<div class="form-row">
<div class="col">
<input type="text" class="form-control" placeholder="Nome">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="Sobrenome">
</div>
</div>
</form>
Layouts mais complexos também podem ser criados com o sistema grid.
Email
Senha
Endereço
Endereço 2
Cidade
Estado
CEP
Clique em mim
Entrar
Copy
<form>
<div class="form-row">
<div class="form-group col-md-6">
<label for="inputEmail4">Email</label>
<input type="email" class="form-control" id="inputEmail4" placeholder="Email">
</div>
<div class="form-group col-md-6">
<label for="inputPassword4">Senha</label>
<input type="password" class="form-control" id="inputPassword4" placeholder="Senha">
</div>
</div>
<div class="form-group">
<label for="inputAddress">Endereço</label>
<input type="text" class="form-control" id="inputAddress" placeholder="Rua dos Bobos, nº 0">
</div>
<div class="form-group">
<label for="inputAddress2">Endereço 2</label>
<input type="text" class="form-control" id="inputAddress2" placeholder="Apartamento, hotel, casa,
etc.">
</div>
<div class="form-row">
<div class="form-group col-md-6">
<label for="inputCity">Cidade</label>
<input type="text" class="form-control" id="inputCity">
</div>
<div class="form-group col-md-4">
<label for="inputEstado">Estado</label>
<select id="inputEstado" class="form-control">
<option selected>Escolher...</option>
<option>...</option>
</select>
</div>
<div class="form-group col-md-2">
<label for="inputCEP">CEP</label>
<input type="text" class="form-control" id="inputCEP">
</div>
</div>
<div class="form-group">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="gridCheck">
<label class="form-check-label" for="gridCheck">
Clique em mim
</label>
</div>
</div>
<button type="submit" class="btn btn-primary">Entrar</button>
</form>
Formulário horizontal
Crie formulários horizontais com o grid, usando a classe .row em grupos de formulários e as classes .col-*-
* para especificar a largura de seus labels e controles. Também, se assegure de usar .col-form-label no
seu <label>, para que ele se centralize verticalmente com seus campos de formulário.
As vezes, você pode precisar usar utilitários de margem ou padding para criar o alinhamento perfeito que
precisa. Por exemplo, nós removemos padding-top em nossos inputs radios empilhados para melhorar o
alinhamento da baseline do texto.
Email
Senha
Radios
Primeiro radio
Segundo radio
Terceiro radio desativado
Checkbox
Checkbox exemplo
Entrar
Copy
<form>
<div class="form-group row">
<label for="inputEmail3" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="inputEmail3" placeholder="Email">
</div>
</div>
<div class="form-group row">
<label for="inputPassword3" class="col-sm-2 col-form-label">Senha</label>
<div class="col-sm-10">
<input type="password" class="form-control" id="inputPassword3" placeholder="Senha">
</div>
</div>
<fieldset class="form-group">
<div class="row">
<legend class="col-form-label col-sm-2 pt-0">Radios</legend>
<div class="col-sm-10">
<div class="form-check">
<input class="form-check-input" type="radio" name="gridRadios" id="gridRadios1" value="opcao1"
checked>
<label class="form-check-label" for="gridRadios1">
Primeiro radio
</label>
</div>
<div class="form-check">
<input class="form-check-input" type="radio" name="gridRadios" id="gridRadios2"
value="opcao2">
<label class="form-check-label" for="gridRadios2">
Segundo radio
</label>
</div>
<div class="form-check disabled">
<input class="form-check-input" type="radio" name="gridRadios" id="gridRadios3" value="opcao3"
disabled>
<label class="form-check-label" for="gridRadios3">
Terceiro radio desativado
</label>
</div>
</div>
</div>
</fieldset>
<div class="form-group row">
<div class="col-sm-2">Checkbox</div>
<div class="col-sm-10">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="gridCheck1">
<label class="form-check-label" for="gridCheck1">
Checkbox exemplo
</label>
</div>
</div>
</div>
<div class="form-group row">
<div class="col-sm-10">
<button type="submit" class="btn btn-primary">Entrar</button>
</div>
</div>
</form>
Dimensionamento horizontal de labels
Email
Email
Email
Copy
<form>
<div class="form-group row">
<label for="colFormLabelSm" class="col-sm-2 col-form-label col-form-label-sm">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control form-control-sm" id="colFormLabelSm" placeholder="col-
form-label-sm">
</div>
</div>
<div class="form-group row">
<label for="colFormLabel" class="col-sm-2 col-form-label">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control" id="colFormLabel" placeholder="col-form-label">
</div>
</div>
<div class="form-group row">
<label for="colFormLabelLg" class="col-sm-2 col-form-label col-form-label-lg">Email</label>
<div class="col-sm-10">
<input type="email" class="form-control form-control-lg" id="colFormLabelLg" placeholder="col-
form-label-lg">
</div>
</div>
</form>
Tamanho de colunas
Como mostrado nos exemplos anteriores, nosso sistema de grid permite que você use qualquer número
de .col, dentro de um .row ou .form-row. Elas vão dividir a largura disponível, igualmente, entre si. Você
também pode escolher se um subconjunto de colunas pode tomar mais ou menos espaço, enquanto
as .col restantes dividem o resto do espaço, usando classes de colunas como .col-7.
Copy
<form>
<div class="form-row">
<div class="col-7">
<input type="text" class="form-control" placeholder="Cidade">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="Estado">
</div>
<div class="col">
<input type="text" class="form-control" placeholder="CEP">
</div>
</div>
</form>
Auto dimensionamento
O exemplo abaixo usa utilitário flexbox para centralizar verticalmente os conteúdos e troca .col por .col-
auto para que suas colunas só usem o espaço necessário. Em outras palavras, a coluna vai crescer sozinha,
baseando-se no tamanho de seus conteúdos.
Nome
Usuário
@
Lembrar de mim
Enviar
Copy
<form>
<div class="form-row align-items-center">
<div class="col-auto">
<label class="sr-only" for="inlineFormInput">Nome</label>
<input type="text" class="form-control mb-2" id="inlineFormInput" placeholder="Fulano">
</div>
<div class="col-auto">
<label class="sr-only" for="inlineFormInputGroup">Usuário</label>
<div class="input-group mb-2">
<div class="input-group-prepend">
<div class="input-group-text">@</div>
</div>
<input type="text" class="form-control" id="inlineFormInputGroup" placeholder="Usuário">
</div>
</div>
<div class="col-auto">
<div class="form-check mb-2">
<input class="form-check-input" type="checkbox" id="autoSizingCheck">
<label class="form-check-label" for="autoSizingCheck">
Lembrar de mim
</label>
</div>
</div>
<div class="col-auto">
<button type="submit" class="btn btn-primary mb-2">Enviar</button>
</div>
</div>
</form>
Você também pode repetir isso, mas com classes de colunas de tamanhos específicos.
Nome
Usuário
@
Lembrar de mim
Enviar
Copy
<form>
<div class="form-row align-items-center">
<div class="col-sm-3 my-1">
<label class="sr-only" for="inlineFormInputName">Nome</label>
<input type="text" class="form-control" id="inlineFormInputName" placeholder="Fulano">
</div>
<div class="col-sm-3 my-1">
<label class="sr-only" for="inlineFormInputGroupUsername">Usuário</label>
<div class="input-group">
<div class="input-group-prepend">
<div class="input-group-text">@</div>
</div>
<input type="text" class="form-control" id="inlineFormInputGroupUsername" placeholder="Usuário">
</div>
</div>
<div class="col-auto my-1">
<div class="form-check">
<input class="form-check-input" type="checkbox" id="autoSizingCheck2">
<label class="form-check-label" for="autoSizingCheck2">
Lembrar de mim
</label>
</div>
</div>
<div class="col-auto my-1">
<button type="submit" class="btn btn-primary">Enviar</button>
</div>
</div>
</form>
E, é claro, campos de formulário personalizados são suportados.
Preferência
Lembrar preferências
Enviar
Copy
<form>
<div class="form-row align-items-center">
<div class="col-auto my-1">
<label class="mr-sm-2 sr-only" for="inlineFormCustomSelect">Preferência</label>
<select class="custom-select mr-sm-2" id="inlineFormCustomSelect">
<option selected>Escolher...</option>
<option value="1">Um</option>
<option value="2">Dois</option>
<option value="3">Três</option>
</select>
</div>
<div class="col-auto my-1">
<div class="custom-control custom-checkbox mr-sm-2">
<input type="checkbox" class="custom-control-input" id="customControlAutosizing">
<label class="custom-control-label" for="customControlAutosizing">Lembrar preferências</label>
</div>
</div>
<div class="col-auto my-1">
<button type="submit" class="btn btn-primary">Enviar</button>
</div>
</div>
</form>
formulários inline
Use a classe .form-inline pora mostrar vários labels, controles e botões, em uma única linha. Campos
dentro de formulários inline são um pouco diferente de seus estados padrões.
• Controles usam display: flex, colapsando qualquer espaço HTML em branco e permitindo que você
tenha controle de alinhamento com utilitários de espaçamento e flexbox;
• Grupos de controles e inputs recebem width: auto para sobrescrever o padrão do Bootstrap width:
100%;
• Controles só aparecem inline em viewports que possuem, pelo menos, 576px de largura, levando
em conta viewports estreitas em dispositivos móveis.
Você pode precisar definir a largura e alinhamento individual dos campos, usando utilitários de
espaçamento (como mostrado abaixo). Por último, se assegure de sempre usar uma <label> em cada
controle, mesmo se você precisar escondê-lo de usuários sem leitores de telas, usando .sr-only.
Nome Usuário
@
Lembrar de mim
Enviar
Copy
<form class="form-inline">
<label class="sr-only" for="inlineFormInputName2">Nome</label>
<input type="text" class="form-control mb-2 mr-sm-2" id="inlineFormInputName2" placeholder="Fulano">
Preferência
Lembrar preferências
Enviar
Copy
<form class="form-inline">
<label class="my-1 mr-2" for="inlineFormCustomSelectPref">Preferência</label>
<select class="custom-select my-1 mr-sm-2" id="inlineFormCustomSelectPref">
<option selected>Escolher...</option>
<option value="1">Um</option>
<option value="2">Dois</option>
<option value="3">Três</option>
</select>
Tecnologias assistivas como leitores de telas sempre vão ter problemas nos formulários, se você não colocar
um label em cada input. Nesses formulários inline, você pode esconder as labels usando a classe .sr-only.
Também há outros métodos de criar uma label para tecnologias assistivas, como os atributos aria-
label, aria-labelledby e title. Se nenhum deles é usado, tecnologias assistivas podem recorrer ao
atributo placeholder (se existir), mas perceba que o uso de placeholder como substituto não é aconselhável,
nesses casos.
Texto de ajuda
Textos de ajuda block-level em formulários podem ser criado usando .form-text(anteriormente, conhecido
como .help-block, na v3). Textos de ajuda inline podem ser implementados, sem problemas, usando
qualquer elemento HTML inline e classes utilitárias como .text-muted.
Textos de ajuda devem ser, explicitamente, associados aos campos de formulário que eles remetem, usando
o atributo aria-describedby. Isso vai garantir que tecnologias assistivas (como leitores de telas) mostrem
esse texto de ajuda, quando o usuário foca ou entra no campo.
Textos de ajuda abaixo podem ser estilizados com .form-text. Essa classe possui display: block e adiciona
alguma margem no topo para fácil distanciamento dos inputs acima.
Senha Sua senha deve ter entre 8 e 20 caracteres, os quais devem ser letras e números, sem espaços, caracteres
especiais ou emojis.
Copy
<label for="inputPassword5">Senha</label>
<input type="password" id="inputPassword5" class="form-control" aria-describedby="passwordHelpBlock">
<small id="passwordHelpBlock" class="form-text text-muted">
Sua senha deve ter entre 8 e 20 caracteres, os quais devem ser letras e números, sem espaços,
caracteres especiais ou emojis.
</small>
Textos inline devem usar qualquer elemento HTML inline, seja <small>, <span> ou qualquer outra coisa, além
de classes utilitárias.
Desativar formulários
Use o atributo booleano disabled em um input para evitar interações e fazê-lo parecer mais esmaecido.
Copy
<input class="form-control" id="disabledInput" type="text" placeholder="Input desativado..." disabled>
Use o atributo disabled em um <fieldset> para desativar todos os campos dentro dele.
Input desativado
Menu select desativado
Não é possível clicar aqui
Enviar
Copy
<form>
<fieldset disabled>
<div class="form-group">
<label for="disabledTextInput">Input desativado</label>
<input type="text" id="disabledTextInput" class="form-control" placeholder="Input desativado">
</div>
<div class="form-group">
<label for="disabledSelect">Menu select desativado</label>
<select id="disabledSelect" class="form-control">
<option>Select desativado</option>
</select>
</div>
<div class="form-check">
<input class="form-check-input" type="checkbox" id="disabledFieldsetCheck" disabled>
<label class="form-check-label" for="disabledFieldsetCheck">
Não é possível clicar aqui
</label>
</div>
<button type="submit" class="btn btn-primary">Enviar</button>
</fieldset>
</form>
Probleminha com âncoras
Por padrão, navegadores vão tratar todo campo de formulário nativo (<input>, <select> e <button>), dentro
de um <fieldset disabled>, como desativado. Dessa maneira, não será possível haver interação de teclado
ou mouse, neles. No entanto, se seu formulário também possui elementos <a ... class="btn btn-*">, estes
só vão receber o estilo pointer-events: none. Como falado na seção sobre estado desativado de botões (e
na sub-seção de elementos âncoras, especialmente), esta propriedade CSS ainda não foi padronizada e não
é suportada, totalmente, no Internet Explorer 10, além não evitar que usuários de teclado de serem capazes
de ativarem estes links. Portanto, para ter segurança, use JavaScript personalizado para desativar tais links.
Compatibilidade cross-browser
Apesar do Bootstrap aplicar estes estilos em todos os browsers, Internet Explorer 11 e versões anteriores não
vão suportar o atributo disabled em <fieldset>, totalmente. Use JavaScript personalizado para desativar o
fieldset, nesses browsers.
Validação
Dê um feedback significativo e acionável aos seus usuários, usando validação de formulário HTML5
(disponível em todos os nossos browsers suportados). Escolha entre o feedback de validação padrão do
browser ou implemente mensagens personalizadas com nossas classes integradas e JavaScript.
Como funciona
• A validação de formulário HTML é aplicada usando duas pseudo-classes CSS: :invalide :valid;
o Ela é aplicada em <input>, <select> e <textarea>.
• Bootstrap limita o scopo de :invalid e :valid a classe pai .was-validated, usualmente, aplicada
no <form>;
o Caso contrário, qualquer campo obrigatório sem um valor será mostrado como inválido, ao
carregar a página;
o Assim, você pode escolher quando ativá-los (tipicamente, depois do envio de formulário).
• Para resetar a aparência do formulário (no caso de envio de dados dinâmico, via AJAX, por exemplo),
remova a classe .was-validated do <form>, depois de cada envio;
• Como um fallback, as classes is-invalid e .is-valid podem ser usadas, invés das pseudo-classes
para validação server side;
o Não exigem uma classe pai .was-validated.
• Devido as limitações do CSS, não podemos (no momento) aplicar estilos em uma <label> que venha
antes de um campo de formulário (no DOM), sem a ajuda de JavaScript;
• Todos browsers modernos suportam a constraint validation API, uma série de métodos JavaScript
para validar campos de formulário;
• Mensagens de feedback podem usar os padrões do browser (diferente em cada e não estilizável, via
CSS) ou nossos estilos de feedback personalizados, com HTML e CSS extra;
• Você pode prover mensagens de validação personalizadas com setCustomValidity, no JavaScript.
Com isso em mente, preste atenção nas seguintes demonstrações de nossos estilos de validação de
formulários personalizados, classes server-side opcionais e padrões dos browsers.
Estilos personalizados
Custom feedback styles apply custom colors, borders, focus styles, and background icons to better
communicate feedback. Background icons for <select>s are only available with .custom-select, and
not .form-control.
Primeiro nome
Sobrenome
Usuário
@
Cidade
Estado
CEP
Concordo com os termos e condições
Enviar
Copy
<form class="needs-validation" novalidate>
<div class="form-row">
<div class="col-md-4 mb-3">
<label for="validationCustom01">Primeiro nome</label>
<input type="text" class="form-control" id="validationCustom01" placeholder="Nome" value="Mark"
required>
<div class="valid-feedback">
Tudo certo!
</div>
</div>
<div class="col-md-4 mb-3">
<label for="validationCustom02">Sobrenome</label>
<input type="text" class="form-control" id="validationCustom02" placeholder="Sobrenome"
value="Otto" required>
<div class="valid-feedback">
Tudo certo!
</div>
</div>
<div class="col-md-4 mb-3">
<label for="validationCustomUsername">Usuário</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text" id="inputGroupPrepend">@</span>
</div>
<input type="text" class="form-control" id="validationCustomUsername" placeholder="Usuário"
aria-describedby="inputGroupPrepend" required>
<div class="invalid-feedback">
Por favor, escolha um nome de usuário.
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md-6 mb-3">
<label for="validationCustom03">Cidade</label>
<input type="text" class="form-control" id="validationCustom03" placeholder="Cidade" required>
<div class="invalid-feedback">
Por favor, informe uma cidade válida.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="validationCustom04">Estado</label>
<input type="text" class="form-control" id="validationCustom04" placeholder="Estado" required>
<div class="invalid-feedback">
Por favor, informe um estado válido.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="validationCustom05">CEP</label>
<input type="text" class="form-control" id="validationCustom05" placeholder="CEP" required>
<div class="invalid-feedback">
Por favor, informe um CEP válido.
</div>
</div>
</div>
<div class="form-group">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="invalidCheck" required>
<label class="form-check-label" for="invalidCheck">
Concordo com os termos e condições
</label>
<div class="invalid-feedback">
Você deve concordar, antes de continuar.
</div>
</div>
</div>
<button class="btn btn-primary" type="submit">Enviar</button>
</form>
<script>
// Exemplo de JavaScript inicial para desativar envios de formulário, se houver campos inválidos.
(function() {
'use strict';
window.addEventListener('load', function() {
// Pega todos os formulários que nós queremos aplicar estilos de validação Bootstrap personalizados.
var forms = document.getElementsByClassName('needs-validation');
// Faz um loop neles e evita o envio
var validation = Array.prototype.filter.call(forms, function(form) {
form.addEventListener('submit', function(event) {
if (form.checkValidity() === false) {
event.preventDefault();
event.stopPropagation();
}
form.classList.add('was-validated');
}, false);
});
}, false);
})();
</script>
Não tem interesse em feedback de validação personalizado ou em escrever JavaScript para mudar os
comportamentos do formulário? Tudo bem! Use os padrões dos navegadores.
Tente enviar o formulário abaixo. Dependendo do seu browser e SO, verá um estilo de feedback pouco
diferente.
Apesar destes estilos não poderem serem estilizados com CSS, você ainda pode personalizar o texto de
feedback, usando JavaScript.
Primeiro nome
Sobrenome
Usuário
@
Cidade
Estado
CEP
Concordo com os termos e condições
Enviar
Copy
<form>
<div class="form-row">
<div class="col-md-4 mb-3">
<label for="validationDefault01">Primeiro nome</label>
<input type="text" class="form-control" id="validationDefault01" placeholder="Nome" value="Mark"
required>
</div>
<div class="col-md-4 mb-3">
<label for="validationDefault02">Sobrenome</label>
<input type="text" class="form-control" id="validationDefault02" placeholder="Sobrenome"
value="Otto" required>
</div>
<div class="col-md-4 mb-3">
<label for="validationDefaultUsername">Usuário</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text" id="inputGroupPrepend2">@</span>
</div>
<input type="text" class="form-control" id="validationDefaultUsername" placeholder="Usuário"
aria-describedby="inputGroupPrepend2" required>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md-6 mb-3">
<label for="validationDefault03">Cidade</label>
<input type="text" class="form-control" id="validationDefault03" placeholder="Cidade" required>
</div>
<div class="col-md-3 mb-3">
<label for="validationDefault04">Estado</label>
<input type="text" class="form-control" id="validationDefault04" placeholder="Estado" required>
</div>
<div class="col-md-3 mb-3">
<label for="validationDefault05">CEP</label>
<input type="text" class="form-control" id="validationDefault05" placeholder="CEP" required>
</div>
</div>
<div class="form-group">
<div class="form-check">
<input class="form-check-input" type="checkbox" value="" id="invalidCheck2" required>
<label class="form-check-label" for="invalidCheck2">
Concordo com os termos e condições
</label>
</div>
</div>
<button class="btn btn-primary" type="submit">Enviar</button>
</form>
Server-side
Recomendamos usar validação client-side, mas se precisar de server-side, poderá indicar campos de
formulário válidos e invalidos com as classes .is-invalid and .is-valid. Perceba que .invalid-
feedback também pode ser usada com essas classes.
Primeiro nome
Tudo certo!
Sobrenome
Tudo certo!
Usuário
@
Cidade
Por favor, informe uma cidade válida.
Estado
Por favor, informe um estado válido.
CEP
Por favor, informe um CEP válido.
Elementos suportados
Nossos formulários de exemplo mostram <input> textuais nativos, abaixo, mas estilos de validação de
formulário estão disponíveis para <textarea>s e nossos controles de formulários personalizados, também.
Textarea
Please enter a message in the textarea.
Olha só, esse checkbox personalizado
Exemplo de texto para feedback inválido
<div class="form-group">
<select class="custom-select" required>
<option value="">Abra este menu select</option>
<option value="1">Um</option>
<option value="2">Dois</option>
<option value="3">Três</option>
</select>
<div class="invalid-feedback">Exemplo de feedback invalido para o select</div>
</div>
<div class="custom-file">
<input type="file" class="custom-file-input" id="validatedCustomFile" required>
<label class="custom-file-label" for="validatedCustomFile">Escolher arquivo...</label>
<div class="invalid-feedback">Exemplo de feedback inválido para input file</div>
</div>
</form>
Tooltips
Primeiro nome
Sobrenome
Usuário
@
Cidade
Estado
CEP
Enviar
Copy
<form class="needs-validation" novalidate>
<div class="form-row">
<div class="col-md-4 mb-3">
<label for="validationTooltip01">Primeiro nome</label>
<input type="text" class="form-control" id="validationTooltip01" placeholder="Nome" value="Mark"
required>
<div class="valid-tooltip">
Tudo certo!
</div>
</div>
<div class="col-md-4 mb-3">
<label for="validationTooltip02">Sobrenome</label>
<input type="text" class="form-control" id="validationTooltip02" placeholder="Sobrenome"
value="Otto" required>
<div class="valid-tooltip">
Tudo certo!
</div>
</div>
<div class="col-md-4 mb-3">
<label for="validationTooltipUsername">Usuário</label>
<div class="input-group">
<div class="input-group-prepend">
<span class="input-group-text" id="validationTooltipUsernamePrepend">@</span>
</div>
<input type="text" class="form-control" id="validationTooltipUsername" placeholder="Usuário"
aria-describedby="validationTooltipUsernamePrepend" required>
<div class="invalid-tooltip">
Por favor, escolha um usuário válido e único.
</div>
</div>
</div>
</div>
<div class="form-row">
<div class="col-md-6 mb-3">
<label for="validationTooltip03">Cidade</label>
<input type="text" class="form-control" id="validationTooltip03" placeholder="Cidade" required>
<div class="invalid-tooltip">
Por favor, informe uma cidade válida.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="validationTooltip04">Estado</label>
<input type="text" class="form-control" id="validationTooltip04" placeholder="Estado" required>
<div class="invalid-tooltip">
Por favor, informe um estado válido.
</div>
</div>
<div class="col-md-3 mb-3">
<label for="validationTooltip05">CEP</label>
<input type="text" class="form-control" id="validationTooltip05" placeholder="CEP" required>
<div class="invalid-tooltip">
Por favor, informe um CEP válido.
</div>
</div>
</div>
<button class="btn btn-primary" type="submit">Enviar</button>
</form>
Formulários personalizados
Para mais customização ainda e consistência cross-browser, use nossos elementos de formulário
personalizados para substituir os padrões dos browsers. Eles são feitos com base em marcação semântica e
acessível, então, são substituições sólidas para qualquer campo de formulário padrão.
Checkboxes e radios
Cada checkbox e radio é envolto em uma <div> com um <span> irmão para criar nosso campo personalizado
e um <label> para acompanhar o texto. Estruturalmente, esta é a mesma abordagem que nossa .form-
check padrão.
Nós usamos o seletor de irmão (~) para todos os nossos estados de inputs (:checked, por exemplo) para,
adequadamente, estilizar nosso indicador de formulário personalizado. Quando combinado com a
classe .custom-control-label, também podemos estilizar o texto em cada item, baseando-se no estado
do <input>.
Nós escondemos o <input> padrão com opacity e usamos a .custom-control-label para fazer um novo
indicador de formulário, em seu lugar, com ::before e ::after. Infelizmente, não podemos fazer um
personalizado só a partir do <input>, porque a propriedade CSS content não funciona no elemento.
Nos estados :checked, usamos ícones SVG base64 embutidos do Open Iconic. Ele nos dá o melhor controle
para estilizar e posicionar, através dos browsers e dispositivos.
Checkboxes
Copy
$('.seu-checkbox').prop('indeterminate', true)
Radios
Checkboxes e radios também podem ser desativados. Coloque o atributo booleano disabledem
um <input> e o indicador personalizado e a descrição da label vão ser estilizados, automaticamente.
Menu select
Menus de <select> personalizados só precisam de uma classe personalizada .custom-select, para ativar os
estilos personalizados. Custom styles are limited to the <select>’s initial appearance and cannot modify
the <option>s due to browser limitations.
Copy
<select class="custom-select">
<option selected>Abra este menu select</option>
<option value="1">Um</option>
<option value="2">Dois</option>
<option value="3">Três</option>
</select>
Você também pode escolher entre selects personalizados pequenos ou grandes, para combinar com nossos
inputs estilizados similarmente.
Copy
<select class="custom-select custom-select-lg mb-3">
<option selected>Abra este menu select</option>
<option value="1">Um</option>
<option value="2">Dois</option>
<option value="3">Três</option>
</select>
Copy
<select class="custom-select" multiple>
<option selected>Abra este menu select</option>
<option value="1">Um</option>
<option value="2">Dois</option>
<option value="3">Três</option>
</select>
Assim como o atributo size:
Copy
<select class="custom-select" size="3">
<option selected>Abra este menu select</option>
<option value="1">Um</option>
<option value="2">Dois</option>
<option value="3">Três</option>
</select>
Range
Crie um <input type="range"> personalizado, usando .custom-range. A trilha e o valor são ambos estilizados
para aparecerem da mesma maneira, nos diferentes browsers. Já que só o IE e o Firefox suportam preencher
a trilha (da esquerda para a direita), como um indicador visual de progresso, nós não suportamos isso, ainda.
Range exemplo
Copy
<label for="customRange1">Range exemplo</label>
<input type="range" class="custom-range" id="customRange1">
Inputs range possuem valores padrões inplícitos para min e max, sendo eles 0 and 100, respectivamente. Você
pode especificar novos valores para os inputs que estiverem usando os atributos min and max.
Range exemplo
Copy
<label for="customRange2">Range exemplo</label>
<input type="range" class="custom-range" min="0" max="5" id="customRange2">
Por padrão, inputs range pulam por valores inteiros. Para mudar isso, você pode especificar a quantia de
pulos. No exemplo abaixo, dobramos a quantia de pulos, usando step="0.5".
Range exemplo
Copy
<label for="customRange3">Range exemplo</label>
<input type="range" class="custom-range" min="0" max="5" step="0.5" id="customRange3">
Explorador de arquivos
O input de arquivos é o mais cabuloso de todos e exige JavaScript adicional, se você quiser ter um Escolher
arquivo… e nome de arquivo selecionado funcional.
Escolher arquivo
Copy
<div class="custom-file">
<input type="file" class="custom-file-input" id="customFile">
<label class="custom-file-label" for="customFile">Escolher arquivo</label>
</div>
• Nós escondemos o <input> de arquivo via opacity e, pelo contrário, estilizamos o <label>;
• O botão é gerado e posicionado com ::after;
• Por último, nós declaramos width e height no <input> para espaçamento em volta do conteúdo,
apropriado.
A pseudo-classe :lang() é usada para permitir a tradução do texto “Browse”, em outras linguagens.
Sobrescreva ou adicione valores na variável $custom-file-text com uma tag de linguagem e a string
referente ao local. Por exemplo, assim é como você pode adicionar tradução para o espanhol (a tag de
linguagem do espanhol é es):
Copy
$custom-file-text: (
en: "Browse",
es: "Elegir"
);
Aqui está a lang(es), em ação, no input de arquivo personalizado para a tradução espanhol:
Seleccionar Archivo
Copy
<div class="custom-file">
<input type="file" class="custom-file-input" id="customFileLang" lang="es">
<label class="custom-file-label" for="customFileLang">Seleccionar Archivo</label>
</div>
Você precisará definir a linguagem de seu documento, corretamente, para que o texto correto seja
mostrado. Isso pode ser feito usando o atributo lang no elemento <html> ou Content-Language HTTP header,
junto com os outros métodos.
Grupo de input
Facilmente, extenda os controles de formulário com textos, botões, selects personalizados, etc.
See how your visitors are really using your website.ads via Carbon
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.
@exemplo.com
https://exemplo.com.br/users/
R$
.00
Copy
<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">
<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).
Pequeno
Padrão
Grande
Copy
<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>
Checkboxes e radios
Coloque qualquer checkbox ou radio dentro do addon de grupo de input, invés de texto.
Copy
<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>
Múltiplos inputs
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>.
Nome e sobrenome
Copy
<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.
R$0.00
R$0.00
Copy
<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
Botão
Botão
BotãoBotão
BotãoBotão
Copy
<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">
<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>
Dropdown
Copy
<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
AçãoDropdown
AçãoDropdown
Copy
<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>
Formulários personalizados
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
Opções
Opções
Botão
Botão
Copy
<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">
<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>
Upload
Escolher arquivo
Escolher arquivo
Upload
Botão
Escolher arquivo
Escolher arquivo
Botão
Copy
<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">
<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.
Jumbotron
Componente leve e flexível para exibir conteúdo.
All the tools your team needs in one place. Slack: Where work happens.ads via Carbon
Um componente leve e flexível que pode se extender pela viewport inteira para exibir mensagens de market,
em seu site.
Olá, mundo!
Este é um simples componente jumbotron para chamar mais atenção a um determinado conteúdo ou
informação.
Ele usa classes utilitárias para tipografia e espaçamento de conteúdo, dentro do maior container.
Leia mais
Copy
<div class="jumbotron">
<h1 class="display-4">Olá, mundo!</h1>
<p class="lead">Este é um simples componente jumbotron para chamar mais atenção a um determinado
conteúdo ou informação.</p>
<hr class="my-4">
<p>Ele usa classes utilitárias para tipografia e espaçamento de conteúdo, dentro do maior
container.</p>
<a class="btn btn-primary btn-lg" href="#" role="button">Leia mais</a>
</div>
Para um jumbotron com largura total e sem cantos arredondados, use a classe modificadora .jumbotron-
fluid e adicione um .container ou .container-fluid dentro do jumbotron.
Fluid jumbotron
Este é um jumbotron modificado que ocupa todo o espaço horizontal de seu elemento pai.
Copy
<div class="jumbotron jumbotron-fluid">
<div class="container">
<h1 class="display-4">Fluid jumbotron</h1>
<p class="lead">Este é um jumbotron modificado que ocupa todo o espaço horizontal de seu elemento
pai.</p>
</div>
</div>
Grupo de lista
Grupos de listas são componentes flexíveis e poderosos para mostrar vários conteúdos. Modifique e
aprimore-o para suportar quase qualquer conteúdo.
The new generation of project management tools is here and it’s visual.ads via Carbon
Exemplo básico
O grupo de lista mais básico é uma <ul> com <li> e algumas classes específicas. Desenvolva com as opções
a seguir ou com seu próprio CSS, dependendo da sua necessidade.
Itens ativos
Use .active em um .list-group-item para indicar a seleção ativa, no momento.
Itens desativados
Use .disabled em um .list-group-item para fazê-lo ter aparência desativada. Perceba que alguns
elementos com .disabled vão precisar de JavaScript customizado para desativar seus eventos de clique,
totalmente (ex: links).
Links e botões
Use <a> ou <button> para criar itens do grupo de lista acionáveis com estados hover, disabled e active,
adicionando .list-group-item-action. Nós separamos estas pseudo-classes, para assegurar que grupos de
listas feitos com elementos não interativos (tipo <li> ou <div>) não permitam insinuações de clique ou
toque.
Cras justo odioDapibus ac facilisis inMorbi leo risusPorta ac consectetur acVestibulum at eros
Copy
<div class="list-group">
<a href="#" class="list-group-item list-group-item-action active">
Cras justo odio
</a>
<a href="#" class="list-group-item list-group-item-action">Dapibus ac facilisis in</a>
<a href="#" class="list-group-item list-group-item-action">Morbi leo risus</a>
<a href="#" class="list-group-item list-group-item-action">Porta ac consectetur ac</a>
<a href="#" class="list-group-item list-group-item-action disabled">Vestibulum at eros</a>
</div>
Com <button>, você também pode fazer uso do atributo disabled, invés da classe .disabled. Infelizmente,
elementos <a> não suportam o atributo disabled.
Cras justo odioDapibus ac facilisis inMorbi leo risusPorta ac consectetur acVestibulum at eros
Copy
<div class="list-group">
<button type="button" class="list-group-item list-group-item-action active">
Cras justo odio
</button>
<button type="button" class="list-group-item list-group-item-action">Dapibus ac facilisis in</button>
<button type="button" class="list-group-item list-group-item-action">Morbi leo risus</button>
<button type="button" class="list-group-item list-group-item-action">Porta ac consectetur ac</button>
<button type="button" class="list-group-item list-group-item-action" disabled>Vestibulum at
eros</button>
</div>
Flush
Use .list-group-flush para remover algumas bordas e cantos arredondados para renderizar itens do grupo
de lista, de ponta-a-ponta, em um container pai.
Classes contextuais
Use classes contextuais para estilizar itens da lista com belos caracteres e cor de fundo.
• Dapibus ac facilisis in
• Um simples item primary do grupo de lista
• Um simples item secondary do grupo de lista
• Um simples item success do grupo de lista
• Um simples item danger do grupo de lista
• Um simples item warning do grupo de lista
• Um simples item info do grupo de lista
• Um simples item light do grupo de lista
• Um simples item dark do grupo de lista
Copy
<ul class="list-group">
<li class="list-group-item">Dapibus ac facilisis in</li>
Dapibus ac facilisis inUm simples item primary do grupo de listaUm simples item secondary do grupo de listaUm
simples item success do grupo de listaUm simples item danger do grupo de listaUm simples item warning do grupo
de listaUm simples item info do grupo de listaUm simples item light do grupo de listaUm simples item dark do grupo
de lista
Copy
<div class="list-group">
<a href="#" class="list-group-item list-group-item-action">Dapibus ac facilisis in</a>
Usando badges
Coloque badges em qualquer item do grupo de lista para exibir contadores, atividade e muito mais, com
ajuda de alguns utilitários.
Conteúdo customizado
Coloque quase qualquer HTML dentro, mesmo em grupos de listas linkados, como o mostrado abaixo, com
ajuda de utilitários flexbox.
Cabeçalho do item
3 dias atrás
Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.
Cabeçalho do item
3 dias atrás
Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.
Cabeçalho do item
3 dias atrás
Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus varius blandit.
Copy
<div class="list-group">
<a href="#" class="list-group-item list-group-item-action flex-column align-items-start active">
<div class="d-flex w-100 justify-content-between">
<h5 class="mb-1">Cabeçalho do item</h5>
<small>3 dias atrás</small>
</div>
<p class="mb-1">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus
varius blandit.</p>
<small>Donec id elit non mi porta.</small>
</a>
<a href="#" class="list-group-item list-group-item-action flex-column align-items-start">
<div class="d-flex w-100 justify-content-between">
<h5 class="mb-1">Cabeçalho do item</h5>
<small class="text-muted">3 dias atrás</small>
</div>
<p class="mb-1">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus
varius blandit.</p>
<small class="text-muted">Donec id elit non mi porta.</small>
</a>
<a href="#" class="list-group-item list-group-item-action flex-column align-items-start">
<div class="d-flex w-100 justify-content-between">
<h5 class="mb-1">Cabeçalho do item</h5>
<small class="text-muted">3 dias atrás</small>
</div>
<p class="mb-1">Donec id elit non mi porta gravida at eget metus. Maecenas sed diam eget risus
varius blandit.</p>
<small class="text-muted">Donec id elit non mi porta.</small>
</a>
</div>
Comportamento JavaScript
Use o plugin JavaScript tab (inclua-o, individualmente, ou usando o arquivo compilado bootstrap.js) para
aprimorar nosso grupo de lista para criar paineis de abas de conteúdo local.
HomePerfilMensagensConfigurações
Velit aute mollit ipsum ad dolor consectetur nulla officia culpa adipisicing exercitation fugiat tempor.
Voluptate deserunt sit sunt nisi aliqua fugiat proident ea ut. Mollit voluptate reprehenderit occaecat nisi ad
non minim tempor sunt voluptate consectetur exercitation id ut nulla. Ea et fugiat aliquip nostrud sunt
incididunt consectetur culpa aliquip eiusmod dolor. Anim ad Lorem aliqua in cupidatat nisi enim eu nostrud
do aliquip veniam minim.
Copy
<div class="row">
<div class="col-4">
<div class="list-group" id="list-tab" role="tablist">
<a class="list-group-item list-group-item-action active" id="list-home-list" data-toggle="list"
href="#lista-home" role="tab" aria-controls="home">Home</a>
<a class="list-group-item list-group-item-action" id="list-profile-list" data-toggle="list"
href="#list-profile" role="tab" aria-controls="profile">Perfil</a>
<a class="list-group-item list-group-item-action" id="list-messages-list" data-toggle="list"
href="#lista-mensagens" role="tab" aria-controls="messages">Mensagens</a>
<a class="list-group-item list-group-item-action" id="list-settings-list" data-toggle="list"
href="#lista-configuracoes" role="tab" aria-controls="settings">Configurações</a>
</div>
</div>
<div class="col-8">
<div class="tab-content" id="nav-tabContent">
<div class="tab-pane fade show active" id="list-home" role="tabpanel" aria-labelledby="list-home-
list">...</div>
<div class="tab-pane fade" id="list-profile" role="tabpanel" aria-labelledby="list-profile-
list">...</div>
<div class="tab-pane fade" id="list-messages" role="tabpanel" aria-labelledby="list-messages-
list">...</div>
<div class="tab-pane fade" id="list-settings" role="tabpanel" aria-labelledby="list-settings-
list">...</div>
</div>
</div>
</div>
Copy
<!-- Grupo de lista -->
<div class="list-group" id="minhaLista" role="tablist">
<a class="list-group-item list-group-item-action active" data-toggle="list" href="#home"
role="tab">Home</a>
<a class="list-group-item list-group-item-action" data-toggle="list" href="#perfil"
role="tab">Perfil</a>
<a class="list-group-item list-group-item-action" data-toggle="list" href="#mensagens"
role="tab">Mensagens</a>
<a class="list-group-item list-group-item-action" data-toggle="list" href="#configuracoes"
role="tab">Configurações</a>
</div>
Via JavaScript
Ative uma aba item de lista, via JavaScript (cada item de lista precisa ser ativado, individualmente):
Copy
$('#minhaLista a').on('click', function (e) {
e.preventDefault()
$(this).tab('show')
})
Você pode ativar itens de listas individuais, em diversas maneiras:
Copy
$('#minhaLista a[href="#perfil"]').tab('show') // Selecione pelo ID da tag
$('#minhaLista a:first-child').tab('show') // Seleciona primeira aba
$('#minhaLista a:last-child').tab('show') // Seleciona última aba
$('#minhaLista a:nth-child(3)').tab('show') // Seleciona terceira aba
Efeito fade
Para fazer o painel de abas receber o efeito fade in, use .fade em cada .tab-pane. A primeira aba também
deve receber .show, para fazer o conteúdo inicial visível.
Copy
<div class="tab-content">
<div class="tab-pane fade show active" id="home" role="tabpanel">...</div>
<div class="tab-pane fade" id="perfil" role="tabpanel">...</div>
<div class="tab-pane fade" id="mensagens" role="tabpanel">...</div>
<div class="tab-pane fade" id="configuracoes" role="tabpanel">...</div>
</div>
Métodos
$().tab
Ativa um item de lista e o container de conteúdo. Abas devem ter um data-target ou um href remetendo a
um container, no DOM.
Copy
<div class="list-group" id="minhaLista" role="tablist">
<a class="list-group-item list-group-item-action active" data-toggle="list" href="#home"
role="tab">Home</a>
<a class="list-group-item list-group-item-action" data-toggle="list" href="#perfil"
role="tab">Perfil</a>
<a class="list-group-item list-group-item-action" data-toggle="list" href="#mensagens"
role="tab">Mensagens</a>
<a class="list-group-item list-group-item-action" data-toggle="list" href="#configuracoes"
role="tab">Configurações</a>
</div>
<div class="tab-content">
<div class="tab-pane active" id="home" role="tabpanel">...</div>
<div class="tab-pane" id="perfil" role="tabpanel">...</div>
<div class="tab-pane" id="mensagens" role="tabpanel">...</div>
<div class="tab-pane" id="configuracoes" role="tabpanel">...</div>
</div>
<script>
$(function () {
$('#minhaLista a:last-child').tab('show')
})
</script>
.tab(‘show’)
Seleciona o item de lista específico e mostra o painel associado a ele. Qualquer outro item de lista que foi,
anteriormente selecionado, se torna não selecionado e seu painel associado se esconde. Retorna ao
invocador, antes do painel de abas ser exibido, de fato (antes do evento shown.bs.tab ocorrer, por
exemplo).
Copy
$('#algumListItem').tab('show')
Eventos
Se nenhuma aba já foi ativada, os eventos hide.bs.tab e hidden.bs.tab não serão mostrados.
show.bs.tab Este evento é acionado na exibição de aba, mas antes da nova aba ser exibida.
Use event.target e event.relatedTarget para atingir a aba ativa e a aba anteriormente ativa,
respectivamente.
shown.bs.tab Este evento é acionado na exibição de aba, depois da aba ser mostrada.
Use event.target e event.relatedTarget para atingir a aba ativa e a aba anteriormente ativa,
respectivamente.
Tipo de evento Descrição
hide.bs.tab Este evento é acionado quando uma nova aba está para ser exibida e a aba anterior está para ser
oculta. Use event.target e event.relatedTarget para atingir a aba ativa, no momento, e a próx
aba que está para ser ativa, respectivamente.
hidden.bs.tab Este evento é acionado depois de uma nova aba ser exibida e a aba ativada anteriormente estar
escondida. Use event.target e event.relatedTarget para atingir a aba ativa anteriormente e a
aba ativa, respectivamente.
Copy
$('a[data-toggle="list"]').on('shown.bs.tab', function (e) {
e.target // Aba recém ativa
e.relatedTarget // Aba ativa anteriorment
})
Modal
Use o plugin JavaScript modal para criar diálogos em seu site para notificações e outros tipos de conteúdos
customizados.
The new generation of project management tools is here and it’s visual.ads via Carbon
Como funciona
Antes de começar a usar o modal Bootstrap, se assegure de ler o seguinte, já que nossas opções de menu
mudaram, recentemente.
Copy
$('#meuModal').on('shown.bs.modal', function () {
$('#meuInput').trigger('focus')
})
Continue lendo, para demonstrações e instruções de uso.
Exemplos
Componentes modal
Abaixo, temos um exemplo de modal static (position e display sobrescritos). Pode-se ver o cabeçalho,
corpo (precisa de padding) e footer (opcional) do modal. Nós só pedimos que você crie cabeçalhos modal
com recursos de dispensa, sempre que possível, ou dê outra opção de dispensa ao usuário.
Título do modal
×
FecharSalvar mudanças
Copy
<div class="modal" tabindex="-1" role="dialog">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">Título do modal</h5>
<button type="button" class="close" data-dismiss="modal" aria-label="Fechar">
<span aria-hidden="true">×</span>
</button>
</div>
<div class="modal-body">
<p>Texto do corpo do modal, é aqui.</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-secondary" data-dismiss="modal">Fechar</button>
<button type="button" class="btn btn-primary">Salvar mudanças</button>
</div>
</div>
</div>
</div>
Veja um exemplo de modal, clicando no botão abaixo. Ele vai deslizar para baixo, enquanto aparece
gradualmente.
Copy
<!-- Botão para acionar modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#modalExemplo">
Abrir modal de demonstração
</button>
Quando modals são muito longos para a viewport do usuário ou dispositivo, eles possuem rolagem
independente da página. Teste a demo abaixo, para saber de oquê estamos falando.
Copy
<!-- Botão para acionar modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#ModalLongoExemplo">
Abrir modal de demonstração
</button>
Verticalmente centralizado
Copy
<!-- Botão para acionar modal -->
<button type="button" class="btn btn-primary" data-toggle="modal" data-
target="#ExemploModalCentralizado">
Abrir modal de demonstração
</button>
Tooltips e popovers
Tooltips e popovers podem ser posicionados dentro de modals, sempre que necessário. Quando modals são
fechados, qualquer tooltip ou popover dentro deles e fechado, automaticamente.
Copy
<div class="modal-body">
<h5>Popover em um modal</h5>
<p>Este <a href="#" role="button" class="btn btn-secondary popover-test" title="Título do popover"
data-content="O conteúdo do popover é definido aqui.">botão</a> aciona um popover, ao clicar nele.</p>
<hr>
<h5>Tooltips em um modal</h5>
<p><a href="#" class="tooltip-test" title="Tooltip">Este link</a> e <a href="#" class="tooltip-test"
title="Tooltip">este outro</a> mostra tooltips, quando passamos o mouse sobre eles.</p>
</div>
Usando o grid
Use o sistema grid Bootstrap dentro de um modal, aninhando .container-fluid no .modal-body. Depois, use
as classes do sistema grid, assim como faria em outros locais.
Copy
<div class="modal-body">
<div class="container-fluid">
<div class="row">
<div class="col-md-4">.col-md-4</div>
<div class="col-md-4 ml-auto">.col-md-4 .ml-auto</div>
</div>
<div class="row">
<div class="col-md-3 ml-auto">.col-md-3 .ml-auto</div>
<div class="col-md-2 ml-auto">.col-md-2 .ml-auto</div>
</div>
<div class="row">
<div class="col-md-6 ml-auto">.col-md-6 .ml-auto</div>
</div>
<div class="row">
<div class="col-sm-9">
Level 1: .col-sm-9
<div class="row">
<div class="col-8 col-sm-6">
Level 2: .col-8 .col-sm-6
</div>
<div class="col-4 col-sm-6">
Level 2: .col-4 .col-sm-6
</div>
</div>
</div>
</div>
</div>
</div>
Tem vários botões que acionam o mesmo modal, mas com o conteúdo um pouco diferente?
Use event.relatedTarget e atributos HTML data-* (via jQuery, se possível) para variar o conteúdo do modal,
dependendo de qual botão foi clicado.
Abaixo, temos uma demonstração seguida de um exemplo HTML e JavaScript. Para mais informação, leia a
documentação de eventos do modal para detalhes sobre relatedTarget.
Copy
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-
whatever="@mdo">Falar com @mdo</button>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-
whatever="@fat">Falar com @fat</button>
<button type="button" class="btn btn-primary" data-toggle="modal" data-target="#exampleModal" data-
whatever="@getbootstrap">Falar com @getbootstrap</button>
Remover animação
Para modals que, simplesmente, aparecem de supetão, invés de gradualmente, remova a classe .fade da
marcação do seu modal.
Copy
<div class="modal" tabindex="-1" role="dialog" aria-labelledby="..." aria-hidden="true">
...
</div>
Alturas dinâmicas
Acessibilidade
Embutir vídeos do YouTube em modals pede JavaScript adicional, para parar o playback e outras coisas,
automaticamente. Veja este ótimo post, no Stack Overflow, para mais informação.
Tamanhos opcionais
Modals possuem três tamanhos alternativos, disponíveis via classes modificadoras e a serem colocadas em
um .modal-dialog. Estes tamanhos são cancelados, em certos breakpoints, para evitar rolagem horizontal
em viewports menores.
Our default modal without modifier class constitutes the “medium” size modal.
Copy
<!-- Extra large modal -->
<button class="btn btn-primary" data-toggle="modal" data-target=".bd-example-modal-xl">Extra large
modal</button>
Modo de uso
O plugin modal alterna a visibilidade do seu conteúdo, via atributos data ou JavaScript. Ele também
coloca .modal-open no <body> para sobrescrever o comportamento padrão de rolagem e gerar um .modal-
backdrop para dar uma área de clique fora do modal que permite fechá-lo.
Ativa o modal sem escrever JavaScript. Defina data-toggle="modal" em um elemento de controle (como um
botão), junto com um data-target="#foo" ou href="#foo" que remeta a um modal específico a ser acionado.
Copy
<button type="button" data-toggle="modal" data-target="#meuModal">Abrir modal</button>
Via JavaScript
Copy
$('#meuModal').modal(options)
Parâmetros
Parâmetros podem ser passados via atributos data ou JavaScript. Para atributos data, anexe o nome do
parâmetro ao prefixo data-*, como em data-backdrop="".
backdrop booleano ou a string 'static' true Cria um elemento modal backdrop. Alternativamente, use static
um backdrop que não fecha o modal, ao clicar.
Métodos
Copy
$('#meuModal').modal({
keyboard: false
})
.modal('toggle')
Manualmente, alterna a visibilidade do modal. Retorna ao invocador, antes do modal ter sido exibido ou
escondido, de fato (antes dos eventos shown.bs.modal ou hidden.bs.modalocorrerem).
Copy
$('#meuModal').modal('toggle')
.modal('show')
Manualmente, abre o modal. Retorna ao invocador, antes do modal ter sido exibido, de fato (antes do
evento shown.bs.modal ocorrer).
Copy
$('#meuModal').modal('show')
.modal('hide')
Manualmente, esconde o modal. Retorna ao invocador, antes do modal ter sido escondido, de
fato (antes do evento hidden.bs.modal ocorrer).
Copy
$('#meuModal').modal('hide')
.modal('handleUpdate')
Manualmente, reajuste a posição do modal se a altura dele se alterar, enquanto está aberto (caso uma barra
de rolagem apareça).
Copy
$('#meuModal').modal('handleUpdate')
.modal('dispose')
Destrói o modal de um elemento.
Eventos
A classe modal Bootstrap possui alguns eventos para criar a funcionalidade modal, em si. Todos eventos
modal são acionados nele mesmo (no <div class="modal">).
show.bs.modal Este evento é acionado, imediatamente, quando o método show é invocado. Se acionado por um
o elemento clicado fica disponível como a propriedade relatedTarget do evento.
shown.bs.modal Este evento é acionado quando o modal se torna visível ao usuário (espera as transições CSS
finalizarem). Se acionado por um clique, o elemento clicado fica disponível como a
propriedade relatedTarget do evento.
hidden.bs.modal Este evento é acionado quando o modal acaba de ser oculto ao usuário (espera as transições CSS
finalizarem).
Copy
$('#meuModal').on('hidden.bs.modal', function (e) {
// Faça algo, aqui...
})
Navs
Documentação e exemplos de como usar os componentes de navegação Bootstrap.
All the tools your team needs in one place. Slack: Where work happens.ads via Carbon
O componente .nav é feito com flexbox e provê uma forte fundação para construir todo tipo de
componente de navegação. Ela possui sobrescrição de alguns estilos para trabalhar com listas, padding em
links para criar áreas de clique maiores e estilo desativado básico.
O componente base .nav não inclui qualquer estado .active. Os exemplos seguintes possuem a classe,
principalmente, para demonstrar que esta classe não aciona nenhum estilo, em específico.
• Ativo
• Link
• Link
• Desativado
Copy
<ul class="nav">
<li class="nav-item">
<a class="nav-link active" href="#">Ativo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Desativado</a>
</li>
</ul>
As classes são usadas por toda parte, então, sua marcação consegue ser muito flexível. Use um <ul> como
acima ou faça seu próprio, com um elemento <nav>. Devido o .nav usar display: flex, os links navs se
comportam da mesma forma que os itens nav, mas sem marcação HTML a mais.
AtivoLinkLinkDesativado
Copy
<nav class="nav">
<a class="nav-link active" href="#">Ativo</a>
<a class="nav-link" href="#">Link</a>
<a class="nav-link" href="#">Link</a>
<a class="nav-link disabled" href="#">Desativado</a>
</nav>
Estilos disponíveis
Mude o estilo do componente .nav com modificadores e utilitários. Você também pode misturar e
combinar, assim como construir seu próprio nav.
Alinhamento horizontal
Altere o alinhamento horizontal de seu nav com utilitários flexbox. Por padrão, navs são alinhados a
esquerda, mas você pode modificá-los para serem centralizados ou alinhados a direita, facilmente.
• Ativo
• Link
• Link
• Desativado
Copy
<ul class="nav justify-content-center">
<li class="nav-item">
<a class="nav-link active" href="#">Ativo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Desativado</a>
</li>
</ul>
Alinhado a direita, usando .justify-content-end:
• Ativo
• Link
• Link
• Desativado
Copy
<ul class="nav justify-content-end">
<li class="nav-item">
<a class="nav-link active" href="#">Ativo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Desativado</a>
</li>
</ul>
Alinhamento vertical
Empilhe sua navegação, modificando a direção flex item com o utilitário .flex-column.
Precisa empilhar eles, em algumas viewports, mas não em outras? Use variações responsivas, como .flex-
sm-column.
• Ativo
• Link
• Link
• Desativado
Copy
<ul class="nav flex-column">
<li class="nav-item">
<a class="nav-link active" href="#">Ativo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Desativado</a>
</li>
</ul>
Navegação vertical é possível sem <ul>, também.
AtivoLinkLinkDesativado
Copy
<nav class="nav flex-column">
<a class="nav-link active" href="#">Ativo</a>
<a class="nav-link" href="#">Link</a>
<a class="nav-link" href="#">Link</a>
<a class="nav-link disabled" href="#">Desativado</a>
</nav>
Abas
Use o nav básico acima e coloque a classe .nav-tabs para gerar uma interface de abas. Use isso para criar
regiões de abas com nosso plugin JavaScript tab.
• Ativo
• Link
• Link
• Desativado
Copy
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" href="#">Ativo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Desativado</a>
</li>
</ul>
Pílulas
• Ativo
• Link
• Link
• Desativado
Copy
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link active" href="#">Ativo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Desativado</a>
</li>
</ul>
Fill e justify
Force o conteúdo do seu .nav se extender por toda largura disponível com uma das duas classes
modificadoras. Para preencher, proporcionalmente, todo espaço disponível com seus .nav-item, use .nav-
fill. Perceba que todo espaço horizontal é ocupado, mas nem todo item nav tem a mesma largura.
• Ativo
• Link nav muito mais longo
• Link
• Desativado
Copy
<ul class="nav nav-pills nav-fill">
<li class="nav-item">
<a class="nav-link active" href="#">Ativo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link nav muito mais longo</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Desativado</a>
</li>
</ul>
Quando usando uma navegação baseada em <nav>, se assegure de usar .nav-item, nas âncoras.
AtivoLinkLinkDesativado
Copy
<nav class="nav nav-pills nav-fill">
<a class="nav-item nav-link active" href="#">Ativo</a>
<a class="nav-item nav-link" href="#">Link</a>
<a class="nav-item nav-link" href="#">Link</a>
<a class="nav-item nav-link disabled" href="#">Desativado</a>
</nav>
Para ter elementos com larguras idênticas, use .nav-justified. Todo espaço horizontal será ocupado por
links nav, mas diferente do .nav-fill acima, todo item nav terá a mesma largura.
AtivoLinkLinkDesativado
Copy
<nav class="nav nav-pills nav-justified">
<a class="nav-item nav-link active" href="#">Ativo</a>
<a class="nav-item nav-link" href="#">Link</a>
<a class="nav-item nav-link" href="#">Link</a>
<a class="nav-item nav-link disabled" href="#">Desativado</a>
</nav>
AtivoLinkLinkDesativado
Copy
<nav class="nav nav-pills flex-column flex-sm-row">
<a class="flex-sm-fill text-sm-center nav-link active" href="#">Ativo</a>
<a class="flex-sm-fill text-sm-center nav-link" href="#">Link</a>
<a class="flex-sm-fill text-sm-center nav-link" href="#">Link</a>
<a class="flex-sm-fill text-sm-center nav-link disabled" href="#">Desativado</a>
</nav>
Acessibilidade
Se você está usando navs para prover uma barra de navegação, se assegure de usar role="navigation" no
container pai mais lógico do <ul> ou envolva um elemento <nav> em toda navegação. Não adicione
o role no <ul>, porque isso evitaria que ele fosse transmitido como uma lista, de fato, para as tecnologias
assistivas.
Perceba que barras de navegação, mesmo que visualmente estilizadas como abas com a classe .nav-
tabs, não devem receber os atributos role="tablist", role="tab" ou role="tabpanel". Eles só são
adequados para interfaces com abas dinâmicas, como descrito em WAI ARIA Authoring Practices. Leia sobre
o comportamento JavaScript para aprender sobre interfaces de abas dinâmicas.
Usando dropdowns
Use menus dropdown com uma marcação HTML extra e o plugin JavaScript dropdown.
• Ativo
• Dropdown
• Link
• Desativado
Copy
<ul class="nav nav-tabs">
<li class="nav-item">
<a class="nav-link active" href="#">Ativo</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-
haspopup="true" aria-expanded="false">Dropdown</a>
<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 class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Link isolado</a>
</div>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Desativado</a>
</li>
</ul>
• Ativo
• Dropdown
• Link
• Desativado
Copy
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link active" href="#">Ativo</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-
haspopup="true" aria-expanded="false">Dropdown</a>
<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 class="dropdown-divider"></div>
<a class="dropdown-item" href="#">Link isolado</a>
</div>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Desativado</a>
</li>
</ul>
Comportamento JavaScript
Use o plugin JavaScript tab (inclua-o individualmente ou através do arquivo compilado bootstrap.js) para
aprimorar nossas abas ou pílulas navegacionais e criar paineis dinâmicos com conteúdo local, até mesmo
usando menus dropdown.
Se você está montando nosso JavaScript a partir da fonte, vai precisar do util.js.
Interfaces de abas dinâmicas, como descritas em WAI ARIA Authoring Practices, precisam
de role="tablist", role="tab", role="tabpanel" e atributos aria- extras, para transmitir sua estrutura,
funcionalidade e atual estado para os usuários de tecnologias assistivas.
Perceba que interfaces de abas dinâmicas não devem conter menus dropdowns, já que isso causa problemas
de usabilidade e acessibilidade. De uma perspectiva de usabilidade, o fato do elemento gatilho da aba
atualmente exibida não estar visível (já que está dentro do menu dropdown fechado) pode causar confusão.
Do ponto de vista de acessibilidade, atualmente, não há maneira sensata de mapear este tipo de construção
em um padrão WAI ARIA, significando que isso não pode ser, facilmente, indendido por usuários de
tecnologias assistivas.
• Home
• Perfil
• Contato
Raw denim you probably haven't heard of them jean shorts Austin. Nesciunt tofu stumptown aliqua, retro
synth master cleanse. Mustache cliche tempor, williamsburg carles vegan helvetica. Reprehenderit butcher
retro keffiyeh dreamcatcher synth. Cosby sweater eu banh mi, qui irure terry richardson ex squid. Aliquip
placeat salvia cillum iphone. Seitan aliquip quis cardigan american apparel, butcher voluptate nisi qui.
Copy
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item">
<a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-
controls="home" aria-selected="true">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" id="profile-tab" data-toggle="tab" href="#perfil" role="tab" aria-
controls="profile" aria-selected="false">Perfil</a>
</li>
<li class="nav-item">
<a class="nav-link" id="contact-tab" data-toggle="tab" href="#contato" role="tab" aria-
controls="contact" aria-selected="false">Contato</a>
</li>
</ul>
<div class="tab-content" id="myTabContent">
<div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">...</div>
<div class="tab-pane fade" id="perfil" role="tabpanel" aria-labelledby="profile-tab">...</div>
<div class="tab-pane fade" id="contato" role="tabpanel" aria-labelledby="contact-tab">...</div>
</div>
Para ajudar em suas necessidades, isso funciona com uma marcação baseada em <ul> ou feita por você
mesmo. Perceba que se você está usando <nav>, não deveria usar role="tablist" diretamente nele, já que
isso sobrescreveria o role nativo do elemento, que é uma referência de navegação. Por isso, escolha um
elemento alternativo (um <div>, no exemplo abaixo) e o envolva com o <nav>.
HomePerfilContato
Et et consectetur ipsum labore excepteur est proident excepteur ad velit occaecat qui minim occaecat
veniam. Fugiat veniam incididunt anim aliqua enim pariatur veniam sunt est aute sit dolor anim. Velit non
irure adipisicing aliqua ullamco irure incididunt irure non esse consectetur nostrud minim non minim
occaecat. Amet duis do nisi duis veniam non est eiusmod tempor incididunt tempor dolor ipsum in qui sit.
Exercitation mollit sit culpa nisi culpa non adipisicing reprehenderit do dolore. Duis reprehenderit occaecat
anim ullamco ad duis occaecat ex.
Copy
<nav>
<div class="nav nav-tabs" id="nav-tab" role="tablist">
<a class="nav-item nav-link active" id="nav-home-tab" data-toggle="tab" href="#nav-home" role="tab"
aria-controls="nav-home" aria-selected="true">Home</a>
<a class="nav-item nav-link" id="nav-profile-tab" data-toggle="tab" href="#nav-profile" role="tab"
aria-controls="nav-profile" aria-selected="false">Perfil</a>
<a class="nav-item nav-link" id="nav-contact-tab" data-toggle="tab" href="#nav-contact" role="tab"
aria-controls="nav-contact" aria-selected="false">Contato</a>
</div>
</nav>
<div class="tab-content" id="nav-tabContent">
<div class="tab-pane fade show active" id="nav-home" role="tabpanel" aria-labelledby="nav-home-
tab">...</div>
<div class="tab-pane fade" id="nav-profile" role="tabpanel" aria-labelledby="nav-profile-
tab">...</div>
<div class="tab-pane fade" id="nav-contact" role="tabpanel" aria-labelledby="nav-contact-
tab">...</div>
</div>
O plugin tab também funciona com pílulas.
• Home
• Perfil
• Contato
Consequat occaecat ullamco amet non eiusmod nostrud dolore irure incididunt est duis anim sunt officia.
Fugiat velit proident aliquip nisi incididunt nostrud exercitation proident est nisi. Irure magna elit commodo
anim ex veniam culpa eiusmod id nostrud sit cupidatat in veniam ad. Eiusmod consequat eu adipisicing
minim anim aliquip cupidatat culpa excepteur quis. Occaecat sit eu exercitation irure Lorem incididunt
nostrud.
Copy
<ul class="nav nav-pills mb-3" id="pills-tab" role="tablist">
<li class="nav-item">
<a class="nav-link active" id="pills-home-tab" data-toggle="pill" href="#pills-home" role="tab"
aria-controls="pills-home" aria-selected="true">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" id="pills-profile-tab" data-toggle="pill" href="#pills-profile" role="tab" aria-
controls="pills-profile" aria-selected="false">Perfil</a>
</li>
<li class="nav-item">
<a class="nav-link" id="pills-contact-tab" data-toggle="pill" href="#pills-contact" role="tab" aria-
controls="pills-contact" aria-selected="false">Contato</a>
</li>
</ul>
<div class="tab-content" id="pills-tabContent">
<div class="tab-pane fade show active" id="pills-home" role="tabpanel" aria-labelledby="pills-home-
tab">...</div>
<div class="tab-pane fade" id="pills-profile" role="tabpanel" aria-labelledby="pills-profile-
tab">...</div>
<div class="tab-pane fade" id="pills-contact" role="tabpanel" aria-labelledby="pills-contact-
tab">...</div>
</div>
Ele também funciona com pílulas verticais.
HomePerfilMensagensConfigurações
Cillum ad ut irure tempor velit nostrud occaecat ullamco aliqua anim Lorem sint. Veniam sint duis incididunt
do esse magna mollit excepteur laborum qui. Id id reprehenderit sit est eu aliqua occaecat quis et velit
excepteur laborum mollit dolore eiusmod. Ipsum dolor in occaecat commodo et voluptate minim
reprehenderit mollit pariatur. Deserunt non laborum enim et cillum eu deserunt excepteur ea incididunt
minim occaecat.
Copy
<div class="row">
<div class="col-3">
<div class="nav flex-column nav-pills" id="v-pills-tab" role="tablist" aria-orientation="vertical">
<a class="nav-link active" id="v-pills-home-tab" data-toggle="pill" href="#v-pills-home"
role="tab" aria-controls="v-pills-home" aria-selected="true">Home</a>
<a class="nav-link" id="v-pills-profile-tab" data-toggle="pill" href="#v-pills-profile" role="tab"
aria-controls="v-pills-profile" aria-selected="false">Perfil</a>
<a class="nav-link" id="v-pills-messages-tab" data-toggle="pill" href="#v-pills-messages"
role="tab" aria-controls="v-pills-messages" aria-selected="false">Mensagens</a>
<a class="nav-link" id="v-pills-settings-tab" data-toggle="pill" href="#v-pills-settings"
role="tab" aria-controls="v-pills-settings" aria-selected="false">Configurações</a>
</div>
</div>
<div class="col-9">
<div class="tab-content" id="v-pills-tabContent">
<div class="tab-pane fade show active" id="v-pills-home" role="tabpanel" aria-labelledby="v-pills-
home-tab">...</div>
<div class="tab-pane fade" id="v-pills-profile" role="tabpanel" aria-labelledby="v-pills-profile-
tab">...</div>
<div class="tab-pane fade" id="v-pills-messages" role="tabpanel" aria-labelledby="v-pills-
messages-tab">...</div>
<div class="tab-pane fade" id="v-pills-settings" role="tabpanel" aria-labelledby="v-pills-
settings-tab">...</div>
</div>
</div>
</div>
Você pode ativar uma navegação em aba ou pílula sem escrever qualquer JavaScript, simplesmente,
especificando data-toggle="tab" ou data-toggle="pill", em um elemento. Use estes atributos data
em .nav-tabs ou .nav-pills.
Copy
<!-- Abas nav -->
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item">
<a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-
controls="home" aria-selected="true">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" id="profile-tab" data-toggle="tab" href="#perfil" role="tab" aria-
controls="profile" aria-selected="false">Perfil</a>
</li>
<li class="nav-item">
<a class="nav-link" id="messages-tab" data-toggle="tab" href="#messages" role="tab" aria-
controls="messages" aria-selected="false">Mensagens</a>
</li>
<li class="nav-item">
<a class="nav-link" id="settings-tab" data-toggle="tab" href="#settings" role="tab" aria-
controls="settings" aria-selected="false">Configurações</a>
</li>
</ul>
Usando JavaScript
Ative abas dinâmicas, usando JavaScript (cada aba precisa ser ativada, individualmente):
Copy
$('#minhaAba a').on('click', function (e) {
e.preventDefault()
$(this).tab('show')
})
Você pode ativar abas individuais, em diversas maneiras:
Copy
$('#minhaAba a[href="#perfil"]').tab('show') // Por ID
$('#minhaAba li:first-child a').tab('show') // Ativar o primeiro elemento filho
$('#minhaAba li:last-child a').tab('show') // Ativar o último elemento filho
$('#minhaAba li:nth-child(3) a').tab('show') // Selecionar um filho específico (terceiro, neste caso)
Efeito fade
Para fazer as abas terem o efeito fade in, use .fade em cada .tab-pane. O primeiro .tab-panetambém deve
ter .show para fazer o conteúdo inicial vísivel.
Copy
<div class="tab-content">
<div class="tab-pane fade show active" id="home" role="tabpanel" aria-labelledby="home-tab">...</div>
<div class="tab-pane fade" id="perfil" role="tabpanel" aria-labelledby="profile-tab">...</div>
<div class="tab-pane fade" id="messages" role="tabpanel" aria-labelledby="messages-tab">...</div>
<div class="tab-pane fade" id="settings" role="tabpanel" aria-labelledby="settings-tab">...</div>
</div>
Métodos
Todos métodos API são assíncronos e iniciam a transição. Eles retornam ao invocador, assim que a
transição é iniciada, mas que ela finalize. Além do mais, uma chamada de método em um componente
transicionando é ignorada.
Ativa uma aba e o container de conteúdo. Abas devem ter um data-target ou um href, remetenado a um
container presente no DOM.
Copy
<ul class="nav nav-tabs" id="myTab" role="tablist">
<li class="nav-item">
<a class="nav-link active" id="home-tab" data-toggle="tab" href="#home" role="tab" aria-
controls="home" aria-selected="true">Home</a>
</li>
<li class="nav-item">
<a class="nav-link" id="profile-tab" data-toggle="tab" href="#perfil" role="tab" aria-
controls="profile" aria-selected="false">Perfil</a>
</li>
<li class="nav-item">
<a class="nav-link" id="messages-tab" data-toggle="tab" href="#messages" role="tab" aria-
controls="messages" aria-selected="false">Mensagens</a>
</li>
<li class="nav-item">
<a class="nav-link" id="settings-tab" data-toggle="tab" href="#settings" role="tab" aria-
controls="settings" aria-selected="false">Configurações</a>
</li>
</ul>
<div class="tab-content">
<div class="tab-pane active" id="home" role="tabpanel" aria-labelledby="home-tab">...</div>
<div class="tab-pane" id="perfil" role="tabpanel" aria-labelledby="profile-tab">...</div>
<div class="tab-pane" id="messages" role="tabpanel" aria-labelledby="messages-tab">...</div>
<div class="tab-pane" id="settings" role="tabpanel" aria-labelledby="settings-tab">...</div>
</div>
<script>
$(function () {
$('#myTab li:last-child a').tab('show')
})
</script>
.tab(‘show’)
Seleciona uma aba específica e mostra seu painel associado. Qualquer outra aba que foi, anteriormente,
selecionada, é desselecionada e o seu painel oculto. Retorna ao invocador, antes da aba do painel ter
sido exibida, de fato (antes do evento shown.bs.tab ocorrer).
Copy
$('#algumaAba').tab('show')
.tab(‘dispose’)
Destrói a aba de um elemento.
Eventos
Quando mostrando uma nova aba, os eventos são acionados, na seguinte ordem:
Se nenhuma aba já estava ativa, então, os eventos hide.bs.tab e hidden.bs.tab não serão acionados.
Navbar
Documentação e exemplos para o poderoso e responsivo cabeçalho de navegação, o navbar. Inclui suporte
para logo, navegação, plugin collapse e muito mais.
The new generation of project management tools is here and it’s visual.ads via Carbon
Como funciona
Aqui está oquê você precisa saber, antes de começar a usar o navbar:
Conteúdo suportado
Navbars vem com suporte integrado para um punhado de sub-componentes. Escolha entre os seguintes,
sempre que precisar:
Aqui está um exemplo de todos os sub-componentes incluídos em um navbar light responsivo, o qual
colapsa no breakpoint lg (large, em português: grande), automaticamente.
Navbar
• Home(página atual)
• Link
• Dropdown
• Desativado
Pesquisar
Copy
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-
target="#conteudoNavbarSuportado" aria-controls="conteudoNavbarSuportado" aria-expanded="false" aria-
label="Alterna navegação">
<span class="navbar-toggler-icon"></span>
</button>
Marca
A classe .navbar-brand pode ser aplicada na maioria dos elementos, mas uma âncora funciona melhor, já
que alguns elementos precisam de classes utilitárias ou estilos customizados.
NavbarNavbar
Copy
<!-- Como um link -->
<nav class="navbar navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
</nav>
Copy
<!-- Só uma imagem -->
<nav class="navbar navbar-light bg-light">
<a class="navbar-brand" href="#">
<img src="/docs/4.1/assets/brand/bootstrap-solid.svg" width="30" height="30" alt="">
</a>
</nav>
Bootstrap
Copy
<!-- Imagem e texto -->
<nav class="navbar navbar-light bg-light">
<a class="navbar-brand" href="#">
<img src="/docs/4.1/assets/brand/bootstrap-solid.svg" width="30" height="30" class="d-inline-block
align-top" alt="">
Bootstrap
</a>
</nav>
Nav
Links de navegação navbar são feitos com nossas opções .nav, suas próprias classes modificadoras e
precisam usar classes togglers, para estilização responsiva apropriada. Navegação em navbars também
vão crescer para ocupar o maior espaço horizontal possível, mantendo os conteúdos do seu navbar
alinhados.
Estados ativos (classe .active) para indicar a página atual podem ser aplicados, diretamente, no .nav-
link ou seus pais imediatos .nav-item.
Navbar
• Home(Página atual)
• Destaques
• Preços
• Desativado
Copy
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNav" aria-
controls="navbarNav" aria-expanded="false" aria-label="Alterna navegação">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNav">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="#">Home <span class="sr-only">(Página atual)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Destaques</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Preços</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Desativado</a>
</li>
</ul>
</div>
</nav>
E porque nós usamos classes em nossos navs, você pode evitar a abordagem baseada em lista, se quiser.
Navbar
Home(Página atual)DestaquesPreçosDesativado
Copy
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavAltMarkup"
aria-controls="navbarNavAltMarkup" aria-expanded="false" aria-label="Alterna navegação">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavAltMarkup">
<div class="navbar-nav">
<a class="nav-item nav-link active" href="#">Home <span class="sr-only">(Página atual)</span></a>
<a class="nav-item nav-link" href="#">Destaques</a>
<a class="nav-item nav-link" href="#">Preços</a>
<a class="nav-item nav-link disabled" href="#">Desativado</a>
</div>
</div>
</nav>
Você também pode usar dropdowns em seu nav da navbar. Menus dropdown precisam de um elemento
envolto para posicionamento, então, se assegure de usar elementos aninhados e separados para .nav-
item e .nav-link, como mostrado abaixo.
Navbar
• Home(Página atual)
• Destaques
• Preços
• Link dropdown
Copy
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarNavDropdown"
aria-controls="navbarNavDropdown" aria-expanded="false" aria-label="Alterna navegação">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarNavDropdown">
<ul class="navbar-nav">
<li class="nav-item active">
<a class="nav-link" href="#">Home <span class="sr-only">(Página atual)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Destaques</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Preços</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" href="#" id="navbarDropdownMenuLink" role="button" data-
toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Link dropdown
</a>
<div class="dropdown-menu" aria-labelledby="navbarDropdownMenuLink">
<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>
</li>
</ul>
</div>
</nav>
Formulários
Pesquisar
Copy
<nav class="navbar navbar-light bg-light">
<form class="form-inline">
<input class="form-control mr-sm-2" type="search" placeholder="Pesquisar" aria-label="Pesquisar">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Pesquisar</button>
</form>
</nav>
Elementos filhos imediatos no .navbar usam layout flex e vão ter justify-content: between, por padrão.
Use utilitários flex sempre que precisar, para ajustar este comportamento.
Navbar
Pesquisar
Copy
<nav class="navbar navbar-light bg-light">
<a class="navbar-brand">Navbar</a>
<form class="form-inline">
<input class="form-control mr-sm-2" type="search" placeholder="Pesquisar" aria-label="Pesquisar">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Pesquisar</button>
</form>
</nav>
Grupos de input também funcionam:
Copy
<nav class="navbar navbar-light bg-light">
<form class="form-inline">
<div class="input-group">
<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>
</form>
</nav>
Vários botões dentro dos formulários navbar também são suportados. Isso é um bom lembrete que
utilitários de alinhamento vertical podem ser usados para linhar elementos de diferentes tamanhos.
Texto
Navbars podem conter pedaços de textos, com ajuda do .navbar-text. Esta classe configura o alinhamento
vertical e espaçamento horizontal, em linhas de textos.
• Home(Página atual)
• Destaques
• Preços
Esquema de cores
Tematizar o navbar nunca foi tão fácil, graças a combinação de classes temas e utilitários background-color.
Escolha de .navbar-light (cores de fundo leves) até .navbar-dark (cores de fundo escuras). Depois,
personalize o resto com utilitários .bg-*.
Navbar
• Home(Página atual)
• Destaques
• Preços
• Sobre
Pesquisar
Navbar
• Home(Página atual)
• Destaques
• Preços
• Sobre
Pesquisar
Navbar
• Home(Página atual)
• Destaques
• Preços
• Sobre
Pesquisar
Copy
<nav class="navbar navbar-dark bg-dark">
<!-- Conteúdo do navbar -->
</nav>
Containers
Apesar de não ser necessário, você pode envolver um .container em um navbar para centralizá-lo na página
ou colocar um .container dentro para centralizar os conteúdos de um navbar top fixo ou estático.
Navbar
Copy
<div class="container">
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
</nav>
</div>
Quando o container está dentro do seu navbar, seu padding horizontal é removido em breakpoints menores
que sua classe .navbar-expand{-sm|-md|-lg|-xl} especificada. Isso garante que não dobraremos o padding,
desnecessariamente, em viewports menores, quando seu navbar está expandido.
Navbar
Copy
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<div class="container">
<a class="navbar-brand" href="#">Navbar</a>
</div>
</nav>
Posicionamento
Use nossos utilitários de posicionamento para posicionar navbars em locais não estáticos. Escolha entre fixo
ao topo, fixo a parte inferior ou sticky top (rola com a página e fica fixo, quando ele alcança a topo). Navbars
fixos usam position: fixed, significando que eles estão a parte do fluxo comum do DOM e podem precisar
CSS customizado (ex: padding-top no <body>) para evitar sobreposição com outros elementos.
Também perceba que .sticky-top usa position: sticky, oquê não é suportado, totalmente, em todos
browsers.
Padrão
Copy
<nav class="navbar navbar-light bg-light">
<a class="navbar-brand" href="#">Padrão</a>
</nav>
Fixo na parte superior
Copy
<nav class="navbar fixed-top navbar-light bg-light">
<a class="navbar-brand" href="#">Fixo na parte superior</a>
</nav>
Fixo na parte inferior
Copy
<nav class="navbar fixed-bottom navbar-light bg-light">
<a class="navbar-brand" href="#">Fixo na parte inferior</a>
</nav>
Sticky top
Copy
<nav class="navbar sticky-top navbar-light bg-light">
<a class="navbar-brand" href="#">Sticky top</a>
</nav>
Comportamentos responsivos
Navbars podem utilizar classes .navbar-toggler, .navbar-collapse e .navbar-expand{-sm|-md|-lg|-xl} para
alterar quando o conteúdo colapsa, atrás do botão. Em combinação com outros utilitários, você pode
escolher quando mostrar ou esconder certos elementos, facilmente.
Para navbars que não estão sempre colapsados, use a classe .navbar-expand no navbar. Para navbars que
estão sempre colapsados, não coloque nenhuma classe .navbar-expand.
Toggler
Togglers navbar são alinhados a esquerda, por padrão, mas se eles seguem um elemento irmão
como .navbar-brand, vão ser alinhados a direita, automaticamente. Revertendo sua marcação HTML vai
reverter o posicionamento do toggler.
Marca escondida
• Home(Página atual)
• Link
• Desativado
Pesquisar
Copy
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarTogglerDemo01"
aria-controls="navbarTogglerDemo01" aria-expanded="false" aria-label="Alterna navegação">
<span class="navbar-toggler-icon"></span>
</button>
<div class="collapse navbar-collapse" id="navbarTogglerDemo01">
<a class="navbar-brand" href="#">Marca escondida</a>
<ul class="navbar-nav mr-auto mt-2 mt-lg-0">
<li class="nav-item active">
<a class="nav-link" href="#">Home <span class="sr-only">(Página atual)</span></a>
</li>
<li class="nav-item">
<a class="nav-link" href="#">Link</a>
</li>
<li class="nav-item">
<a class="nav-link disabled" href="#">Desativado</a>
</li>
</ul>
<form class="form-inline my-2 my-lg-0">
<input class="form-control mr-sm-2" type="search" placeholder="Pesquisar" aria-label="Pesquisar">
<button class="btn btn-outline-success my-2 my-sm-0" type="submit">Pesquisar</button>
</form>
</div>
</nav>
Com o nome da marca exibido na esquerda e o toggler na direita:
Navbar
• Home(Página atual)
• Link
• Desativado
Pesquisar
Copy
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarTogglerDemo02"
aria-controls="navbarTogglerDemo02" aria-expanded="false" aria-label="Alterna navegação">
<span class="navbar-toggler-icon"></span>
</button>
Navbar
• Home(Página atual)
• Link
• Desativado
Pesquisar
Copy
<nav class="navbar navbar-expand-lg navbar-light bg-light">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarTogglerDemo03"
aria-controls="navbarTogglerDemo03" aria-expanded="false" aria-label="Alterna navegação">
<span class="navbar-toggler-icon"></span>
</button>
<a class="navbar-brand" href="#">Navbar</a>
Conteúdo externo
Algumas vezes você quer usar o plugin collapse para acionar conteúdo oculto, em algum lugar da página.
Porque nosso plugin funciona com o pareamento de id e data-target, isso pode ser feito, facilmente!
Copy
<div class="pos-f-t">
<div class="collapse" id="navbarToggleExternalContent">
<div class="bg-dark p-4">
<h5 class="text-white h4">Conteúdo expandido</h5>
<span class="text-muted">Expansível, atráves da marca no navbar.</span>
</div>
</div>
<nav class="navbar navbar-dark bg-dark">
<button class="navbar-toggler" type="button" data-toggle="collapse" data-
target="#navbarToggleExternalContent" aria-controls="navbarToggleExternalContent" aria-expanded="false"
aria-label="Alterna navegação">
<span class="navbar-toggler-icon"></span>
</button>
</nav>
</div>
Paginação
Documentação e exemplos de paginação para indicar um série de conteúdos relacionados, existentes em
várias páginas.
Own your code from end to end. Resolve errors way faster right in your workflow.ads via Carbon
Visão geral
Nós usamos um grande bloco de links conectados para nossa paginação, fazendo-os fácil de clicar e escalar.
A paginação é feita com elementos HTML de lista para que leitores de telas possam anunciar o número de
links disponíveis. Use um elemento <nav> como envolto para identificá-lo como uma seção de navegação
aos leitores de telas e outras tecnologias assistivas.
Além do mais, já que as páginas possuem mais de uma seção de navegação, normalmente, é aconselhado
usar um aria-label descritivo, no <nav>. Por exemplo, se o componente de paginação é usado para navegar
entre um conjunto de resultados de pesquisa, uma boa aria-label seria aria-label="Páginas dos
resultados de pesquisa".
• Anterior
• 1
• 2
• 3
• Próximo
Copy
<nav aria-label="Navegação de página exemplo">
<ul class="pagination">
<li class="page-item"><a class="page-link" href="#">Anterior</a></li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item"><a class="page-link" href="#">Próximo</a></li>
</ul>
</nav>
• «Anterior
• 1
• 2
• 3
• »Próximo
Copy
<nav aria-label="Navegação de página exemplo">
<ul class="pagination">
<li class="page-item">
<a class="page-link" href="#" aria-label="Anterior">
<span aria-hidden="true">«</span>
<span class="sr-only">Anterior</span>
</a>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#" aria-label="Próximo">
<span aria-hidden="true">»</span>
<span class="sr-only">Próximo</span>
</a>
</li>
</ul>
</nav>
Apesar da classe .disabled usar pointer-events: none para tentar desativar a funcionalidade de link do <a>,
esta propriedade CSS ainda não é padronizada e não conta com navegação pelo teclado. Assim, você deve
sempre colocar tabindex="-1" em links desativados e usar JavaScript personalizado para desativar suas
funcionalidades, totamente.
• Anterior
• 1
• 2(atual)
• 3
• Próximo
Copy
<nav aria-label="...">
<ul class="pagination">
<li class="page-item disabled">
<a class="page-link" href="#" tabindex="-1">Anterior</a>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item active">
<a class="page-link" href="#">2 <span class="sr-only">(atual)</span></a>
</li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#">Próximo</a>
</li>
</ul>
</nav>
Opcionalmente, você pode trocar âncoras ativadas e desativadas por <span> ou, omitir a âncora no caso de
flechas anterior/próximo, para remover a funcionalide de clique e evitar foco de teclado, enquanto mantém
os estilos.
• Anterior
• 1
• 2(atual)
• 3
• Próximo
Copy
<nav aria-label="...">
<ul class="pagination">
<li class="page-item disabled">
<span class="page-link">Anterior</span>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item active">
<span class="page-link">
2
<span class="sr-only">(atual)</span>
</span>
</li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#">Próximo</a>
</li>
</ul>
</nav>
Tamanhos
Paginação grande e chique ou pequena? Use .pagination-lg ou .pagination-sm para desfrutar dos
diferentes tamanhos.
• 1
• 2
• 3
Copy
<nav aria-label="...">
<ul class="pagination pagination-lg">
<li class="page-item disabled">
<a class="page-link" href="#" tabindex="-1">1</a>
</li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
</ul>
</nav>
• 1
• 2
• 3
Copy
<nav aria-label="...">
<ul class="pagination pagination-sm">
<li class="page-item disabled">
<a class="page-link" href="#" tabindex="-1">1</a>
</li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
</ul>
</nav>
Alinhamento
Altere o alinhamento dos componentes de paginação, usando utilitários flexbox.
• Anterior
• 1
• 2
• 3
• Próximo
Copy
<nav aria-label="Navegação de página exemplo">
<ul class="pagination justify-content-center">
<li class="page-item disabled">
<a class="page-link" href="#" tabindex="-1">Anterior</a>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#">Próximo</a>
</li>
</ul>
</nav>
• Anterior
• 1
• 2
• 3
• Próximo
Copy
<nav aria-label="Navegação de página exemplo">
<ul class="pagination justify-content-end">
<li class="page-item disabled">
<a class="page-link" href="#" tabindex="-1">Anterior</a>
</li>
<li class="page-item"><a class="page-link" href="#">1</a></li>
<li class="page-item"><a class="page-link" href="#">2</a></li>
<li class="page-item"><a class="page-link" href="#">3</a></li>
<li class="page-item">
<a class="page-link" href="#">Próximo</a>
</li>
</ul>
</nav>
Popovers
Documentação e exemplos para criar popovers Bootstrap (igual aqueles do iOS), em qualquer elemento do
seu site.
Try DigitalOcean today and get a free $100 credit.ads via Carbon
Visão geral
Coisas para saber, quando usando o plugin popover:
Copy
$(function () {
$('[data-toggle="popover"]').popover()
})
Copy
$(function () {
$('.popover-exemplo').popover({
container: 'body'
})
})
Demonstração
Clique para ver o popover
Copy
<button type="button" class="btn btn-lg btn-danger" data-toggle="popover" title="Título do popover"
data-content="Aqui vai algum tipo de conteúdo. Muito da hora, né?!">Clique para ver o popover</button>
As quatro direções
Popover na parte superior Popover na direita Popover na parte inferior Popover na esquerda
Copy
<button type="button" class="btn btn-secondary" data-container="body" data-toggle="popover" data-
placement="top" data-content="Vivamus sagittis lacus vel augue laoreet rutrum faucibus.">
Popover na parte superior
</button>
Use o gatilho focus para dispensar popovers, no próximo clique do usuário, em um elemento diferente do
qual ativou o popover.
Copy
<a tabindex="0" class="btn btn-lg btn-danger" role="button" data-toggle="popover" data-trigger="focus"
title="Popover dispensável" data-content="Aqui vai algum tipo de conteúdo. Muito da hora, né?!">Popover
dispensável</a>
Copy
$('.popover-dismiss').popover({
trigger: 'focus'
})
Elementos desativados
Elementos com o atributo disabled não são interativos, significando que usuários não podem passar o
mouse sobre eles ou clicar para acionar um popover ou tooltip. Como uma forma de contornar a situação,
você vai querer acionar o popover a partir de um elemento pai <div> ou <span> e sobrescrever o pointer-
eventer, no elemento desativado.
Para acionadores de popovers desativados, você também podem preferir usar data-trigger="hover" para
que o popover apareça como um feedback visual imediato para seus usuários, já que eles esperam não ter
que clicar em um elemento desativado.
Botão desativado
Copy
<span class="d-inline-block" data-toggle="popover" data-content="Popover desativado">
<button class="btn btn-primary" style="pointer-events: none;" type="button" disabled>Botão
desativado</button>
</span>
Modo de uso
Ative popovers, via JavaScript:
Copy
$('#exemplo').popover(options)
Parâmetros
Parâmetros podem ser passados via atributos data ou JavaScript. No caso de atributos data, anexe o nome
do parâmetro ao prefixo data-, como em data-animation="".
Métodos
.popover('show')
Revela o popover de um elemento. Retorna ao invocador, antes do popover ter sido exibido, de
fato (antes do evento shown.bs.popover ocorrer). Isto é considerado um acionamento “manual” do popover.
Popovers, os quais possuem atributos title e contentvazios, nunca são exibidos.
Copy
$('#elemento').popover('show')
.popover('hide')
Esconde o popover de um elemento. Retorna ao invocador, antes do popover ter sido escondido, de
fato (antes do evento hidden.bs.popover ocorrer). Isto é considerado um acionamento “manual” do
popover.
Copy
$('#elemento').popover('hide')
.popover('toggle')
Alterna a visibilidade do popover de um elemento. Retorna ao invocador, antes do popover ter sido
escondido ou exibido, de fato (antes dos eventos shown.bs.popover e hidden.bs.popover ocorrerem). Isto é
considerado um acionamento “manual” do popover.
Copy
$('#elemento').popover('toggle')
.popover('dispose')
Esconde e destrói o popover de um elemento. Popovers que usam delegação (são criados usando o
parâmetro selector), não podem ser destruídos individualmente, em elementos gatilhos descendentes.
Copy
$('#elemento').popover('dispose')
.popover('enable')
Dá ao popover de um elemento a habildiade de ser exibido. Ativado por padrão.
Copy
$('#elemento').popover('enable')
.popover('disable')
Retira a habilidade do popover de um elemento de ser exibido. O popover só poderá ser exibido, se este
método for reativado.
Copy
$('#elemento').popover('disable')
.popover('toggleEnabled')
Alterna a habilidade do popover de um elemento ser exibido ou oculto.
Copy
$('#elemento').popover('toggleEnabled')
.popover('update')
Atualiza a posição do popover de um elemento.
Copy
$('#elemento').popover('update')
Eventos
Evento Descrição
shown.bs.popover Este evento é acionado quando o popover se torna visível ao usuário (espera as transições CSS se
finalizadas).
hidden.bs.popover Este evento é acionado quando o popover não está mais oculto ao usuário (espera as transições C
serem finalizadas).
Evento Descrição
inserted.bs.popover Este evento é acionado depois do evento show.bs.popover, quando o template do popover é
adicionado ao DOM.
Copy
$('#meuPopover').on('hidden.bs.popover', function () {
// Faça algo, aqui…
})
Progress
Documentação e exemplos de uso das barras de progresso Bootstrap, além de barras empilhadas,
backgrounds animados e rótulos.
40+ SDKs. 190+ tutorials. 250,000 developers trust us. Generous free plan.ads via Carbon
Como funciona
Componentes de progresso são feitos com dois elementos HTML, um pouco de CSS para a largura e outros
atributos. Não usamos o elemento HTML5 <progress> para garantir que você possa empilhar barras de
progresso e colocar textos sobre elas.
• Nós usamos o elemento com .progress como um envolto para indicar o valor máximo da barra de
progresso;
• Nós usamos o elemento interno com .progress-bar para indicar o progresso da barra, até então;
• A .progress-bar exige um CSS inline, classe utilitária ou CSS personalizado, para definir sua largura;
• A classe .progress-bar também exige o uso de alguns atributos role e aria para fazê-lo acessível.
Copy
<div class="progress">
<div class="progress-bar" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-
valuemax="100"></div>
</div>
<div class="progress">
<div class="progress-bar" role="progressbar" style="width: 25%" aria-valuenow="25" aria-valuemin="0"
aria-valuemax="100"></div>
</div>
<div class="progress">
<div class="progress-bar" role="progressbar" style="width: 50%" aria-valuenow="50" aria-valuemin="0"
aria-valuemax="100"></div>
</div>
<div class="progress">
<div class="progress-bar" role="progressbar" style="width: 75%" aria-valuenow="75" aria-valuemin="0"
aria-valuemax="100"></div>
</div>
<div class="progress">
<div class="progress-bar" role="progressbar" style="width: 100%" aria-valuenow="100" aria-valuemin="0"
aria-valuemax="100"></div>
</div>
Bootstrap provê um punhado de utilitários para definir largura. Dependendo de suas necessidades, elas
podem ajudar a configurar seu progresso, rapidamente.
Copy
<div class="progress">
<div class="progress-bar w-75" role="progressbar" aria-valuenow="75" aria-valuemin="0" aria-
valuemax="100"></div>
</div>
Rótulos
Use rótulos em suas barras de progressos, colocando texto dentro do elemento com .progress-bar.
25%
Copy
<div class="progress">
<div class="progress-bar" role="progressbar" style="width: 25%;" aria-valuenow="25" aria-valuemin="0"
aria-valuemax="100">25%</div>
</div>
Altura
Nós só definimos um valor para altura no .progress, então, se você alterar o valor, o elemento
interno .progress-bar vai se redimensionar propocionalmente, automaticamente.
Copy
<div class="progress" style="height: 1px;">
<div class="progress-bar" role="progressbar" style="width: 25%;" aria-valuenow="25" aria-valuemin="0"
aria-valuemax="100"></div>
</div>
<div class="progress" style="height: 20px;">
<div class="progress-bar" role="progressbar" style="width: 25%;" aria-valuenow="25" aria-valuemin="0"
aria-valuemax="100"></div>
</div>
Backgrounds
Use classes utilitárias de background para mudar a aparência das barras de progresso.
Copy
<div class="progress">
<div class="progress-bar bg-success" role="progressbar" style="width: 25%" aria-valuenow="25" aria-
valuemin="0" aria-valuemax="100"></div>
</div>
<div class="progress">
<div class="progress-bar bg-info" role="progressbar" style="width: 50%" aria-valuenow="50" aria-
valuemin="0" aria-valuemax="100"></div>
</div>
<div class="progress">
<div class="progress-bar bg-warning" role="progressbar" style="width: 75%" aria-valuenow="75" aria-
valuemin="0" aria-valuemax="100"></div>
</div>
<div class="progress">
<div class="progress-bar bg-danger" role="progressbar" style="width: 100%" aria-valuenow="100" aria-
valuemin="0" aria-valuemax="100"></div>
</div>
Múltiplas barrras
Crie várias barras de progresso, dentro de um único componente de progresso, se precisar.
Copy
<div class="progress">
<div class="progress-bar" role="progressbar" style="width: 15%" aria-valuenow="15" aria-valuemin="0"
aria-valuemax="100"></div>
<div class="progress-bar bg-success" role="progressbar" style="width: 30%" aria-valuenow="30" aria-
valuemin="0" aria-valuemax="100"></div>
<div class="progress-bar bg-info" role="progressbar" style="width: 20%" aria-valuenow="20" aria-
valuemin="0" aria-valuemax="100"></div>
</div>
Listrada
Adicione .progress-bar-striped em qualquer .progress-bar para aplicar uma listra sobre a cor de fundo, via
gradiente CSS.
Copy
<div class="progress">
<div class="progress-bar progress-bar-striped" role="progressbar" style="width: 10%" aria-
valuenow="10" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<div class="progress">
<div class="progress-bar progress-bar-striped bg-success" role="progressbar" style="width: 25%" aria-
valuenow="25" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<div class="progress">
<div class="progress-bar progress-bar-striped bg-info" role="progressbar" style="width: 50%" aria-
valuenow="50" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<div class="progress">
<div class="progress-bar progress-bar-striped bg-warning" role="progressbar" style="width: 75%" aria-
valuenow="75" aria-valuemin="0" aria-valuemax="100"></div>
</div>
<div class="progress">
<div class="progress-bar progress-bar-striped bg-danger" role="progressbar" style="width: 100%" aria-
valuenow="100" aria-valuemin="0" aria-valuemax="100"></div>
</div>
Listras animadas
O gradiente listrado também pode ser animado. Use .progress-bar-animated no .progress-bar para animar
as listras, da direita para esquerda, via animações CSS3.
Ligar animação
Copy
<div class="progress">
<div class="progress-bar progress-bar-striped progress-bar-animated" role="progressbar" aria-
valuenow="75" aria-valuemin="0" aria-valuemax="100" style="width: 75%"></div>
</div>
Scrollspy
Automaticamente, atualize componentes de navegação ou grupo de listas, baseando-se na área visível do
site, para indicar qual link está ativo na viewport, no momento.
Try PhpStorm - the PHP IDE that gets your code. Free trial, license from $119.ads via Carbon
Como funciona
O scrollspy tem algumas exigências para funcionar direito:
Quando implementado com sucesso, sua nav ou grupo de lista vai se atualizar de acordo com a área visível,
movendo a classe .active de um item para o outro.
Navbar
• @fat
• @mdo
• Dropdown
@fat
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr
farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3
wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't
heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred
irony biodiesel keffiyeh artisan ullamco consequat.
@mdo
Veniam marfa mustache skateboard, adipisicing fugiat velit pitchfork beard. Freegan beard aliqua cupidatat
mcsweeney's vero. Cupidatat four loko nisi, ea helvetica nulla carles. Tattooed cosby sweater food truck,
mcsweeney's quis non freegan vinyl. Lo-fi wes anderson +1 sartorial. Carles non aesthetic exercitation quis
gentrify. Brooklyn adipisicing craft beer vice keytar deserunt.
um
Occaecat commodo aliqua delectus. Fap craft beer deserunt skateboard ea. Lomo bicycle rights adipisicing
banh mi, velit ea sunt next level locavore single-origin coffee in magna veniam. High life id vinyl, echo park
consequat quis aliquip banh mi pitchfork. Vero VHS est adipisicing. Consectetur nisi DIY minim messenger
bag. Cred ex in, sustainable delectus consectetur fanny pack iphone.
dois
In incididunt echo park, officia deserunt mcsweeney's proident master cleanse thundercats sapiente veniam.
Excepteur VHS elit, proident shoreditch +1 biodiesel laborum craft beer. Single-origin coffee wayfarers irure
four loko, cupidatat terry richardson master cleanse. Assumenda you probably haven't heard of them art
party fanny pack, tattooed nulla cardigan tempor ad. Proident wolf nesciunt sartorial keffiyeh eu banh mi
sustainable. Elit wolf voluptate, lo-fi ea portland before they sold out four loko. Locavore enim nostrud
mlkshk brooklyn nesciunt.
três
Ad leggings keytar, brunch id art party dolor labore. Pitchfork yr enim lo-fi before they sold out qui. Tumblr
farm-to-table bicycle rights whatever. Anim keffiyeh carles cardigan. Velit seitan mcsweeney's photo booth 3
wolf moon irure. Cosby sweater lomo jean shorts, williamsburg hoodie minim qui you probably haven't
heard of them et cardigan trust fund culpa biodiesel wes anderson aesthetic. Nihil tattooed accusamus, cred
irony biodiesel keffiyeh artisan ullamco consequat.
Keytar twee blog, culpa messenger bag marfa whatever delectus food truck. Sapiente synth id assumenda.
Locavore sed helvetica cliche irony, thundercats you probably haven't heard of them consequat hoodie
gluten-free lo-fi fap aliquip. Labore elit placeat before they sold out, terry richardson proident brunch
nesciunt quis cosby sweater pariatur keffiyeh ut helvetica artisan. Cardigan craft beer seitan readymade velit.
VHS chambray laboris tempor veniam. Anim mollit minim commodo ullamco thundercats.
Copy
<nav id="navbar-exemplo2" class="navbar navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<ul class="nav nav-pills">
<li class="nav-item">
<a class="nav-link" href="#fat">@fat</a>
</li>
<li class="nav-item">
<a class="nav-link" href="#mdo">@mdo</a>
</li>
<li class="nav-item dropdown">
<a class="nav-link dropdown-toggle" data-toggle="dropdown" href="#" role="button" aria-
haspopup="true" aria-expanded="false">Dropdown</a>
<div class="dropdown-menu">
<a class="dropdown-item" href="#um">um</a>
<a class="dropdown-item" href="#dois">dois</a>
<div role="separator" class="dropdown-divider"></div>
<a class="dropdown-item" href="#tres">tres</a>
</div>
</li>
</ul>
</nav>
<div data-spy="scroll" data-target="#navbar-exemplo2" data-offset="0">
<h4 id="fat">@fat</h4>
<p>...</p>
<h4 id="mdo">@mdo</h4>
<p>...</p>
<h4 id="um">um</h4>
<p>...</p>
<h4 id="dois">dois</h4>
<p>...</p>
<h4 id="tres">tres</h4>
<p>...</p>
</div>
Item 1
Ex consequat commodo adipisicing exercitation aute excepteur occaecat ullamco duis aliqua id magna
ullamco eu. Do aute ipsum ipsum ullamco cillum consectetur ut et aute consectetur labore. Fugiat laborum
incididunt tempor eu consequat enim dolore proident. Qui laborum do non excepteur nulla magna eiusmod
consectetur in. Aliqua et aliqua officia quis et incididunt voluptate non anim reprehenderit adipisicing dolore
ut consequat deserunt mollit dolore. Aliquip nulla enim veniam non fugiat id cupidatat nulla elit cupidatat
commodo velit ut eiusmod cupidatat elit dolore.
Item 1.1
Amet tempor mollit aliquip pariatur excepteur commodo do ea cillum commodo Lorem et occaecat elit qui
et. Aliquip labore ex ex esse voluptate occaecat Lorem ullamco deserunt. Aliqua cillum excepteur irure
consequat id quis ea. Sit proident ullamco aute magna pariatur nostrud labore. Reprehenderit aliqua
commodo eiusmod aliquip est do duis amet proident magna consectetur consequat eu commodo fugiat
non quis. Enim aliquip exercitation ullamco adipisicing voluptate excepteur minim exercitation minim minim
commodo adipisicing exercitation officia nisi adipisicing. Anim id duis qui consequat labore adipisicing sint
dolor elit cillum anim et fugiat.
Item 2.2
Cillum nisi deserunt magna eiusmod qui eiusmod velit voluptate pariatur laborum sunt enim. Irure laboris
mollit consequat incididunt sint et culpa culpa incididunt adipisicing magna magna occaecat. Nulla ipsum
cillum eiusmod sint elit excepteur ea labore enim consectetur in labore anim. Proident ullamco ipsum esse
elit ut Lorem eiusmod dolor et eiusmod. Anim occaecat nulla in non consequat eiusmod velit incididunt.
Item 2
Quis magna Lorem anim amet ipsum do mollit sit cillum voluptate ex nulla tempor. Laborum consequat non
elit enim exercitation cillum aliqua consequat id aliqua. Esse ex consectetur mollit voluptate est in duis
laboris ad sit ipsum anim Lorem. Incididunt veniam velit elit elit veniam Lorem aliqua quis ullamco deserunt
sit enim elit aliqua esse irure. Laborum nisi sit est tempor laborum mollit labore officia laborum excepteur
commodo non commodo dolor excepteur commodo. Ipsum fugiat ex est consectetur ipsum commodo
tempor sunt in proident.
Item 3
Quis anim sit do amet fugiat dolor velit sit ea ea do reprehenderit culpa duis. Nostrud aliqua ipsum fugiat
minim proident occaecat excepteur aliquip culpa aute tempor reprehenderit. Deserunt tempor mollit elit ex
pariatur dolore velit fugiat mollit culpa irure ullamco est ex ullamco excepteur.
Item 3.1
Deserunt quis elit Lorem eiusmod amet enim enim amet minim Lorem proident nostrud. Ea id dolore anim
exercitation aute fugiat labore voluptate cillum do laboris labore. Ex velit exercitation nisi enim labore
reprehenderit labore nostrud ut ut. Esse officia sunt duis aliquip ullamco tempor eiusmod deserunt irure
nostrud irure. Ullamco proident veniam laboris ea consectetur magna sunt ex exercitation aliquip minim
enim culpa occaecat exercitation. Est tempor excepteur aliquip laborum consequat do deserunt laborum
esse eiusmod irure proident ipsum esse qui.
Item 3.2
Labore sit culpa commodo elit adipisicing sit aliquip elit proident voluptate minim mollit nostrud aute
reprehenderit do. Mollit excepteur eu Lorem ipsum anim commodo sint labore Lorem in exercitation velit
incididunt. Occaecat consectetur nisi in occaecat proident minim enim sunt reprehenderit exercitation
cupidatat et do officia. Aliquip consequat ad labore labore mollit ut amet. Sit pariatur tempor proident in
veniam culpa aliqua excepteur elit magna fugiat eiusmod amet officia.
Copy
<nav id="navbar-exemplo3" class="navbar navbar-light bg-light">
<a class="navbar-brand" href="#">Navbar</a>
<nav class="nav nav-pills flex-column">
<a class="nav-link" href="#item-1">Item 1</a>
<nav class="nav nav-pills flex-column">
<a class="nav-link ml-3 my-1" href="#item-1-1">Item 1.1</a>
<a class="nav-link ml-3 my-1" href="#item-1-2">Item 1.2</a>
</nav>
<a class="nav-link" href="#item-2">Item 2</a>
<a class="nav-link" href="#item-3">Item 3</a>
<nav class="nav nav-pills flex-column">
<a class="nav-link ml-3 my-1" href="#item-3-1">Item 3.1</a>
<a class="nav-link ml-3 my-1" href="#item-3-2">Item 3.2</a>
</nav>
</nav>
</nav>
Item 1
Ex consequat commodo adipisicing exercitation aute excepteur occaecat ullamco duis aliqua id magna
ullamco eu. Do aute ipsum ipsum ullamco cillum consectetur ut et aute consectetur labore. Fugiat laborum
incididunt tempor eu consequat enim dolore proident. Qui laborum do non excepteur nulla magna eiusmod
consectetur in. Aliqua et aliqua officia quis et incididunt voluptate non anim reprehenderit adipisicing dolore
ut consequat deserunt mollit dolore. Aliquip nulla enim veniam non fugiat id cupidatat nulla elit cupidatat
commodo velit ut eiusmod cupidatat elit dolore.
Item 2
Quis magna Lorem anim amet ipsum do mollit sit cillum voluptate ex nulla tempor. Laborum consequat non
elit enim exercitation cillum aliqua consequat id aliqua. Esse ex consectetur mollit voluptate est in duis
laboris ad sit ipsum anim Lorem. Incididunt veniam velit elit elit veniam Lorem aliqua quis ullamco deserunt
sit enim elit aliqua esse irure. Laborum nisi sit est tempor laborum mollit labore officia laborum excepteur
commodo non commodo dolor excepteur commodo. Ipsum fugiat ex est consectetur ipsum commodo
tempor sunt in proident.
Item 3
Quis anim sit do amet fugiat dolor velit sit ea ea do reprehenderit culpa duis. Nostrud aliqua ipsum fugiat
minim proident occaecat excepteur aliquip culpa aute tempor reprehenderit. Deserunt tempor mollit elit ex
pariatur dolore velit fugiat mollit culpa irure ullamco est ex ullamco excepteur.
Item 4
Quis anim sit do amet fugiat dolor velit sit ea ea do reprehenderit culpa duis. Nostrud aliqua ipsum fugiat
minim proident occaecat excepteur aliquip culpa aute tempor reprehenderit. Deserunt tempor mollit elit ex
pariatur dolore velit fugiat mollit culpa irure ullamco est ex ullamco excepteur.
Copy
<div id="list-example" class="list-group">
<a class="list-group-item list-group-item-action" href="#list-item-1">Item 1</a>
<a class="list-group-item list-group-item-action" href="#list-item-2">Item 2</a>
<a class="list-group-item list-group-item-action" href="#list-item-3">Item 3</a>
<a class="list-group-item list-group-item-action" href="#list-item-4">Item 4</a>
</div>
<div data-spy="scroll" data-target="#list-example" data-offset="0" class="scrollspy-example">
<h4 id="list-item-1">Item 1</h4>
<p>...</p>
<h4 id="list-item-2">Item 2</h4>
<p>...</p>
<h4 id="list-item-3">Item 3</h4>
<p>...</p>
<h4 id="list-item-4">Item 4</h4>
<p>...</p>
</div>
Modo de uso
Via atributos data
Para implementar o comportamento scrollspy na sua navegação superior, facilmente, coloque data-
spy="scroll" no elemento que você quer espiar a área visível (o <body>, normalmente). Depois, coloque o
atributo data-target com o ID ou classe do elemento pai de qualquer componente Bootstrap .nav.
Copy
body {
position: relative;
}
Copy
<body data-spy="scroll" data-target="#navbar-exemplo">
...
<div id="navbar-exemplo">
<ul class="nav nav-tabs" role="tablist">
...
</ul>
</div>
...
</body>
Via JavaScript
Copy
$('body').scrollspy({ target: '#navbar-exemplo' })
IDs alvos válidos são obrigatórios
Links do navbar devem ter IDs alvos válidos. Por exemplo, um <a href="#home">home</a> deve remeter a
algo no DOM como <div id="home"></div>.
Elementos alvos invisíveis (sem :visible) são ignorados
Elementos alvos que não não são considerados visíveis pelo jQuery vão ser ignorados e seus itens nav,
correspondentes, serão destacados.
Métodos
.scrollspy('refresh')
Quando usando scrollspy, ao mesmo tempo que adiciona ou remove elementos do DOM, você precisará
invocar o método refresh, de tal forma:
Copy
$('[data-spy="scroll"]').each(function () {
var $spy = $(this).scrollspy('refresh')
})
.scrollspy('dispose')
Destrói o scrollspy vinculado a um elemento.
Parâmetros
Parâmetros podem ser passados via atributos data ou JavaScript. No caso de atributos data, anexe o nome
do parâmetro ao prefixo data-, como em data-offset="".
offset number 10 Pixels para deslocar, a partir do topo, quando calculando a posição do scroll.
Eventos
activate.bs.scrollspy Este evento é acionado no elemento de rolagem, quando um item se torna ativado pelo scrollspy.
Copy
$('[data-spy="scroll"]').on('activate.bs.scrollspy', function () {
// Faça algo, aqui…
})
Tooltips
Documentação e exemplos para criar tooltips Bootstrap personalizados com CSS e JavaScript, usando CSS3
para animações e atributos data para armazenamento local de título.
40+ SDKs. 190+ tutorials. 250,000 developers trust us. Generous free plan.ads via Carbon
Visão geral
Oquê saber, quando usar o plugin tooltip:
Pegou tudo isso? Perfeito! Vamo ver como isso funciona, em algums exemplos.
Copy
$(function () {
$('[data-toggle="tooltip"]').tooltip()
})
Exemplos
Passe o mouse sobre os links abaixo, para ver tooltips:
Et sit consectetur laboriosam accusamus. Ipsam amet aut. Exercitationem quasi accusantium et et ut. Alias
quam sed. Omnis minus ad repellendus. Et sit consectetur laboriosam accusamus. Ipsam amet aut.
Exercitationem quasi accusantium et et ut. Alias quam sed. Omnis minus ad repellendus. Et sit consectetur
laboriosam accusamus. Ipsam amet aut. Exercitationem quasi accusantium et et ut. Alias quam sed. Omnis
minus ad repellendus. Et sit consectetur laboriosam accusamus. Ipsam amet aut. Exercitationem
quasi accusantium et et ut. Alias quam sed. Omnis minus ad repellendus. Et sit consectetur laboriosam
accusamus. Ipsam amet aut. Exercitationem quasi accusantium et et ut. Alias quam sed. Omnis minus ad
repellendus.
Passe o mouse sobre os botões abaixo para ver as quatro direções de tooltip, possíveis: top, right, bottom e
left.
Tooltip na parte superior Tooltip na direita Tooltip na parte inferior Tooltip na esquerda
Copy
<button type="button" class="btn btn-secondary" data-toggle="tooltip" data-placement="top"
title="Tooltip na parte superior">
Tooltip na parte superior
</button>
<button type="button" class="btn btn-secondary" data-toggle="tooltip" data-placement="right"
title="Tooltip na direita">
Tooltip na direita
</button>
<button type="button" class="btn btn-secondary" data-toggle="tooltip" data-placement="bottom"
title="Tooltip na parte inferior">
Tooltip na parte inferior
</button>
<button type="button" class="btn btn-secondary" data-toggle="tooltip" data-placement="left"
title="Tooltip na esquerda">
Tooltip na esquerda
</button>
Ou um exemplo de tooltip que usa HTML, no seu conteúdo.
Copy
<button type="button" class="btn btn-secondary" data-toggle="tooltip" data-html="true"
title="<em>Tooltip</em> <u>with</u> <b>HTML</b>">
Tooltip com HTML
</button>
Modo de uso
O plugin tooltip gera conteúdo e marcação sob demanda e, por padrão, posiciona tooltips depois de seus
elementos acionadores.
Copy
$('#exemplo').tooltip(options)
Overflow auto and scroll
Tooltip position attempts to automatically change when a parent container has overflow: auto or overflow:
scroll like our .table-responsive, but still keeps the original placement’s positioning. To resolve, set
the boundary option to anything other than default value, 'scrollParent', such as 'window':
Copy
$('#example').tooltip({ boundary: 'window' })
Marcação
A marcação necessária para um tooltip só são os atributos data e title, no elemento HTML que você deseja
ter um tooltip. A marcação gerada de um tooltip é bem simples, mas precisa de posicionamento (definido
como top, por padrão).
Além do mais, não dependa só no hover como acionador para seu tooltip, já que isso vai fazer seus tooltips
impossíveis de serem acionados por usuários de teclado.
Copy
<!-- HTML a se escrever -->
<a href="#" data-toggle="tooltip" title="Some tooltip text!">Passe o mouse em mim</a>
<!-- Marcação gerada, pelo pluguin -->
<div class="tooltip bs-tooltip-top" role="tooltip">
<div class="arrow"></div>
<div class="tooltip-inner">
Algum texto de tooltip
</div>
</div>
Elementos desativados
Elementos com o atributo disabled não são interativos, significando que usuários não podem focar, clicar ou
passar o mouse sobre eles para acionar o tooltip (ou popover). Como uma forma de contornar a situação,
você vai querer acionar o tooltip a partir de um elemento pai <div> ou <span>, idealmente, fazendo-os serem
focáveis com tabindex="0" e sobrescrever a pointer-events, no elemento desativado.
Botão desativado
Copy
<span class="d-inline-block" tabindex="0" data-toggle="tooltip" title="Tooltip em elemento desativado">
<button class="btn btn-primary" style="pointer-events: none;" type="button" disabled>Botão
desativado</button>
</span>
Parâmetros
Parâmetros podem ser passados via atributos data ou JavaScript. No caso de atributos data, anexe o nome
do parâmetro ao prefixo data-, como em data-animation="".
fallbackPlacement string | 'flip' Permite especificar qual posição o Popper vai usar, em caso de f
array Para mais informação, leia a documentação de comportamento
Popper.js.
Métodos
Métodos é transições assíncronas
Todos métodos API são assíncronos e iniciam a transição. Eles retornam ao invocador, assim que a
transição é iniciada, mas que ela finalize. Além do mais, uma chamada de método em um componente
transicionando é ignorada.
.tooltip('show')
Revela o tooltip de um elemento. Retorna ao invocador, antes do tooltip ter sido exibido, de fato (antes
do evento shown.bs.tooltip ocorrer). Isto é considerado um acionamento “manual” do tooltip. Tooltips
com title vazios, nunca são mostrados.
Copy
$('#elemento').tooltip('show')
.tooltip('hide')
Esconde o tooltip de um elemento. Retorna ao invocador, antes do tooltip ter sido oculto, de fato (antes
do evento hidden.bs.tooltip ocorrer). Isto é considerado um acionamento “manual” do tooltip.
Copy
$('#elemento').tooltip('hide')
.tooltip('toggle')
Alterna a visibilidade do tooltip de um elemento. Retorna ao invocador, antes do tooltip ter sido exibido
ou oculto, de fato (antes dos eventos shown.bs.tooltip e hidden.bs.tooltip ocorrerem). Isto é considerado
um acionamento “manual” do tooltip.
Copy
$('#elemento').tooltip('toggle')
.tooltip('dispose')
Esconde e destrói o tooltip de um elemento. Tooltips que usam delegação (são criadas usando
o parâmetro selector) não podem ser, individualmente, destruídos em elementos acionadores
descendentes.
Copy
$('#elemento').tooltip('dispose')
.tooltip('enable')
Dá a habilide de se exibir ao tooltip de um elemento. Ativado por padrão.
Copy
$('#elemento').tooltip('enable')
.tooltip('disable')
Remove a habilidade de se exibir do tooltip de um elemento. O tooltip só será capaz de ser exibido se isto
for reativado.
Copy
$('#elemento').tooltip('disable')
.tooltip('toggleEnabled')
Alterna a capacidade do tooltip de um elemento de ser exibido ou oculto.
Copy
$('#elemento').tooltip('toggleEnabled')
.tooltip('update')
Atualiza a posição do tooltip de um elemento.
Copy
$('#elemento').tooltip('update')
Eventos
Evento Descrição
shown.bs.tooltip Este evento é acionado quando o tooltip foi exibido ao usuário (espera as transições CSS finalizare
hidden.bs.tooltip Este evento é acionado quando o tooltip acaba de se ocultar do usuário (espera as transições CSS
finalizarem).
inserted.bs.tooltip Este evento é acionado depois do evento show.bs.tooltip, quando o template tooltip foi adicion
ao DOM.
Copy
$('#meuTooltip').on('hidden.bs.tooltip', function () {
// Faça algo, aqui…
})
Bordas
Use os utilitários de borda para estilizar rapidamente a borda e o raio da borda de um elemento. Ótimo para
imagens, botões ou qualquer outro elemento.
Reliable SMTP Service. Avoid Spam Folders & Ensure Delivery. Integrates in 5-minads via Carbon
Borda
Use os utilitários de borda para adicionar ou remover as bordas de um elemento. Escolha entre um dos
lados ou todos de uma vez.
Adicione
Copy
<span class="border"></span>
<span class="border-top"></span>
<span class="border-right"></span>
<span class="border-bottom"></span>
<span class="border-left"></span>
Remova
Copy
<span class="border-0"></span>
<span class="border-top-0"></span>
<span class="border-right-0"></span>
<span class="border-bottom-0"></span>
<span class="border-left-0"></span>
Cor da borda
Altere a cor da borda usando utilitários criados a partir das nossas cores de tema.
Copy
<span class="border border-primary"></span>
<span class="border border-secondary"></span>
<span class="border border-success"></span>
<span class="border border-danger"></span>
<span class="border border-warning"></span>
<span class="border border-info"></span>
<span class="border border-light"></span>
<span class="border border-dark"></span>
<span class="border border-white"></span>
Raio da borda
Adicione classes a um elemento para arredondar facilmente seus cantos.
Copy
<img src="..." alt="..." class="rounded">
<img src="..." alt="..." class="rounded-top">
<img src="..." alt="..." class="rounded-right">
<img src="..." alt="..." class="rounded-bottom">
<img src="..." alt="..." class="rounded-left">
<img src="..." alt="..." class="rounded-circle">
<img src="..." alt="..." class="rounded-0">
Clearfix
Rapido e facilmente usar a propriedade clear em elementos flutuando, usando o utilitário clearfix.
All the tools your team needs in one place. Slack: Where work happens.ads via Carbon
Facilmente limpa a float, usando a classe .clearfix, no elemento pai. Além do mais, também pode ser
usado como um mixin.
Copy
<div class="clearfix">...</div>
Copy
// O mixin, em si.
@mixin clearfix() {
&::after {
display: block;
content: "";
clear: both;
}
}
Copy
<div class="bg-info clearfix">
<button type="button" class="btn btn-secondary float-left">Exemplo de botão flutuando à
esquerda</button>
<button type="button" class="btn btn-secondary float-right">Exemplo de botão flutuando à
direita</button>
</div>