有没有一种使用CSS禁用链接的方法?
我有一个名为 current-page
的类,并希望拥有此类的链接被禁用,以便在单击时不执行任何操作。
来自这个解决方案:
[aria-current="page"] {
pointer-events: none;
cursor: default;
text-decoration: none;
color: black;
}
<a href="link.html" aria-current="page">Link</a>
如需浏览器支持,请参见https://caniuse.com/#feat=pointer-events。如果需要支持Internet Explorer,可以使用解决方法,请参见此答案。
警告:在CSS中使用pointer-events
对于非SVG元素是实验性的。该功能曾经是CSS 3 UI草案规范的一部分,但由于存在许多问题,已被推迟到CSS 4。
pointer-events: none;
并不完美,它也会禁用其他事件,比如悬停事件,这对于显示 title="…"
或工具提示是必需的。我发现使用 JS 解决方案更好(使用 event.preventDefault();
),加上一些 CSS(cursor: default; opacity: 0.4;
)和一个解释为什么链接被禁用的工具提示。 - Quinn Comendant.disabled {
pointer-events: none;
cursor: default;
opacity: 0.6;
}
<a href="#" class="disabled">link</a>
pointer-events:none;
更改为pointer-events:unset;
,这样可以将光标更改为cursor:not-allowed;
。这样可以更好地向用户显示发生了什么。截至今天,在FF、Edge、Chrome、Opera和Brave中似乎有效。 - Sablefostepointer-events: none
只能阻止指针设备点击链接。但是,通过按下 Tab 键直到链接获得焦点,然后按下空格键仍然可以“点击”链接。 - undefinedCSS只能用于更改样式。最好的方法可能是使用纯CSS将链接完全隐藏。
你实际上需要一些JavaScript代码。以下是使用jQuery库实现您想要的内容的方法。
$('a.current-page').click(function() { return false; });
function(ev){ ev.preventDefault(); ev.stopPropagation(); return false;}
。 - ldiqualCSS 无法禁用链接。它可以阻止指针事件(如点击),但点击不是激活链接的唯一方式。您有以下选项:
<a>
标记中不包括 href
或 onclick
属性。document.querySelector
等方法查找要禁用的锚元素。删除它们的 href
或 onclick
属性,以便它们不再具有任何方法可以激活的链接行为。<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>
<button type="button" class="btn btn-link">Link</button>
href
属性设置为 javascript:void(0)
:
.disabled {
/* Disabled link style */
color: black;
}
<a class="disabled" href="javascript:void(0)">LINK</a>
我使用了:
.current-page a:hover {
pointer-events: none !important;
}
而这还不够,在一些浏览器中仍然会闪烁地显示链接。
我不得不添加:
.current-page a {
cursor: text !important;
}
a[disabled]:active { pointer-events: none !important; }
会更好。 - Masamoto Miyatapointer-events: none
只能防止指针设备点击链接。通过按下Tab键直到链接获得焦点,然后按下空格仍然可以“点击”链接。 - undefined如果你希望它仅使用CSS,那么禁用逻辑应该由CSS定义。
要将逻辑移动到CSS定义中,您需要使用属性选择器。以下是一些示例:
=
您可以选择禁用包含特定 href 值的链接,如下所示:
<a href="//website.com/exact/path">Exact path</a>
[href="//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;
}
属性选择器自Internet Explorer 7起得到支持。而:not()
选择器则自Internet Explorer 9起得到支持。
pointer-events: none
只能阻止指针设备点击链接。通过按 Tab 键直到链接获得焦点,然后按下空格仍然可以“点击”链接。 - undefined在HTML上应用下面的类。
.avoid-clicks {
pointer-events: none;
}
pointer-events: none
只能阻止指针设备点击链接。通过按 Tab 键直到链接获得焦点,然后按下空格仍然会“点击”链接。 - undefined通过CSS,您可以使用包裹div
上的CSS来实现这一点,将其设置为消失并用其他内容替换它。
例如:
您可以通过在包裹div
上设置CSS来实现此目的,将其设置为消失,并使用其他内容代替它。
例如:
<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; }
要真正关闭标签,您需要像其他人描述的那样替换其点击事件或href属性。
PS:仅澄清一下,我认为这是一个相当凌乱的解决方案,并且对于SEO也不是最好的,但我相信这是纯CSS中最好的解决方案。
hidden
属性来禁用。然后可以使用 CSS 选择器例如a[hidden]
来选择锚点并相应地进行样式设置。 - Armen Michaelidisplay: block
或其他值,你可以指示它们这样做。但是hidden
并不总是适用的——它适用于无关紧要的元素,从问题中不清楚为什么链接应该被禁用。这可能是XY问题的一个例子。 - Armen Michaelipointer-events: none
只是阻止了指针设备点击链接。通过按下 Tab 键直到链接获得焦点,然后按下空格仍然可以“点击”链接。 - undefined