Est-il possible de désactiver un lien en utilisant CSS?
J'ai une classe appelée current-page
et je veux que les liens avec cette classe soient désactivés afin qu'aucune action ne se produise lorsque l'utilisateur clique dessus.
La réponse est déjà dans les commentaires de la question. Pour plus de visibilité, je copie cette solution ici:
.not-active {
pointer-events: none;
cursor: default;
text-decoration: none;
color: black;
}
<a href="link.html" class="not-active">Link</a>
Pour obtenir une assistance du navigateur, veuillez consulter https://caniuse.com/#feat=pointer-events . Si vous devez prendre en charge IE, il existe une solution de contournement. voir cette réponse .
Avertissement: L'utilisation de pointer-events
en CSS pour des éléments non-SVG est expérimentale. La fonctionnalité faisait partie du projet de spécification d'interface utilisateur CSS3, mais a été reportée à CSS4 en raison de nombreux problèmes non résolus.
.disabled {
pointer-events: none;
cursor: default;
opacity: 0.6;
}
<a href="#" class="disabled">link</a>
CSS ne peut être utilisé que pour changer le style de quelque chose. Le mieux que vous puissiez faire avec du CSS pur est de cacher complètement le lien.
Ce dont vous avez vraiment besoin, c'est du javascript. Voici comment faire ce que vous voulez en utilisant la bibliothèque jQuery.
$('a.current-page').click(function() { return false; });
CSS ne peut pas faire ça. CSS est pour la présentation seulement. Vos options sont:
href
dans vos balises <a>
.class
et supprimez leurs attributs href
ou onclick
en conséquence. jQuery pourrait vous aider avec ça (NickF a montré comment faire quelque chose de similaire mais mieux).<a href="#" class="btn btn-primary btn-lg disabled" role="button">Primary link</a>
<a href="#" class="btn btn-default btn-lg disabled" role="button">Link</a>
<button type="button" class="btn btn-link">Link</button>
Vous pouvez définir l'attribut href
sur javascript:void(0)
.disabled {
/* Disabled link style */
color: black;
}
<a class="disabled" href="javascript:void(0)">LINK</a>
Si vous souhaitez vous limiter à HTML/CSS dans un formulaire, vous pouvez également utiliser un bouton. Donnez-lui un style et définissez l'attribut disabled
.
La seule façon de le faire sans CSS serait de définir un CSS sur une division d'habillage qui vous aurait fait disparaître et que quelque chose d'autre prenne sa place.
PAR EXEMPLE:
<div class="disabled">
<a class="toggleLink" href="wherever">blah</a>
<span class="toggleLink">blah</span
</div>
Avec un CSS comme
.disabled a.toggleLink { display: none; }
span.toggleLink { display: none; }
.disabled span.toggleLink { display: inline; }
Pour désactiver réellement le A, vous devrez remplacer son événement click ou href, comme décrit par d'autres.
PS: Juste pour clarifier, je considérerais ceci comme une solution assez désordonnée, et pour le référencement, ce n’est pas le meilleur non plus, mais je crois que c’est le meilleur avec les CSS.
Si vous voulez que ce soit uniquement du CSS, la logique de désactivation doit être définie par CSS.
Pour déplacer la logique dans les définitions CSS, vous devez utiliser des sélecteurs d'attributs. Voici quelques exemples :
=
Vous pouvez choisir de désactiver les liens contenant une valeur href spécifique, comme ceci:
<a href="//website.com/exact/path">Exact path</a>
[href="//website.com/exact/path"]{
pointer-events: none;
}
*=
Ici, tout lien contenant le chemin /keyword/
in sera désactivé
<a href="//website.com/keyword/in/path">Contains in path</a>
[href*="/keyword/"]{
pointer-events: none;
}
^=
l'opérateur [attribute^=value]
cible un attribut commençant par une valeur spécifique. Vous permet de supprimer les sites Web et les chemins racine.
<a href="//website.com/begins/with/path">Begins with path</a>
[href^="//website.com/begins/with"]{
pointer-events: none;
}
Vous pouvez même l'utiliser pour désactiver les liens non-https. Par exemple :
a:not([href^="https://"]){
pointer-events: none;
}
$=
L'opérateur [attribute$=value]
cible un attribut qui se termine par une valeur spécifique. Il peut être utile de supprimer les extensions de fichier.
<a href="/path/to/file.pdf">Link to pdf</a>
[href$=".pdf"]{
pointer-events: none;
}
Css peut cibler n'importe quel attribut HTML. Pourrait être rel
, target
, data-custom
et ainsi de suite ...
<a href="#" target="_blank">Blank link</a>
[target=_blank]{
pointer-events: none;
}
Vous pouvez chaîner plusieurs règles. Supposons que vous souhaitiez désactiver tous les liens externes, mais pas ceux pointant vers votre site Web:
a[href*="//"]:not([href*="my-website.com"]) {
pointer-events: none;
}
Ou désactivez les liens vers les fichiers pdf d'un site Web spécifique:
<a href="//website.com/path/to/file.jpg">Link to image</a>
[href^="//website.com"][href$=".jpg"] {
color: red;
}
Les sélecteurs d'attributs sont supportés depuis IE7. :not()
sélecteur depuis IE9.
Essaye ça:
<style>
.btn-disable {
display:inline-block;
pointer-events: none;
}
</style>
La propriété pointer-events permet de contrôler le fonctionnement des éléments HTML répondre aux événements de souris/contact - y compris les états de survol/actifs CSS, cliquez/tapez sur les événements en Javascript, et si le curseur est ou non visible.
C'est pas la seule façon de désactiver un lien, mais une bonne méthode CSS qui fonctionne dans IE10 + et tous les nouveaux navigateurs:
.current-page {
pointer-events: none;
color: grey;
}
<a href="#" class="current-page">This link is disabled</a>
J'ai cherché sur Internet et rien de mieux que this . En gros, pour désactiver la fonctionnalité de clic sur un bouton, ajoutez simplement un style CSS à l'aide de jQuery comme suit:
$("#myLink").css({ 'pointer-events': 'none' });
Ensuite, pour le réactiver, faites ceci
$("#myLink").css({ 'pointer-events': '' });
Vérifié sur Firefox et IE 11, cela a fonctionné.
Merci à tous ceux qui ont publié des solutions, j'ai combiné plusieurs approches pour fournir des fonctionnalités disabled
plus avancées. Voici un Gist , et le code est ci-dessous.
This provides for multiple levels of defense so that Anchors marked as disable actually behave as such.
Using this 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. Include this css, as it is the first line of defense. This assumes the selector you use is 'a.disabled'
a.disabled {
pointer-events: none;
cursor: default;
}
2. Next, instantiate this class such as (with optional selector):
$ ->
new AnchorDisabler()
Voici la classe coffescript:
class AnchorDisabler
constructor: (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)
return true if target.hasClass('disabled')
return true if target.attr('disabled') is 'disabled'
return false
onFocus: (ev) =>
### if an attempt is made to focus on a disabled element, just move it along to the next focusable one. ###
return unless @isStillDisabled(ev)
focusables = $(':focusable')
return unless focusables
current = focusables.index(ev.target)
next = (if focusables.eq(current + 1).length then focusables.eq(current + 1) else focusables.eq(0))
next.focus() if next
onClick: (ev) =>
# disabled could be dynamically removed
return unless @isStillDisabled(ev)
ev.preventDefault()
return false
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
return unless code is 13
# disabled could be dynamically removed
return unless @isStillDisabled(ev)
ev.preventDefault()
return false
vous pouvez utiliser ce css:
a.button,button {
display: inline-block;
padding: 6px 15px;
margin: 5px;
line-height: 1.42857143;
text-align: center;
white-space: nowrap;
vertical-align: middle;
-ms-touch-action: manipulation;
touch-action: manipulation;
cursor: pointer;
-webkit-user-select: none;
-moz-user-select: none;
-ms-user-select: none;
user-select: none;
background-image: none;
border: 1px solid rgba(0, 0, 0, 0);
border-radius: 4px;
-moz-box-shadow: inset 0 3px 20px 0 #cdcdcd;
-webkit-box-shadow: inset 0 3px 20px 0 #cdcdcd;
box-shadow: inset 0 3px 20px 0 #cdcdcd;
}
a[disabled].button,button[disabled] {
cursor: not-allowed;
opacity: 0.4;
pointer-events: none;
-webkit-touch-callout: none;
}
a.button:active:not([disabled]),button:active:not([disabled]) {
background-color: transparent !important;
color: #2a2a2a !important;
outline: 0;
-webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .5);
box-shadow: inset 0 3px 5px rgba(0, 0, 0, .5);
}
<button disabled="disabled">disabled!</button>
<button>click me!</button>
<a href="http://royansoft.com" disabled="disabled" class="button">test</a>
<a href="http://royansoft.com" class="button">test2</a>
Démo ici
Essaye celui-là
$('html').on('click', 'a.Link', function(event){
event.preventDefault();
});
J'ai utilisé:
.current-page a:hover {
pointer-events: none !important;
}
Et n'était pas assez; dans certains navigateurs, le lien était toujours affiché, clignotant.
Je devais ajouter:
.current-page a {
cursor: text !important;
}
Vous pouvez également dimensionner un autre élément pour qu'il recouvre les liens (en utilisant le bon index z): Cela "mange" les clics.
(Nous avons découvert cela par accident, car nous avions un problème avec des liens soudainement inactifs en raison d'une conception "réactive", ce qui a permis à un H2 de les couvrir lorsque la fenêtre du navigateur était de la taille d'un mobile.)
<a href="#!">1) Link With Non-directed url</a><br><br>
<a href="#!" disabled >2) Link With with disable url</a><br><br>
C'est possible de le faire en CSS
.disabled{
cursor:default;
pointer-events:none;
text-decoration:none;
color:black;
}
<a href="https://www.google.com" target="_blank" class="disabled">Google</a>
Voir à:
Notez que text-decoration: none;
et color: black;
ne sont pas nécessaires, mais le lien ressemble davantage à du texte brut.
pointer-events:none
désactive le lien:
.disabled {
pointer-events:none;
}
<a href="#" class="disabled">link</a>