是否可以使用CSS将HTML锚标记设为不可点击/不可链接?


132

例如,如果我有这个:

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

有什么我可以使用的style属性来实现的,因此链接不可单击并且不会带我到page.html吗?

或者,我唯一的选择是不简单地将“页面链接”不包装在锚标记中?

编辑:我想说明为什么要这样做,以便人们可以提供更好的建议。我正在尝试设置我的应用程序,以便开发人员可以选择他们想要的导航样式类型。

因此,我有一个链接列表,当前始终选择一个链接,而其他所有链接都没有。对于未选择的链接,我显然希望这些链接是普通的可点击锚标记。但是对于选定的链接,有些人希望链接保持可单击状态,而另一些人则希望使其不能单击。

现在,我可以轻松地以编程方式不将锚定标签包裹在所选链接周围。但我认为,如果始终可以将所选链接包装成类似以下内容,它将更加优雅:

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

然后让开发人员通过CSS控制链接样式。



3
如果您不希望单击它,可以<span>改用?
大卫说恢复莫妮卡(Monica)

我必须同意戴维。不要破坏UI范式。用户的期望是可以单击链接。如果无法单击,则它不是链接吗?
mrtsherman 2011年


是的,这是一个糟糕的主意。屏幕阅读器仍将链接视为链接,因为它是链接。搜索引擎也是如此。实际上,任何可以理解HTML的东西。不要这样 没有什么“优雅”的。
Paul D. Waite

Answers:


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版本。想知道它是否可以在Windows的IE上运行。
JohnMerlino 2014年

3
此解决方案中的关键是:pointer-events这里的链接兼容性表
masegaloeh

@JohnMerlino:在IE9中不起作用。在masegaloeh的兼容性表链接上查看更多信息
Howie

警告:Tab键将焦点移动到链接,并使用Enter键激活链接仍然有效
WTHO

我不认为光标是必需的。只要您有pointer-events:none,就可以正常工作。
kloddant

51

使用CSS不太容易,因为它不是一种行为语言(即JavaScript),唯一简单的方法是在锚点上使用JavaScript OnClick事件并将其返回为false,这可能是最短的代码您可以为此:

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

2
@Mike这使单击不执行任何操作,但按钮仍可单击。
acostache

1
@acostache使用style =“ cursor:default;” 应该帮助指针
John

4
问题是:“使用CSS”,所以这是一个好方法,但不是正确的答案。
Roman Holzner 2014年

最好使用css而不是onclick =“ return false”,原因有以下3个主要原因:1-使用CSS可以将默认链接鼠标光标更改为默认箭头。2-令人讨厌的js。3-实际上是在返回一个值,您不想每次单击链接时都返回false。
Diego Unanue 2014年

11

是的。可以使用CSS

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

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

这是最干净的方法,但有一个警告:IE11 + caniuse.com
pixelfreak 2015年

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,因为这是解决问题的相当复杂/令人困惑的方法。它也并没有真正执行问题所要求的(使链接无效)。它只是用一个不可见的元素覆盖了链接。迭戈的答案要干净得多。
开发

@developering我认为Diego的答案也更好,应该被投票更高并被接受。但是,当我写这个答案(3年前)pointer-events时,几乎没有浏览器支持。
Paul

@Paulpro我觉得情况就是如此。对不起,不好意思!只是想确保最新答案是最重要的。感谢您的回复。
开发

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缩小和压缩后只有31KB。我认为收益远远超过成本。
pixelfreak 2011年

2
认真吗 哪种浏览器不支持onclick或getElementById。好的,因此IE 2不支持onclick,但它也不支持CSS ...而且我非常怀疑您的jQuery代码在Internet Explorer 2中也可以正常工作。
Paul

1
速度差异可能很小,但是如果您无法使用jQuery库下载时间,则不会。我真的认为在不需要时使用鼓励使用jQuery并不是一个好主意,因为人们开始依赖它,而忘记了如何在不使用它的情况下编写Javascript。
Paul

4
@PaulPRO本次讨论没有作者的要求。每个框架都有其目的。如果他不懂JS,只是做一个妈妈妈妈的网站并且需要操纵一些DOM元素,那么使用框架要容易得多。您不愿使用任何框架都是荒谬的。PHP用C编写。这是否意味着您应该编写C而不使用PHP?iOS具有UIKit,Core Data,Quartz等。Flash具有大量常用的第三方库。同样,每个框架都有其目的。纯粹的,内在的心态不会帮助任何人。
pixelfreak 2011年

2

答案是:

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

0

可以在CSS中完成,非常简单。将“ a”更改为“ p”。如果您要使其无法点击,则“页面链接”无论如何都不会指向某个地方。

当您告诉CSS对这个特定的“ p”执行悬停操作时,请告诉它:

(对于此示例,我为“ p”赋予了“示例” ID)

#example
{
  cursor:default;
}

现在,您的光标将保持与整个页面相同。


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

无需为此添加单独的答案,以为您对@KaranK的答案的评论就足够了。请避免重复的答案。
MAChitgarha
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.