Tambahkan properti kursor CSS saat menggunakan "pointer-events: none"

96

Saya mencoba menonaktifkan tautan tertentu dan menerapkan gaya kursor tetapi perintah CSS cursor: text;ini tidak akan berpengaruh. Kursor selalu default. Saya menggunakan versi Firefox terbaru.

CSS:

pointer-events: none !important;
cursor: text;
color: Blue;
Dragut
sumber
@PHPglue Dua hal: w3fools.com dan itu benar-benar tidak bekerja, bahkan ketika itu hanya elemen ini di halaman: jsfiddle.net/brh9r8h6
melancia

Jawaban:

122

Menggunakan pointer-events: noneakan menonaktifkan semua interaksi mouse dengan elemen itu. Jika Anda ingin mengubah cursorproperti, Anda harus menerapkan perubahan ke elemen induk. Anda bisa membungkus link dengan elemen dan menambahkan cursorproperti ke dalamnya.

Contoh Disini

HTML

<span class="wrapper">
    <a href="#">Some Link</a>
</span>

CSS

.wrapper {
    position: relative;
    cursor: text;  /* This is used */
}
.wrapper a {
    pointer-events: none;
}

Namun, ada beberapa inkonsistensi browser. Untuk membuat ini berfungsi di IE11, sepertinya Anda membutuhkan elemen pseudo. Elemen pseudo juga memungkinkan Anda memilih teks di FF. Anehnya, Anda dapat memilih teks di Chrome tanpa itu.

Contoh yang Diperbarui

.wrapper:after {
    content: '';
    position: absolute;
    width: 100%; height: 100%;
    top: 0; left: 0;
}
Josh Crozier
sumber
kode Anda berfungsi kecuali saya menghapus tag induknya, tetapi berada di <div><li> <span> dan dalam hal ini masih kursor default
Dragut
@ user3721912 Apakah Anda keberatan memberikan contoh? Itu akan sangat membantu.
Josh Crozier
ya itulah yang ingin saya katakan, maksud saya tag span saya tetap tidak sendirian, ia memiliki <div> <li> orang tua, itu dikelilingi dengan tag <div> <li>
Dragut
23

Ini cukup lama sejak pertanyaan asli, tetapi ini adalah solusi saya tanpa elemen pembungkus dan kursor tanpa peristiwa penunjuk:

<!-- Add tabindex="-1" so that element cannot be reached by keyboard -->
<a href="url" class="disabled" tabindex="-1" onfocus="this.blur()">Disabled link</a>

CSS:

/* Adding cursor just works: */
.disabled {
    cursor: not-allowed;
}

/* Makes link non-clickable: */
.disabled:active {
    pointer-events: none;
}

Contoh CodePen

EDIT:

  • Chrome telah mulai menambahkan fokus pada klik pada elemen dengan atribut tabindex (bahkan dengan tabindex = "- 1"). Solusi tercepat adalah mengatur onfocus="this.blur()"ke elemen tidak fokus.
  • Anda perlu mencegah pemfokusan elemen, jika tidak maka dapat diaktifkan dengan tombol enter
Petr Odut
sumber
Bekerja dengan baik! Pintar. Terima kasih
Joe Dooley
Jawaban yang diremehkan! Terima kasih!
trpx
Bersih, sederhana, dan yang paling penting, tepat! Terima kasih!
Dazag
13

Dengan menentukan pointer-events:noneAnda secara aktif menyatakan bahwa tidak ada interaksi mouse antara elemen dan kursor. Oleh karena itu, ia juga tidak dapat memiliki kursor - ia tidak terlihat oleh semua perilaku mouse.

Bukti dapat ditemukan di sini .

Niels Keurentjes
sumber
sekali lagi, logika yang buruk untuk membenarkan hal ini. Misalkan Anda memang menginginkan interaksi mouse, tetapi Anda menerapkannya sendiri di JavaScript. Atau, Anda tidak menggunakan JavaScript, tetapi ingin memberi gaya sesuatu seperti textarea resize, menambahkan kursor <-> ke kanan bawah, tetapi Anda tidak ingin itu memblokir fungsionalitas pengubahan ukuran yang mendasarinya, jadi Anda membuat pointer-event: none ;, tapi itu menghapus kursor. Logika yang sangat buruk. Saya tidak dapat melihat bagaimana ini menjadi jawaban atas pertanyaan tersebut.
George
4

Hapus pointer-events: none !important;. Nonaktifkan tautan menggunakan JavaScript:

anchorElement.onclick = function(){
  return false;
}

Jika Anda tidak tahu JavaScript anchorElementadalah Node atau Elemen itu sendiri. Cara paling umum untuk mendapatkan Elemen adalah dengan menggunakan idatribut HTML . Katakanlah kita memiliki:

<a id='whatever' href='#'>Text Here</a>

Kode Anda bisa jadi:

document.getElementById('whatever').onclick = function(){
  return false;
}

Ada beberapa cara lain untuk mendapatkan Node.

StackSlave
sumber
sepertinya logis tapi saya miskin dalam JavaScript. Alangkah baiknya jika Anda menunjukkan penggunaan sampel
Dragut
0

Kasus penggunaan saya adalah elemen yang dapat diseret yang tidak dapat memiliki peristiwa penunjuk atau elemen induk dengan peristiwa penunjuk.

Saya menyelesaikannya dengan menerapkan gaya global secara kondisional yang memaksa kursor meraih hanya saat menyeret. (Saya menggunakan React dan komponen bergaya, tetapi logika yang sama dapat diterapkan pada vanilla js).

const SetDraggingCursor = createGlobalStyle`
  * {
    cursor: grabbing !important;
  }
`;

// ...

{isDragging && <SetDraggingCursor />}
Lucas Janon
sumber
0

Anda dapat membuat div lain dan memposisikannya tepat di div terakhir Anda dan membuat css seperti ini:

.example{
    background-color: rgba(255, 255, 255, 0); //opacity:0
    z-index: 1;
    cursor: not-allowed;
}
pouorix.dll
sumber
0

Daripada membungkus, ini juga dapat dilakukan dengan CSS murni dari bagian dalam. (Saya menggunakan ini dengan komponen web material, sehingga kodenya menjadi sedikit lebih kompleks.)

button:disabled {
    > * {
        cursor: not-allowed;
        pointer-events: initial;
    }

    &::before {
        background-color: #fff0;
    }

    &::after {
        background-color: #fff0;
    }
}
<button>
    <svg .../>
</button>

Saya juga mencoba ::beforedan ::afterdengan button:disabledlangsung, tetapi tidak bisa mewujudkannya ...

Polv
sumber