Se um link deve ser usado ou não, carrega mais semântica que valor de apresentação. Ele não deve ser desativado por meio do CSS, mas pela utilização do hiddenatributo aplicável a qualquer elemento HTML. O CSS pode então ser usado para selecionar, por exemplo, a[hidden]âncora e estilizá-la de acordo.
01:
@ amn, mas não acho que os navegadores exibirão um elemento com o atributo oculto para que o estilo se torne discutível.
precisa saber é o seguinte
1
@ user1794469 Eles o instruirão se, com CSS, usar display: block, por exemplo, ou algum outro valor para display. Mas hiddennem sempre é aplicável - é para elementos irrelevantes e, da questão, não está claro por que o link deve ser desativado. Este é provavelmente um caso de problema XY.
01
Respostas:
1348
A resposta já está nos comentários da pergunta. Para mais visibilidade, estou copiando esta solução aqui:
Aviso: O uso de pointer-eventsCSS para elementos não SVG é experimental. O recurso costumava fazer parte da especificação de rascunho da interface do usuário do CSS3, mas, devido a muitos problemas em aberto, foi adiado para o CSS4.
Além disso, isso não evita tabular o link e, em seguida, insira.
Jono
4
Se você quiser estilizá-lo um pouco, para que o usuário possa ver que está desativado. Dê-lhe alguma opacidade: .2
DNRN
4
Isso agora funciona em todos os navegadores modernos, incluindo o IE 11. Se você precisar de suporte para o IE 10 e versões inferiores, poderá usar um polyfill JavaScript como este .
Keavon
26
Nota importante: isso desativa apenas o clique, não o próprio link real. Você ainda pode usar a guia + enter para "clicar" no link.
Pikamander2
11
O uso de pointer-events: none;não é perfeito. Ele também desativa outros eventos, como foco, necessário para a exibição title="…"ou dicas de ferramentas. Descobri que a solução JS é melhor (usando event.preventDefault();) junto com algum CSS ( cursor: default; opacity: 0.4;) e uma dica de ferramenta explicando por que o link está desativado.
Para obter estilo, tente mudar pointer-events:none;para pointer-events:unset;. Em seguida, o cursor pode ser alterado para cursor:not-allowed;. Isso dá uma pista melhor sobre o que está acontecendo com o usuário. Parece funcionar em FF, Edge, Chrome, Opera e Brave a partir de hoje.
Sablefoste 5/09/17
@Sablefoste Isso não funciona para mim no Chrome 60. O cursor é mesmo not-allowed, mas o link permanece clicável.
soupdog 11/09/19
122
CSS só pode ser usado para alterar o estilo de algo. O melhor que você provavelmente poderia fazer com CSS puro é ocultar o link completamente.
O que você realmente precisa é de algum javascript. Aqui está como você faria o que deseja usando a biblioteca jQuery.
Não se esqueça prevenir comportamentos padrão: function(ev){ ev.preventDefault(); ev.stopPropagation(); return false;.
precisa
5
@Idiqual, return falsefaz isso
nickf
1
return falsesó funciona se a ação é definida usando o hrefatributo
Justin
Além disso, esta versão pode ser usada para desativar cliques, mantendo outros eventos de ponteiro como: hover ou: focus! Top resposta!
Charlie Tupman 5/05
Embora isso funcione em todos os navegadores, apenas desativou o clique em um link. Lembre-se de que muitos usuários são usados para abrir links no menu de contexto ou usando o botão do meio do mouse.
Alexandru Severin
33
CSS não pode fazer isso. CSS é apenas para apresentação. Suas opções são:
Não inclua o hrefatributo nas suas <a>tags.
Use JavaScript, para encontrar os elementos âncora com isso classe remova seus hrefou onclickatributos de acordo. O jQuery ajudaria você com isso (o NickF mostrou como fazer algo semelhante, mas melhor).
Essa não é a resposta correta - eventos-ponteiro: nenhum; CSS pode desativá-lo.
pie6k
Eu não pensei nisso! Ou talvez o atributo ainda não existisse em 2010? De qualquer forma, é verdade que pointer-events: nonepode desativar os eventos do mouse. No entanto, ele não desativa o link subjacente. Em um teste que experimentei no Chrome 81, ainda posso ativar esse link, tabulando-o e digitando a tecla Enter.
Como desabilito um link usando o seletor desabilitado? por exemplo, <a class="test" desativado href="3"> test </a> a: desativado {cursor: não permitido; }
ecasper 27/08/18
10
Uma maneira de fazer isso com CSS seria definir um CSS em uma embalagem div que você definir para desaparecer e algo mais acontecer.
Para realmente desativar o, avocê precisará substituir o evento click ouhref , , conforme descrito por outras pessoas.
PS: Apenas para esclarecer, consideraria essa uma solução bastante desarrumada, e para o SEO também não é a melhor, mas acredito que seja a melhor com CSS puramente.
A propriedade pointer-events permite controlar como os elementos HTML respondem a eventos de mouse / touch - incluindo estados ativos / pairar em CSS, eventos de clique / toque em Javascript e se o cursor está ou não visível.
Essa não é a única maneira de desativar um Link , mas uma boa maneira de CSS que funciona no IE10 + e em todos os novos navegadores:
.current-page {pointer-events: none;color: grey;}
<ahref="#"class="current-page">This link is disabled</a>
Eu procurei na internet e não achei melhor do que isso . Basicamente, para desativar a funcionalidade de clique no botão, basta adicionar o estilo CSS usando o jQuery da seguinte forma:
Obrigado a todos que publicaram soluções, combinei várias abordagens para fornecer disabledfuncionalidades mais avançadas . Aqui está uma essência , e o código está abaixo.
This provides for multiple levels of defense so that Anchors marked as disable actually behave as such.Usingthis approach, you get an anchor that you cannot:- click
- tab to and hit return- tabbing to it will move focus to the next focusable element
- it is aware if the anchor is subsequently enabled
1.Includethis css,as it is the first line of defense.This assumes the selector you useis'a.disabled'
a.disabled {
pointer-events: none;
cursor:default;}2.Next, instantiate thisclass such as(with optional selector):
$ ->newAnchorDisabler()
Aqui está a classe coffescript:
classAnchorDisablerconstructor:(selector ='a.disabled')->
$(selector).click(@onClick).keyup(@onKeyup).focus(@onFocus)
isStillDisabled:(ev)=>### since disabled can be a class or an attribute, and it can be dynamically removed, always recheck on a watched event ###
target = $(ev.target)returntrueif target.hasClass('disabled')returntrueif target.attr('disabled')is'disabled'returnfalse
onFocus:(ev)=>### if an attempt is made to focus on a disabled element, just move it along to the next focusable one. ###returnunless@isStillDisabled(ev)
focusables = $(':focusable')returnunless focusables
current = focusables.index(ev.target)next=(if focusables.eq(current +1).length then focusables.eq(current +1)else focusables.eq(0))next.focus()ifnext
onClick:(ev)=># disabled could be dynamically removedreturnunless@isStillDisabled(ev)
ev.preventDefault()returnfalse
onKeyup:(ev)=># 13 is the js key code for Enter, we are only interested in disabling that so get out fast
code = ev.keyCode or ev.which
returnunless code is13# disabled could be dynamically removedreturnunless@isStillDisabled(ev)
ev.preventDefault()returnfalse
Você também pode dimensionar outro elemento para que ele cubra os links (usando o z-index correto): Isso "consumirá" os cliques.
(Descobrimos isso acidentalmente porque tivemos um problema com links inativos repentinamente devido ao design "responsivo", causando um H2 para cobri-los quando a janela do navegador era do tamanho móvel.)
Seu violino não funciona! O link ainda está ativo no Chrome.
Matt Byrne
Para corrigir esse código, troque os dois primeiros parâmetros passados para on (): $ ('html'). On ('clique', 'a.Link', função (evento) {event.preventDefault ();});
2C-B
1
Olá !!, a resposta é sobre CSSnão JSou mais nada!
Mehdi Dehghani
0
Outro truque é colocar um elemento invisível acima dele. Isso desativará qualquer efeito de foco também
hidden
atributo aplicável a qualquer elemento HTML. O CSS pode então ser usado para selecionar, por exemplo,a[hidden]
âncora e estilizá-la de acordo.display: block
, por exemplo, ou algum outro valor paradisplay
. Mashidden
nem sempre é aplicável - é para elementos irrelevantes e, da questão, não está claro por que o link deve ser desativado. Este é provavelmente um caso de problema XY.Respostas:
A resposta já está nos comentários da pergunta. Para mais visibilidade, estou copiando esta solução aqui:
Para suporte ao navegador, consulte https://caniuse.com/#feat=pointer-events . Se você precisar dar suporte ao IE, há uma solução alternativa; veja esta resposta .
Aviso: O uso de
pointer-events
CSS para elementos não SVG é experimental. O recurso costumava fazer parte da especificação de rascunho da interface do usuário do CSS3, mas, devido a muitos problemas em aberto, foi adiado para o CSS4.fonte
pointer-events: none;
não é perfeito. Ele também desativa outros eventos, como foco, necessário para a exibiçãotitle="…"
ou dicas de ferramentas. Descobri que a solução JS é melhor (usandoevent.preventDefault();
) junto com algum CSS (cursor: default; opacity: 0.4;
) e uma dica de ferramenta explicando por que o link está desativado.fonte
pointer-events:none;
parapointer-events:unset;
. Em seguida, o cursor pode ser alterado paracursor:not-allowed;
. Isso dá uma pista melhor sobre o que está acontecendo com o usuário. Parece funcionar em FF, Edge, Chrome, Opera e Brave a partir de hoje.not-allowed
, mas o link permanece clicável.CSS só pode ser usado para alterar o estilo de algo. O melhor que você provavelmente poderia fazer com CSS puro é ocultar o link completamente.
O que você realmente precisa é de algum javascript. Aqui está como você faria o que deseja usando a biblioteca jQuery.
fonte
function(ev){ ev.preventDefault(); ev.stopPropagation(); return false;
.return false
faz issoreturn false
só funciona se a ação é definida usando ohref
atributoCSS não pode fazer isso. CSS é apenas para apresentação. Suas opções são:
href
atributo nas suas<a>
tags.class
e remova seushref
ouonclick
atributos de acordo. O jQuery ajudaria você com isso (o NickF mostrou como fazer algo semelhante, mas melhor).fonte
pointer-events: none
pode desativar os eventos do mouse. No entanto, ele não desativa o link subjacente. Em um teste que experimentei no Chrome 81, ainda posso ativar esse link, tabulando-o e digitando a tecla Enter.Link desativado de inicialização
Botão de inicialização desativada, mas parece com o link
fonte
Você pode definir o
href
atributo comojavascript:void(0)
fonte
Eu usei:
E não foi suficiente; em alguns navegadores, ele ainda exibia o link, piscando.
Eu tive que adicionar:
fonte
a[disabled]:active { pointer-events: none !important; }
é melhorSe você deseja manter apenas HTML / CSS em um formulário, outra opção é usar um botão. Denomine-o e defina o
disabled
atributo.Por exemplo, http://jsfiddle.net/cFTxH/1/
fonte
Se você deseja que seja apenas CSS, a lógica de desativação deve ser definida pelo CSS.
Para mover a lógica nas definições de CSS, você precisará usar seletores de atributos. Aqui estão alguns exemplos :
Desative o link que tem um href exato:
=
Você pode optar por desativar os links que contêm um valor de href específico, como:
Desative um link que contenha um caminho:
*=
Aqui, qualquer link que contenha
/keyword/
no caminho será desativadoDesative um link que comece com:
^=
o
[attribute^=value]
operador segmenta um atributo que começa com um valor específico. Permite descartar sites e caminhos raiz.Você pode até usá-lo para desativar links não https. Por exemplo :
Desative um link que termina com:
$=
O
[attribute$=value]
operador segmenta um atributo que termina com um valor específico. Pode ser útil descartar extensões de arquivo.Ou qualquer outro atributo
CSS pode direcionar qualquer atributo HTML. Poderia ser
rel
,target
,data-custom
e assim por diante ...Combinando seletores de atributos
Você pode encadear várias regras. Digamos que você deseja desativar todos os links externos, mas não aqueles que apontam para o seu site:
Ou desabilite os links para arquivos pdf de um site específico:
Suporte do navegador
Os seletores de atributos são suportados desde o IE7.
:not()
seletor desde o IE9.fonte
Uma maneira de fazer isso com CSS seria definir um CSS em uma embalagem
div
que você definir para desaparecer e algo mais acontecer.Por exemplo:
Com um CSS como
Para realmente desativar o,
a
você precisará substituir o evento click ouhref
, , conforme descrito por outras pessoas.PS: Apenas para esclarecer, consideraria essa uma solução bastante desarrumada, e para o SEO também não é a melhor, mas acredito que seja a melhor com CSS puramente.
fonte
Tente o seguinte:
fonte
Essa não é a única maneira de desativar um Link , mas uma boa maneira de CSS que funciona no IE10 + e em todos os novos navegadores:
fonte
Eu procurei na internet e não achei melhor do que isso . Basicamente, para desativar a funcionalidade de clique no botão, basta adicionar o estilo CSS usando o jQuery da seguinte forma:
Em seguida, para habilitá-lo novamente, faça isso
Verificado no Firefox e IE 11, funcionou.
fonte
você pode usar este css:
fonte
Obrigado a todos que publicaram soluções, combinei várias abordagens para fornecer
disabled
funcionalidades mais avançadas . Aqui está uma essência , e o código está abaixo.Aqui está a classe coffescript:
fonte
CSS
nãoJS
ou mais nada!Você também pode dimensionar outro elemento para que ele cubra os links (usando o z-index correto): Isso "consumirá" os cliques.
(Descobrimos isso acidentalmente porque tivemos um problema com links inativos repentinamente devido ao design "responsivo", causando um H2 para cobri-los quando a janela do navegador era do tamanho móvel.)
fonte
Demonstração aqui
Experimente esta
fonte
CSS
nãoJS
ou mais nada!Outro truque é colocar um elemento invisível acima dele. Isso desativará qualquer efeito de foco também
fonte
É possível fazer isso em CSS
Veja em:
Observe que o
text-decoration: none;
ecolor: black;
não é necessário, mas faz com que o link pareça mais com texto simples.fonte
pointer-events:none
desativará o link:fonte
fonte