क्या सीएसएस में एक 'पॉइंटर-ईवेंट: hoverOnly' या समान है?


103

बस pointer-eventsसीएसएस में संपत्ति के साथ खेल रहा है ।

मेरे पास एक है divकि मैं सभी माउस घटनाओं के लिए अदृश्य होना चाहता हूं, सिवाय इसके :hover

तो सभी क्लिक कमांड इसके divनीचे वाले हिस्से से गुजरते हैं , लेकिन div रिपोर्ट कर सकता है कि माउस इसके ऊपर है या नहीं।

क्या कोई मुझे बता सकता है कि क्या यह किया जा सकता है?

HTML:

<div class="layer" style="z-index:20; pointer-events:none;">Top layer</div>
<div class="layer" style="z-index:10;">Bottom layer</div>

सीएसएस:

.layer {
    position:absolute;
    top:0px;
    left:0px;
    height:400px;
    width:400px;
}

2
बस एक नोट, IE मेंpointer-events अच्छी तरह से समर्थित नहीं है ।
वाको

2
लगता है जैसे आपको जावास्क्रिप्ट की जरूरत है
पीट

पीट से सहमत हैं, मुझे पता है यह विशेष रूप से सीएसएस लिए पूछ रहा है, लेकिन एक ही मुद्दा था और मेरे लिए सबसे आसान समाधान सिर्फ बच्चे के लिए जावास्क्रिप्ट के साथ माता-पिता के लिए क्लिक करें आरंभ था stackoverflow.com/questions/35872534/...
जेरी शा

जवाबों:


12

मुझे नहीं लगता कि अकेले सीएसएस में अपने उद्देश्यों को प्राप्त करना संभव है। हालांकि, जैसा कि अन्य योगदानकर्ताओं ने उल्लेख किया है, यह JQuery में करना काफी आसान है। यहाँ मैंने यह कैसे किया है:

एचटीएमएल

<div
  id="toplayer"
  class="layer"
  style="
    z-index: 20;
    pointer-events: none;
    background-color: white;
    display: none;
  "
>
  Top layer
</div>
<div id="bottomlayer" class="layer" style="z-index: 10">Bottom layer</div>

सीएसएस (अपरिवर्तित)

.layer {
    position:absolute;
    top:0px;
    left:0px;
    height:400px;
    width:400px;
}

JQuery

$(document).ready(function(){
    $("#bottomlayer").hover(
        function() {
            $("#toplayer").css("display", "block");
        },
        function() {
            $("#toplayer").css("display", "none");
        }
    );
});

यहाँ JSFiddle: http://www.jsfiddle.net/ReZ9M है


107

केवल होवर करें। यह बहुत आसान है। नहीं JS ... लिंक डिफ़ॉल्ट कार्रवाई को भी रोकें।

a:hover {
	color: red;
}
a:active {
	pointer-events: none;
}
<a href="www.google.com">Link here</a>

संपादित करें: IE 11 और http://caniuse.com/#search=pointer-events के ऊपर समर्थित है


23
यह 'काम' करता है - हालांकि यह नीचे दिए गए किसी तत्व के माध्यम से क्लिक करने की अनुमति नहीं देता है (कम से कम तब नहीं जब वह तत्व एक YouTube वीडियो है) - जो शायद एकमात्र कारण है कि किसी को भी पहली बार में उस व्यवहार की आवश्यकता होगी
Simon_Weaver

1
क्या इससे पॉइंटर को आगे पॉइंटर-ईवेंट को डिसेबल करने के लिए क्लिक की आवश्यकता नहीं है?
माइंडविन

3
यह beutifull है
user2860957

2
@PriyanshuJain अगर आपको लगता है कि उपयोगकर्ता बटन पर क्लिक करेगा तो क्या होगा?
Свободен Роб

1
चतुर clever (यह सब मुझे कहना चाहिए)
डेविस

24

"चोरी" Xanco का जवाब लेकिन उस बदसूरत, बदसूरत jQuery के बिना।

स्निपेट : नोटिस DIVs रिवर्स ऑर्डर में हैं

.layer {
  position: absolute;
  top: 0px;
  left: 0px;
  height: 400px;
  width: 400px;
}

#bottomlayer {
  z-index: 10
}

#toplayer {
  z-index: 20;
  pointer-events: none;
  background-color: white;
  display: none
}

#bottomlayer:hover~#toplayer {
  display: block
}
<div id="bottomlayer" class="layer">Bottom layer</div>
<div id="toplayer" class="layer">Top layer</div>


2
क्षमा करें, वैसे भी बदसूरत jquery का उपयोग करके im। लेकिन एक सीएसएस केवल समाधान के लिए एक upvote है!
जिमराइ

यह बहुत अच्छा है - बस FYI करें दुर्भाग्य से यह ठीक से काम नहीं करता है अगर नीचे की परत में एक iframe होता है: jsfiddle.net/ReZ9M/82
Simon_Weaver

1
यह प्रश्न कैसे हल करता है? ओपी ने शुरू में दिखाई देने वाले तत्व के माध्यम से जाने के लिए क्लिक कमांड के लिए कहा। आपके समाधान में वे ध्यान नहीं देते हैं कि "टॉप लेयर" पाठ को कैसे हाइलाइट नहीं किया जा सकता है ...
ट्रेवर थॉम्पसन

6

आप विभिन्न तत्व पर होवर का पता लगा सकते हैं और अपने बच्चे के लिए शैलियों को लागू कर सकते हैं, या आसन्न बच्चों जैसे अन्य सीएसएस चयनकर्ताओं का उपयोग कर सकते हैं।

हालांकि यह आपके मामले पर निर्भर करता है।

मूल तत्व होवर पर। इसे मैने किया है:

.child {
    pointer-events: none;
    background-color: white;
}

.parent:hover > .child {
    background-color: black;
}

1

मैं :hoverअपने ओवरले डिव के ऊपर एक हॉवर का अनुकरण करने के लिए एक समान आकार के माता-पिता / कंटेनर के छद्म तत्व का उपयोग करता हूं, फिर ओवरले pointer-eventsको noneक्लिक करके नीचे के तत्वों तक पहुंचाता हूं ।


0

आपके अनुरोध का शुद्ध सीएसएस समाधान (अपारदर्शिता संपत्ति केवल संक्रमणों की आवश्यकता को दर्शाने के लिए है):

.hoverOnly:hover {
    pointer-events: none;
    opacity: 0.1;
    transition-delay: 0s;
}
.hoverOnly {
    transition: ,5s all;
    opacity: 0.75;
    transition-delay: 2s;
}

यह क्या करता है:

जब माउस बॉक्स में प्रवेश करता है, तो यह :hoverराज्य को चालू करता है। हालाँकि, उस स्थिति में, पॉइंटर-ईवेंट अक्षम हैं।

लेकिन अगर आप बदलाव टाइमर सेट नहीं करते हैं, तो माउस हिलने पर div हॉवर स्थिति को रद्द कर देगा; होवर स्टेट झिलमिलाहट करेगा जबकि माउस तत्व के अंदर बढ़ रहा है। आप अपारदर्शिता गुणों के साथ ऊपर दिए गए कोड का उपयोग करके इसे महसूस कर सकते हैं।

होवर अवस्था से बाहर संक्रमण के लिए देरी सेट करना इसे ठीक करता है। 2sमूल्य आपकी आवश्यकताओं के अनुरूप बदलाव किया जा सकता है।

लेन-देन का श्रेय ट्वीक: इस उत्तर पर पटाड


तत्व बस "होवर" स्थिति में फंस जाता है जब मैंने इस समाधान की कोशिश की।
फ्लिक

0

बस शुद्ध सीएसएस , jquery की जरूरत नहीं है :

div:hover {pointer-events: none}
div {pointer-events: auto}

हाय - इसके लिए बहुत धन्यवाद - क्या आप अपने जवाब में एक डेमो जोड़ सकते हैं (जैसे कोड स्निपेट या कोडपेन या jsfiddle में यह लिंक?) - और क्या आप जानते हैं कि इसमें किस तरह की संगतता है? क्या यह एक नई CSS3 की सुविधा है? यदि यह काम करता है, तो मैं निश्चित रूप से आपको एक टिक दूंगा :)
जिमरानी

क्षमा करें, मैं डेमो नहीं बना सकता। लेकिन मेरे तर्क में, यह निश्चित रूप से सभी ब्राउज़र काम कर रहा है (मुझे इसके बारे में पता नहीं है, क्योंकि मेरे पास नहीं है)। और, यह css1 से समर्थन करता है :)
Bariq Dharmawan

caniuse.com/#feat=pointer-events - होगा 11 को छोड़कर किसी भी IE में काम नहीं ... यदि आप आप यहाँ क्या मतलब है की एक काम डेमो बनाने codepen.io मैं इसे आप के लिए परीक्षण किया जाएगा और अगर यह काम करता है, मैं करूँगा आपको सही उत्तर के साथ पुरस्कार - क्षमा करें, मैं इसे सैद्धांतिक कोड के लिए पुरस्कृत कर सकता हूं - केवल एक काम करने वाला डेमो
जिमरानी

क्या आप स्निपेट जोड़ सकते हैं? Bcz यह मेरे लिए काम कर रहा है
Bariq Dharmawan
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.