È possibile rendere un tag di ancoraggio HTML non selezionabile / collegabile tramite CSS?


132

Ad esempio se ho questo:

<a style="" href="page.html">page link</a>

C'è qualcosa che posso usare per l'attributo style che lo renderà così il link non è cliccabile e non mi porterà a page.html?

Oppure, è la mia unica opzione per non semplicemente racchiudere il "collegamento di pagina" in un tag di ancoraggio?

Modifica: voglio dire perché voglio farlo in modo che le persone possano essere in grado di fornire consigli migliori. Sto cercando di configurare la mia applicazione in modo che lo sviluppatore possa scegliere il tipo di stile di navigazione che desidera.

Quindi, ho un elenco di collegamenti e uno è sempre selezionato e tutti gli altri no. Per i collegamenti che non sono selezionati, ovviamente voglio che siano normali tag di ancoraggio cliccabili. Ma per il collegamento selezionato, alcune persone preferiscono che il collegamento rimanga cliccabile mentre ad altri piace renderlo non selezionabile.

Ora potrei facilmente non programmare a livello di codice un tag di ancoraggio attorno al collegamento selezionato. Ma immagino che sarà più elegante se posso sempre avvolgere il collegamento selezionato in qualcosa del tipo:

<a id="current" href="link.html">link</a>

e quindi lascia che lo sviluppatore controlli lo stile di collegamento tramite CSS.



3
Se non vuoi che venga cliccato, potresti usare un <span>invece?
David dice di reintegrare Monica il

Dovrei essere d'accordo con David. Non rompere i paradigmi dell'interfaccia utente. L'aspettativa di un utente è che si possano fare clic sui collegamenti. Se non è possibile fare clic, non è proprio un collegamento, vero?
Mrtsherman,

Controlla stackoverflow.com/questions/2091168/disable-a-link-using-css per alcune altre possibili risposte.
Oliver,

Sì, questa è un'idea terribile. Gli screen reader visualizzeranno comunque il collegamento come collegamento, poiché è un collegamento. Anche i motori di ricerca. In realtà, tutto ciò che comprende HTML. Non farlo Non c'è niente di "elegante" al riguardo.
Paul D. Waite,

Risposte:


268

Puoi usare questo css:

.inactiveLink {
   pointer-events: none;
   cursor: default;
}

E quindi assegna la classe al tuo codice html:

<a style="" href="page.html" class="inactiveLink">page link</a>

Rende il collegamento non selezionabile e lo stile del cursore una freccia, non una mano come i collegamenti.

o usa questo stile nell'html:

<a style="pointer-events: none; cursor: default;" href="page.html">page link</a>

ma suggerisco il primo approccio.


Posso confermare che funziona su Ubuntu versione di Firefox / Chrome. Mi chiedo se funzionerà su IE su Windows.
John Merlino,

3
La chiave di questa soluzione è: pointer-events. Qui il link per la tabella di compatibilità
masegaloeh

@JohnMerlino: non funziona in IE9. Vedi di più sul link di masegaloeh alla tabella di compatibilità
Howie,

Avvertenza: la tabulazione per spostare lo stato attivo sul collegamento e l'utilizzo di Invio per attivare il collegamento continueranno a funzionare
entro il

Non credo che il cursore: l'impostazione predefinita è necessaria. Finché hai eventi puntatore: nessuno, sembra funzionare.
Kloddant,

51

Questo non è troppo facile da fare con i CSS, poiché non è un linguaggio comportamentale (cioè JavaScript), l'unico modo semplice sarebbe usare un evento JavaScript OnClick sulla tua ancora e restituirlo come falso, questo è probabilmente il codice più breve potresti usare per quello:

<a href="page.html" onclick="return false">page link</a>

2
@Mike Questo fa sì che il clic non faccia nulla, ma il pulsante sembra ancora cliccabile.
Acostache,

1
@acostache using style = "cursor: default;" dovrebbe aiutare con il puntatore
John

4
La domanda era: "usare CSS", quindi questa è una risposta buona, ma non corretta.
Roman Holzner,

È meglio usare css piuttosto che onclick = "return false" per 3 motivi principali: 1- Con css puoi cambiare il cursore del mouse del collegamento predefinito con la freccia predefinita. 2- È invadente js. 3- Questo in realtà restituisce un valore, non si desidera restituire false ogni volta che si fa clic sul collegamento.
Diego Unanue,

11

Sì. È possibile utilizzare CSS

<a class="disable-me" href="page.html">page link</a>

.disable-me {
    pointer-events: none;
}

Questo è il modo più pulito, ma un avvertimento: è supportato solo su IE11 + caniuse.com
pixelfreak

8

O puramente HTML e CSS senza eventi:

<div style="z-index: 1; position: absolute;">
    <a style="visibility: hidden;">Page link</a>
</div>
<a href="page.html">Page link</a>

1
-1 perché questo è un modo piuttosto complicato / confuso per risolvere il problema. Inoltre, non fa davvero quello che fa la domanda (rendere il collegamento inattivo). Copre solo il collegamento con un elemento invisibile. La risposta di Diego è molto più pulita.
sviluppo il

@sviluppo Penso che anche la risposta di Diego sia migliore e debba essere votata più in alto e accettata. Tuttavia, quando ho scritto questa risposta (3 anni fa) non pointer-eventsavevo quasi alcun supporto per il browser.
Paul

@Paulpro Ho pensato che fosse il caso. Ci scusiamo per il downvote! Voglio solo assicurarti che la risposta più aggiornata sia in cima. Grazie per la risposta.
sviluppando il

6

Il CSS è stato progettato per influenzare la presentazione, non il comportamento.

Puoi usare un po 'di JavaScript.

document.links[0].onclick = function(event) {
   event.preventDefault();
};

5

Un modo più non invadente (supponendo che tu usi jQuery):

HTML:

<a id="my-link" href="page.html">page link</a>

Javascript:

$('#my-link').click(function(e)
{
    e.preventDefault();
});

Il vantaggio di questo è la netta separazione tra logica e presentazione. Se un giorno decidi che questo link farebbe qualcos'altro, non devi fare confusione con il markup, solo JS.


4
Sai che potresti facilmente scrivere codice non jQuery per fare la stessa cosa che verrebbe eseguita un po 'più velocemente: document.getElementById('my-link').onclick = function(){ return false; };
Paul

1
Penso che la maggior parte delle persone voglia (e dovrebbe) usare una sorta di framework per facilitare lo sviluppo. L'autore non ha specificato alcuna limitazione delle prestazioni, ma jQuery minimizzato e compresso è solo 31 KB. Penso che il vantaggio superi di gran lunga il costo.
pixelfreak,

2
Sul serio? Quale browser non supporta onclick o getElementById. Ok, quindi IE 2 non supporta onclick, ma non supportava anche CSS ... e dubito fortemente che il tuo codice jQuery funzionerà anche in IE 2.
Paul,

1
La differenza di velocità potrebbe essere piccola, ma non se non riesci a scaricare la libreria di jQuery. Non penso davvero che sia una buona idea usare incoraggiare l'uso di jQuery quando non ne hai bisogno, perché le persone diventano dipendenti da esso e dimenticano come scrivere Javascript senza di esso.
Paul,

4
@PaulPRO Questa discussione è discutibile senza i requisiti dell'autore. Ogni quadro ha il suo scopo. Se non parla fluentemente JS e sta semplicemente facendo un sito Web mom-n-pop e ha bisogno di manipolare qualche elemento DOM, sarebbe molto più facile per lui usare un framework. La tua riluttanza a usare qualsiasi framework è ridicola. PHP è scritto in C. Significa che dovresti scrivere C e non usare PHP? iOS ha UIKit, Core Data, Quartz, ecc. Flash ha tonnellate di librerie di terze parti comunemente usate. Ancora una volta, ogni quadro ha il suo scopo. Una mentalità purista e non integrata non aiuterà nessuno.
pixelfreak,

2

La risposta è:

<a href="page.html" onclick="return false">page link</a>

0

Può essere fatto in CSS ed è molto semplice. cambia la "a" in una "p". Il tuo "link alla pagina" non conduce comunque da qualche parte se vuoi renderlo non cliccabile.

Quando dici al tuo css di fare un'azione al passaggio del mouse su questa specifica "p" digli questo:

(per questo esempio ho dato alla "p" l'ID "esempio")

#example
{
  cursor:default;
}

Ora il tuo cursore rimarrà lo stesso di tutta la pagina.


-1
<a href="page.html" onclick="return false" style="cursor:default;">page link</a>

Non è necessario aggiungere una risposta separata per questo, il tuo commento sulla risposta di @KaranK è sufficiente, pensato. Si prega di evitare risposte duplicate.
MAChitgarha,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.