จะปิดการใช้งานลิงค์โดยใช้ CSS เท่านั้นได้อย่างไร


844

มีวิธีการปิดการใช้งานลิงค์โดยใช้ CSS หรือไม่?

ฉันมีคลาสที่เรียกว่าcurrent-pageและต้องการลิงก์กับคลาสนี้เพื่อปิดใช้งานเพื่อไม่ให้มีการดำเนินการใด ๆ เกิดขึ้นเมื่อมีการคลิก


42
หลังจากที่มีจำนวนมาก googling ฉันได้คำตอบที่สมบูรณ์แบบสำหรับคำถามนี้css-tricks.com/pointer-events-current-nav
RSK

1
ควรใช้ลิงก์หรือไม่ที่มีความหมายมากกว่าค่าปัจจุบัน มันไม่ควรปิดการใช้งานผ่าน CSS แต่ผ่านการใช้hiddenคุณลักษณะที่สามารถใช้ได้กับองค์ประกอบ HTML ใด ๆ CSS จากนั้นสามารถใช้เพื่อเลือกเช่นa[hidden]ยึดและจัดสไตล์ตามนั้น
พฤศจิกายน

@amn แต่ฉันไม่คิดว่าเบราว์เซอร์จะแสดงองค์ประกอบที่มีแอตทริบิวต์ที่ซ่อนอยู่ดังนั้นการใส่สไตล์จึงเป็นสิ่งที่สงสัย
user1794469

1
@ user1794469 พวกเขาจะถ้าคุณสั่งให้พวกเขาไปด้วย CSS โดยใช้display: blockตัวอย่างหรือค่าอื่น ๆ displayสำหรับ แต่hiddenไม่สามารถใช้ได้เสมอไป - สำหรับองค์ประกอบที่ไม่เกี่ยวข้องและจากคำถามก็ไม่ชัดเจนว่าทำไมจึงควรปิดการใช้งานลิงก์ นี่อาจเป็นกรณีของปัญหา XY
พฤศจิกายน

คำตอบ:


1348

คำตอบอยู่ในความคิดเห็นของคำถามแล้ว สำหรับการมองเห็นเพิ่มเติมฉันกำลังคัดลอกโซลูชันนี้ที่นี่:

.not-active {
  pointer-events: none;
  cursor: default;
  text-decoration: none;
  color: black;
}
<a href="link.html" class="not-active">Link</a>

สำหรับการสนับสนุนเบราว์เซอร์โปรดดูhttps://caniuse.com/#feat=pointer-events หากคุณต้องการสนับสนุน IE มีวิธีแก้ไขเฉพาะหน้า ดูคำตอบนี้

คำเตือน: การใช้pointer-eventsCSS ในองค์ประกอบที่ไม่ใช่ SVG นั้นเป็นการทดลอง คุณลักษณะที่เคยเป็นส่วนหนึ่งของข้อมูลจำเพาะร่าง CSS3 UI แต่เนื่องจากปัญหาการเปิดจำนวนมากได้ถูกเลื่อนออกไปเป็น CSS4


36
นอกจากนี้จะไม่หลีกเลี่ยงการแท็บไปที่ลิงก์จากนั้นป้อน
Jono

4
หากคุณต้องการจัดสไตล์เล็กน้อยดังนั้นผู้ใช้จะเห็นว่าปิดใช้งานอยู่ ให้ความทึบแสง: .2
DNRN

4
ตอนนี้ใช้งานได้กับเบราว์เซอร์สมัยใหม่ทั้งหมดรวมถึง IE 11 หากคุณต้องการการรองรับ IE 10 และด้านล่างคุณสามารถใช้ JavaScript polyfill เช่นนี้ได้
Keavon

26
หมายเหตุสำคัญ: นี่เป็นการปิดการคลิกเท่านั้นไม่ใช่ลิงก์จริง คุณยังสามารถใช้แท็บ + ป้อนเพื่อ "คลิก" ลิงก์
Pikamander2

11
การใช้pointer-events: none;ไม่สมบูรณ์ นอกจากนี้ยังปิดใช้งานกิจกรรมอื่น ๆ เช่นโฮเวอร์ซึ่งจำเป็นสำหรับการแสดงtitle="…"หรือคำแนะนำเครื่องมือ ฉันพบว่าโซลูชัน JS นั้นดีกว่า (ใช้event.preventDefault();) พร้อมกับ CSS ( cursor: default; opacity: 0.4;) และคำแนะนำเครื่องมืออธิบายสาเหตุที่ปิดการใช้งานลิงก์
Quinn

140

.disabled {
  pointer-events: none;
  cursor: default;
  opacity: 0.6;
}
<a href="#" class="disabled">link</a>


คุณอาจต้องตั้งค่าการแสดงผลเป็นแบบอินไลน์บล็อก (หรือสิ่งอื่นที่ไม่ใช่อินไลน์)
dev_masta

ดี แต่ระวังการสนับสนุนเบราว์เซอร์ตัวชี้เหตุการณ์ (เช่น <IE11): caniuse.com/#search=pointer-events
darren

1
สำหรับรูปแบบลองเปลี่ยนไปpointer-events:none; จากนั้นเคอร์เซอร์สามารถเปลี่ยนเป็นpointer-events:unset; cursor:not-allowed;สิ่งนี้ให้เบาะแสที่ดีขึ้นเกี่ยวกับสิ่งที่เกิดขึ้นกับผู้ใช้ ดูเหมือนว่าจะทำงานใน FF, Edge, Chrome, Opera และ Brave ณ วันนี้
Sablefoste

@Sablefoste นั่นใช้ไม่ได้กับฉันใน Chrome 60 เคอร์เซอร์นั้นแน่นอนnot-allowedแต่ลิงค์ยังคงสามารถคลิกได้
soupdog

122

CSS สามารถใช้เพื่อเปลี่ยนสไตล์ของบางสิ่งเท่านั้น สิ่งที่ดีที่สุดที่คุณสามารถทำได้กับ CSS บริสุทธิ์คือการซ่อนลิงก์ทั้งหมด

สิ่งที่คุณต้องการจริงๆคือจาวาสคริปต์ นี่คือวิธีที่คุณจะทำสิ่งที่คุณต้องการโดยใช้ห้องสมุด jQuery

$('a.current-page').click(function() { return false; });

21
function(ev){ ev.preventDefault(); ev.stopPropagation(); return false;อย่าลืมป้องกันพฤติกรรมเริ่มต้น:
ldiqual

5
@Idiqual return falseทำเช่นนั้น
nickf

1
return falseใช้งานได้เฉพาะเมื่อการกระทำถูกตั้งค่าโดยใช้hrefแอตทริบิวต์
Justin

รุ่นนี้ยังสามารถใช้เพื่อปิดการคลิกในขณะที่ยังคงกิจกรรมตัวชี้อื่น ๆ เช่น: โฮเวอร์หรือ: โฟกัส! คำตอบยอดนิยม!
Charlie Tupman

แม้ว่ามันจะใช้ได้กับทุกเบราว์เซอร์ แต่มันก็ปิดการใช้งานเพียงแค่คลิกที่ลิงค์ โปรดทราบว่าผู้ใช้หลายคนใช้เพื่อเปิดลิงก์จากเมนูบริบทหรือโดยใช้ปุ่มกลางของเมาส์
Alexandru Severin

33

CSS ทำเช่นนั้นไม่ได้ CSS ใช้สำหรับการนำเสนอเท่านั้น ตัวเลือกของคุณคือ:

  • อย่ารวมhrefแอตทริบิวต์ใน<a>แท็กของคุณ
  • ใช้ JavaScript เพื่อค้นหาองค์ประกอบจุดยึดกับสิ่งclassนั้นและลบhrefหรือonclickแอตทริบิวต์ของมันตามลำดับ jQuery จะช่วยคุณในเรื่องนั้น (NickF แสดงวิธีทำสิ่งที่คล้ายกัน แต่ดีกว่า)

30
นั่นไม่ใช่คำตอบที่ถูกต้อง - ตัวชี้เหตุการณ์: ไม่มี; css สามารถปิดการใช้งานได้
pie6k

ฉันไม่คิดอย่างนั้น! หรือบางทีแอตทริบิวต์ยังไม่มีในปี 2010? ไม่ว่าในกรณีใดมันเป็นความจริงที่pointer-events: noneสามารถปิดการใช้งานเหตุการณ์เมาส์ อย่างไรก็ตามมันไม่ได้ปิดการใช้งานลิงค์พื้นฐาน ในการทดสอบที่ฉันได้ลองใน Chrome 81 ฉันยังคงสามารถเปิดใช้งานลิงก์ดังกล่าวได้โดยการแท็บและพิมพ์ปุ่มย้อนกลับ
Kevin Conner

31

Bootstrap Disabled Link

<a href="#" class="btn btn-primary btn-lg disabled" role="button">Primary link</a>

<a href="#" class="btn btn-default btn-lg disabled" role="button">Link</a>

Bootstrap Disabled Button แต่ดูเหมือนลิงค์

<button type="button" class="btn btn-link">Link</button>

19

คุณสามารถตั้งค่าhrefแอตทริบิวต์เป็นjavascript:void(0)

.disabled {
  /* Disabled link style */
  color: black;
}
<a class="disabled" href="javascript:void(0)">LINK</a>


2
@nickf จริง แต่นี่เป็นทางออกที่เรียบร้อยและดีกว่าพึ่งพาการกำหนดค่าเริ่มต้น IE ที่ไม่ดีเมื่อตั้งค่าเป็นปิดการใช้งาน
SausageFingers

ฉันคิดว่ามันอาจซับซ้อนกว่านี้นิดหน่อย นี่คือวิธีแก้ปัญหาของsnook.ca/archives/javascript/clear_links_to_1
Mike Gifford

12

ฉันใช้:

.current-page a:hover {
pointer-events: none !important;
}

และก็ไม่เพียงพอ ในบางเบราว์เซอร์มันยังคงแสดงลิงค์กะพริบ

ฉันต้องเพิ่ม:

.current-page a {
cursor: text !important;
}

3
ฉันคิดว่าa[disabled]:active { pointer-events: none !important; }ดีกว่า
Masamoto Miyata

10

หากคุณต้องการติดกับ HTML / CSS เพียงอย่างเดียวในฟอร์มตัวเลือกอื่นคือใช้ปุ่ม จัดสไตล์และตั้งค่าdisabledแอตทริบิวต์

เช่น http://jsfiddle.net/cFTxH/1/


10

หากคุณต้องการให้เป็น CSS เท่านั้นตรรกะการปิดใช้งานควรกำหนดโดย CSS

ในการย้ายตรรกะในคำจำกัดความของ CSS คุณจะต้องใช้ตัวเลือกคุณสมบัติ นี่คือตัวอย่างบางส่วน :

ปิดการใช้งานลิงค์ที่มี href ที่แน่นอน: =

คุณสามารถเลือกที่จะปิดการใช้งานลิงค์ที่มีค่า href เฉพาะดังนี้:

<a href="//website.com/exact/path">Exact path</a>

[href="https://stackoverflow.com//website.com/exact/path"]{
  pointer-events: none;
}

ปิดการใช้งานลิงค์ที่มีชิ้นส่วนของเส้นทาง: *=

ที่นี่ลิงค์ใด ๆ ที่มี/keyword/ในพา ธ จะถูกปิดการใช้งาน

<a href="//website.com/keyword/in/path">Contains in path</a>

[href*="/keyword/"]{
  pointer-events: none;
}

ปิดการใช้งานลิงค์ที่ขึ้นต้นด้วย: ^=

[attribute^=value]เป้าหมายดำเนินการแอตทริบิวต์ที่เริ่มต้นด้วยความคุ้มค่าที่เฉพาะเจาะจง ช่วยให้คุณสามารถละทิ้งเว็บไซต์และรูทพา ธ

<a href="//website.com/begins/with/path">Begins with path</a>

[href^="//website.com/begins/with"]{
  pointer-events: none;
}

คุณสามารถใช้มันเพื่อปิดการใช้งานลิงค์ที่ไม่ใช่ https ตัวอย่างเช่น :

a:not([href^="https://"]){
  pointer-events: none;
}

ปิดการใช้งานลิงค์ที่ลงท้ายด้วย: $=

[attribute$=value]ประกอบการกำหนดเป้าหมายแอตทริบิวต์ที่ลงท้ายด้วยมูลค่าที่เฉพาะเจาะจง มันจะมีประโยชน์ในการทิ้งนามสกุลไฟล์

<a href="/path/to/file.pdf">Link to pdf</a>

[href$=".pdf"]{
  pointer-events: none;
}

หรือคุณลักษณะอื่น ๆ

CSS สามารถกำหนดเป้าหมายแอตทริบิวต์ HTML ใด ๆ อาจจะrel, target, data-customและอื่น ๆ ...

<a href="#" target="_blank">Blank link</a>

[target=_blank]{
  pointer-events: none;
}

การรวมตัวเลือกคุณสมบัติ

คุณสามารถโยงกฎได้หลายกฎ สมมติว่าคุณต้องการปิดการใช้งานลิงก์ภายนอกทั้งหมด แต่ไม่ใช่ลิงค์ที่ชี้ไปยังเว็บไซต์ของคุณ:

a[href*="//"]:not([href*="my-website.com"]) {
    pointer-events: none;
}

หรือปิดการใช้งานลิงก์ไปยังไฟล์ pdf ของเว็บไซต์เฉพาะ:

<a href="//website.com/path/to/file.jpg">Link to image</a>

[href^="//website.com"][href$=".jpg"] {
  color: red;
}

รองรับเบราว์เซอร์

ตัวเลือกคุณสมบัติได้รับการสนับสนุนตั้งแต่ IE7 :not()ตัวเลือกตั้งแต่ IE9


ฉันจะปิดการใช้งานลิงค์โดยใช้ตัวเลือกปิดการใช้งานได้อย่างไร เช่น <a class="test" พิการ href="3"> ทดสอบ </a> a: ปิดใช้งาน {เคอร์เซอร์: ไม่ได้รับอนุญาต }
ecasper

10

วิธีหนึ่งที่คุณสามารถทำได้ด้วย CSS คือการตั้งค่า CSS ในการตัดคำ divที่คุณตั้งค่าให้หายไปและมีสิ่งอื่นเกิดขึ้น

เช่น:

<div class="disabled">
    <a class="toggleLink" href="wherever">blah</a>
    <span class="toggleLink">blah</span
</div>

ด้วย CSS ที่ชอบ

.disabled a.toggleLink { display: none; }
span.toggleLink { display: none; }
.disabled span.toggleLink { display: inline; }

ในการปิดการใช้งานจริงaคุณจะต้องแทนที่เหตุการณ์คลิกหรือhrefตามที่ผู้อื่นอธิบายไว้

PS: เพียงเพื่อชี้แจงฉันคิดว่านี่เป็นทางออกที่ค่อนข้างไม่เป็นธรรมและสำหรับ SEO มันไม่ได้ดีที่สุด แต่ฉันเชื่อว่ามันดีที่สุดกับ CSS ล้วนๆ



6

คุณสมบัติตัวชี้เหตุการณ์ช่วยให้สามารถควบคุมวิธีการองค์ประกอบ HTML ตอบสนองต่อเหตุการณ์เมาส์ / สัมผัส - รวมถึง CSS เลื่อน / สถานะใช้งานคลิก / แตะเหตุการณ์ใน Javascript และเคอร์เซอร์จะมองเห็นหรือไม่

นี่ไม่ใช่วิธีเดียวที่คุณจะปิดการใช้งานลิงก์แต่เป็นวิธี CSS ที่ดีซึ่งทำงานใน IE10 + และเบราว์เซอร์ใหม่ทั้งหมด:

.current-page {
  pointer-events: none;
  color: grey;
}
<a href="#" class="current-page">This link is disabled</a>


4

ฉันค้นหาผ่านทางอินเทอร์เน็ตและพบว่าไม่ดีกว่านี้ โดยพื้นฐานแล้วจะปิดใช้งานฟังก์ชันการคลิกปุ่มเพียงเพิ่มสไตล์ CSS โดยใช้ jQuery ดังนี้:

$("#myLink").css({ 'pointer-events': 'none' });

จากนั้นให้เปิดใช้งานอีกครั้งทำสิ่งนี้

$("#myLink").css({ 'pointer-events': '' });

ตรวจสอบกับ Firefox และ IE 11 แล้วใช้งานได้


3
คุณไม่ต้องการ jQuery สำหรับสิ่งนี้คุณสามารถตั้งค่านี้ใน CSS ด้วยตัวเอง
Bram Vanroy

3

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

a.button,button {
    display: inline-block;
    padding: 6px 15px;
    margin: 5px;
    line-height: 1.42857143;
    text-align: center;
    white-space: nowrap;
    vertical-align: middle;
    -ms-touch-action: manipulation;
    touch-action: manipulation;
    cursor: pointer;
    -webkit-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
    background-image: none;
    border: 1px solid rgba(0, 0, 0, 0);
    border-radius: 4px;
    -moz-box-shadow: inset 0 3px 20px 0 #cdcdcd;
    -webkit-box-shadow: inset 0 3px 20px 0 #cdcdcd;
    box-shadow: inset 0 3px 20px 0 #cdcdcd;
}

a[disabled].button,button[disabled] {
    cursor: not-allowed;
    opacity: 0.4;
    pointer-events: none;
    -webkit-touch-callout: none;
}

a.button:active:not([disabled]),button:active:not([disabled]) {
    background-color: transparent !important;
    color: #2a2a2a !important;
    outline: 0;
    -webkit-box-shadow: inset 0 3px 5px rgba(0, 0, 0, .5);
    box-shadow: inset 0 3px 5px rgba(0, 0, 0, .5);
}
<button disabled="disabled">disabled!</button>
<button>click me!</button>
<a href="http://royansoft.com" disabled="disabled" class="button">test</a>
<a href="http://royansoft.com" class="button">test2</a>


2

ขอบคุณทุกคนที่โพสต์โซลูชั่นฉันรวมหลายวิธีเพื่อให้มีdisabledฟังก์ชั่น ขั้นสูง นี่คือส่วนสำคัญและรหัสด้านล่าง

This provides for multiple levels of defense so that Anchors marked as disable actually behave as such.
Using this approach, you get an anchor that you cannot:
  - click
  - tab to and hit return
  - tabbing to it will move focus to the next focusable element
  - it is aware if the anchor is subsequently enabled


1.  Include this css, as it is the first line of defense.  This assumes the selector you use is 'a.disabled'
    a.disabled {
      pointer-events: none;
      cursor: default;
    }

 2. Next, instantiate this class such as (with optional selector):
    $ ->
      new AnchorDisabler()

นี่คือคลาส coffescript:

class AnchorDisabler
  constructor: (selector = 'a.disabled') ->
    $(selector).click(@onClick).keyup(@onKeyup).focus(@onFocus)

  isStillDisabled: (ev) =>
    ### since disabled can be a class or an attribute, and it can be dynamically removed, always recheck on a watched event ###
    target = $(ev.target)
    return true if target.hasClass('disabled')
    return true if target.attr('disabled') is 'disabled'
    return false

  onFocus: (ev) =>
    ### if an attempt is made to focus on a disabled element, just move it along to the next focusable one. ###
    return unless @isStillDisabled(ev)

    focusables = $(':focusable')
    return unless focusables

    current = focusables.index(ev.target)
    next = (if focusables.eq(current + 1).length then focusables.eq(current + 1) else focusables.eq(0))

    next.focus() if next


  onClick: (ev) =>
    # disabled could be dynamically removed
    return unless @isStillDisabled(ev)

    ev.preventDefault()
    return false

  onKeyup: (ev) =>

    # 13 is the js key code for Enter, we are only interested in disabling that so get out fast
    code = ev.keyCode or ev.which
    return unless code is 13

    # disabled could be dynamically removed
    return unless @isStillDisabled(ev)

    ev.preventDefault()
    return false

สวัสดี !! คำตอบคือCSSไม่เกี่ยวกับJSอะไรเลย!
Mehdi Dehghani

1

นอกจากนี้คุณยังสามารถปรับขนาดองค์ประกอบอื่นเพื่อให้ครอบคลุมการเชื่อมโยง (โดยใช้ดัชนีซีด้านขวา): นั่นจะ "กิน" การคลิก

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


จริง แต่ไม่ใช่สำหรับการนำทางด้วยแป้นพิมพ์
AndFisher

1

ตัวอย่างที่นี่
ลองอันนี้

$('html').on('click', 'a.Link', function(event){
    event.preventDefault();
});

1
ซอของคุณไม่ทำงาน! ลิงก์ยังคงเปิดใช้งานใน Chrome
Matt Byrne

ในการแก้ไขรหัสนี้ให้สลับสองพารามิเตอร์แรกที่ส่งผ่านไปที่ on (): $ ('html'). on ('คลิก', 'a.Link', ฟังก์ชัน (เหตุการณ์) {event.preventDefault ();});
2C-B

1
สวัสดี !! คำตอบคือCSSไม่เกี่ยวกับJSอะไรเลย!
Mehdi Dehghani

0

เคล็ดลับก็คือการวางองค์ประกอบที่มองไม่เห็นเหนือมัน วิธีนี้จะปิดใช้งานเอฟเฟ็กต์โฮเวอร์เช่นกัน

.myButton{
    position: absolute;
    display: none;
}

.myButton::after{ 
    position: absolute;
    content:"";
    height:100%;
    width:100%;
    top:0;
    left:0;
}

-1

เป็นไปได้ที่จะทำใน CSS

.disabled{
  cursor:default;
  pointer-events:none;
  text-decoration:none;
  color:black;
}
<a href="https://www.google.com" target="_blank" class="disabled">Google</a>

ดูที่:

โปรดทราบว่าtext-decoration: none;และcolor: black;ไม่จำเป็น แต่มันทำให้การเชื่อมโยงมีลักษณะเหมือนข้อความธรรมดา


-1

pointer-events:none จะปิดการใช้งานลิงค์:

.disabled {
       pointer-events:none;
}
<a href="#" class="disabled">link</a>

1
นี่เป็นสิ่งที่ดี แต่แน่นอนว่าไม่ได้ทำงานหากผู้ใช้ใช้แป้นพิมพ์ของเขา :(
gztomas

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