Categorias
Artigos Bootstrap 5 Livro

Componentes Bootstrap

Capítulo 4

Bootstrap possui uma série de componentes que facilitam a construção de websites. Neste capítulo, serão apresentados os 10 componentes essenciais para construção de uma página completa.

Em sua documentação, Bootstrap apresenta diversos componentes. De fato, alguns terão mais uso do que outros; por isso, neste capítulo serão elencados os 10 principais componentes :

  1. Caixas expansivas (sanfona e classe de colapso)
  2. Caixa de alertas (alert) e caixa de notificações (toast)
  3. Emblemas (badge)
  4. Botões, grupo de botões e dropdown
  5. Cards
  6. Barras de progresso
  7. Carrossel de imagens
  8. Modal – caixas de diálogos
  9. Popovers e tooltips
  10. Menus: barras de navegação e abas

1. Caixas expansivas (sanfona e classe de colapso)

Em muitos casos, desenvolvedores de interface precisam exibir informações sob demanda, isto é, a informação deve estar disponível apenas se o usuário clicar em determinado ponto ou interagir com determinado elemento. Em Bootstrap, isso é possível por meio de diversos componentes, como as “Sanfonas Bootstrap”. Observe a figura a seguir para analisar como esse componente funciona.

Interface gráfica do usuário, Texto, Aplicativo, Email

Descrição gerada automaticamente
(A) Exibição padrão.


Interface gráfica do usuário, Texto, Aplicativo, Email

Descrição gerada automaticamente
(B) Ao clicar na segunda aba.


Interface gráfica do usuário, Texto, Aplicativo, Email

Descrição gerada automaticamente
(C) Ao clicar na terceira aba.


Figura 41. Sanfona Bootstrap.

Fonte: próprio autor.

O código a seguir, apresenta detalhadamente como implementar o componente sanfona:

1 <!-- Sanfona -->

2 <div class=”accordion” id=”acordeao-exemplo”>

3

4 <!-- ITEM 1: aba do sanfona + conteúdo -->

5 <div class=”accordion-item”>

6

7 <!-- aba – botão de carregamento -->

8 <h2 class=”accordion-header” id=”titulo-1″>

9 <button

10 class=”accordion-button”

11 data-bs-toggle=”collapse”

12 data-bs-target=”#item-1″

13 aria-expanded=”true”

14 aria-controls=”item-1″

15 >

16 Sanfona – Item #1

17 </button>

18 </h2>

19

20 <!-- conteúdo -->

21 <div

22 id=”item-1″

23 class=”accordion-collapse collapse show”

24 aria-labelledby=”titulo-1″

25 data-bs-parent=”#acordeao-exemplo”

26 >

27 <div class=”accordion-body”>

28

29 <strong>Este é o corpo do segundo item da “Sanfona Bootstrap”.</strong> Este item é mostrado por padrão até que o plugin de recolhimento adicione as classes apropriadas que usamos para estilizar cada elemento. Essas classes controlam a aparência geral, bem como a exibição e ocultação por meio de transições CSS. Você pode modificar qualquer um deles com CSS personalizado ou substituindo as variáveis padrão do Bootstrap. Também vale a pena notar que praticamente qualquer HTML pode ir dentro do <code>.accordion-body</code>, embora a transição limite o “overflow”.

30

31 </div>

32 </div>

33 </div>

34

35 <!-- ITEM 2: aba do sanfona + conteúdo -->

36 <div class=”accordion-item”>

37

38 <!-- aba – botão de carregamento -->

39 <h2 class=”accordion-header” id=”titulo-2″>

40 <button

41 class=”accordion-button”

42 data-bs-toggle=”collapse”

43 data-bs-target=”#item-2″

44 aria-expanded=”true”

45 aria-controls=”item-2″

46 >

47 Sanfona – Item #2

48 </button>

49 </h2>

50

51 <!-- conteúdo -->

52 <div

53 id=”item-2″

54 class=”accordion-collapse collapse”

55 aria-labelledby=”titulo-2″

56 data-bs-parent=”#acordeao-exemplo”

57 >

58 <div class=”accordion-body”>

59

60 <strong>Este é o corpo do primeiro item da “Sanfona Bootstrap”.</strong> Este item é mostrado apenas se o usuário clicar na aba correspondente (ao fazer isso, outros itens são ocultados). Você pode modificar qualquer um deles com CSS personalizado ou substituindo as variáveis padrão do Bootstrap. Também vale a pena notar que praticamente qualquer HTML pode ir dentro do <code>.accordion-body</code>, embora a transição limite o “overflow”.

61

62 </div>

63 </div>

64 </div>

65

66 <!-- ITEM 1: aba do sanfona + conteúdo -->

67 <div class=”accordion-item”>

68

69 <!-- aba – botão de carregamento -->

70 <h2 class=”accordion-header” id=”titulo-3″>

71 <button

72 class=”accordion-button”

73 data-bs-toggle=”collapse”

74 data-bs-target=”#item-3″

75 aria-expanded=”true”

76 aria-controls=”item-3″

77 >

78 Sanfona – Item #3

79 </button>

80 </h2>

81

82 <!-- conteúdo -->

83 <div

84 id=”item-3″

85 class=”accordion-collapse collapse”

86 aria-labelledby=”titulo-3″

87 data-bs-parent=”#acordeao-exemplo”

88 >

89 <div class=”accordion-body”>

90 <strong>Este é o corpo do terceiro item da “Sanfona Bootstrap”.</strong> Este item é mostrado apenas se o usuário clicar na aba correspondente (ao fazer isso, outros itens são ocultados). Você pode modificar qualquer um deles com CSS personalizado ou substituindo as variáveis padrão do Bootstrap. Também vale a pena notar que praticamente qualquer HTML pode ir dentro do <code>.accordion-body</code>, embora a transição limite o “overflow”.

91 </div>

92 </div>

93 </div>

94

95 </div>

Classe “.collapse”

O componente sanfona é baseado na classe “.collapse”. Essa classe é responsável por exibir ou esconder elementos aplicando um efeito de transição durante o processo. De modo generalizado podemos visualizar este componente da seguinte forma:

1 <!-- botão de ativação -->

2 <button

3 class=”btn btn-primary”

4 data-bs-toggle=”collapse”

5 data-bs-target=”#item_secreto”

6 >

7 Exibir caixa oculta

8 </button>

9

10 <!-- Texto escondido -->

11 <div

12 class=”collapse collpase-horizontal my-2″

13 id=”item_secreto”

14 >

15 <span class=”card p-4″>Texto oculto</span>

16 </div>

Note que o componente é composto por dois itens:

  1. um botão de ativação/desativação;
  2. um elemento HTML que fica escondido e só aparece após o clique no botão de ativação.

Agora observe a interface produzida:

(A) Antes de clicar.

Interface gráfica do usuário, Texto, Aplicativo, chat ou mensagem de texto

Descrição gerada automaticamente

(B) Após clicar.

Interface gráfica do usuário, Texto, Aplicativo, chat ou mensagem de texto

Descrição gerada automaticamente
Figura 42. Classe collapse.

Fonte: próprio autor.

2. Caixa de alertas (alert) e caixa de notificações (toast)

Caixas de alertas e de notificações são componentes que têm objetivos parecidos: mostrar mensagens para o usuário, mas por meio de estilos distintos.

As caixas de alertas (alert) são mais simples e podem ser carregados com a classe “alert”. Note que um elemento desse tipo também deve receber uma segunda classe indicando a cor “alert-*”, onde * pode ser primary, secondary, success, warning, danger, info, dark ou light. Links devem receber a classe “alert-link”.

Observe o exemplo a seguir:

1 <div class=”alert alert-primary” role=”alert”>

2 Caixa de alertas primary.

3 <a href=”#” class=”alert-link”>Exemplo de link</a>.

4 </div>

5 <div class=”alert alert-secondary” role=”alert”>

6 Caixa de alertas secondary.

7 <a href=”#” class=”alert-link”>Exemplo de link</a>.

8 </div>

9 <div class=”alert alert-success” role=”alert”>

10 Caixa de alertas success.

11 <a href=”#” class=”alert-link”>Exemplo de link</a>.

12 </div>

13 <div class=”alert alert-warning” role=”alert”>

14 Caixa de alertas warning.

15 <a href=”#” class=”alert-link”>Exemplo de link</a>.

16 </div>

17 <div class=”alert alert-danger” role=”alert”>

18 Caixa de alertas danger.

19 <a href=”#” class=”alert-link”>Exemplo de link</a>.

20 </div>

21 <div class=”alert alert-info” role=”alert”>

22 Caixa de alertas info.

23 <a href=”#” class=”alert-link”>Exemplo de link</a>.

24 </div>

25 <div class=”alert alert-light” role=”alert”>

26 Caixa de alertas light.

27 <a href=”#” class=”alert-link”>Exemplo de link</a>.

28 </div>

29 <div class=”alert alert-dark” role=”alert”>

30 Caixa de alertas dark.

31 <a href=”#” class=”alert-link”>Exemplo de link</a>.

32 </div>

Este código produzirá a seguinte página:

Uma imagem contendo Interface gráfica do usuário

Descrição gerada automaticamente
Figura 43. Caixas de alertas. Fonte: próprio autor.

Por outro lado, as caixas de notificação têm um design mais sofisticado e podem ser usadas para envio de mensagens rápidas para o usuário. Caixas de notificação são também conhecidas como toasts ou “torradas” na tradução (acredito que tenha alguma relação com a forma como são utilizadas: elas surgem na tela de forma parecida com um pão saindo de uma torradeira). Observe o exemplo a seguir:

Interface gráfica do usuário, Texto, Aplicativo

Descrição gerada automaticamente
Figura 44. Exemplo de um componente toast. Pode-se fechar o componente clicando no X. Fonte: próprio autor.

Observe o código usado para criá-lo:

1 <!-- Caixa de notificações -->

2 <div class=”toast fade show” role=”alert”

3 aria-live=”assertive” aria-atomic=”true”>

4

5 <!-- Cabeçalho -->

6 <div class=”toast-header”>

7

8 <label class=”badge bg-warning me-1″>!</label>

9 <strong class=”me-auto”>Aviso</strong>

10 <small class=”text-muted”>2 minutos atrás</small>

11

12 <!-- Botão fechar -->

13 <button type=”button” class=”btn-close”

14 data-bs-dismiss=”toast” aria-

15 label=”Close”></button>

16 </div>

17

18 <!-- Corpo da caixa de notificações -->

19 <div class=”toast-body”>

20 Isso é uma caixa de notificações!

21 </div>

22 </div>

3. Emblemas (badge)

Badges (ou na tradução “emblemas”) são componentes bastante simples, mas que podem ser de grande valia a sua interface. Em geral, o componente badge é usado em elementos inline (como as tags <span>, <strong> ou <label>) para aplicação de destaque e pode ser combinado com as classes de cores de plano de fundo (bg-*). Pode ainda ser usado em conjunto com a classe rounded-pill para inserção de bordas arredondadas.

O código a seguir ilustra como podemos implementá-lo:

1 <p>O componente <label class=”badge

2 bg-primary”>badge</label> destaca um trecho do texto.</p>

3

4 <p>O componente <label class=”badge bg-primary

5 rounded-pill”>badge</label> pode ser usado em conjunto

6 com a classe rounded-pill.</p>

O código produzirá a seguinte interface:

Interface gráfica do usuário, Texto, Aplicativo, Email

Descrição gerada automaticamente
Figura 45. Componente badge. Pode-se alterar a cor de fundo trocando a classe bg-primary por outra classe bg-*. Fonte: próprio autor.

4. Botões, grupo de botões e dropdown

Botões são um dos componentes mais utilizados em Bootstrap. Eles podem ser carregados por meio da classe “.btn”, seguindo da classe “.btn-*”, onde * representa uma cor, sendo:

  • primary: azul
  • secondary: cinza
  • success: verde
  • danger: vermelho
  • warning: laranja
  • info: azul ciano
  • light: branco gelo
  • dark: preto acinzentado
  • link: formata um botão como se fosse um link

Interface gráfica do usuário, Aplicativo, Site

Descrição gerada automaticamente
Figura 46. Botões. Fonte: próprio autor.

Podemos ter botões clássicos (com preenchimento com a cor correspondente) ou botões de outline (onde apenas a borda corresponde à cor informada). Para criar botões clássicos utilize o seguinte código:

1 <!-- Botões clássicos -->

2

3 <button class=”btn btn-primary”>Primary</button>

4 <button class=”btn btn-secondary”>Secondary</button>

5 <button class=”btn btn-success”>Success</button>

6 <button class=”btn btn-danger”>Danger</button>

7 <button class=”btn btn-warning”>Warning</button>

8 <button class=”btn btn-info”>Info</button>

9 <button class=”btn btn-light”>Light</button>

10 <button class=”btn btn-dark”>Dark</button>

11 <button class=”btn btn-link”>Link</button>

Para criar botões somente com borda (sem preenchimento), utilize as classes “.btn-outline-[cor]”, como o seguinte exemplo:

1 <!-- Botões outline -->

2

3 <button class=”btn btn-outline-primary”>Primary</button>

4 <button class=”btn btn-outline-secondary”> Secondary </button>

5 <button class=”btn btn-outline-success”>Success</button>

6 <button class=”btn btn-outline-danger”>Danger</button>

7 <button class=”btn btn-outline-warning”>Warning</button>

8 <button class=”btn btn-outline-info”>Info</button>

9 <button class=”btn btn-outline-light”>Light</button>

10 <button class=”btn btn-outline-dark”>Dark</button>

Note que podemos aplicar a classe “.btn” a qualquer tipo de elemento, desde botões (<button>), links (<a>), inputs de submissão (<input>) ou até mesmo tags do tipo <span>.

1 <button class=”btn btn-primary”>button</button>

2 <a class=”btn btn-primary”>a</a>

3 <input type=”submit” class=”btn btn-primary” value=”input”>

4 <span class=”btn btn-primary”>span</span>

Interface gráfica do usuário, Texto, Aplicativo, chat ou mensagem de texto

Descrição gerada automaticamente
Figura 47. Classe “.btn” aplicada a <button>, <a>, <input> ou <span>. Fonte: próprio autor.

Alterando o tamanho de um botão

Podemos ainda alterar o tamanho de um botão com as classes btn-lg e btn-sm. Veja:

1 <a class="btn btn-primary btn-sm">Botão pequeno</a>

2 <a class="btn btn-primary">Botão padrão</a>

3 <a class="btn btn-primary btn-lg">Botão grande</a>

Interface gráfica do usuário, Texto, Aplicativo, chat ou mensagem de texto

Descrição gerada automaticamente
Figura 48. Alterando tamanhos de botões. Fonte: próprio autor.

Estilo de botões: ativo, desabilitado, ocupando toda a linha e botão fechar

Agora vamos aplicar quatro outras classes para configurar o estilo de um botão:

  • active: deixa o botão em um estado ativo (ou seja, ele fica com uma cor mais escura);
  • disabled: desabilita o botão, ou seja, deixa o botão com uma cor desbotada (além disso, ao passar o mouse sobre ele, perceberá que as características de link do botão foram removidas);
  • btn-close: cria um botão fechar (com um “x”). O botão fechar é utilizado em muitos outros componentes, por isso vale a pena citá-lo aqui;
  • d-grid: faz com que o botão passe a ocupar todo o espaço de uma linha.

Interface gráfica do usuário, Texto, Aplicativo, chat ou mensagem de texto

Descrição gerada automaticamente
Figura 49. Botões ativo (classe “.active”), desabilitado (classe “.disabled”), fechar (classe “.btn-close”) e ocupando 100% da largura de uma linha (classe “.d-grid”). Fonte: próprio autor.

Código que renderiza esses botões:

1 <!-- Botão ativo -->

2 <a class=”btn btn-primary active”>Botão ativo</a>

3

4 <!-- Botão desabilitado -->

5 <a class=”btn btn-primary disabled”>Botão desabilitado</a>

6

7 <!-- Botão fechar -->

8 <button type=”button” class=”btn-close”

9 aria-label=”Close”></button>

10 <!-- Botão largo -->

11 <a class=”btn btn-primary d-grid mt-2″>Botão largo</a>
Menus suspensos (dropdown)

Menus suspensos podem ser criados pela classe “.dropdown”. Eles devem possuir um botão de ativação, que deve receber a classe “.dropdown-toggle” (responsável por inserir uma seta no fim do botão). A seguir, ainda dentro do contêiner “.dropdown”, um elemento do tipo <ul> deve receber a classe “.dropdown-menu” (esse elemento estará inicialmente oculto). Os elementos <li> desta lista devem receber a classe “.dropdown-item”. Esse menu só estará disponível se o usuário clicar no botão de ativação. Observe o código:

1 <!-- Menu suspenso -->

2 <div class=”dropdown”>

3

4 <!-- Botão de ativação -->

5 <button

6 class=”btn btn-primary dropdown-toggle”

7 id=”menu-suspenso-oculto”

8 data-bs-toggle=”dropdown”>

9 Menu suspenso

10 </button>

11

12 <!-- itens do menu -->

13 <ul class=”dropdown-menu”>

14 <li><a class=”dropdown-item” href=”#”>Item 1</a></li>

15 <li><a class=”dropdown-item” href=”#”>Item 2</a></li>

16

17 <!-- Linha separadora -->

18 <li><hr class=”dropdown-divider”></li>

19

20 <li><a class=”dropdown-item” href=”#”>Item 3</a></li>

21 </ul>

22 </div>

Veja como fica nosso menu suspenso ao ser clicado:

Interface gráfica do usuário, Texto, Aplicativo, chat ou mensagem de texto

Descrição gerada automaticamente
Figura 50. Menu suspenso (dropdown) quando clicado. Fonte: próprio autor.

Grupo de botões

Pode-se agrupar botões usando uma div contêiner que recebe a classe “.btn-group”. Observe o código:

1 <!-- grupo de botões -->

2 <div class=”btn-group” role=”group”>

3 <button type=”button” class=”btn btn-primary”>Esquerda </button>

4 <button type=”button” class=”btn btn-warning”> Meio </button>

5 <button type=”button” class=”btn btn-success”> Direita </button>

6 </div>

Ao abrir este código no navegador, você verá a seguinte interface:

Interface gráfica do usuário, Aplicativo

Descrição gerada automaticamente
Figura 51. Agrupando botões (classe “.btn-group”). As cores dos elementos foram alteradas apenas ilustrativamente. Fonte: próprio autor.

Note que podemos agrupar grupos de botões usando a classe “.btn-toolbar”, ou ainda, alterar a largura de botões usando as classes “.btn-group-lg” (grupo de botões mais largos) ou “.btn-group-sm” (grupo de botões pequenos).

Interface gráfica do usuário, Texto, Aplicativo

Descrição gerada automaticamente
Figura 52. Agrupando grupos de botões de tamanhos diferentes. Fonte: próprio autor.

Observe o código usado para gerar esta figura:

1 <!-- barra de ferramentas -->

2 <div class=”btn-toolbar”>

3

4 <!-- grupo de botões mais largos -->

5 <div class=”btn-group btn-group-lg me-2″ role=”group”>

6 <button type=”button” class=”btn btn-primary”>1</button>

7 <button type=”button” class=”btn btn-dark”>2</button>

8 <button type=”button” class=”btn btn-success”>3</button>

9 </div>

10

11 <!-- grupo de botões padrão -->

12 <div class=”btn-group me-2″ role=”group”>

13 <button type=”button” class=”btn btn-info”>4</button>

14 <button type=”button” class=”btn btn-secondary”>5</button>

15 <button type=”button” class=”btn btn-primary”>6</button>

16 </div>

17

18 <!-- grupo de botões menores -->

19 <div class=”btn-group btn-group-sm” role=”group”>

20 <button type=”button” class=”btn btn-dark”>7</button>

21 <button type=”button” class=”btn btn-success”>8</button>

22 <button type=”button” class=”btn btn-info”>9</button>

23 </div>

24 </div>

5. Cards

Cards são componentes que exibem uma formatação amigável para elementos listados que possuem uma imagem, título, texto complementar e um link de acesso, por exemplo. Observe um exemplo a seguir:

Interface gráfica do usuário, Aplicativo, Site

Descrição gerada automaticamente
Figura 53. Componente de card tradicional. Fonte: Pixabay (imagem do leão). Print de tela gerado pelo próprio autor.

Para que este código funcione, é necessário ter o arquivo “lion.jpg” (teste usando uma imagem qualquer). A imagem de exemplo foi obtida gratuitamente no Pixabay (https://pixabay.com/).

1 <!-- Cards Bootstrap -->

2 <div class=”card col-4″> <!-- tamanho: col-4 -->

3

4 <!-- Imagem no topo -->

5 <img src=”lion.jpg” class=”card-img-top” alt=”…”>

6

7 <!-- Corpo do card -->

8 <div class=”card-body”>

9

10 <!-- Título -->

11 <h5 class=”card-title”>Título do card</h5>

12

13 <!-- Texto complementar -->

14 <p class=”card-text”>

15 Aqui você pode incluir algumas informações

16 complementares.

17 </p>

18 <!-- Link de acesso -->

19 <a href=”#” class=”btn btn-primary”>Saiba mais</a>

20

21 </div> <!-- /Fim do Corpo do card -->

22

23 </div><!-- /Fim do card -->

Podemos ainda criar cards horizontais, como o seguinte:

Interface gráfica do usuário, Texto, Aplicativo, Email

Descrição gerada automaticamente
Figura 54. Card horizontal. Fonte: Pixabay (imagem do leão). Print de tela gerado pelo próprio autor.

Para isso, podemos utilizar colunas. Observe o código a seguir:

1 <!-- Card horizontal -->

2 <div class=”card mb-3″>

3 <div class=”row g-0″>

4

5 <!-- coluna da imagem -->

6 <div class=”col-4″>

7 <img src=”lion.jpg” class=”img-fluid rounded-start”>

8 </div>

9

10 <!-- coluna do texto -->

11 <div class=”col-8″>

12 <div class=”card-body”>

13 <h5 class=”card-title”>Título do card</h5>

14 <p class=”card-text”>

15 Um card horizontal tem uma maior largura.

16 Você pode usar este componente para descrever

17 melhor um determinado elemento de sua página.

18 </p>

19 <p class=”card-text”>

20 <small class=”text-muted”>

21 Atualizado há 3 minutos atrás

22 </small>

23 </p>

24 </div>

25 </div>

26 </div>

27 </div>

Você pode ainda alterar a cor dos cards usando as classes “bg-[cor]” descritas anteriormente.

6. Barras de progresso

Barras de progresso permitem acompanhar o carregamento de determinado item. Observe um exemplo de uma barra de progresso 50% preenchida:

Uma imagem contendo Linha do tempo

Descrição gerada automaticamente
Figura 55. Barra de progresso. Fonte: próprio autor.

Podemos criá-la declarando uma div contêiner que recebe a classe “.progress” com uma div interna recebendo a barra de progresso (classe “.progress-bar”). Observe como ficaria o código:

1 <!-- barra de progresso -->

2 <div class=”progress”>

3

4 <div

5 class=”progress-bar bg-primary”

6 role=”progressbar”

7 style=”width: 50%; /* largura da barra */”

8 aria-valuenow=”50″

9 aria-valuemin=”0″

10 aria-valuemax=”100″

11 >

12 50% <!-- texto exibido dentro da barra -->

13 </div>

14

15 </div>

Altere a classe bg-* na linha 5 para alterar a cor desejada da barra. Você pode ainda adicionar listras a sua barra de progresso usando a classe “.progress-bar-striped” ou adicionar animações usando a classe “.progress-bar-animated” (na linha 5).

Note que Bootstrap é responsável apenas pela exibição e estilo dos componentes. Para fazer com que a animação esteja funcional, é necessário integrar sua interface ao backend da aplicação, por exemplo, por meio de códigos Ajax.

Além das barras de progresso, podemos adicionar ícones de carregamento, como os spinners (círculos giratórios). Veja um exemplo:

1 <div class=”spinner-border text-primary” role=”status”>

2 <span class=”visually-hidden”>Carregando…</span>

3 </div>

Note que alteramos a cor de um spinner com a classe “text-primary”.

Interface gráfica do usuário, Texto, Aplicativo, chat ou mensagem de texto

Descrição gerada automaticamente
Figura 56. Ícone de carregamento (spinner). Fonte: próprio autor.

7. Carrossel de imagens

O carrossel de imagens do Bootstrap combina JavaScript com uma interface amigável para exibir um slider de imagens. Para este exemplo, vamos coletar três imagens aleatórias da plataforma Pixabay (https://pixabay.com/pt/).

Um carrossel de imagens poderá ser composto por:

  1. Um conjunto de imagens que se alterna na tela de tempos em tempos (no exemplo a seguir, vamos usar três);
  2. Um par de botões de navegação que permitem trocar a imagem atual na tela (anterior e posterior);
  3. Legenda: cada imagem pode ter um título e uma pequena descrição exibida;
  4. Marcadores da posição da imagem: mostra qual a imagem atual, permitindo que o usuário acesse outras imagens clicando diretamente sobre este marcador.

Interface gráfica do usuário, Site

Descrição gerada automaticamente
Figura 57. Carrossel de imagens. Fonte: adaptado de Pixabay.

Agora, observe o código fonte e veja como podemos implementar um carrossel de imagens com Bootstrap (detalhes foram incluídos nos trechos comentados). É necessário que o script do Bootstrap esteja carregado no rodapé da página.

1 <!-- Carrossel de imagens – um slider -->

2 <div id=”carrossel-de-imagens” class=”carousel slide”

3 data-bs-ride=”carousel”>

4

5 <!-- traços marcadores -->

6 <div class=”carousel-indicators”>

7

8 <!-- primeiro marcador (ativo por padrão) -->

9 <button type=”button” data-bs-target=”#carrossel-

10 de-imagens” data-bs-slide-to=”0″ class=”active” aria-

11 current=”true” aria-label=”Slide 1″></button>

12

13 <!-- segundo marcador: link imagem 2 -->

14 <button type=”button” data-bs-target=”#carrossel-de-imagens”

15 data-bs-slide-to=”1″ aria-label=”Slide 2″></button>

16

17 <!-- terceiro marcador: link imagem 3 -->

18 <button type=”button” data-bs-target=”#carrossel-de-imagens”

19 data-bs-slide-to=”2″ aria-label=”Slide 3″></button>

20

21 </div>

22

23 <!-- Bloco de imagens -->

24 <div class=”carousel-inner”>

25

26 <!-- imagem 1 + legenda -->

27 <div class=”carousel-item active”>

28

29 <!-- imagem 1 -->

30 <img src=”lion.jpg” class=”d-block w-100″ alt=”leão”>

31

32 <!-- legenda -->

33 <div class=”carousel-caption d-none d-md-block”>

34 <h5>Leão</h5>

35 <p>Exemplo de imagem.</p>

36 </div>

37 </div>

38

39 <!-- imagem 2 + legenda -->

40 <div class=”carousel-item”>

41

42 <!-- imagem 2 -->

43 <img src=”city.jpg” class=”d-block w-100″ alt=”cidade”>

44

45 <!-- legenda -->

46 <div class=”carousel-caption d-none d-md-block”>

47 <h5>Cidade</h5>

48 <p>Exemplo de imagem.</p>

49 </div>

50 </div>

51

52 <!-- imagem 3 + legenda -->

53 <div class=”carousel-item”>

54

55 <!-- imagem 3 -->

56 <img src=”mountain.jpg” class=”d-block w-100″ alt=”montanha”>

57

58 <!-- legenda -->

59 <div class=”carousel-caption d-none d-md-block”>

60 <h5>Montanha</h5>

61 <p>Exemplo de imagem.</p>

62 </div>

63 </div>

64 </div><!-- /fim bloco de imagens -->

65

66

67 <!-- Botões de navegação -->

68 <button class=”carousel-control-prev” type=”button”

69 data-bs-target=”#carrossel-de-imagens” data-bs-slide=”prev”>

70 <span class=”carousel-control-prev-icon” aria-hidden=”true”></span>

71 <span class=”visually-hidden”>Anterior</span>

72 </button>

73

74 <button class=”carousel-control-next” type=”button”

75 data-bs-target=”#carrossel-de-imagens” data-bs-slide=”next”>

76 <span class=”carousel-control-next-icon” aria-hidden=”true”></span>

77 <span class=”visually-hidden”>Próximo</span>

78 </button>

79 </div>

8. Modal – Caixas de diálogos

Modals (caixas de diálogos) são um dos componentes mais elegantes do Bootstrap. Modals usam o conceito de lightboxes, isto é, enquanto uma caixa de mensagens aparece no centro da tela, uma tela preta semitransparente cobre o fundo, dando destaque para a mensagem principal. Observe um exemplo:

Interface gráfica do usuário, Texto, Aplicativo, Email

Descrição gerada automaticamente
Figura 58. Exemplo de modal. Observe que a caixa de diálogo do modal flutua sobre a página principal. Um plano de fundo preto semitransparente cobre toda a página, aumentando o destaque da mensagem exibida. Fonte: próprio autor.

Um modal é composto por duas partes principais:

  1. Botão de ativação:
1 <!-- Botão de ativação -->

2 <button

3 class=”btn btn-primary”

4 data-bs-toggle=”modal”

5 data-bs-target=”#meu-primeiro-modal”

6 >

7 Botão de ativação

8 </button>

2. Div oculta do modal:

1 <!-- Modal – inclui fundo semitransparente -->

2 <div class=”modal fade” id=”meu-primeiro-modal” tabindex=”-1″>

3

4 <!-- caixa de diálogo -->

5 <div class=”modal-dialog”>

6

7 <!-- conteúdo do modal -->

8 <div class=”modal-content”>

9

10 <!-- cabeçalho do modal -->

11 <div class=”modal-header”>

12 <h5 class=”modal-title” id=”titulo-modal”>Título do modal</h5>

13 <button type=”button” class=”btn-close” data-bs-dismiss=”modal”

14 aria-label=”Close”></button> <!-- botão fechar: x -->

15 </div>

16

17 <!-- corpo do modal -->

18 <div class=”modal-body”>

19 Olá, eu sou um modal!

20 </div>

21

22 <!-- rodapé do modal -->

23 <div class=”modal-footer”>

24 <button type=”button” class=”btn btn-secondary”

25 data-bs-dismiss=”modal”>Fechar</button><!-- botão fechar -->

26 <button type=”button” class=”btn btn-primary”>Salvar</button>

27 </div>

28

29 </div> <!-- /modal-content -->

30 </div> <!-- /modal-dialog -->

31 </div> <!-- /modal -->

Você pode ainda alterar a largura de um modal usando as classes descritas na tabela a seguir junto com a div da caixa de diálogo e com a classe “.modal-dialog” (linha 5 do código apresentado anteriormente).

TamanhoClasseLargura máxima modal

Pequeno

.modal-sm

300px

Predefinição

Nenhum

500px

Grande

.modal-lg

800px

Extra grande

.modal-xl

1140px

Tabela 7. Tamanhos de modais. Classes devem ser aplicadas junto com a classe “.modal-dialog”.

Fonte: Traduzido de https://getbootstrap.com/docs/5.1/components/modal/.

9. Popovers e Tooltips

Popovers e tooltips são pequenos balões que aparecem ao lado de um elemento quando clicado (popover) ou quando sobreposto pelo mouse (tooltip).

Um popover é um componente que é ativado pelo clique em um determinado elemento, como um botão. Observe um exemplo de popover:

Interface gráfica do usuário, Texto, Aplicativo, chat ou mensagem de texto

Descrição gerada automaticamente
Figura 59. Popover só são ativos quando clicados. Fonte: próprio autor.

Neste caso, declaramos apenas um elemento HTML: um botão de ativação. Os dados exibidos no popover devem estar nos atributos “title” e “data-bs-content”. No atributo “data-bs-placement” podemos definir onde queremos que a caixa do popover seja posicionada: à esquerda (left), abaixo (bottom), à direita (right) ou acima (top). É claro que se o navegador definir que não há espaço disponível na posição informada, ele automaticamente posicionará a caixa onde for possível. Observe o código:

1 <button

2 class=”btn btn-lg btn-info”

3 data-bs-toggle=”popover”

4 title=”Saiba mais”

5 data-bs-placement=”bottom”

6 data-bs-content=”Um popover é um botão que quando clicado, exibe uma caixa de informações complementares ao lado. Podemos alterar a posição que a caixa é exibida mudando o atributo ‘data-bs-placement’, que pode receber ‘top’, ‘left’, ‘bottom’ ou ‘right'”

7 >Saiba mais</button>

Note que ao incluir o elemento HTML do popover, o botão ainda não estará funcional. Isso se deve ao fato de popovers não serem ativados automaticamente uma vez que podem consumir uma grande quantidade de recursos do navegador. Precisamos ativá-los usando JavaScript. O código abaixo, ativa todos os popovers em uma página (note que ele deve ser declarado após a declaração do Bootstrap JavaScript, em geral, antes do fim da página).

1 <!– Bootstrap JavaScript –>

2 <script src=”https://cdn.jsdelivr.net/npm/bootstrap@5.1.3/dist/js/bootstrap.bundle.min.js” integrity=”sha384-ka7Sk0Gln4gmtz2MlQnikT1wXgYsOg+OMhuP+IlRH9sENBO0LRn5q+8nbTov4+1p” crossorigin=”anonymous”></script>

3

4

5 <!-- ativando os popovers -->

6 <script>

7 /* seleciona todos os popovers */

8 let popovers = document.querySelectorAll(‘[data-bs-toggle=”popover”]’)

9

10 /* para cada popover *//

11 for(let i of popovers){

12 new bootstrap.Popover(i); // ative-o

13 }

14 </script>

Os tooltips funcionam de maneira parecida. A diferença é que são ativos quando o mouse se posiciona sobre eles. Além disso, eles exibem apenas o valor presente no atributo “title” do botão de ativação. Observe:

Interface gráfica do usuário, Aplicativo, Teams

Descrição gerada automaticamente
Figura 60. Exemplo de tooltip. Quando o mouse passa por cima do botão, uma caixa de informações complementares é exibida logo abaixo. Fonte: próprio autor.

Agora veja o código do botão de ativação:

1 <button

2 class=”btn btn-danger”

3 data-bs-toggle=”tooltip”

4 data-bs-placement=”bottom”

5 title=”Tooltips são componentes mais simples.

6 Basta passar o mouse sobre eles e o texto do

7 atributo ‘title’ é exibido.”

8 >

9 Saiba mais

10 </button>

Note que os tooltips também precisam ser ativados via JavaScript. Então, no fim da página inclua o código:

1 <!-- ativando os tooltips -->

2 <script>

3 /* seleciona todos os tooltips */

4 let tooltips = document.querySelectorAll(

5 ‘[data-bs-toggle=”tooltip”]’

6 )

7

8 /* para cada tooltip */

9 for(let i of tooltips){

10 new bootstrap.Tooltip(i); // ative-o

11 }

12 </script>

10. Menus: barras de navegação e abas

Os componentes de menus são essenciais para construção de páginas HTML completas com Bootstrap. De fato, esta seção engloba os vários tipos de menus, como barras de navegação (navbar), barras laterais em listas, menus laterais ocultos (offcanvas), além de identificadores de posição durante a rolagem (scrollspy), identificadores de caminhos (breadcumbs) e barras de paginação.

Começaremos com um dos mais importantes: barras de navegação (navbar).

Barras de navegação

Barras de navegação (navbar), também conhecida como menu principal, é a barra superior onde geralmente inserimos o logo, principais links de acesso e barra de busca. Esse menu deve ser responsivo, isto é, ao ser aberto em um dispositivo com tela pequena, ele deve se ajustar automaticamente ao conteúdo (em geral, exibindo um menu de sanduíche).

O pseudocódigo a seguir ilustra como podemos organizar as tags em um menu:

 1 <!-- PSEUDOCÓDIGO MENU -->

 2 <NAVBAR classe=”navbar navbar-[cor] bg-[cor] navbar-expand-[tamanho]”>

 3   <CONTAINER>

 4    <LOGO class=”navbar-brand”>

 5    <MENU-SANDUÍCHE>

 6    <DIV-COLAPSÁVEL classe=”collapse navbar-collapse”>

 7     <LISTA-ESQUERDA classe=”navbar-nav me-auto”>

 8      <ITEM-LISTA classe=”nav-item”>

 9       <LINK classe=”nav-link”>

10      </ITEM-LISTA>

11     </LISTA-ESQUERDA>

12     <LISTA-DIREITA classe=”d-flex”>

13      <ITEM>

14     </LINKS-DIREITA>

15    </DIV-COLAPSÁVEL>

16   </CONTAINER>

17 </NAVBAR>

Note que podemos alterar a cor do menu mudando as classes expressas na linha 2. Note ainda que a classe navbar-[cor] prepara apenas as cores de links e outros elementos. Para alterar a cor do fundo, deve-se alterar a classe bg-[cor]. A classe navbar-expand-[tamanho] permite definir os níveis de responsividade (por exemplo, define em qual tamanho de tela será carregado o menu-sanduíche, assim, ocultando parte do menu).

Veja a seguir um exemplo de menu de navegação:

Interface gráfica do usuário

Descrição gerada automaticamente
Figura 61. Exemplo de menu. Abaixo são demonstradas algumas partes do código. Fonte: próprio autor.

Agora, observe o código completo que gera esse menu:

1 <!-- Barra de navegação -->

2 <nav class=”navbar navbar-dark bg-dark navbar-expand-lg”>

3

4 <!-- container -->

5 <div class=”container”>

6

7 <!-- logo -->

8 <a class=”navbar-brand me-5″ href=”#”>Meu site</a>

9

10 <!-- menu sanduíche (para smartphone) -->

11 <button class=”navbar-toggler” data-bs-toggle=”collapse”

12 data-bs-target=”#menu-links”>

13 <span class=”navbar-toggler-icon”></span>

14 </button>

15

16 <!-- menu de links -->

17 <div class=”collapse navbar-collapse” id=”menu-links”>

18

19 <!-- logo e link alinhados à esquerda -->

20 <ul class=”navbar-nav me-auto”>

21

22 <!-- Link home -->

23 <li class=”nav-item”>

24 <a href=”#” class=”nav-link”>Home</a>

25 </li>

26

27 <!-- Link desabilitado -->

28 <li class=”nav-item”>

29 <a href=”#” class=”nav-link disabled”>Contato</a>

30 </li>

31

32 <!-- Menu suspenso -->

33 <li class=”nav-item dropdown”>

34

35 <!-- botão do menu suspenso -->

36 <a class=”nav-link dropdown-toggle” href=”#”

37 role=”button” data-bs-toggle=”dropdown”>

38 Ajuda

39 </a>

40

41 <!-- links ocultos -->

42 <ul class=”dropdown-menu”>

43 <li>

44 <a class=”dropdown-item” href=”#”>

45 Sobre o sistema</a>

46 </li>

47 <li>

48 <a class=”dropdown-item” href=”#”>

49 Especialistas</a>

50 </li>

51 </ul>

52

53 </li> <!-- /nav-item dropdown -->

54

55 </ul> <!-- /navbar-nav -->

56

57 <!-- alinhado à direita -->

58 <div class=”d-flex”>

59 <form class=”input-group”>

60 <input type=”text” class=”form-control”

61 placeholder=”Buscar”>

62 <button class=”btn btn-success”>

63 <i class=”bi bi-search”></i>

64 </button>

65 </form>

66 </div>

67 </div>

68

69 </div>

70 </nav>

Observe a seguir, como o mesmo código carregaria uma diferente interface em um smartphone:

Interface gráfica do usuário, Aplicativo

Descrição gerada automaticamente
Figura 62. Site carregado em um smartphone (dispositivo com tela pequena). Note que o botão do menu sanduíche (lado direito) foi carregado. Neste caso, o menu só será exibido se o usuário clicar nesse botão.

Fonte: próprio autor.

List group

Os grupos de lista (list group) podem ser utilizados para criar menus laterais. Observe o código a seguir:

1 <!-- menu de grupo de listas -->

2 <div class=”list-group”>

3

4 <!-- Link ativo -->

5 <a href=”#” class=”list-group-item list-group-item-action active”>

6 Link atual

7 </a>

8

9 <!-- Link -->

10 <a href=”#” class=”list-group-item list-group-item-action”>

11 Segundo link

12 </a>

13

14 <!-- Link desabilitado -->

15 <a class=”list-group-item list-group-item-action disabled”>

16 Terceiro link

17 </a>

18

19 <!-- Link -->

20 <a href=”#” class=”list-group-item list-group-item-action”>

21 Quarto link

22 </a>

23

24 </div>

Esse código produz a seguinte página:

Interface gráfica do usuário, Aplicativo

Descrição gerada automaticamente com confiança média
Figura 63. Menu de grupo de listas. Fonte: próprio autor.

Offcanvas: menu lateral

Menus laterais (offcanvas) são menus que aparecem no canto esquerdo ao serem ativados, em geral, por meio do clique em um botão de ativação.

Interface gráfica do usuário, Texto, Aplicativo, chat ou mensagem de texto

Descrição gerada automaticamente
(A) Botão de ativação

Interface gráfica do usuário, Texto, Aplicativo

Descrição gerada automaticamente
(B) Menu lateral ativado

Fonte: próprio autor.

Figura 64. Menu lateral (offcanvas).

Podemos implementá-lo da seguinte forma:

1 <!-- botão de ativação -->

2 <a class=”btn btn-primary” data-bs-toggle=”offcanvas”

3 href=”#menu-lateral”>

4 Abrir menu lateral

5 </a>

6

7

8 <!-- menu lateral -->

9 <div class=”offcanvas offcanvas-start” tabindex=”-1″ id=”menu-lateral”>

10

11 <!-- cabeçalho -->

12 <div class=”offcanvas-header”>

13 <h5 class=”offcanvas-title” id=”offcanvasLabel”>Menu lateral</h5>

14 <button type=”button” class=”btn-close text-reset”

15 data-bs-dismiss=”offcanvas” aria-label=”Close”></button>

16 </div>

17

18 <!-- corpo -->

19 <div class=”offcanvas-body”>

20 Este é o conteúdo do menu lateral

21 </div>

22

23 </div>
Menu de rolagem (scrollspy)

Scrollspy é um tipo de menu cujos itens são automaticamente marcados à medida que o usuário realiza a rolagem por certos títulos da página. Por exemplo:

Interface gráfica do usuário, Texto, Aplicativo

Descrição gerada automaticamente
Figura 65. Scrollspy. Fonte: próprio autor.

Aqui, o item 2 foi selecionado quando o usuário fez a rolagem da página. Ao continuar a descer, e ir até o item 3.1, por exemplo, a seguinte seleção é feita:

Interface gráfica do usuário, Texto, Aplicativo, Word

Descrição gerada automaticamente
Figura 66. Scrollspy – rolagem por itens dentro da mesma página. Fonte: próprio autor.

Para implementar isso, observe o código a seguir:

1 <!-- campo de rolagem -->

2 <div class=”row”>

3

4 <!-- coluna à esquerda -->

5 <div class=”col-4″>

6

7 <nav id=”menu-rolagem” class=”navbar navbar-light

8 bg-light flex-column align-items-stretch p-3″>

9

10 <!-- Título -->

11 <a class=”navbar-brand” href=”#”>Menu de rolagem</a>

12

13 <!-- Itens do menu -->

14 <nav class=”nav nav-pills flex-column”>

15 <a class=”nav-link active” href=”#item-1″>Item 1</a>

16 <nav class=”nav nav-pills flex-column”>

17 <a class=”nav-link ms-3 my-1″ href=”#item-1-1″>Item 1-1</a>

18 </nav>

19 <a class=”nav-link” href=”#item-2″>Item 2</a>

20 <a class=”nav-link” href=”#item-3″>Item 3</a>

21 <nav class=”nav nav-pills flex-column”>

22 <a class=”nav-link ms-3 my-1″ href=”#item-3-1″>Item 3-1</a>

23 <a class=”nav-link ms-3 my-1″ href=”#item-3-2″>Item 3-2</a>

24 </nav>

25 </nav>

26

27 </nav>

28 </div>

29

30 <!-- coluna à direita -->

31 <div class=”col-8″>

32 <div data-bs-spy=”scroll” data-bs-target=”#menu-rolagem”

33 data-bs-offset=”0″ tabindex=”0″

34 style=”position:relative; height:350px; overflow:auto;”>

35

36 <h4 id=”item-1″>Item 1</h4>

37 <p>…</p> <!-- Preencher com texto -->

38 <h5 id=”item-1-1″>Item 1-1</h5>

39 <p>…</p>

40

41 <h4 id=”item-2″>Item 2</h4>

42 <p>…</p>

43

44 <h4 id=”item-3″>Item 3</h4>

45 <p>…</p>

46 <h5 id=”item-3-1″>Item 3-1</h5>

47 <p>…</p>

48 <h5 id=”item-3-2″>Item 3-2</h5>

49 <p>…</p>

50

51 </div>

52 </div>

53 </div>

Note que das linhas 38 a 49 há vários parágrafos apenas com “…”. Para testar essa funcionalidade, substitua isso por um texto maior (como por exemplo, o lorem ipsum, disponível em https://www.lipsum.com/).

Breadcrumb

Menus de localização (breadcrumb) indicam a localização da página atual com base em uma hierarquia de navegação com barras separadoras adicionadas automaticamente via CSS.

Interface gráfica do usuário, Texto, Aplicativo, chat ou mensagem de texto, Email

Descrição gerada automaticamente
Figura 67. Breadcumb. A página atual se encontra em Home > Biblioteca > Livros. Fonte: próprio autor.

Podemos implementar isso da seguinte forma:

1 <!-- Menus de localização -->

2 <nav aria-label=”breadcrumb”>

3 <ol class=”breadcrumb”>

4 <li class=”breadcrumb-item”><a href=”#”>Home</a></li>

5 <li class=”breadcrumb-item”><a href=”#”>Biblioteca</a></li>

6 <li class=”breadcrumb-item active”>Livros</li>

7 </ol>

8 </nav>
Paginação

Menus de paginação podem ser criados usando a classe “.pagination”. Cada item da lista deve receber a classe “.page-item” e os links a classe “.page-link”. Observe o código a seguir:

1 <!-- Paginação -->

2 <nav>

3 <ul class=”pagination”>

4 <li class=”page-item”>

5 <a class=”page-link” href=”#”>Anterior</a>

6 </li>

7

8 <li class=”page-item”><a class=”page-link” href=”#”>1</a></li>

9 <li class=”page-item”><a class=”page-link” href=”#”>2</a></li>

10 <li class=”page-item”><a class=”page-link” href=”#”>3</a></li>

11

12 <li class=”page-item”>

13 <a class=”page-link” href=”#”>Próximo</a>

14 </li>

15 </ul>

16 </nav>

Esse código produz a seguinte interface:

Interface gráfica do usuário, Texto, Aplicativo, chat ou mensagem de texto

Descrição gerada automaticamente
Figura 68. Paginação. Fonte: próprio autor.

Este post faz parte do livro “Bootstrap 5 – Guia Rápido para Iniciantes“. Para ler mais, utilize o menu logo abaixo:

Capítulo 1Introdução

Capítulo 2Layout

Capítulo 3Conteúdo

Capítulo 4Componentes

Capítulo 5 – Bootstrap Icons [próximo capítulo]

Material suplementar:

Ler no Google Books | DOI: 10.51780/978-65-992753-4-0

Por Diego Mariano

Doutor em Bioinformática pela Universidade Federal de Minas Gerais com atuação na área de ciência de dados e aprendizado de máquina aplicados ao aperfeiçoamento de enzimas usadas na produção de biocombustíveis. Mestre em Bioinformática, também pela UFMG, atuando na área de desenvolvimento de sistemas Web para montagem de genomas. Atualmente realiza estágio pós-doutoral no Departamento de Ciência da Computação da UFMG com foco em desenvolvimento de sistemas Web para Bioinformática, análise exploratória e visualização de dados. Tem conhecimentos nas linguagens: PHP, JavaScript, Python, R, Perl, HTML, CSS e SQL.

4 respostas em “Componentes Bootstrap”

error

Compartilhe este post!

Facebook
YouTube
LinkedIn
Instagram