Ob ein Link verwendet werden soll oder nicht, ist semantischer als der Präsentationswert. Es sollte nicht durch CSS deaktiviert werden, sondern durch Verwendung des hiddenAttributs, das für jedes HTML-Element gilt. CSS kann dann verwendet werden, um z. B. a[hidden]Anker auszuwählen und entsprechend zu formatieren .
Amn
@amn, aber ich glaube nicht, dass Browser ein Element mit dem versteckten Attribut anzeigen, so dass das Styling umstritten ist.
user1794469
1
@ user1794469 Sie werden, wenn Sie sie anweisen, mit CSS display: blockbeispielsweise oder einen anderen Wert für zu verwenden display. Ist hiddenaber nicht immer anwendbar - es ist für Elemente, die irrelevant sind , und aus der Frage ist nicht unklar, warum der Link deaktiviert werden sollte. Dies ist wahrscheinlich ein Fall von XY-Problem.
Amn
Antworten:
1348
Die Antwort ist bereits in den Kommentaren der Frage. Für mehr Sichtbarkeit kopiere ich diese Lösung hier:
Warnung: Die Verwendung pointer-eventsin CSS für Nicht-SVG-Elemente ist experimentell. Die Funktion war früher Teil des Entwurfs der CSS3-Benutzeroberfläche, wurde jedoch aufgrund vieler offener Probleme auf CSS4 verschoben.
Dies vermeidet auch nicht, auf den Link zu tippen und ihn dann einzugeben.
Jono
4
Wenn Sie es ein wenig stylen würden, damit der Benutzer sehen kann, dass es deaktiviert ist. Geben Sie ihm etwas Deckkraft: .2
DNRN
4
Dies funktioniert jetzt in allen modernen Browsern, einschließlich IE 11. Wenn Sie Unterstützung für IE 10 und niedriger benötigen, können Sie eine JavaScript-Polyfüllung wie diese verwenden .
Keavon
26
Wichtiger Hinweis: Dadurch wird nur das Klicken deaktiviert, nicht der eigentliche Link. Sie können weiterhin Tabulatortaste + Eingabetaste verwenden, um auf den Link zu "klicken".
Pikamander2
11
Verwendung pointer-events: none;ist nicht perfekt. Außerdem werden andere Ereignisse deaktiviert, z. B. das Schweben, das für die Anzeige title="…"oder QuickInfos erforderlich ist . Ich fand die JS-Lösung besser (mit event.preventDefault();) zusammen mit etwas CSS ( cursor: default; opacity: 0.4;) und einem Tooltip, der erklärt, warum der Link deaktiviert ist.
Für Stil, versuchen zu ändern pointer-events:none;auf pointer-events:unset;. Dann kann der Cursor auf geändert werden cursor:not-allowed;. Dies gibt einen besseren Hinweis darauf, was für den Benutzer vor sich geht. Scheint ab heute in FF, Edge, Chrome, Opera und Brave zu funktionieren.
Sablefoste
@Sablefoste Das funktioniert bei mir in Chrome 60 nicht. Der Cursor ist zwar not-allowed, aber der Link bleibt anklickbar.
Suppenhund
122
CSS kann nur verwendet werden, um den Stil von etwas zu ändern. Das Beste, was Sie mit reinem CSS wahrscheinlich tun können, ist, den Link vollständig auszublenden.
Was Sie wirklich brauchen, ist etwas Javascript. So können Sie mithilfe der jQuery-Bibliothek das tun, was Sie möchten.
Vergessen Sie nicht, Standardverhalten zu verhindern : function(ev){ ev.preventDefault(); ev.stopPropagation(); return false;.
ldiqual
5
@ Idiqual, return falsemacht das
Nickf
1
return falsefunktioniert nur, wenn die Aktion mit dem hrefAttribut
Justin
Diese Version kann auch verwendet werden, um Klicks zu deaktivieren, während andere Zeigerereignisse wie: Hover oder: Focus beibehalten werden! Top Antwort!
Charlie Tupman
Obwohl dies in allen Browsern funktioniert, ist das Klicken auf einen Link nur deaktiviert. Beachten Sie, dass viele Benutzer verwendet werden, um Links über das Kontextmenü oder über die mittlere Maustaste zu öffnen.
Alexandru Severin
33
CSS kann das nicht. CSS dient nur zur Präsentation. Ihre Optionen sind:
Fügen Sie das hrefAttribut nicht in Ihre <a>Tags ein.
Verwenden Sie JavaScript, um die Ankerelemente damit zu finden class, und entfernen Sie deren hrefoder onclickAttribute entsprechend. jQuery würde Ihnen dabei helfen (NickF hat gezeigt, wie man etwas Ähnliches, aber Besseres macht).
Das ist keine richtige Antwort - Zeigerereignisse: keine; CSS kann es deaktivieren.
Pie6k
Daran habe ich nicht gedacht! Oder war das Attribut 2010 noch nicht vorhanden? In jedem Fall ist es wahr, dass pointer-events: noneMausereignisse deaktiviert werden können. Der zugrunde liegende Link wird jedoch nicht deaktiviert. In einem Test, den ich in Chrome 81 ausprobiert habe, kann ich einen solchen Link weiterhin aktivieren, indem ich darauf tippe und die Eingabetaste eingebe.
Ich denke a[disabled]:active { pointer-events: none !important; }ist besser.
Masamoto Miyata
10
Wenn Sie sich in einem Formular nur an HTML / CSS halten möchten, können Sie auch eine Schaltfläche verwenden. Gestalte es und setze das disabledAttribut.
Deaktivieren Sie einen Link, der einen Pfad enthält: *=
Hier wird jeder Link /keyword/im Pfad deaktiviert
<ahref="//website.com/keyword/in/path">Contains in path</a>
[href*="/keyword/"]{
pointer-events: none;
}
Deaktivieren Sie einen Link, der beginnt mit: ^=
Der [attribute^=value]Operator zielt auf ein Attribut ab, das mit einem bestimmten Wert beginnt. Ermöglicht das Verwerfen von Websites und Stammpfaden.
<ahref="//website.com/begins/with/path">Begins with path</a>
[href^="//website.com/begins/with"]{
pointer-events: none;
}
Sie können es sogar verwenden, um Nicht-https-Links zu deaktivieren. Beispielsweise :
a:not([href^="https://"]){
pointer-events: none;}
Deaktivieren Sie einen Link, der endet mit: $=
Der [attribute$=value]Operator zielt auf ein Attribut ab, das mit einem bestimmten Wert endet. Es kann nützlich sein, Dateierweiterungen zu verwerfen.
<ahref="/path/to/file.pdf">Link to pdf</a>
[href$=".pdf"]{
pointer-events: none;
}
Oder irgendein anderes Attribut
CSS kann auf jedes HTML-Attribut abzielen. Könnte sein rel, target, data-customund so weiter ...
Sie können mehrere Regeln verketten. Angenommen, Sie möchten jeden externen Link deaktivieren, nicht jedoch diejenigen, die auf Ihre Website verweisen:
Wie deaktiviere ich einen Link mit deaktiviertem Selektor? zB <a class="test" disabled ">3"> Test </a> a: disabled {Cursor: nicht erlaubt; }
Ecasper
10
Eine Möglichkeit, dies mit CSS zu tun, besteht darin, ein CSS für eine Umhüllung festzulegen div, die so eingestellt ist, dass sie verschwindet und etwas anderes an ihre Stelle tritt.
Um das auszuschalten a, müssen Sie das Klickereignis oder href, wie von anderen beschrieben , ersetzen .
PS: Nur um zu verdeutlichen, würde ich dies als eine ziemlich unordentliche Lösung betrachten, und für SEO ist es auch nicht die beste, aber ich glaube, es ist die beste mit reinem CSS.
Mit der Eigenschaft Zeigerereignisse können Sie steuern, wie HTML-Elemente auf Maus- / Berührungsereignisse reagieren - einschließlich CSS-Hover- / Aktivstatus, Klick- / Tippereignisse in Javascript und ob der Cursor sichtbar ist oder nicht.
Dies ist nicht die einzige Möglichkeit , einen Link zu deaktivieren , sondern eine gute CSS-Methode, die in IE10 + und allen neuen Browsern funktioniert:
.current-page {pointer-events: none;color: grey;}
<ahref="#"class="current-page">This link is disabled</a>
Ich suchte Internet über und fand nicht besser als diese . Um die Funktion zum Klicken auf Schaltflächen zu deaktivieren, fügen Sie einfach den CSS-Stil mit jQuery wie folgt hinzu:
$("#myLink").css({'pointer-events':'none'});
Führen Sie dies dann aus, um es erneut zu aktivieren
$("#myLink").css({'pointer-events':''});
Auf Firefox und IE 11 überprüft, hat es funktioniert.
Dank all derer, die Lösungen veröffentlicht haben, habe ich mehrere Ansätze kombiniert, um erweiterte disabledFunktionen bereitzustellen . Hier ist ein Kern , und der Code ist unten.
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()
Hier ist die Coffescript-Klasse:
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
Hallo !!, Antwort geht um CSSnichts JSoder nichts anderes!
Mehdi Dehghani
1
Sie können auch ein anderes Element so dimensionieren, dass es die Links abdeckt (mithilfe des rechten Z-Index): Dadurch werden die Klicks "aufgefressen".
(Wir haben dies zufällig entdeckt, weil wir ein Problem mit plötzlich inaktiven Links hatten, weil das "reaktionsschnelle" Design dazu führte, dass ein H2 sie abdeckte, wenn das Browserfenster eine mobile Größe hatte.)
Deine Geige funktioniert nicht! Der Link ist in Chrome noch aktiv.
Matt Byrne
Um diesen Code zu reparieren, tauschen Sie die ersten beiden Parameter aus, die an on () übergeben wurden: $ ('html'). On ('click', 'a.Link', function (event) {event.preventDefault ();});
2C-B
1
Hallo !!, Antwort geht um CSSnichts JSoder nichts anderes!
Mehdi Dehghani
0
Ein weiterer Trick besteht darin, ein unsichtbares Element darüber zu platzieren. Dadurch werden auch alle Hover-Effekte deaktiviert
hidden
Attributs, das für jedes HTML-Element gilt. CSS kann dann verwendet werden, um z. B.a[hidden]
Anker auszuwählen und entsprechend zu formatieren .display: block
beispielsweise oder einen anderen Wert für zu verwendendisplay
. Isthidden
aber nicht immer anwendbar - es ist für Elemente, die irrelevant sind , und aus der Frage ist nicht unklar, warum der Link deaktiviert werden sollte. Dies ist wahrscheinlich ein Fall von XY-Problem.Antworten:
Die Antwort ist bereits in den Kommentaren der Frage. Für mehr Sichtbarkeit kopiere ich diese Lösung hier:
Informationen zur Browserunterstützung finden Sie unter https://caniuse.com/#feat=pointer-events . Wenn Sie IE unterstützen müssen, gibt es eine Problemumgehung. siehe diese Antwort .
Warnung: Die Verwendung
pointer-events
in CSS für Nicht-SVG-Elemente ist experimentell. Die Funktion war früher Teil des Entwurfs der CSS3-Benutzeroberfläche, wurde jedoch aufgrund vieler offener Probleme auf CSS4 verschoben.quelle
pointer-events: none;
ist nicht perfekt. Außerdem werden andere Ereignisse deaktiviert, z. B. das Schweben, das für die Anzeigetitle="…"
oder QuickInfos erforderlich ist . Ich fand die JS-Lösung besser (mitevent.preventDefault();
) zusammen mit etwas CSS (cursor: default; opacity: 0.4;
) und einem Tooltip, der erklärt, warum der Link deaktiviert ist.quelle
pointer-events:none;
aufpointer-events:unset;
. Dann kann der Cursor auf geändert werdencursor:not-allowed;
. Dies gibt einen besseren Hinweis darauf, was für den Benutzer vor sich geht. Scheint ab heute in FF, Edge, Chrome, Opera und Brave zu funktionieren.not-allowed
, aber der Link bleibt anklickbar.CSS kann nur verwendet werden, um den Stil von etwas zu ändern. Das Beste, was Sie mit reinem CSS wahrscheinlich tun können, ist, den Link vollständig auszublenden.
Was Sie wirklich brauchen, ist etwas Javascript. So können Sie mithilfe der jQuery-Bibliothek das tun, was Sie möchten.
quelle
function(ev){ ev.preventDefault(); ev.stopPropagation(); return false;
.return false
macht dasreturn false
funktioniert nur, wenn die Aktion mit demhref
AttributCSS kann das nicht. CSS dient nur zur Präsentation. Ihre Optionen sind:
href
Attribut nicht in Ihre<a>
Tags ein.class
, und entfernen Sie derenhref
oderonclick
Attribute entsprechend. jQuery würde Ihnen dabei helfen (NickF hat gezeigt, wie man etwas Ähnliches, aber Besseres macht).quelle
pointer-events: none
Mausereignisse deaktiviert werden können. Der zugrunde liegende Link wird jedoch nicht deaktiviert. In einem Test, den ich in Chrome 81 ausprobiert habe, kann ich einen solchen Link weiterhin aktivieren, indem ich darauf tippe und die Eingabetaste eingebe.Bootstrap Disabled Link
Bootstrap Disabled Button, aber es sieht aus wie ein Link
quelle
Sie können das
href
Attribut auf setzenjavascript:void(0)
quelle
Ich benutzte:
Und war nicht genug; In einigen Browsern wird der Link weiterhin angezeigt und blinkt.
Ich musste hinzufügen:
quelle
a[disabled]:active { pointer-events: none !important; }
ist besser.Wenn Sie sich in einem Formular nur an HTML / CSS halten möchten, können Sie auch eine Schaltfläche verwenden. Gestalte es und setze das
disabled
Attribut.ZB http://jsfiddle.net/cFTxH/1/
quelle
Wenn Sie möchten, dass es sich nur um CSS handelt, sollte die Deaktivierungslogik durch CSS definiert werden.
Um die Logik in den CSS-Definitionen zu verschieben, müssen Sie Attributselektoren verwenden. Hier sind einige Beispiele :
Deaktivieren Sie einen Link mit einer genauen href:
=
Sie können Links deaktivieren, die einen bestimmten href-Wert enthalten, wie folgt:
Deaktivieren Sie einen Link, der einen Pfad enthält:
*=
Hier wird jeder Link
/keyword/
im Pfad deaktiviertDeaktivieren Sie einen Link, der beginnt mit:
^=
Der
[attribute^=value]
Operator zielt auf ein Attribut ab, das mit einem bestimmten Wert beginnt. Ermöglicht das Verwerfen von Websites und Stammpfaden.Sie können es sogar verwenden, um Nicht-https-Links zu deaktivieren. Beispielsweise :
Deaktivieren Sie einen Link, der endet mit:
$=
Der
[attribute$=value]
Operator zielt auf ein Attribut ab, das mit einem bestimmten Wert endet. Es kann nützlich sein, Dateierweiterungen zu verwerfen.Oder irgendein anderes Attribut
CSS kann auf jedes HTML-Attribut abzielen. Könnte sein
rel
,target
,data-custom
und so weiter ...Attributselektoren kombinieren
Sie können mehrere Regeln verketten. Angenommen, Sie möchten jeden externen Link deaktivieren, nicht jedoch diejenigen, die auf Ihre Website verweisen:
Oder deaktivieren Sie Links zu PDF-Dateien einer bestimmten Website:
Browser-Unterstützung
Attributselektoren werden seit IE7 unterstützt.
:not()
Selektor seit IE9.quelle
Eine Möglichkeit, dies mit CSS zu tun, besteht darin, ein CSS für eine Umhüllung festzulegen
div
, die so eingestellt ist, dass sie verschwindet und etwas anderes an ihre Stelle tritt.Z.B:
Mit einem CSS wie
Um das auszuschalten
a
, müssen Sie das Klickereignis oderhref
, wie von anderen beschrieben , ersetzen .PS: Nur um zu verdeutlichen, würde ich dies als eine ziemlich unordentliche Lösung betrachten, und für SEO ist es auch nicht die beste, aber ich glaube, es ist die beste mit reinem CSS.
quelle
Versuche dies:
quelle
Dies ist nicht die einzige Möglichkeit , einen Link zu deaktivieren , sondern eine gute CSS-Methode, die in IE10 + und allen neuen Browsern funktioniert:
quelle
Ich suchte Internet über und fand nicht besser als diese . Um die Funktion zum Klicken auf Schaltflächen zu deaktivieren, fügen Sie einfach den CSS-Stil mit jQuery wie folgt hinzu:
Führen Sie dies dann aus, um es erneut zu aktivieren
Auf Firefox und IE 11 überprüft, hat es funktioniert.
quelle
Sie können diese CSS verwenden:
quelle
Dank all derer, die Lösungen veröffentlicht haben, habe ich mehrere Ansätze kombiniert, um erweiterte
disabled
Funktionen bereitzustellen . Hier ist ein Kern , und der Code ist unten.Hier ist die Coffescript-Klasse:
quelle
CSS
nichtsJS
oder nichts anderes!Sie können auch ein anderes Element so dimensionieren, dass es die Links abdeckt (mithilfe des rechten Z-Index): Dadurch werden die Klicks "aufgefressen".
(Wir haben dies zufällig entdeckt, weil wir ein Problem mit plötzlich inaktiven Links hatten, weil das "reaktionsschnelle" Design dazu führte, dass ein H2 sie abdeckte, wenn das Browserfenster eine mobile Größe hatte.)
quelle
Demo hier
Probieren Sie diese aus
quelle
CSS
nichtsJS
oder nichts anderes!Ein weiterer Trick besteht darin, ein unsichtbares Element darüber zu platzieren. Dadurch werden auch alle Hover-Effekte deaktiviert
quelle
Es ist möglich, dies in CSS zu tun
Siehe unter:
Bitte beachten Sie, dass das
text-decoration: none;
undcolor: black;
nicht benötigt wird, der Link jedoch eher wie einfacher Text aussieht.quelle
pointer-events:none
wird den Link deaktivieren:quelle
quelle