HTML / CSS: uczynić element DIV „niewidocznym” dla kliknięć?

98

Z różnych powodów muszę umieścić (głównie) przezroczystość <div>na jakimś tekście. Oznacza to jednak, że tekstu nie można kliknąć (np. W celu kliknięcia linków lub wybrania go). Czy można po prostu uczynić ten element div „niewidocznym” dla kliknięć i innych zdarzeń myszy?

Na przykład element overlaydiv obejmuje tekst, ale chciałbym móc kliknąć / zaznaczyć tekst za pomocą elementu overlaydiv:

<div id="container">
    <p>Some text</p>
    <div id="overlay" style="position: absolute; top: 0;
                             left: 0; width: 100%; height:100%">
        ... some content ...
    </div>
 </div>
David Wolever
źródło
1
Krótka odpowiedź brzmi: nie. (Było to omawiane kilka razy, ale do tego trudno znaleźć podróbki, nie mogę wymyślić dobrych słów kluczowych ...) Do czego potrzebujesz przejrzystego DIV?
Pekka
2
Nie sądzę, żeby to było możliwe. Może opowiesz o „różnych powodach”, czyli o tym, co naprawdę chcesz osiągnąć?
davehauser
1
@Null Wstrzymałbym -1, dopóki nie będzie jasne, co chce zrobić OP.
Pekka
1
NullUserException - W jaki sposób jego propozycja powstrzymałaby ludzi przed kopiowaniem treści z jego witryny internetowej? Jeśli już, stara się zrobić coś odwrotnego - chce uniknąć efektu swojego przezroczystego div (utrudniającego klikanie i zaznaczanie tekstu).
Hammerite
@Hammer Masz rację. Usunąłem głos przeciw.
NullUserException,

Odpowiedzi:

159

Można to zrobić za pomocą CSS pointer-events. Ta właściwość jest obsługiwana w przeglądarkach Firefox 3.6+, Chrome 2+, IE 11+ i Safari 4+. Niestety nie mam wiedzy na temat obejścia tego problemu w różnych przeglądarkach.

#overlay {
  pointer-events: none;
}
Ionuț G. Stan
źródło
3
Ach, to wygląda dobrze! Jedynym problemem jest to, że muszę skłonić niektóre dzieci do akceptowania zdarzeń wskazujących… Ale może uda mi się to rozgryźć. Dzięki!
David Wolever
2
Fajnie: pointer-events: visiblewygląda na to, że zrobi dokładnie to , czego chcę. Dzięki!
David Wolever
Działa w chromie! Uwielbiam, że to możliwe!
BT,
Istnieje pole zdarzeń typu wskaźnik: github.com/kmewhort/pointer_events_polyfill
rink.attendant. 6
Najprostsza i najbardziej prosta odpowiedź!
Jones G
0

Możesz to zrobić, ukrywając nakładkę w następujący sposób:

overlay.onclick = function(){
    window.event.srcElement.style.visibility = "hidden";
    var BottomElement = document.elementFromPoint((navigator.appName.substring(0,3) == "Net") ? e.clientX : window.event.x,(navigator.appName.substring(0,3) == "Net") ? e.clientY : window.event.y);
    window.event.srcElement.style.visibility = "visible";
    BottomElement.click();
}
Kaczor Donald
źródło
0

Użyj tego jQuery

$("div").click(function(e){e.preventDefault();});

zamień „div” na identyfikator lub element

Dean Van Greunen
źródło
-1

Alternatywą dla wyłączenia wszystkich zdarzeń (lub laski) w div jest unbind () wszystkie zdarzenia, które są domyślnie powiązane z tagami

  $('#myDivId').unbind();

lub

  $('#myDivId').unbind("click");
Muhammad Nasir
źródło
jqueryteraz używa off()na rzecz unbind()i usuwa tylko programy obsługi, nie zapobiega przechwytywaniu kliknięcia przez element div.
pmoleri