HTML / CSS: สร้าง div ให้ "มองไม่เห็น" กับการคลิกหรือไม่


99

ด้วยเหตุผลหลายประการฉันต้องใส่ (ส่วนใหญ่) ให้โปร่งใส<div>เหนือข้อความบางส่วน อย่างไรก็ตามหมายความว่าไม่สามารถคลิกข้อความได้ (เช่นคลิกลิงก์หรือเลือก) เป็นไปได้ไหมที่จะทำให้ div นี้ "มองไม่เห็น" ต่อการคลิกและเหตุการณ์อื่น ๆ ของเมาส์

ตัวอย่างเช่นoverlaydiv ครอบคลุมข้อความ แต่ฉันต้องการให้สามารถคลิก / เลือกข้อความผ่าน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>

1
คำตอบสั้น ๆ คือไม่ (มีการพูดคุยกันหลายครั้ง แต่ dupes หายากสำหรับเรื่องนี้ไม่สามารถนึกถึงคำหลักที่ดีได้ ... ) คุณต้องการ DIV แบบโปร่งใสเพื่ออะไร?
Pekka

2
ฉันไม่คิดว่าจะเป็นไปได้ บางทีคุณอาจบอกเกี่ยวกับ "เหตุผลต่างๆ" เช่นสิ่งที่คุณต้องการบรรลุ?
davehauser

1
@Null ฉันจะระงับ -1 จนกว่าจะชัดเจนว่า OP ต้องการทำอะไร
Pekka

1
NullUserException - สิ่งที่เขาเสนอจะหยุดยั้งไม่ให้ผู้คนคัดลอกเนื้อหาจากเว็บไซต์ของเขาได้อย่างไร หากมีสิ่งใดเขากำลังพยายามทำสิ่งที่ตรงกันข้าม - เขาปรารถนาที่จะขัดขวางเอฟเฟกต์ของ div โปร่งใสของเขา (ทำให้ข้อความคลิกและเลือกยากขึ้น)
Hammerite

@ แฮมเมอร์คุณพูดถูก ฉันลบการโหวตลงคะแนน
NullUserException

คำตอบ:


161

ก็สามารถทำได้โดยใช้ pointer-eventsCSS คุณสมบัตินี้รองรับใน Firefox 3.6+, Chrome 2+, IE 11+ และ Safari 4+ ขออภัยฉันไม่มีความรู้เกี่ยวกับวิธีแก้ปัญหาข้ามเบราว์เซอร์

#overlay {
  pointer-events: none;
}

3
โอ้ดูดี! ตอนนี้ปัญหาเดียวคือฉันต้องทำให้เด็กบางคนยอมรับเหตุการณ์ที่เป็นตัวชี้ ... แต่บางทีฉันอาจจะเข้าใจได้ ขอบคุณ!
David Wolever

4
ป: pointer-events: visibleดูเหมือนว่ามันจะทำว่าสิ่งที่ฉันต้องการ ขอบคุณ!
David Wolever

ทำงานใน Chrome! รักที่เป็นไปได้!
BT

มีโพลิฟิลเหตุการณ์ตัวชี้: github.com/kmewhort/pointer_events_polyfill
rink.attendant 6

คำตอบที่ง่ายและตรงไปตรงมาที่สุด!
Jones G

2

สามารถทำได้โดยการรีเฟรชกิจกรรมหลังจากที่คุณซ่อนภาพซ้อนทับชั่วคราว

ดูคำตอบแรกสำหรับคำถามนี้: HTML "การวางซ้อน" ซึ่งช่วยให้คลิกผ่านไปยังองค์ประกอบที่อยู่เบื้องหลัง


0

คุณสามารถทำได้โดยซ่อนภาพซ้อนทับดังนี้:

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();
}


-1

ทางเลือกในการปิดใช้งานเหตุการณ์ทั้งหมด (หรือเจี๊ยบ) บน div คือ unbind () เหตุการณ์ทั้งหมดที่แนบมากับแท็กโดยค่าเริ่มต้น

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

หรือ

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

jqueryตอนนี้ใช้off()เพื่อประโยชน์unbind()และเอาเฉพาะตัวจัดการเท่านั้นไม่ได้ป้องกันไม่ให้ div จับการคลิก
pmoleri
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.