Ir para o conteúdo principal Pular para a navegação de documentos
Check
in English

Popovers

Documentação e exemplos para adicionar popovers do Bootstrap, como os encontrados no iOS, a qualquer elemento do seu site.

Visão geral

Coisas para saber ao usar o plugin popover:

  • Popovers contam com a biblioteca de terceiros Popper para posicionamento. Você deve incluir popper.min.js antes bootstrap.jsde , ou usar um bootstrap.bundle.min.jsque contenha Popper.
  • Popovers requerem o plugin popover como uma dependência.
  • Os popovers são opcionais por motivos de desempenho, portanto, você mesmo deve inicializá-los .
  • O comprimento zero titlee contentos valores nunca mostrarão um popover.
  • Especifique container: 'body'para evitar problemas de renderização em componentes mais complexos (como nossos grupos de entrada, grupos de botões etc.).
  • Acionar popovers em elementos ocultos não funcionará.
  • Popovers para .disabledou disabledelementos devem ser acionados em um elemento wrapper.
  • Quando acionados a partir de âncoras que envolvem várias linhas, os popovers serão centralizados entre a largura total das âncoras. Use .text-nowrapem seus <a>s para evitar esse comportamento.
  • Os popovers devem ser ocultados antes que seus elementos correspondentes sejam removidos do DOM.
  • Popovers podem ser acionados graças a um elemento dentro de um shadow DOM.
Por padrão, esse componente usa o desinfetante de conteúdo integrado, que remove todos os elementos HTML que não são explicitamente permitidos. Consulte a seção de desinfetante em nossa documentação JavaScript para obter mais detalhes.
O efeito de animação deste componente depende da prefers-reduced-motionconsulta de mídia. Consulte a seção de movimento reduzido de nossa documentação de acessibilidade .

Continue lendo para ver como os popovers funcionam com alguns exemplos.

Exemplos

Ativar popovers

Como mencionado acima, você deve inicializar os popovers antes que eles possam ser usados. Uma maneira de inicializar todos os popovers em uma página seria selecioná-los pelo data-bs-toggleatributo, assim:

const popoverTriggerList = document.querySelectorAll('[data-bs-toggle="popover"]')
const popoverList = [...popoverTriggerList].map(popoverTriggerEl => new bootstrap.Popover(popoverTriggerEl))

Demonstração ao vivo

Usamos JavaScript semelhante ao snippet acima para renderizar o seguinte popover ao vivo. Os títulos são definidos por meio de data-bs-titlee o conteúdo do corpo é definido por meio de data-bs-content.

Sinta-se à vontade para usar titleou data-bs-titleem seu HTML. Quando titleé usado, o Popper irá substituí-lo automaticamente data-bs-titlequando o elemento for renderizado.
html
<button type="button" class="btn btn-lg btn-danger" data-bs-toggle="popover" data-bs-title="Popover title" data-bs-content="And here's some amazing content. It's very engaging. Right?">Click to toggle popover</button>

Quatro direções

Quatro opções estão disponíveis: superior, direita, inferior e esquerda. As direções são espelhadas ao usar o Bootstrap em RTL. Defina data-bs-placementpara mudar a direção.

html
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="top" data-bs-content="Top popover">
  Popover on top
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="right" data-bs-content="Right popover">
  Popover on right
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="bottom" data-bs-content="Bottom popover">
  Popover on bottom
</button>
<button type="button" class="btn btn-secondary" data-bs-container="body" data-bs-toggle="popover" data-bs-placement="left" data-bs-content="Left popover">
  Popover on left
</button>

Personalizadocontainer

Quando você tiver alguns estilos em um elemento pai que interferem com um popover, você desejará especificar um personalizado containerpara que o HTML do popover apareça dentro desse elemento. Isso é comum em tabelas responsivas, grupos de entrada e similares.

const popover = new bootstrap.Popover('.example-popover', {
  container: 'body'
})

Outra situação em que você deseja definir um personalizado explícito containersão os popovers dentro de uma caixa de diálogo modal , para garantir que o próprio popover seja anexado ao modal. Isso é particularmente importante para popovers que contêm elementos interativos – os diálogos modais interceptarão o foco, portanto, a menos que o popover seja um elemento filho do modal, os usuários não poderão focar ou ativar esses elementos interativos.

const popover = new bootstrap.Popover('.example-popover', {
  container: '.modal-body'
})

Popovers personalizados

Adicionado na v5.2.0

Você pode personalizar a aparência dos popovers usando variáveis ​​CSS . Definimos uma classe personalizada com data-bs-custom-class="custom-popover"o escopo de nossa aparência personalizada e a usamos para substituir algumas das variáveis ​​CSS locais.

.custom-popover {
  --bs-popover-max-width: 200px;
  --bs-popover-border-color: var(--bs-primary);
  --bs-popover-header-bg: var(--bs-primary);
  --bs-popover-header-color: var(--bs-white);
  --bs-popover-body-padding-x: 1rem;
  --bs-popover-body-padding-y: .5rem;
}
html
<button type="button" class="btn btn-secondary"
        data-bs-toggle="popover" data-bs-placement="right"
        data-bs-custom-class="custom-popover"
        data-bs-title="Custom popover"
        data-bs-content="This popover is themed via CSS variables.">
  Custom popover
</button>

Dispensar no próximo clique

Use o focusgatilho para dispensar popovers no próximo clique do usuário em um elemento diferente do elemento de alternância.

Marcação específica necessária para dispensar no próximo clique

Para um comportamento adequado entre navegadores e plataformas, você deve usar a <a>tag, não a <button>tag, e também deve incluir um tabindexatributo.

html
<a tabindex="0" class="btn btn-lg btn-danger" role="button" data-bs-toggle="popover" data-bs-trigger="focus" data-bs-title="Dismissible popover" data-bs-content="And here's some amazing content. It's very engaging. Right?">Dismissible popover</a>
const popover = new bootstrap.Popover('.popover-dismiss', {
  trigger: 'focus'
})

Elementos desativados

Elementos com o disabledatributo não são interativos, o que significa que os usuários não podem passar o mouse ou clicar neles para acionar um popover (ou dica de ferramenta). Como solução alternativa, você desejará acionar o popover de um wrapper <div>ou <span>, idealmente focado no teclado usando tabindex="0".

Para gatilhos de popover desativados, você também pode preferir data-bs-trigger="hover focus"que o popover apareça como feedback visual imediato para seus usuários, pois eles podem não esperar clicar em um elemento desativado.

html
<span class="d-inline-block" tabindex="0" data-bs-toggle="popover" data-bs-trigger="hover focus" data-bs-content="Disabled popover">
  <button class="btn btn-primary" type="button" disabled>Disabled button</button>
</span>

CSS

Variáveis

Adicionado na v5.2.0

Como parte da abordagem de variáveis ​​CSS em evolução do Bootstrap, os popovers agora usam variáveis ​​CSS locais .popoverpara personalização aprimorada em tempo real. Os valores das variáveis ​​CSS são definidos por meio do Sass, portanto, a personalização do Sass também é suportada.

  --#{$prefix}popover-zindex: #{$zindex-popover};
  --#{$prefix}popover-max-width: #{$popover-max-width};
  @include rfs($popover-font-size, --#{$prefix}popover-font-size);
  --#{$prefix}popover-bg: #{$popover-bg};
  --#{$prefix}popover-border-width: #{$popover-border-width};
  --#{$prefix}popover-border-color: #{$popover-border-color};
  --#{$prefix}popover-border-radius: #{$popover-border-radius};
  --#{$prefix}popover-inner-border-radius: #{$popover-inner-border-radius};
  --#{$prefix}popover-box-shadow: #{$popover-box-shadow};
  --#{$prefix}popover-header-padding-x: #{$popover-header-padding-x};
  --#{$prefix}popover-header-padding-y: #{$popover-header-padding-y};
  @include rfs($popover-header-font-size, --#{$prefix}popover-header-font-size);
  --#{$prefix}popover-header-color: #{$popover-header-color};
  --#{$prefix}popover-header-bg: #{$popover-header-bg};
  --#{$prefix}popover-body-padding-x: #{$popover-body-padding-x};
  --#{$prefix}popover-body-padding-y: #{$popover-body-padding-y};
  --#{$prefix}popover-body-color: #{$popover-body-color};
  --#{$prefix}popover-arrow-width: #{$popover-arrow-width};
  --#{$prefix}popover-arrow-height: #{$popover-arrow-height};
  --#{$prefix}popover-arrow-border: var(--#{$prefix}popover-border-color);
  

Variáveis ​​atrevidas

$popover-font-size:                 $font-size-sm;
$popover-bg:                        $white;
$popover-max-width:                 276px;
$popover-border-width:              $border-width;
$popover-border-color:              var(--#{$prefix}border-color-translucent);
$popover-border-radius:             $border-radius-lg;
$popover-inner-border-radius:       subtract($popover-border-radius, $popover-border-width);
$popover-box-shadow:                $box-shadow;

$popover-header-font-size:          $font-size-base;
$popover-header-bg:                 shade-color($popover-bg, 6%);
$popover-header-color:              $headings-color;
$popover-header-padding-y:          .5rem;
$popover-header-padding-x:          $spacer;

$popover-body-color:                $body-color;
$popover-body-padding-y:            $spacer;
$popover-body-padding-x:            $spacer;

$popover-arrow-width:               1rem;
$popover-arrow-height:              .5rem;

Uso

Habilite popovers via JavaScript:

const exampleEl = document.getElementById('example')
const popover = new bootstrap.Popover(exampleEl, options)

Fazendo popovers funcionarem para usuários de teclado e tecnologia assistiva

Para permitir que usuários de teclado ativem seus popovers, você deve adicioná-los apenas a elementos HTML que são tradicionalmente focados no teclado e interativos (como links ou controles de formulário). Embora elementos HTML arbitrários (como <span>s) possam ser focalizados adicionando o tabindex="0"atributo, isso adicionará paradas de tabulação potencialmente irritantes e confusas em elementos não interativos para usuários de teclado, e a maioria das tecnologias assistivas atualmente não anuncia o conteúdo do popover nessa situação . Além disso, não confie apenas no hovergatilho para seus popovers, pois isso os tornará impossíveis de acionar para usuários de teclado.

Embora você possa inserir HTML rico e estruturado em popovers com a htmlopção, recomendamos que você evite adicionar uma quantidade excessiva de conteúdo. A maneira como os popovers funcionam atualmente é que, uma vez exibidos, seu conteúdo é vinculado ao elemento de gatilho com o aria-describedbyatributo. Como resultado, todo o conteúdo do popover será anunciado aos usuários de tecnologia assistiva como um fluxo longo e ininterrupto.

Além disso, embora seja possível incluir também controles interativos (como elementos de formulário ou links) em seu popover (adicionando esses elementos aos allowListatributos e tags permitidos), esteja ciente de que atualmente o popover não gerencia a ordem de foco do teclado. Quando um usuário de teclado abre um popover, o foco permanece no elemento acionador e, como o popover geralmente não segue imediatamente o acionador na estrutura do documento, não há garantia de que avançar/pressionarTABmoverá um usuário de teclado para o próprio popover. Em suma, simplesmente adicionar controles interativos a um popover provavelmente tornará esses controles inacessíveis/inutilizáveis ​​para usuários de teclado e usuários de tecnologias assistivas, ou pelo menos criar uma ordem de foco geral ilógica. Nesses casos, considere usar uma caixa de diálogo modal.

Opções

Como as opções podem ser passadas por meio de atributos de dados ou JavaScript, você pode anexar um nome de opção a data-bs-, como em data-bs-animation="{value}". Certifique-se de alterar o tipo de caso do nome da opção de “ camelCase ” para “ kebab-case ” ao passar as opções por meio de atributos de dados. Por exemplo, use data-bs-custom-class="beautifier"em vez de data-bs-customClass="beautifier".

A partir do Bootstrap 5.2.0, todos os componentes oferecem suporte a um atributo experimental de dados reservados data-bs-configque pode abrigar a configuração simples do componente como uma string JSON. Quando um elemento tem atributos data-bs-config='{"delay":0, "title":123}'e data-bs-title="456", o valor final titleserá 456e os atributos de dados separados substituirão os valores fornecidos em data-bs-config. Além disso, os atributos de dados existentes podem hospedar valores JSON como data-bs-delay='{"show":0,"hide":150}'.

Observe que, por motivos de segurança, as sanitizeopções sanitizeFn, e allowListnão podem ser fornecidas usando atributos de dados.
Nome Modelo Predefinição Descrição
allowList objeto Valor padrão Objeto que contém atributos e tags permitidos.
animation boleano true Aplique uma transição de fade CSS ao popover.
boundary corda, elemento 'clippingParents' Limite de restrição de estouro do popover (aplica-se apenas ao modificador preventOverflow do Popper). Por padrão, é 'clippingParents'e pode aceitar uma referência HTMLElement (somente via JavaScript). Para obter mais informações, consulte os documentos detectOverflow do Popper .
container string, elemento, falso false Acrescenta o popover a um elemento específico. Exemplo: container: 'body'. Esta opção é particularmente útil porque permite que você posicione o popover no fluxo do documento próximo ao elemento acionador - o que impedirá que o popover flutue para longe do elemento acionador durante o redimensionamento da janela.
content string, elemento, função '' Valor de conteúdo padrão se data-bs-contento atributo não estiver presente. Se uma função for fornecida, ela será chamada com sua thisreferência definida para o elemento ao qual o popover está anexado.
customClass corda, função '' Adicione classes ao popover quando ele for exibido. Observe que essas classes serão adicionadas além de quaisquer classes especificadas no modelo. Para adicionar várias classes, separe-as com espaços: 'class-1 class-2'. Você também pode passar uma função que deve retornar uma única string contendo nomes de classes adicionais.
delay número, objeto 0 Atraso na exibição e ocultação do popover (ms) — não se aplica ao tipo de acionamento manual. Se um número for fornecido, o atraso será aplicado a ocultar/exibir. A estrutura do objeto é: delay: { "show": 500, "hide": 100 }.
fallbackPlacements seqüência de caracteres, matriz ['top', 'right', 'bottom', 'left'] Defina as veiculações de fallback fornecendo uma lista de veiculações na matriz (em ordem de preferência). Para obter mais informações, consulte os documentos de comportamento de Popper .
html boleano false Permitir HTML no popover. Se true, as tags HTML no popover titleserão renderizadas no popover. Se false, innerTexta propriedade será usada para inserir conteúdo no DOM. Use texto se estiver preocupado com ataques XSS.
offset número, string, função [0, 0] Deslocamento do popover em relação ao seu destino. Você pode passar uma string em atributos de dados com valores separados por vírgulas como: data-bs-offset="10,20". Quando uma função é usada para determinar o deslocamento, ela é chamada com um objeto contendo o posicionamento do popper, a referência e os retos do popper como seu primeiro argumento. O nó DOM do elemento acionador é passado como o segundo argumento. A função deve retornar um array com dois números: skidding , distance . Para obter mais informações, consulte os documentos de deslocamento de Popper .
placement corda, função 'top' Como posicionar o popover: automático, superior, inferior, esquerdo, direito. Quando autofor especificado, ele reorientará dinamicamente o popover. Quando uma função é usada para determinar o posicionamento, ela é chamada com o nó DOM popover como seu primeiro argumento e o nó DOM do elemento acionador como seu segundo. O thiscontexto é definido para a instância popover.
popperConfig nulo, objeto, função null Para alterar a configuração padrão do Popper do Bootstrap, consulte a configuração do Popper . Quando uma função é usada para criar a configuração do Popper, ela é chamada com um objeto que contém a configuração padrão do Popper do Bootstrap. Ele ajuda você a usar e mesclar o padrão com sua própria configuração. A função deve retornar um objeto de configuração para Popper.
sanitize boleano true Habilite ou desabilite a higienização. Se ativado 'template', 'content'as 'title'opções serão higienizadas.
sanitizeFn nulo, função null Aqui você pode fornecer sua própria função de higienização. Isso pode ser útil se você preferir usar uma biblioteca dedicada para realizar a higienização.
selector corda, falso false Se um seletor for fornecido, os objetos popover serão delegados aos destinos especificados. Na prática, isso também é usado para aplicar popovers a elementos DOM adicionados dinamicamente ( jQuery.onsuporte). Veja esta edição e um exemplo informativo .
template corda '<div class="popover" role="popover"><div class="popover-arrow"></div><div class="popover-inner"></div></div>' HTML base para usar ao criar o popover. Os popovers titleserão injetados no arquivo .popover-inner. .popover-arrowse tornará a seta do popover. O elemento wrapper mais externo deve ter a .popoverclasse e role="popover".
title string, elemento, função '' Valor de título padrão se o titleatributo não estiver presente. Se uma função for fornecida, ela será chamada com sua thisreferência definida para o elemento ao qual o popover está anexado.
trigger corda 'hover focus' Como o popover é acionado: clique, passe o mouse, foco, manual. Você pode passar vários gatilhos; separe-os com um espaço. 'manual'indica que o popover será acionado programaticamente por meio dos métodos .popover('show'), .popover('hide')e ; .popover('toggle')este valor não pode ser combinado com nenhum outro acionador. 'hover'por si só resultará em popovers que não podem ser acionados pelo teclado e só devem ser usados ​​se métodos alternativos para transmitir as mesmas informações para usuários de teclado estiverem presentes.

Atributos de dados para popovers individuais

Opções para popovers individuais podem ser especificadas alternativamente através do uso de atributos de dados, conforme explicado acima.

Usando a função compopperConfig

const popover = new bootstrap.Popover(element, {
  popperConfig(defaultBsPopperConfig) {
    // const newPopperConfig = {...}
    // use defaultBsPopperConfig if needed...
    // return newPopperConfig
  }
})

Métodos

Métodos e transições assíncronas

Todos os métodos de API são assíncronos e iniciam uma transição . Eles retornam ao chamador assim que a transição é iniciada, mas antes que ela termine . Além disso, uma chamada de método em um componente de transição será ignorada .

Consulte nossa documentação JavaScript para obter mais informações .

Método Descrição
disable Remove a capacidade de mostrar o popover de um elemento. O popover só poderá ser exibido se for reativado.
dispose Oculta e destrói o popover de um elemento (remove os dados armazenados no elemento DOM). Popovers que usam delegação (que são criados usando a selectoropção ) não podem ser destruídos individualmente em elementos de disparo descendentes.
enable Dá ao popover de um elemento a capacidade de ser mostrado. Os popovers são ativados por padrão.
getInstance Método estático que permite obter a instância popover associada a um elemento DOM.
getOrCreateInstance Método estático que permite obter a instância popover associada a um elemento DOM ou criar uma nova caso não tenha sido inicializada.
hide Oculta o popover de um elemento. Retorna ao chamador antes que o popover tenha sido ocultado (ou seja, antes que o hidden.bs.popoverevento ocorra). Isso é considerado um acionamento “manual” do popover.
setContent Dá uma maneira de alterar o conteúdo do popover após sua inicialização.
show Revela o popover de um elemento. Retorna ao chamador antes que o popover tenha sido realmente mostrado (ou seja, antes que o shown.bs.popoverevento ocorra). Isso é considerado um acionamento “manual” do popover. Os popovers cujo título e conteúdo são ambos de comprimento zero nunca são exibidos.
toggle Alterna o popover de um elemento. Retorna ao chamador antes que o popover tenha sido exibido ou ocultado (ou seja, antes que o evento shown.bs.popoverou hidden.bs.popoverocorra). Isso é considerado um acionamento “manual” do popover.
toggleEnabled Alterna a capacidade de mostrar ou ocultar o popover de um elemento.
update Atualiza a posição do popover de um elemento.
// getOrCreateInstance example
const popover = bootstrap.Popover.getOrCreateInstance('#example') // Returns a Bootstrap popover instance

// setContent example
myPopover.setContent({
  '.popover-header': 'another title',
  '.popover-body': 'another content'
})
O setContentmétodo aceita um objectargumento, em que cada chave de propriedade é um stringseletor válido dentro do modelo popover e cada valor de propriedade relacionado pode ser string| element| function| null

Eventos

Evento Descrição
hide.bs.popover Este evento é acionado imediatamente quando o hidemétodo de instância é chamado.
hidden.bs.popover Este evento é acionado quando o popover termina de ser ocultado do usuário (aguardará a conclusão das transições CSS).
inserted.bs.popover Este evento é acionado após o show.bs.popoverevento quando o modelo popover foi adicionado ao DOM.
show.bs.popover Este evento é acionado imediatamente quando o showmétodo de instância é chamado.
shown.bs.popover Este evento é acionado quando o popover se torna visível para o usuário (aguardará a conclusão das transições CSS).
const myPopoverTrigger = document.getElementById('myPopover')
myPopoverTrigger.addEventListener('hidden.bs.popover', () => {
  // do something...
})