เป็นไปได้ไหมที่จะทำให้แท็ก Anchor HTML ไม่สามารถคลิกได้ / เชื่อมโยงได้โดยใช้ CSS?


132

เช่นถ้าฉันมีสิ่งนี้:

<a style="" href="page.html">page link</a>

มีสิ่งใดบ้างที่ฉันสามารถใช้สำหรับแอตทริบิวต์สไตล์ที่จะทำให้ลิงก์นั้นไม่สามารถคลิกได้และจะไม่พาฉันไปที่ page.html

หรือเป็นตัวเลือกเดียวของฉันที่จะไม่ห่อ 'ลิงค์หน้า' ในแท็กสมอ?

แก้ไข:ฉันต้องการระบุว่าทำไมฉันจึงต้องการทำเช่นนี้เพื่อให้ผู้คนสามารถให้คำแนะนำที่ดีกว่า ฉันกำลังพยายามตั้งค่าแอปพลิเคชันของฉันเพื่อให้ผู้พัฒนาสามารถเลือกรูปแบบการนำทางที่ต้องการ

ดังนั้นฉันมีรายการลิงก์และมีการเลือกเสมอในขณะนี้และอื่น ๆ ทั้งหมดไม่ได้ สำหรับลิงก์ที่ไม่ได้เลือกฉันต้องการให้ลิงก์เหล่านั้นเป็นแท็กจุดยึดที่สามารถคลิกได้ปกติ แต่สำหรับลิงก์ที่เลือกบางคนต้องการให้ลิงก์ยังคงสามารถคลิกได้ในขณะที่คนอื่นต้องการให้คลิกไม่ได้

ตอนนี้ฉันสามารถเขียนโปรแกรมได้โดยไม่ต้องพันแท็กรอบลิงก์ที่เลือก แต่ฉันคิดว่ามันจะดูสง่างามกว่าถ้าฉันสามารถใส่ลิงค์ที่เลือกไว้ในลักษณะดังนี้:

<a id="current" href="link.html">link</a>

จากนั้นให้นักพัฒนาซอฟต์แวร์ควบคุมสไตล์การเชื่อมโยงผ่าน CSS



3
หากคุณไม่ต้องการให้คลิกอาจใช้<span>แทนหรือไม่
เดวิดบอกว่าคืนสถานะโมนิก้า

ฉันต้องเห็นด้วยกับเดวิด อย่าทำลายกระบวนทัศน์ UI ความคาดหวังของผู้ใช้คือสามารถคลิกลิงค์ได้ ถ้ามันไม่สามารถคลิกได้มันก็ไม่ได้เป็นลิงค์จริงๆเหรอ?
mrtsherman

ลองดูstackoverflow.com/questions/2091168/disable-a-link-using-cssเพื่อหาคำตอบที่เป็นไปได้
โอลิเวอร์

ใช่นี่เป็นความคิดที่แย่มาก โปรแกรมอ่านหน้าจอจะยังคงเห็นลิงก์เป็นลิงก์เนื่องจากเป็นลิงก์ เครื่องมือค้นหาเช่นกัน อันที่จริงแล้วสิ่งใดก็ตามที่เข้าใจ HTML อย่าทำอย่างนี้ ไม่มีอะไร "สง่างาม" เกี่ยวกับมัน
Paul D. Waite

คำตอบ:


267

คุณสามารถใช้ CSS นี้:

.inactiveLink {
   pointer-events: none;
   cursor: default;
}

จากนั้นกำหนดคลาสให้กับรหัส html ของคุณ:

<a style="" href="page.html" class="inactiveLink">page link</a>

มันทำให้ลิงก์ไม่สามารถคลิกได้และลักษณะเคอร์เซอร์เป็นลูกศรไม่ใช่มือเหมือนกับที่ลิงค์มี

หรือใช้สไตล์นี้ใน html:

<a style="pointer-events: none; cursor: default;" href="page.html">page link</a>

แต่ฉันขอแนะนำวิธีแรก


ฉันสามารถยืนยันการใช้งานได้กับ Firefox / Chrome รุ่น Ubuntu สงสัยว่ามันจะทำงานบน IE บน Windows หรือไม่
JohnMerlino

3
pointer-eventsกุญแจสำคัญในการแก้ปัญหานี้คือ นี่คือลิงค์สำหรับตารางความเข้ากันได้
masegaloeh

@JohnMerlino: ไม่ทำงานใน IE9 ดูข้อมูลเพิ่มเติมได้ที่ลิงก์ของ masegaloeh ไปยังตารางความเข้ากันได้
Howie

ข้อแม้: แท็บจะย้ายโฟกัสไปที่การเชื่อมโยงและใช้ใส่เพื่อเปิดใช้งานการเชื่อมโยงจะยังคงทำงาน
wtho

ฉันไม่คิดว่าเคอร์เซอร์: จำเป็นต้องมีค่าเริ่มต้น ตราบใดที่คุณมีตัวชี้เหตุการณ์: ไม่มีสิ่งนั้นจะทำงาน
kloddant

51

นั่นไม่ใช่เรื่องง่ายที่จะทำกับ CSS เนื่องจากไม่ใช่ภาษาพฤติกรรม (เช่นจาวาสคริปต์) วิธีที่ง่ายเพียงอย่างเดียวคือการใช้จาวาสคริปต์ OnClick Event บนสมอเรือของคุณและส่งคืนเป็นเท็จซึ่งอาจเป็นรหัสที่สั้นที่สุด คุณสามารถใช้สำหรับ:

<a href="page.html" onclick="return false">page link</a>

2
@ ไมค์ปุ่มนี้ทำให้การคลิกไม่ทำอะไรเลย แต่ปุ่มยังคงสามารถคลิกได้
acostache

1
@acostache โดยใช้ style = "เคอร์เซอร์: default;" ควรช่วยด้วยตัวชี้
John

4
คำถามคือ: "ใช้ CSS" ดังนั้นนี่เป็นคำตอบที่ดี แต่ไม่ใช่คำตอบที่ถูกต้อง
Roman Holzner

จะดีกว่าที่จะใช้ css แทน onclick = "return false" ด้วยเหตุผลหลัก 3 ข้อ: 1 ด้วย css คุณสามารถเปลี่ยนเคอร์เซอร์เมาส์ลิงค์เริ่มต้นเป็นลูกศรเริ่มต้น 2- นั่นแหล่ะ js 3- นั่นคือการคืนค่าจริง ๆ แล้วคุณไม่ต้องการคืนค่าเท็จทุกครั้งที่คุณคลิกที่ลิงค์
Diego Unanue

11

ใช่ .. มันเป็นไปได้ที่จะใช้css

<a class="disable-me" href="page.html">page link</a>

.disable-me {
    pointer-events: none;
}

นี่เป็นวิธีที่สะอาดที่สุด แต่มีข้อแม้อย่างหนึ่ง: รองรับเฉพาะใน IE11 + caniuse.com
pixelfreak

8

หรือ HTML และ CSS ล้วนๆโดยไม่มีเหตุการณ์:

<div style="z-index: 1; position: absolute;">
    <a style="visibility: hidden;">Page link</a>
</div>
<a href="page.html">Page link</a>

1
-1 เพราะนี่เป็นวิธีที่ค่อนข้างซับซ้อน / สับสนในการแก้ปัญหา นอกจากนี้ยังไม่ได้ทำในสิ่งที่คำถามถาม (ทำให้ลิงก์ไม่ทำงาน) มันครอบคลุมการเชื่อมโยงกับองค์ประกอบที่มองไม่เห็น คำตอบของดิเอโกนั้นสะอาดกว่ามาก
พัฒนา

@ การพัฒนาฉันคิดว่าคำตอบของดิเอโกนั้นดีกว่าและควรได้รับการโหวตให้สูงขึ้นและเป็นที่ยอมรับ อย่างไรก็ตามเมื่อฉันเขียนคำตอบนี้ (3 ปีที่แล้ว) pointer-eventsแทบจะไม่สนับสนุนเบราว์เซอร์
พอล

@ พอลโปรฉันคิดว่าเป็นกรณีนี้ ขออภัยสำหรับ downvote! แค่ต้องการให้แน่ใจว่าคำตอบล่าสุดอยู่ด้านบน ขอบคุณสำหรับคำตอบ
พัฒนา

6

CSS ถูกออกแบบมาเพื่อส่งผลกระทบต่อการนำเสนอไม่ใช่พฤติกรรม

คุณสามารถใช้ JavaScript ได้

document.links[0].onclick = function(event) {
   event.preventDefault();
};

5

วิธีที่ไม่เสแสร้งมากขึ้น (สมมติว่าคุณใช้ jQuery):

HTML:

<a id="my-link" href="page.html">page link</a>

javascript:

$('#my-link').click(function(e)
{
    e.preventDefault();
});

ข้อดีของสิ่งนี้คือการแยกอย่างชัดเจนระหว่างตรรกะและการนำเสนอ หากวันหนึ่งคุณตัดสินใจว่าลิงก์นี้จะทำอย่างอื่นคุณไม่ต้องยุ่งกับมาร์กอัพเพียงแค่ JS


4
คุณรู้ว่าคุณสามารถเขียนโค้ด jQuery ที่ไม่ใช่เพื่อทำสิ่งเดียวกันที่จะทำงานได้เร็วขึ้น: document.getElementById('my-link').onclick = function(){ return false; };
Paul

1
ฉันคิดว่าคนส่วนใหญ่ต้องการ (และควร) ใช้กรอบบางอย่างเพื่อทำให้การพัฒนาง่ายขึ้น ผู้เขียนไม่ได้ระบุข้อ จำกัด ด้านประสิทธิภาพใด ๆ แต่ jQuery minified และ gzipped เป็นเพียง 31KB ฉันคิดว่าผลประโยชน์มีค่าเกินกว่าค่าใช้จ่าย
pixelfreak

2
อย่างจริงจัง? เบราว์เซอร์ใดที่ไม่สนับสนุน onclick หรือ getElementById ตกลงดังนั้น IE 2 จึงไม่รองรับ onclick แต่ก็ไม่รองรับ CSS ... และฉันสงสัยอย่างมากว่ารหัส jQuery ของคุณนั้นจะทำงานใน IE 2 ด้วยเช่นกัน
Paul

1
ความแตกต่างของความเร็วอาจเล็ก แต่ถ้าคุณไม่สามารถดาวน์โหลดไลบรารี jQuery ได้ ฉันไม่คิดว่าเป็นความคิดที่ดีที่จะใช้การสนับสนุนการใช้ jQuery เมื่อคุณไม่ต้องการเพราะผู้คนต้องพึ่งพามันและลืมวิธีการเขียน Javascript โดยที่ไม่ต้องใช้มัน
Paul

4
@PaulPRO การสนทนานี้เป็นที่สงสัยโดยไม่มีความต้องการของผู้เขียน แต่ละเฟรมเวิร์กมีจุดประสงค์ หากเขาไม่เชี่ยวชาญใน JS และเพียงแค่ทำเว็บไซต์ mom-n-pop และต้องการจัดการองค์ประกอบ DOM บางอย่างมันจะง่ายกว่าที่เขาจะใช้เฟรมเวิร์ก ฝืนใจของคุณในการใช้กรอบใด ๆ นั้นไร้สาระ PHP เขียนใน C. แปลว่าคุณควรเขียน C และไม่ใช้ PHP ใช่หรือไม่ iOS มี UIKit, Core Data, Quartz และอื่น ๆ Flash มีห้องสมุดบุคคลที่สามที่ใช้กันทั่วไปมากมาย อีกครั้งแต่ละกรอบมีวัตถุประสงค์ ความพิถีพิถันไม่ได้สร้างขึ้นในบ้านจะไม่ช่วยใคร
pixelfreak


0

มันสามารถทำได้ใน CSS และมันง่ายมาก เปลี่ยน "a" เป็น "p" "การเชื่อมโยงหน้า" ของคุณไม่ได้นำไปสู่ที่ใดที่หนึ่งถ้าคุณต้องการทำให้มันไม่สามารถคลิกได้

เมื่อคุณบอก css ของคุณให้ดำเนินการโฮเวอร์กับ "p" เฉพาะนี้ให้บอกสิ่งนี้:

(สำหรับตัวอย่างนี้ฉันได้ให้ "p" the "ตัวอย่าง" ID)

#example
{
  cursor:default;
}

ตอนนี้เคอร์เซอร์ของคุณจะยังคงเหมือนเดิมทุกประการ


-1
<a href="page.html" onclick="return false" style="cursor:default;">page link</a>

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