To, czy link powinien zostać użyty, czy nie, ma większą wartość semantyczną niż prezentacyjną. Nie należy go wyłączać za pomocą CSS, ale poprzez użycie hiddenatrybutu, który ma zastosowanie do dowolnego elementu HTML. CSS można następnie użyć do wybrania np. a[hidden]Zakotwiczenia i odpowiedniego stylu.
amn
@amn, ale nie sądzę, aby przeglądarki wyświetlały element z ukrytym atrybutem, więc stylizacja stanie się dyskusyjna.
user1794469
1
@ user1794469 Zrobią to, jeśli poinstruujesz ich, używając CSS, używając display: blockna przykład innej wartości display. Ale hiddennie zawsze ma to zastosowanie - dotyczy elementów, które są nieistotne , a pytanie nie jest jasne, dlaczego łącze powinno zostać wyłączone. Jest to prawdopodobnie przypadek problemu XY.
am
Odpowiedzi:
1347
Odpowiedź znajduje się już w komentarzach do pytania. Aby uzyskać lepszą widoczność, kopiuję to rozwiązanie tutaj:
Ostrzeżenie: użycie pointer-eventsw CSS elementów innych niż SVG jest eksperymentalne. Ta funkcja była częścią specyfikacji roboczej interfejsu CSS3, ale z powodu wielu otwartych problemów została przełożona na CSS4.
Ponadto nie pozwala to uniknąć tabulacji do linku, a następnie Enter.
Jono,
4
Jeśli chcesz go trochę stylizować, aby użytkownik zobaczył, że jest wyłączony. Daj mu trochę krycia: .2
DNRN
4
Działa to teraz we wszystkich nowoczesnych przeglądarkach, w tym IE 11. Jeśli potrzebujesz wsparcia dla IE 10 i niższych, możesz użyć polifillu JavaScript takiego jak ten .
Keavon
26
Ważna uwaga: Wyłącza to tylko klikanie, a nie sam link. Nadal możesz użyć tab + enter, aby „kliknąć” link.
Pikamander2
11
Użycie pointer-events: none;nie jest idealne. Wyłącza również inne zdarzenia, takie jak najechanie kursorem, które jest wymagane do wyświetlania title="…"lub podpowiedzi. Odkryłem, że rozwiązanie JS jest lepsze (za pomocą event.preventDefault();) wraz z niektórymi CSS ( cursor: default; opacity: 0.4;) i etykietą wyjaśniającą, dlaczego łącze jest wyłączone.
Aby uzyskać styl, spróbuj zmienić pointer-events:none;na pointer-events:unset;. Następnie kursor można zmienić na cursor:not-allowed;. To daje lepszą wskazówkę, co dzieje się z użytkownikiem. Na dzień dzisiejszy wydaje się działać w FF, Edge, Chrome, Opera i Brave.
Sablefoste,
@Sablefoste To nie działa dla mnie w Chrome 60. Kursor jest rzeczywiście not-allowed, ale link można kliknąć.
soupdog
122
CSS może być używany tylko do zmiany stylu czegoś. Najlepszym rozwiązaniem, które możesz zrobić z czystym CSS, jest całkowite ukrycie linku.
To, czego naprawdę potrzebujesz, to JavaScript. Oto, jak robisz, co chcesz, korzystając z biblioteki jQuery.
Nie zapomnij zapobiegania domyślnych zachowań: function(ev){ ev.preventDefault(); ev.stopPropagation(); return false;.
ldiqual
5
@Idiqual, return falserobi to
nickf
1
return falsedziała tylko wtedy, gdy akcja jest ustawiona za pomocą hrefatrybutu
Justin
Ta wersja może być również używana do wyłączania kliknięć przy jednoczesnym zachowaniu innych zdarzeń wskaźnika, takich jak: hover lub: focus! Najlepsza odpowiedź!
Charlie Tupman
Chociaż działa to we wszystkich przeglądarkach, wyłącza jedynie klikanie łącza. Pamiętaj, że wielu użytkowników używa się do otwierania łączy z menu kontekstowego lub za pomocą środkowego przycisku myszy.
Alexandru Severin
33
CSS nie może tego zrobić. CSS służy wyłącznie do prezentacji. Twoje opcje to:
Nie dołączaj hrefatrybutu do <a>tagów.
Użyj JavaScript, aby znaleźć elementy kotwiczące classi odpowiednio usunąć ich hreflub onclickatrybuty. jQuery ci w tym pomoże (NickF pokazał, jak zrobić coś podobnego, ale lepszego).
To nie jest poprawna odpowiedź - zdarzenia-wskaźniki: brak; css może to wyłączyć.
pie6k
Nie myślałem o tym! A może atrybut nie istniał jeszcze w 2010 roku? W każdym razie to prawda, że pointer-events: nonemoże wyłączyć zdarzenia myszy. Nie powoduje to jednak wyłączenia podstawowego łącza. W teście, który wypróbowałem w Chrome 81, nadal mogę aktywować taki link, przechodząc do niego i wciskając klawisz powrotu.
Jak wyłączyć link za pomocą wyłącznika wyboru? np. <a class="test" disabled href="3"> test </a> a: wyłączony {kursor: niedozwolony; }
ecasper
10
Jednym ze sposobów, w jaki możesz to zrobić za pomocą CSS, byłoby ustawienie CSS na opakowaniu div, które ustawiłeś tak, aby znikało i dzieje się coś innego.
Właściwość pointer-events pozwala kontrolować, w jaki sposób elementy HTML reagują na zdarzenia myszy / dotyku - w tym najechanie kursorem / aktywne stany CSS, zdarzenia kliknięcia / dotknięcia w JavaScript oraz czy kursor jest widoczny.
To nie jedyny sposób na wyłączenie linku , ale dobry sposób CSS, który działa w IE10 + i wszystkich nowych przeglądarkach:
.current-page {pointer-events: none;color: grey;}
<ahref="#"class="current-page">This link is disabled</a>
Szukałem przez Internet i nie znalazłem nic lepszego niż to . Zasadniczo, aby wyłączyć funkcję kliknięcia przycisku, po prostu dodaj styl CSS za pomocą jQuery:
Dzięki wszystkim, którzy opublikowali rozwiązania, połączyłem wiele metod, aby zapewnić bardziej zaawansowane disabledfunkcje. Oto sedno , a kod znajduje się poniżej.
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()
Oto klasa 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
Cześć !!, odpowiedź dotyczy CSSnie JSlub czegoś innego!
Mehdi Dehghani
1
Możesz także zmienić rozmiar innego elementu, tak aby obejmował on linki (używając prawego indeksu Z): To „zje” kliknięcia.
(Odkryliśmy to przez przypadek, ponieważ mieliśmy problem z nagle nieaktywnymi linkami z powodu „responsywnego” projektu powodującego, że H2 zakrył je, gdy okno przeglądarki miało rozmiar mobilny).
Twoje skrzypce nie działa! Link jest nadal aktywny w Chrome.
Matt Byrne
Aby naprawić ten kod, zamień dwa pierwsze parametry przekazane do on (): $ ('html'). On ('click', 'a.Link', function (event) {event.preventDefault ();});
2C-B
1
Cześć !!, odpowiedź dotyczy CSSnie JSlub czegoś innego!
Mehdi Dehghani
0
Kolejną sztuczką jest umieszczenie nad nim niewidzialnego elementu. Spowoduje to również wyłączenie wszelkich efektów aktywowania
hidden
atrybutu, który ma zastosowanie do dowolnego elementu HTML. CSS można następnie użyć do wybrania np.a[hidden]
Zakotwiczenia i odpowiedniego stylu.display: block
na przykład innej wartościdisplay
. Alehidden
nie zawsze ma to zastosowanie - dotyczy elementów, które są nieistotne , a pytanie nie jest jasne, dlaczego łącze powinno zostać wyłączone. Jest to prawdopodobnie przypadek problemu XY.Odpowiedzi:
Odpowiedź znajduje się już w komentarzach do pytania. Aby uzyskać lepszą widoczność, kopiuję to rozwiązanie tutaj:
Aby uzyskać pomoc dotyczącą przeglądarki, zobacz https://caniuse.com/#feat=pointer-events . Jeśli potrzebujesz obsługi IE, istnieje obejście tego problemu; zobacz tę odpowiedź .
Ostrzeżenie: użycie
pointer-events
w CSS elementów innych niż SVG jest eksperymentalne. Ta funkcja była częścią specyfikacji roboczej interfejsu CSS3, ale z powodu wielu otwartych problemów została przełożona na CSS4.źródło
pointer-events: none;
nie jest idealne. Wyłącza również inne zdarzenia, takie jak najechanie kursorem, które jest wymagane do wyświetlaniatitle="…"
lub podpowiedzi. Odkryłem, że rozwiązanie JS jest lepsze (za pomocąevent.preventDefault();
) wraz z niektórymi CSS (cursor: default; opacity: 0.4;
) i etykietą wyjaśniającą, dlaczego łącze jest wyłączone.źródło
pointer-events:none;
napointer-events:unset;
. Następnie kursor można zmienić nacursor:not-allowed;
. To daje lepszą wskazówkę, co dzieje się z użytkownikiem. Na dzień dzisiejszy wydaje się działać w FF, Edge, Chrome, Opera i Brave.not-allowed
, ale link można kliknąć.CSS może być używany tylko do zmiany stylu czegoś. Najlepszym rozwiązaniem, które możesz zrobić z czystym CSS, jest całkowite ukrycie linku.
To, czego naprawdę potrzebujesz, to JavaScript. Oto, jak robisz, co chcesz, korzystając z biblioteki jQuery.
źródło
function(ev){ ev.preventDefault(); ev.stopPropagation(); return false;
.return false
robi toreturn false
działa tylko wtedy, gdy akcja jest ustawiona za pomocąhref
atrybutuCSS nie może tego zrobić. CSS służy wyłącznie do prezentacji. Twoje opcje to:
href
atrybutu do<a>
tagów.class
i odpowiednio usunąć ichhref
lubonclick
atrybuty. jQuery ci w tym pomoże (NickF pokazał, jak zrobić coś podobnego, ale lepszego).źródło
pointer-events: none
może wyłączyć zdarzenia myszy. Nie powoduje to jednak wyłączenia podstawowego łącza. W teście, który wypróbowałem w Chrome 81, nadal mogę aktywować taki link, przechodząc do niego i wciskając klawisz powrotu.Łącze wyłączone Bootstrap
Bootstrap Disabled Button, ale wygląda jak link
źródło
Możesz ustawić
href
atrybut najavascript:void(0)
źródło
Użyłem:
I nie wystarczyło; w niektórych przeglądarkach nadal migał link.
Musiałem dodać:
źródło
a[disabled]:active { pointer-events: none !important; }
jest lepiej.Jeśli chcesz trzymać się tylko HTML / CSS w formularzu, inną opcją jest użycie przycisku. Nadaj mu styl i ustaw
disabled
atrybut.Np. Http://jsfiddle.net/cFTxH/1/
źródło
Jeśli chcesz, aby był to tylko CSS, logika wyłączająca powinna być zdefiniowana przez CSS.
Aby przenieść logikę w definicjach CSS, musisz użyć selektorów atrybutów. Oto kilka przykładów:
Wyłącz link, który ma dokładny href:
=
Możesz wyłączyć łącza zawierające określoną wartość href, taką jak:
Wyłącz link zawierający fragment ścieżki:
*=
Tutaj wszelkie linki zawierające
/keyword/
w ścieżce zostaną wyłączoneWyłącz link zaczynający się od:
^=
[attribute^=value]
cel atrybutem, który zaczyna się od wartości konkretnego operatora. Pozwala odrzucić strony internetowe i ścieżki root.Możesz nawet użyć go do wyłączenia linków innych niż https. Na przykład :
Wyłącz link, który kończy się na:
$=
[attribute$=value]
Operatorowi kierowanie atrybutu, który kończy się specyficzną wartość. Przydatne może być odrzucenie rozszerzeń plików.Lub jakikolwiek inny atrybut
Css może kierować na dowolny atrybut HTML. Może być
rel
,target
,data-custom
i tak dalej ...Łączenie selektorów atrybutów
Możesz połączyć wiele reguł. Powiedzmy, że chcesz wyłączyć wszystkie linki zewnętrzne, ale nie te, które prowadzą do Twojej witryny:
Lub wyłącz linki do plików pdf określonej witryny:
Obsługa przeglądarki
Selektory atrybutów są obsługiwane od IE7.
:not()
selektor od IE9.źródło
Jednym ze sposobów, w jaki możesz to zrobić za pomocą CSS, byłoby ustawienie CSS na opakowaniu
div
, które ustawiłeś tak, aby znikało i dzieje się coś innego.Na przykład:
Z CSS jak
Aby faktycznie wyłączyć
a
, musisz zastąpić zdarzenie kliknięcia lubhref
, jak to opisali inni.PS: Aby wyjaśnić, uważam to za dość nieporządne rozwiązanie, a dla SEO też nie jest najlepsze, ale uważam, że jest najlepsze z czysto CSS.
źródło
Spróbuj tego:
źródło
To nie jedyny sposób na wyłączenie linku , ale dobry sposób CSS, który działa w IE10 + i wszystkich nowych przeglądarkach:
źródło
Szukałem przez Internet i nie znalazłem nic lepszego niż to . Zasadniczo, aby wyłączyć funkcję kliknięcia przycisku, po prostu dodaj styl CSS za pomocą jQuery:
Następnie, aby włączyć to ponownie, zrób to
Sprawdzone na Firefox i IE 11, działało.
źródło
możesz użyć tego css:
źródło
Dzięki wszystkim, którzy opublikowali rozwiązania, połączyłem wiele metod, aby zapewnić bardziej zaawansowane
disabled
funkcje. Oto sedno , a kod znajduje się poniżej.Oto klasa coffescript:
źródło
CSS
nieJS
lub czegoś innego!Możesz także zmienić rozmiar innego elementu, tak aby obejmował on linki (używając prawego indeksu Z): To „zje” kliknięcia.
(Odkryliśmy to przez przypadek, ponieważ mieliśmy problem z nagle nieaktywnymi linkami z powodu „responsywnego” projektu powodującego, że H2 zakrył je, gdy okno przeglądarki miało rozmiar mobilny).
źródło
Demo tutaj
Wypróbuj ten
źródło
CSS
nieJS
lub czegoś innego!Kolejną sztuczką jest umieszczenie nad nim niewidzialnego elementu. Spowoduje to również wyłączenie wszelkich efektów aktywowania
źródło
Można to zrobić w CSS
Patrz w:
Pamiętaj, że
text-decoration: none;
icolor: black;
nie jest potrzebne, ale sprawia, że link wygląda bardziej jak zwykły tekst.źródło
pointer-events:none
wyłączy link:źródło
źródło