Comment désactiver un lien En utilisant uniquement CSS?

Existe-t-il un moyen 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 lorsqu'ils sont cliqués.

761
demandé sur slick 2010-01-19 07:55:03

20 réponses

, 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 la prise en charge du navigateur, veuillez consulter https://caniuse.com/#feat=pointer-events . Si vous avez besoin de prendre en charge IE, il existe une solution de contournement; voir cette réponse .

Avertissement: l'utilisation de pointer-events en CSS pour les éléments non-SVG est expérimental. La fonctionnalité faisait partie de la spécification CSS3 UI draft mais, en raison pour de nombreuses questions ouvertes, a été reportée à CSS4.

1228
répondu RSK 2018-04-15 14:36:07

.disabled {
  pointer-events: none;
  cursor: default;
  opacity: 0.6;
}
<a href="#" class="disabled">link</a>
123
répondu amir 2018-04-15 14:36:31

CSS ne peut être utilisé que pour changer le style de quelque chose. Le mieux que vous pourriez probablement faire avec CSS pur est de masquer complètement le lien.

Ce dont vous avez vraiment besoin, c'est du javascript. Voici comment vous feriez ce que vous voulez en utilisant la bibliothèque jQuery.

$('a.current-page').click(function() { return false; });
119
répondu nickf 2010-01-19 05:01:27

CSS ne peut pas faire ça. CSS est pour la présentation seulement. Vos options sont:

  • N'incluez pas l'attribut href dans vos balises <a>.
  • Utilisez JavaScript, pour trouver les éléments d'ancrage avec ce class, et supprimer leurs href ou onclick attributs en conséquence. jQuery vous aiderait avec cela (NickF a montré comment faire quelque chose de similaire mais mieux).
32
répondu Kevin Conner 2010-01-19 05:13:56

Bootstrap Désactivé Lien

<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>

Bouton Bootstrap désactivé mais il ressemble à link

<button type="button" class="btn btn-link">Link</button>
28
répondu Jigar Bhatt 2018-04-15 14:44:38

, Vous pouvez définir href attribut javascript:void(0)

.disabled {
  /* Disabled link style */
  color: black;
}
<a class="disabled" href="javascript:void(0)">LINK</a>
19
répondu Xinus 2018-04-15 14:45:38

Si vous voulez vous en tenir à HTML / CSS sur un formulaire, une autre option consiste à utiliser un bouton. Stylez-le et définissez l'attribut disabled.

Par exemple. http://jsfiddle.net/cFTxH/1/

10
répondu Sebastian Patten 2012-12-27 18:05:26

La seule façon de le faire sans CSS serait de définir un CSS sur un div d'emballage qui a fait disparaître votre A 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 cela 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 purement CSS.

10
répondu fyjham 2018-04-15 14:46:21

Essayez ceci:

<style>
.btn-disable {
    display:inline-block;
    pointer-events: none;       
}
</style>
9
répondu Benk 2014-09-26 05:05:15

Si vous voulez que ce soit uniquement CSS, la logique de désactivation doit être définie par CSS.

Pour déplacer la logique dans les définitions CSS, vous devrez utiliser des sélecteurs d'attributs. Voici quelques exemples :

Désactiver le lien qui a un href exact: =

Vous pouvez choisir de désactiver les liens qui contiennent une valeur href spécifique comme ceci:

<a href="//website.com/exact/path">Exact path</a>

[href="//website.com/exact/path"]{
  pointer-events: none;
}

Désactiver un lien qui contient un morceau de chemin: *=

Ici, tout lien contenant /keyword/ dans path sera désactivé

<a href="//website.com/keyword/in/path">Contains in path</a>

[href*="/keyword/"]{
  pointer-events: none;
}

Désactiver un lien qui commence par: ^=

L'opérateur [attribute^=value] cible un attribut qui commence par une valeur spécifique. Vous permet d'ignorer 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 en https. Par exemple:

a:not([href^="https://"]){
  pointer-events: none;
}

Désactiver un lien qui se termine par: $=

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 fichiers.

<a href="/path/to/file.pdf">Link to pdf</a>

[href$=".pdf"]{
  pointer-events: none;
}

Ou tout autre attribut

Css peut cibler n'importe quel attribut HTML. Pourrait être rel, target, data-customet ainsi de suite...

<a href="#" target="_blank">Blank link</a>

[target=_blank]{
  pointer-events: none;
}

Combinaison de sélecteurs d'attributs

, Vous pouvez enchaîner plusieurs règles. Disons que vous voulez désactiver tous les liens externes, mais pas ceux qui pointent vers votre site Web:

a[href*="//"]:not([href*="my-website.com"]) {
    pointer-events: none;
}

Ou désactiver 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;
}

Prise en charge du Navigateur

Les sélecteurs D'attributs sont pris en charge depuis IE7. :not() sélecteur depuis IE9.

9
répondu Creaforge 2017-12-18 20:13:29

Le pointeur-événements propriété permet de contrôler la façon dont les éléments HTML répondre aux événements souris / tactile-y compris CSS hover / états actifs, cliquez / appuyez sur événements en Javascript, et si oui ou non le curseur est visible.

C'est Pas la seule façon de désactiver un lien , mais une bonne manière 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>
7
répondu Alireza 2017-11-21 11:29:55

J'ai cherché sur internet et trouvé rien de mieux que ce. Fondamentalement, pour désactiver la fonctionnalité de clic de bouton, ajoutez simplement le style CSS en utilisant jQuery comme ceci:

$("#myLink").css({ 'pointer-events': 'none' });

Ensuite, pour l'activer à nouveau, faites ceci

$("#myLink").css({ 'pointer-events': '' });

Vérifié sur Firefox et IE 11, cela a fonctionné.

5
répondu Faisal Mq 2015-08-21 07:58:13

Merci à tous ceux qui ont posté des solutions, j'ai combiné plusieurs approches pour fournir des fonctionnalités disabled plus avancées. Voici l'essentiel, 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
3
répondu kross 2014-10-16 20:53:25

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>
3
répondu javad shariaty 2017-04-15 07:28:24

Démo ici
Essayez celui-ci

$('html').on('click', 'a.Link', function(event){
    event.preventDefault();
});
2
répondu Suresh Pattu 2014-04-09 12:40:07

Vous pouvez également dimensionner un autre élément pour qu'il couvre les liens (en utilisant le bon index z): cela va "manger" les clics.

(nous avons découvert cela par accident parce que nous avons eu un problème avec des liens soudainement inactifs en raison de la conception "réactive" provoquant un H2 pour les couvrir lorsque la fenêtre du navigateur était de taille mobile.)

1
répondu Tor Iver Wilhelmsen 2014-04-01 06:59:08

J'ai utilisé:

.current-page a:hover {
pointer-events: none !important;
}

Et n'était pas suffisant; dans certains navigateurs, il affichait toujours le lien, clignotant.

J'ai dû ajouter:

.current-page a {
cursor: text !important;
}
1
répondu Pablo Molina 2018-09-19 11:42:56

Il 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 à:

Veuillez noter que les text-decoration: none; et color: black; ne sont pas nécessaires mais que le lien ressemble davantage à du texte brut.

0
répondu Judah rogan 2017-12-18 19:16:02

pointer-events:none désactivera le lien:

.disabled {
       pointer-events:none;
}
<a href="#" class="disabled">link</a>
0
répondu Nikki 2018-03-20 06:11:51

<a href="#!">1) Link With Non-directed url</a><br><br>

<a href="#!" disabled >2) Link With with disable url</a><br><br>
0
répondu Rudra 2018-05-22 13:49:26