Bagaimana cara menonaktifkan tautan yang hanya menggunakan CSS?
844
Apakah ada cara untuk menonaktifkan tautan menggunakan CSS?
Saya memiliki kelas yang dipanggil current-pagedan ingin tautan dengan kelas ini dinonaktifkan sehingga tidak ada tindakan yang terjadi ketika mereka diklik.
Apakah tautan harus digunakan atau tidak membawa nilai semantik lebih dari nilai presentasi. Seharusnya tidak dinonaktifkan melalui CSS, tetapi melalui memanfaatkan hiddenatribut yang berlaku untuk elemen HTML apa pun. CSS kemudian dapat digunakan untuk memilih misalnya a[hidden]jangkar dan gaya sesuai.
amn
@ amn tetapi saya tidak berpikir browser akan menampilkan elemen dengan atribut tersembunyi sehingga styling menjadi moot.
user1794469
1
@ user1794469 Mereka akan melakukannya jika Anda menginstruksikan mereka untuk, dengan CSS, menggunakan display: block, misalnya atau nilai lain untuk display. Tetapi hiddentidak selalu berlaku - itu untuk elemen yang tidak relevan , dan dari pertanyaan itu tidak jelas mengapa tautan harus dinonaktifkan. Ini mungkin masalah XY.
am
Jawaban:
1348
Jawabannya sudah ada di komentar pertanyaan. Untuk visibilitas lebih lanjut, saya menyalin solusi ini di sini:
Peringatan: Penggunaan pointer-eventsdalam CSS untuk elemen non-SVG bersifat eksperimental. Fitur yang digunakan untuk menjadi bagian dari spesifikasi rancangan UI CSS3 tetapi, karena banyak masalah terbuka, telah ditunda ke CSS4.
Juga, ini tidak menghindari tab ke tautan lalu masuk.
Jono
4
Jika Anda ingin mengubahnya sedikit, maka pengguna dapat melihatnya dinonaktifkan. Berikan opacity: .2
DNRN
4
Ini sekarang berfungsi di semua browser modern termasuk IE 11. Jika Anda memerlukan dukungan untuk IE 10 dan di bawah, Anda dapat menggunakan polyfill JavaScript seperti ini .
Keavon
26
Catatan penting: Ini hanya menonaktifkan mengklik, bukan tautan yang sebenarnya. Anda masih dapat menggunakan tab + enter untuk "mengklik" tautannya.
Pikamander2
11
Penggunaan pointer-events: none;tidak sempurna. Ini juga menonaktifkan acara lain seperti hover, yang diperlukan untuk tampilan title="…"atau tooltips. Saya menemukan solusi JS lebih baik (menggunakan event.preventDefault();) bersama dengan beberapa CSS ( cursor: default; opacity: 0.4;) dan tooltip yang menjelaskan mengapa tautan dinonaktifkan.
Untuk gaya, coba ubah pointer-events:none;ke pointer-events:unset;. Lalu, kursor dapat diubah menjadi cursor:not-allowed;. Ini memberikan petunjuk yang lebih baik tentang apa yang terjadi pada pengguna. Tampaknya bekerja di FF, Edge, Chrome, Opera, dan Brave mulai hari ini.
Sablefoste
@Sablefoste Itu tidak bekerja untuk saya di Chrome 60. Kursor memang not-allowed, tetapi tautan tetap dapat diklik.
soupdog
122
CSS hanya bisa digunakan untuk mengubah gaya sesuatu. Yang terbaik yang bisa Anda lakukan dengan CSS murni adalah dengan menyembunyikan tautannya sama sekali.
Yang Anda butuhkan adalah javascript. Inilah cara Anda melakukan apa yang Anda inginkan menggunakan pustaka jQuery.
return falsehanya berfungsi jika tindakan diatur menggunakan hrefatribut
Justin
Juga versi ini dapat digunakan untuk menonaktifkan klik sembari menjaga acara pointer lainnya seperti: hover atau: fokus! Jawaban atas!
Charlie Tupman
Meskipun ini bekerja di semua browser, itu hanya menonaktifkan mengklik sebuah tautan. Perlu diingat banyak pengguna digunakan untuk membuka tautan dari menu konteks atau dengan menggunakan tombol tengah mouse.
Alexandru Severin
33
CSS tidak bisa melakukan itu. CSS hanya untuk presentasi. Pilihan Anda adalah:
Jangan sertakan hrefatribut dalam <a>tag Anda .
Gunakan JavaScript, untuk menemukan unsur-unsur jangkar dengan itu class, dan menghapus mereka hrefatau onclickatribut sesuai. jQuery akan membantu Anda dengan itu (NickF menunjukkan bagaimana melakukan sesuatu yang serupa tetapi lebih baik).
Itu bukan jawaban yang benar - pointer-events: none; css dapat menonaktifkannya.
pie6k
Saya tidak memikirkan itu! Atau mungkin atributnya belum ada di 2010? Bagaimanapun itu benar bahwa pointer-events: nonedapat menonaktifkan acara mouse. Namun, itu tidak menonaktifkan tautan yang mendasarinya. Dalam pengujian yang saya coba di Chrome 81, saya masih bisa mengaktifkan tautan semacam itu dengan menabraknya dan mengetikkan tombol kembali.
@nickf benar, bagaimanapun, ini adalah solusi yang rapi dan lebih baik daripada mengandalkan styling IE standar yang buruk ketika diatur ke dinonaktifkan.
Bagaimana cara menonaktifkan tautan menggunakan pemilih yang dinonaktifkan? mis. <a class="test" disable href="3"> test </a> a: disabled {cursor: not-allow; }
ecasper
10
Salah satu cara Anda bisa melakukan ini dengan CSS, adalah dengan mengatur CSS pada pembungkus divyang Anda setel untuk menghilang dan sesuatu yang lain terjadi.
Untuk benar-benar mematikan, aAnda harus mengganti acara klik atau href, seperti yang dijelaskan oleh orang lain.
PS: Hanya untuk mengklarifikasi saya akan menganggap ini solusi yang cukup berantakan, dan untuk SEO itu bukan yang terbaik juga, tapi saya percaya itu yang terbaik dengan CSS murni.
Properti pointer-events memungkinkan untuk mengontrol bagaimana elemen HTML merespons peristiwa mouse / sentuh - termasuk CSS hover / status aktif, klik / ketuk acara dalam Javascript, dan apakah kursor terlihat atau tidak.
Itu bukan satu-satunya cara Anda menonaktifkan Tautan , tetapi cara CSS yang baik yang berfungsi di IE10 + dan semua peramban baru:
.current-page {pointer-events: none;color: grey;}
<ahref="#"class="current-page">This link is disabled</a>
Saya mencari di internet dan tidak menemukan yang lebih baik dari ini . Pada dasarnya untuk menonaktifkan fungsi klik tombol, cukup tambahkan gaya CSS menggunakan jQuery seperti:
Terima kasih kepada semua orang yang memposting solusi, saya menggabungkan beberapa pendekatan untuk menyediakan beberapa disabledfungsionalitas yang lebih maju . Ini intinya , dan kodenya di bawah.
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()
Inilah kelas 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
Halo !!, jawabannya adalah CSStidak JSatau apa pun!
Mehdi Dehghani
1
Anda juga dapat mengukur elemen lain sehingga menutupi tautan (menggunakan indeks z kanan): Itu akan "memakan" klik.
(Kami menemukan ini secara tidak sengaja karena kami memiliki masalah dengan tautan yang tiba-tiba tidak aktif karena desain "responsif" yang menyebabkan H2 menutupinya ketika jendela browser berukuran ponsel.)
Biola Anda tidak berfungsi! Tautannya masih aktif di Chrome.
Matt Byrne
Untuk memperbaiki kode ini, tukar dua parameter pertama yang diteruskan ke on (): $ ('html'). On ('klik', 'a.Link', fungsi (event) {event.preventDefault ();});
2C-B
1
Halo !!, jawabannya adalah CSStidak JSatau apa pun!
Mehdi Dehghani
0
Trik lain adalah menempatkan elemen tak terlihat di atasnya. Ini akan menonaktifkan efek hover juga
hidden
atribut yang berlaku untuk elemen HTML apa pun. CSS kemudian dapat digunakan untuk memilih misalnyaa[hidden]
jangkar dan gaya sesuai.display: block
, misalnya atau nilai lain untukdisplay
. Tetapihidden
tidak selalu berlaku - itu untuk elemen yang tidak relevan , dan dari pertanyaan itu tidak jelas mengapa tautan harus dinonaktifkan. Ini mungkin masalah XY.Jawaban:
Jawabannya sudah ada di komentar pertanyaan. Untuk visibilitas lebih lanjut, saya menyalin solusi ini di sini:
Untuk dukungan browser, silakan lihat https://caniuse.com/#feat=pointer-events . Jika Anda perlu mendukung IE ada solusinya; lihat jawaban ini .
Peringatan: Penggunaan
pointer-events
dalam CSS untuk elemen non-SVG bersifat eksperimental. Fitur yang digunakan untuk menjadi bagian dari spesifikasi rancangan UI CSS3 tetapi, karena banyak masalah terbuka, telah ditunda ke CSS4.sumber
pointer-events: none;
tidak sempurna. Ini juga menonaktifkan acara lain seperti hover, yang diperlukan untuk tampilantitle="…"
atau tooltips. Saya menemukan solusi JS lebih baik (menggunakanevent.preventDefault();
) bersama dengan beberapa CSS (cursor: default; opacity: 0.4;
) dan tooltip yang menjelaskan mengapa tautan dinonaktifkan.sumber
pointer-events:none;
kepointer-events:unset;
. Lalu, kursor dapat diubah menjadicursor:not-allowed;
. Ini memberikan petunjuk yang lebih baik tentang apa yang terjadi pada pengguna. Tampaknya bekerja di FF, Edge, Chrome, Opera, dan Brave mulai hari ini.not-allowed
, tetapi tautan tetap dapat diklik.CSS hanya bisa digunakan untuk mengubah gaya sesuatu. Yang terbaik yang bisa Anda lakukan dengan CSS murni adalah dengan menyembunyikan tautannya sama sekali.
Yang Anda butuhkan adalah javascript. Inilah cara Anda melakukan apa yang Anda inginkan menggunakan pustaka jQuery.
sumber
function(ev){ ev.preventDefault(); ev.stopPropagation(); return false;
.return false
melakukan itureturn false
hanya berfungsi jika tindakan diatur menggunakanhref
atributCSS tidak bisa melakukan itu. CSS hanya untuk presentasi. Pilihan Anda adalah:
href
atribut dalam<a>
tag Anda .class
, dan menghapus merekahref
atauonclick
atribut sesuai. jQuery akan membantu Anda dengan itu (NickF menunjukkan bagaimana melakukan sesuatu yang serupa tetapi lebih baik).sumber
pointer-events: none
dapat menonaktifkan acara mouse. Namun, itu tidak menonaktifkan tautan yang mendasarinya. Dalam pengujian yang saya coba di Chrome 81, saya masih bisa mengaktifkan tautan semacam itu dengan menabraknya dan mengetikkan tombol kembali.Bootstrap Disabled Link
Tombol Bootstrap Disabled tetapi terlihat seperti tautan
sumber
Anda dapat mengatur
href
atributjavascript:void(0)
sumber
Saya menggunakan:
Dan itu tidak cukup; di beberapa browser masih menampilkan tautan, berkedip.
Saya harus menambahkan:
sumber
a[disabled]:active { pointer-events: none !important; }
lebih baik.Jika Anda ingin tetap menggunakan HTML / CSS pada formulir, opsi lain adalah menggunakan tombol. Gaya dan atur
disabled
atributnya.Misalnya http://jsfiddle.net/cFTxH/1/
sumber
Jika Anda ingin hanya menggunakan CSS, logika penonaktifan harus ditentukan oleh CSS.
Untuk memindahkan logika dalam definisi CSS, Anda harus menggunakan penyeleksi atribut. Berikut ini beberapa contohnya:
Nonaktifkan tautan yang memiliki href tepat:
=
Anda dapat memilih untuk menonaktifkan tautan yang mengandung nilai href tertentu seperti:
Nonaktifkan tautan yang berisi bagian jalan:
*=
Di sini, tautan apa pun yang berisi
/keyword/
jalur akan dinonaktifkanNonaktifkan tautan yang dimulai dengan:
^=
yang
[attribute^=value]
sasaran Operator atribut yang dimulai dengan nilai tertentu. Memungkinkan Anda membuang situs web & mem-root path.Anda bahkan dapat menggunakannya untuk menonaktifkan tautan non-https. Sebagai contoh :
Nonaktifkan tautan yang diakhiri dengan:
$=
The
[attribute$=value]
Operator menargetkan atribut yang berakhir dengan nilai tertentu. Berguna untuk membuang ekstensi file.Atau atribut lainnya
Css dapat menargetkan atribut HTML apa pun. Bisa jadi
rel
,target
,data-custom
dan seterusnya ...Menggabungkan pemilih atribut
Anda dapat membuat beberapa aturan. Katakanlah Anda ingin menonaktifkan setiap tautan eksternal, tetapi bukan yang menunjuk ke situs web Anda:
Atau nonaktifkan tautan ke file pdf dari situs web tertentu:
Dukungan browser
Selektor atribut didukung sejak IE7.
:not()
pemilih sejak IE9.sumber
Salah satu cara Anda bisa melakukan ini dengan CSS, adalah dengan mengatur CSS pada pembungkus
div
yang Anda setel untuk menghilang dan sesuatu yang lain terjadi.Misalnya:
Dengan seperti CSS
Untuk benar-benar mematikan,
a
Anda harus mengganti acara klik atauhref
, seperti yang dijelaskan oleh orang lain.PS: Hanya untuk mengklarifikasi saya akan menganggap ini solusi yang cukup berantakan, dan untuk SEO itu bukan yang terbaik juga, tapi saya percaya itu yang terbaik dengan CSS murni.
sumber
Coba ini:
sumber
Itu bukan satu-satunya cara Anda menonaktifkan Tautan , tetapi cara CSS yang baik yang berfungsi di IE10 + dan semua peramban baru:
sumber
Saya mencari di internet dan tidak menemukan yang lebih baik dari ini . Pada dasarnya untuk menonaktifkan fungsi klik tombol, cukup tambahkan gaya CSS menggunakan jQuery seperti:
Kemudian untuk mengaktifkannya lagi lakukan ini
Diperiksa di Firefox dan IE 11, itu berhasil.
sumber
Anda dapat menggunakan css ini:
sumber
Terima kasih kepada semua orang yang memposting solusi, saya menggabungkan beberapa pendekatan untuk menyediakan beberapa
disabled
fungsionalitas yang lebih maju . Ini intinya , dan kodenya di bawah.Inilah kelas coffescript:
sumber
CSS
tidakJS
atau apa pun!Anda juga dapat mengukur elemen lain sehingga menutupi tautan (menggunakan indeks z kanan): Itu akan "memakan" klik.
(Kami menemukan ini secara tidak sengaja karena kami memiliki masalah dengan tautan yang tiba-tiba tidak aktif karena desain "responsif" yang menyebabkan H2 menutupinya ketika jendela browser berukuran ponsel.)
sumber
Demo di sini
Coba yang ini
sumber
CSS
tidakJS
atau apa pun!Trik lain adalah menempatkan elemen tak terlihat di atasnya. Ini akan menonaktifkan efek hover juga
sumber
Dimungkinkan untuk melakukannya dalam CSS
Lihat di:
Harap perhatikan bahwa
text-decoration: none;
dancolor: black;
tidak diperlukan tetapi itu membuat tautannya lebih mirip teks biasa.sumber
pointer-events:none
akan menonaktifkan tautan:sumber
sumber