Todos os meus botões têm um destaque ao redor deles depois que eu clico neles. Isso está no Chrome.
<button class="btn btn-primary btn-block">
<span class="icon-plus"></span> Add Page
</button>
Estou usando o Bootstrap com um tema, mas tenho certeza de que não é isso: eu estava percebendo isso antes em outro projeto.
Ele desaparece se eu usar uma <a>
tag em vez de <button>
. Por quê? Se eu quisesse usar <button>
como faria isso desaparecer?
html
css
twitter-bootstrap
Sean Clark Hess
fonte
fonte
Respostas:
Encontrei essas perguntas e respostas em outra página e substituir o estilo de foco do botão funcionou para mim. Esse problema pode ser específico ao MacOS com o Chrome.
Observe que isso tem implicações para a acessibilidade e não é recomendado até que você tenha um bom estado de foco consistente para seus botões e entradas. De acordo com os comentários abaixo, existem usuários por aí que não podem usar ratos.
fonte
.btn:active:focus
seletor para removê-lo do estado ativo..btn-default, .btn-default:hover, .btn-default:active, .btn-default:active:focus, .btn-default:visited, .btn-default:focus { color: #dcdcdc; background-color: #232323; outline: none; }
Você quer algo como:
O método .blur () remove corretamente o destaque do foco e não atrapalha os estilos do Bootstraps.
fonte
meu entendimento é que o foco é aplicado pela primeira vez após o
onMouseDown
evento, para chamare.preventDefault()
emonMouseDown
pode ser uma solução limpa, dependendo de suas necessidades. Esta é certamente uma solução amigável à acessibilidade, mas obviamente ajusta o comportamento dos cliques do mouse que podem não ser compatíveis com o seu projeto na web.Atualmente, estou usando esta solução (dentro de um
react-bootstrap
projeto) e não recebo uma piscada de foco ou o foco retido dos botões após um clique, mas ainda posso tabular meu foco e visualizar visualmente o foco dos mesmos botões.fonte
onMouseDown={e => e.preventDefault()}
onKeyUp={(e) => {if (e.keyCode === 13 || e.keyCode === 32) handleClick()}
.onKeyUp
evento. Acontece que, se você fizer isso, o botão permanecerá focado depois de pressionar a tecla de espaço ou a tecla de retorno, e tabular ou clicar em qualquer lugar.Não posso acreditar que ninguém postou isso ainda.
Use um rótulo em vez de um botão.
Violino
fonte
<a class="btn"><my-directive/></a>
Embora seja fácil remover apenas o contorno de todos os botões focados (como na resposta do usuário1933897 ), mas essa solução é ruim do ponto de vista da acessibilidade (por exemplo, consulte Parar de mexer com o contorno do foco padrão do navegador )
Por outro lado, provavelmente é impossível convencer seu navegador a parar de estilizar seu botão clicado como focado se ele achar que está focado depois que você clicou nele (estou olhando para você, Chrome no OS X).
Então o que nós podemos fazer? Algumas opções vêm à minha mente.
1) Javascript (jQuery):
$('.btn').mouseup(function() { this.blur() })
Você está instruindo seu navegador a remover o foco em qualquer botão imediatamente após o clique. Ao usar em
mouseup
vez declick
mantermos o comportamento padrão para interações baseadas em teclado (mouseup
não é acionado pelo teclado).2) CSS:
.btn:hover { outline: 0 !important }
Aqui você desativa o contorno apenas dos botões suspensos . Obviamente, não é o ideal, mas pode ser suficiente em algumas situações.
fonte
:active:focus {outline:none;}
..on('mouseup', function() { ... })
em vez de.mouseup()
Isso funcionou para mim. Criei uma classe personalizada que substitui o CSS necessário.
O -webkit-box-shadow funcionará nos navegadores Chrome e Safari.
fonte
border: none !important;
para o botão para manter mesmas dimensõesIsso funciona para mim, outra solução não mencionada. Basta jogá-lo no evento click ...
Ou chame-o de outro evento / método ...
fonte
Se você usar a regra
:focus { outline: none; }
para remover contornos, o link ou controle poderá ser focado, mas sem indicação de foco para os usuários do teclado. Os métodos para removê-lo com JSonfocus="blur()"
são ainda piores e resultam em usuários de teclado incapazes de interagir com o controle.Os hacks que você pode usar, que estão bem , incluem adicionar
:focus { outline: none; }
regras quando os usuários interagem com o mouse e removê-los novamente se a interação do teclado for detectada. Lindsay Evans fez uma lib para isso: https://github.com/lindsayevans/outline.jsMas eu preferiria definir uma classe na tag html ou body. E tenha controle no arquivo CSS de quando usar isso.
Por exemplo (os manipuladores de eventos em linha são apenas para fins de demonstração):
Coloquei uma caneta junto: http://codepen.io/snobojohan/pen/RWXXmp
Mas cuidado, existem problemas de desempenho. Isso força a repintura sempre que o usuário alterna entre o mouse e o teclado. Mais sobre como evitar tintas desnecessárias http://www.html5rocks.com/en/tutorials/speed/unnecessary-paints/
fonte
Percebi o mesmo e, mesmo que isso realmente me irrite, acredito que não há uma maneira adequada de lidar com isso.
Eu recomendaria contra todas as outras soluções fornecidas, porque elas eliminam completamente a acessibilidade do botão. Agora, quando você guia o botão, não obtém o foco esperado.
Isso deve ser evitado!
fonte
Eu encontro uma solução. quando nos concentramos, o bootstrap usa box-shadow, então apenas o desabilitamos (reputação insuficiente, não é possível carregar a imagem :().
Eu adiciono
funciona.
fonte
OPÇÃO 1: Use o
:focus-visible
pseudo classeA
:focus-visible
pseudo-classe pode ser usada para eliminar os contornos desagradáveis e focar os anéis nos botões e em vários elementos para os usuários que NÃO estão navegando pelo teclado (por exemplo, via toque ou clique do mouse).OPÇÃO 2: use o
.focus-visible
polyfillEsta solução usa uma classe CSS normal em vez da pseudo-classe mencionada acima e possui amplo suporte ao navegador porque é um polyfill oficial baseado em Javascript .
Etapa 1: adicione as dependências Javascript à sua página HTML
Nota: o polyfill visível ao foco requer um polyfill adicional para vários navegadores mais antigos que não suportam classList :
Etapa 2: adicione o seguinte CSS à sua folha de estilo
A seguir está uma versão modificada da solução CSS documentada mais detalhadamente acima.
Etapa 3 (opcional): use a classe 'focus-visible' sempre que necessário
Se você possui algum item em que realmente deseja mostrar o anel de foco quando alguém clica ou usa o toque, basta adicionar a
focus-visible
classe ao elemento DOM.Recurso:
Demo:
fonte
<whatever>:focus { outline: none }
é uma ideia pior do que esta solução. Na verdade, existem pessoas na comunidade de acessibilidade que preferem que você NUNCA remova o contorno e faça com que tudo tenha um estilo: focus (contorno ou box-shadow) e não queira oferecer suporte: focus-visible até que os navegadores implementem uma maneira de permitir os usuários especificam uma preferência do usuário para saber se todos os itens devem ser focados ou não. Eu gosto de pensar: o foco visível é um meio termo entre as preocupações com o design e todos os dias.Se o acima não funcionar, tente o seguinte:
Como user1933897 apontou, isso pode ser específico para o MacOS com Chrome.
fonte
bootstrap 4.0
- nas janelasTarde, mas quem sabe isso pode ajudar alguém. O CSS ficaria assim:
O HTML seria semelhante a:
Dessa forma, você pode manter o btn e seus comportamentos associados.
fonte
element:focus { box-shadow: none; }
removido contorno / sombra azul.Mencionei isso em um comentário acima, mas vale a pena listar como uma resposta separada para maior clareza. Contanto que você não precise realmente se concentrar no botão, você pode usar o evento focus para removê-lo antes que ele possa aplicar efeitos CSS:
Isso evita a oscilação que pode ser vista ao usar o evento click. Isso restringe a interface e você não poderá tabular para o botão, mas isso não é um problema em todos os aplicativos.
fonte
Estilo
Usando
fonte
Experimente esta solução para remover a borda ao redor do botão. Adicione este código em css.
Experimentar
Se não funcionar, use abaixo.
fonte
Para pessoas que desejam uma maneira css pura de fazer isso:
Isso também pode funcionar para link e assim por diante, além de bônus, mantém as acessibilidades do teclado. Por fim, é ignorado por navegadores que não suportam: foco visível
fonte
focus-visible
agora tem um polyfill oficial. Minha resposta stackoverflow.com/a/60219624/413538 sobre esta questão explica como realmente entender tudo isso.Estávamos com um problema semelhante e percebemos que o Bootstrap 3 não tem o problema em suas guias (no Chrome). Parece que eles estão usando o estilo de estrutura de tópicos, o que permite que o navegador decida o que é melhor fazer e o Chrome parece fazer o que você deseja: mostre a estrutura de tópicos quando focada, a menos que você tenha clicado no elemento.
outline-style
É difícil definir o suporte , pois o navegador decide o que isso significa. É melhor fazer check-in em alguns navegadores e ter uma regra de reserva.fonte
Outra solução possível é adicionar uma classe usando um ouvinte Javascript quando o usuário clicar no botão e remover essa classe em foco com outro ouvinte. Isso mantém a acessibilidade (guias visíveis) e também impede o comportamento peculiar do Chrome de considerar um botão focado quando clicado.
JS:
CSS:
Exemplo completo aqui: https://jsfiddle.net/4bbb37fh/
fonte
É trabalho, espero te ajudar
fonte
isso remove o contorno ao clicar, mas mantém o foco ao tabular (para a11y)
fonte
Isso funciona melhor
fonte
este esquema: nenhum funcionará tanto para o botão quanto para uma tag
fonte
Adicione isso no CSS:
fonte
Eu encontrei uma solução basta adicionar abaixo da linha no seu código css.
fonte
Eu apenas tive esse mesmo problema no MacOS e no Chrome enquanto usava um botão para acionar um evento de "transição". Se alguém que estiver lendo isso já estiver usando um ouvinte de evento, poderá resolvê-lo chamando
.blur()
suas ações.Exemplo:
Embora se você ainda não estiver usando um ouvinte de evento, a adição de um apenas para resolver isso pode adicionar sobrecarga desnecessária e uma solução de estilo, como as respostas anteriores fornecem, é melhor.
fonte
Você pode definir
tabIndex="-1"
. Isso fará com que o navegador pule esse botão ao percorrer os controles de foco.Outras "correções" sugeridas aqui, apenas removem o contorno do foco, mas ainda deixam os botões com tabulação. No entanto, do ponto de vista da usabilidade, você já removeu o brilho, para que o usuário não saiba de nenhuma maneira o que está focado no momento.
Por outro lado, tornar o botão não tabulável tem implicações de acessibilidade.
Estou usando-o para remover o contorno do foco do botão X
bootstrap modal
, que possui o botão "Fechar" na parte inferior de qualquer maneira, para que minha solução não tenha impacto na acessibilidade.fonte
Se você estiver usando um navegador de webkit (e potencialmente um navegador compatível com a prefixação de fornecedor de webkit), esse esquema pertence à
-webkit-focus-ring
pseudoclasse do botão . Basta definir que éoutline
anone
:O Chrome é um navegador da Webkit e esse efeito também acontece no Linux (não apenas no macOS, embora alguns estilos do Chrome sejam apenas para macOS)
fonte
Eu estava tendo o mesmo problema usando o
<a>
botão atuando como e descobrique estava faltandouma solução alternativa ao adicionar attr paratype="button"
que ela se comportasse normalmente pelo menos para mim.<a type="button" class="btn btn-primary">Release Me!</a>
fonte
type
atributo não deve ter efeito sobre isso ebutton
é um valor inválido para ele. O atributo aceita um tipo MIME e diz ao cliente que tipo de dados que ele deve esperar para obter se ele segue o link (ex<a type="application/pdf" ...>
.role="button"
mas não funcionou (depois de usar um em<button>
vez de<a>
). Minha implementação exigiu especificamente um<a>
e não<button>
. Então, depois de mexer muito, descobri essa solução alternativa (provavelmente um bug do BS)!diretamente na tag html (em um cenário em que você pode querer deixar o tema de auto-inicialização no lugar em outro lugar no seu design) ..
exemplos para tentar ..
..ect ,. dependendo do efeito desejado.
fonte