Apakah mungkin membuat tag anchor HTML tidak dapat diklik / ditautkan menggunakan CSS?

132

Sebagai contoh jika saya memiliki ini:

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

Apakah ada yang bisa saya gunakan untuk atribut style yang akan membuatnya sehingga tautan tidak dapat diklik dan tidak akan membawa saya ke page.html?

Atau, apakah satu-satunya pilihan saya untuk tidak membungkus 'tautan halaman' dalam tag jangkar?

Edit: Saya ingin menyatakan mengapa saya ingin melakukan ini sehingga orang mungkin dapat memberikan saran yang lebih baik. Saya mencoba mengatur aplikasi saya sehingga pengembang dapat memilih jenis gaya navigasi yang mereka inginkan.

Jadi, saya punya daftar tautan dan satu selalu dipilih saat ini dan yang lainnya tidak. Untuk tautan yang tidak dipilih, saya jelas ingin itu menjadi tag jangkar yang dapat diklik normal. Tetapi untuk tautan yang dipilih, beberapa orang lebih suka bahwa tautan itu tetap dapat diklik sementara yang lain suka membuatnya tidak dapat diklik.

Sekarang saya bisa dengan mudah hanya secara program tidak membungkus jangkar tag di sekitar tautan yang dipilih. Tapi saya pikir itu akan lebih elegan jika saya selalu dapat membungkus tautan yang dipilih dalam sesuatu seperti:

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

dan kemudian biarkan pengembang mengontrol gaya penautan melalui CSS.

Ryan
sumber
3
Jika Anda tidak ingin diklik, mungkin gunakan <span>saja?
David berkata mengembalikan Monica
Saya harus setuju dengan David. Jangan merusak paradigma UI. Harapan pengguna adalah tautan dapat diklik. Jika tidak bisa diklik maka itu bukan tautan, bukan?
mrtsherman
Lihat stackoverflow.com/questions/2091168/disable-a-link-using-css untuk beberapa jawaban yang lebih mungkin.
Oliver
Ya, ini ide yang buruk. Pembaca layar akan tetap melihat tautan sebagai tautan, karena itu tautan. Mesin pencari juga. Bahkan, apa pun yang mengerti HTML. Jangan lakukan ini. Tidak ada yang "elegan" tentang itu.
Paul D. Waite

Jawaban:

268

Anda dapat menggunakan css ini:

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

Dan kemudian menetapkan kelas ke kode html Anda:

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

Itu membuat tautan tidak dapat diklik dan kursor memberi tanda panah, bukan tangan seperti yang dimiliki tautan.

atau gunakan gaya ini di html:

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

tapi saya sarankan pendekatan pertama.

Diego Unanue
sumber
Saya dapat mengkonfirmasi ini berfungsi pada versi Ubuntu Firefox / Chrome. Ingin tahu apakah itu akan bekerja pada IE pada Windows.
JohnMerlino
3
Kunci dalam solusi ini adalah: pointer-events. Di sini tautan untuk kompatibilitas-tabel
masegaloeh
@ JohnMerlino: tidak berfungsi di IE9. Lihat lebih lanjut di tautan masegaloeh ke tabel kompatibilitas
Howie
Peringatan: Tabbing untuk memindahkan fokus ke tautan dan menggunakan Enter untuk mengaktifkan tautan masih akan berfungsi
wtho
Saya tidak berpikir kursor: standar diperlukan. Selama Anda memiliki pointer-events: tidak ada, yang tampaknya berfungsi.
kloddant
51

Itu tidak terlalu mudah dilakukan dengan CSS, karena itu bukan bahasa perilaku (yaitu JavaScript), satu-satunya cara mudah adalah dengan menggunakan Acara OnClick JavaScript pada jangkar Anda dan mengembalikannya sebagai false, ini mungkin kode yang terpendek Anda dapat menggunakannya untuk itu:

<a href="page.html" onclick="return false">page link</a>
Karan K
sumber
2
@ Mike Yang ini membuat klik tidak melakukan apa-apa, tetapi tombol masih terlihat dapat diklik.
acostache
1
@acostache menggunakan style = "cursor: default;" harus membantu dengan pointer
John
4
Pertanyaannya adalah: "menggunakan CSS", jadi ini adalah jawaban yang bagus, tetapi bukan yang benar.
Roman Holzner
Lebih baik menggunakan css daripada onclick = "return false" karena 3 alasan utama: 1- Dengan css Anda dapat mengubah kursor mouse tautan default ke panah default. 2- Itu js obtrusif. 3 - Itu sebenarnya mengembalikan nilai, Anda tidak ingin mengembalikan false setiap kali Anda mengklik tautan.
Diego Unanue
11

Ya .. Mungkin menggunakan css

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

.disable-me {
    pointer-events: none;
}
pown
sumber
Ini adalah cara terbersih, tapi satu peringatan: itu hanya didukung pada IE11 + caniuse.com
pixelfreak
8

Atau murni HTML dan CSS tanpa acara:

<div style="z-index: 1; position: absolute;">
    <a style="visibility: hidden;">Page link</a>
</div>
<a href="page.html">Page link</a>
Paul
sumber
1
-1 karena ini adalah cara yang cukup rumit / membingungkan untuk menyelesaikan masalah. Itu juga tidak benar-benar melakukan apa yang diminta pertanyaan (membuat tautan tidak aktif). Itu hanya mencakup tautan dengan elemen tidak terlihat. Jawaban Diego jauh lebih bersih.
mengembangkan
@ Mengembangkan Saya pikir jawaban Diego juga lebih baik dan harus dipilih lebih tinggi dan diterima. Namun, ketika saya menulis jawaban ini (3 tahun yang lalu) pointer-eventshampir tidak ada dukungan browser.
Paul
@ Paulpro Saya pikir itu masalahnya. Maaf untuk downvote! Hanya ingin memastikan jawaban paling baru ada di atas. Terima kasih atas tanggapannya.
mengembangkan
6

CSS dirancang untuk memengaruhi presentasi, bukan perilaku.

Anda dapat menggunakan beberapa JavaScript.

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

Cara yang lebih tidak mencolok (dengan asumsi Anda menggunakan jQuery):

HTML:

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

Javascript:

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

Keuntungan dari ini adalah pemisahan yang bersih antara logika dan presentasi. Jika suatu hari Anda memutuskan bahwa tautan ini akan melakukan hal lain, Anda tidak perlu mengacaukan markup, cukup JS.

pixelfreak
sumber
4
Anda tahu Anda dapat dengan mudah menulis kode non jQuery untuk melakukan hal yang sama yang akan berjalan sedikit lebih cepat: document.getElementById('my-link').onclick = function(){ return false; };
Paul
1
Saya pikir kebanyakan orang ingin (dan harus) menggunakan semacam kerangka kerja untuk memudahkan pengembangan. Penulis tidak menentukan batasan kinerja apa pun, tetapi jQuery yang diperkecil dan di-gzip hanya 31KB. Saya pikir manfaatnya jauh melebihi biaya.
pixelfreak
2
Serius? Browser apa yang tidak mendukung onclick atau getElementById. Oke, jadi IE 2 tidak mendukung onclick, tetapi juga tidak mendukung CSS ... dan saya sangat meragukan kode jQuery Anda di sana juga akan berfungsi di IE 2.
Paul
1
Perbedaan kecepatan mungkin kecil, tetapi tidak jika Anda tidak bisa jQuery waktu unduhan perpustakaan. Saya benar-benar tidak berpikir itu ide yang baik untuk menggunakan mendorong penggunaan jQuery ketika Anda tidak perlu, karena orang menjadi tergantung padanya dan lupa bagaimana menulis Javascript tanpa itu.
Paul
4
@ PaulPRO Diskusi ini dapat diperdebatkan tanpa persyaratan penulis. Setiap kerangka kerja memiliki tujuannya. Jika dia tidak lancar dalam JS dan hanya melakukan situs web ibu-n-pop dan perlu memanipulasi beberapa elemen DOM, akan jauh lebih mudah baginya untuk menggunakan framework. Keengganan Anda menggunakan kerangka apa pun tidak masuk akal. PHP ditulis dalam C. Apakah itu berarti Anda harus menulis C dan tidak menggunakan PHP? iOS memiliki UIKit, Core Data, Quartz, dll. Flash memiliki banyak perpustakaan pihak ke-3 yang umum digunakan. Sekali lagi, setiap kerangka kerja memiliki tujuannya. Mental yang murni, tidak built-in-house tidak akan membantu siapa pun.
pixelfreak
2

Jawabannya adalah:

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

Ini dapat dilakukan dalam css dan sangat sederhana. ubah "a" menjadi "p". "Tautan halaman" Anda tidak mengarah ke suatu tempat jika Anda ingin membuatnya tidak dapat diklik.

Ketika Anda memberi tahu css Anda untuk melakukan aksi hover pada "p" spesifik ini, katakan ini:

(untuk contoh ini saya telah memberikan ID "p" the "example")

#example
{
  cursor:default;
}

Sekarang kursor Anda akan tetap sama seperti di seluruh halaman.

Hollnder
sumber
-1
<a href="page.html" onclick="return false" style="cursor:default;">page link</a>
John
sumber
Tidak perlu menambahkan jawaban terpisah untuk ini, komentar Anda pada jawaban oleh @KaranK sudah cukup, pikir. Harap hindari jawaban yang digandakan.
MAChitgarha