如何仅使用CSS禁用链接?

RSK*_*RSK 825 html css

有没有办法使用CSS禁用链接?

我有一个被调用的类,current-page并希望禁用此类的链接,以便在单击它们时不会发生任何操作.

RSK*_*RSK 1321

答案已经在问题的评论中.为了获得更多可见性,我在此处复制此解决方案:

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

有关浏览器支持,请参阅https://caniuse.com/#feat=pointer-events.如果你需要支持IE,有一个解决方法; 看到这个答案.

警告:pointer-events在CSS中使用非SVG元素是实验性的.该功能曾经是CSS3 UI草案规范的一部分,但由于许多未解决的问题,已被推迟到CSS4.

  • 此外,这不会避免标签链接然后输入. (34认同)
  • 重要说明:这仅禁用单击,而不是实际链接本身.您仍然可以使用tab + enter来"点击"该链接. (26认同)
  • 使用`pointer-events:none;`并不完美.它还会禁用其他事件,例如悬停,这是显示`title ="..."`或工具提示所必需的.我发现JS解决方案更好(使用`event.preventDefault();`)以及一些CSS(`cursor:default; opacity:0.4;`)和工具提示,解释链接被禁用的原因. (10认同)
  • 如果你要设计一下它,那么用户可以看到它已被禁用.给它一些不透明度:.2 (4认同)
  • 这适用于所有现代浏览器,包括IE 11.如果您需要支持IE 10及更低版本,您可以使用JavaScript polyfill,例如[this one](https://github.com/kmewhort/pointer_events_polyfill). (3认同)

ami*_*mir 134

.disabled {
  pointer-events: none;
  cursor: default;
  opacity: 0.6;
}
Run Code Online (Sandbox Code Playgroud)
<a href="#" class="disabled">link</a>
Run Code Online (Sandbox Code Playgroud)

  • 对于样式,请尝试将 `pointer-events:none;` 更改为 `pointer-events:unset;`。然后,光标可以更改为“cursor:not-allowed;”。这为用户提供了更好的线索。截至今天,似乎可以在 FF、Edge、Chrome、Opera 和 Brave 中使用。 (2认同)

nic*_*ckf 122

CSS只能用于改变某些东西的风格.你可以用纯CSS做的最好的事情是完全隐藏链接.

你真正需要的是一些javascript.以下是使用jQuery库执行所需操作的方法.

$('a.current-page').click(function() { return false; });
Run Code Online (Sandbox Code Playgroud)

  • 不要忘记防止默认行为:`function(ev){ev.preventDefault(); ev.stopPropagation(); 返回false;`. (21认同)
  • 更好的解决方案,因为它几乎适用于所有浏 (7认同)
  • @Idiqual,`return false`就是这么做的 (5认同)
  • 我该如何启用它? (4认同)
  • 尽管这适用于所有浏览器,但它仅禁止单击链接。请记住,许多用户习惯从上下文菜单或使用鼠标中键打开链接。 (2认同)

Kev*_*ner 34

CSS无法做到这一点.CSS仅用于演示.你的选择是:

  • 不要href<a>标记中包含该属性.
  • 使用JavaScript,查找具有该元素的锚元素class,并相应地删除它们hrefonclick属性.jQuery会帮助你(NickF展示了如何做类似但更好的事情).

  • 这不是正确的答案 - 指针 - 事件:无; css可以禁用它. (27认同)
  • 我没想到这一点!或者也许该属性在 2010 年还不存在?无论如何,“pointer-events: none”确实可以禁用鼠标事件。但是,它不会禁用底层链接。在我在 Chrome 81 中尝试的测试中,我仍然可以通过按 Tab 键并键入回车键来激活此类链接。 (8认同)

Jig*_*att 31

Bootstrap禁用链接

<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>
Run Code Online (Sandbox Code Playgroud)

Bootstrap禁用按钮,但它看起来像链接

<button type="button" class="btn btn-link">Link</button>
Run Code Online (Sandbox Code Playgroud)


Xin*_*nus 18

您可以将href属性设置为javascript:void(0)

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

  • @nickf是的,但是,这是一个简洁的解决方案,并且比设置为禁用时依赖于糟糕的默认IE样式更好. (2认同)

fyj*_*ham 10

只有这样你才能在没有CSS的情况下做到这一点,就是在包装div上设置一个CSS,让你消失,其他东西就把它取而代之.

例如:

<div class="disabled">
    <a class="toggleLink" href="wherever">blah</a>
    <span class="toggleLink">blah</span
</div>
Run Code Online (Sandbox Code Playgroud)

用CSS喜欢

.disabled a.toggleLink { display: none; }
span.toggleLink { display: none; }
.disabled span.toggleLink { display: inline; }
Run Code Online (Sandbox Code Playgroud)

要实际关闭A,您必须替换它的click事件或href,如其他人所述.

PS:只是为了澄清我认为这是一个相当凌乱的解决方案,对于搜索引擎优化它也不是最好的,但我相信它是纯粹的CSS最好的.


Seb*_*ten 10

如果您想坚持表单上的HTML/CSS,另一个选择是使用按钮.设置样式并设置disabled属性.

例如 http://jsfiddle.net/cFTxH/1/


Cre*_*rge 10

如果您希望它只是CSS,则禁用逻辑应由CSS定义.

要在CSS定义中移动逻辑,您必须使用属性选择器.这里有些例子 :

禁用具有精确href的链接: =

您可以选择禁用包含特定href值的链接,如下所示:

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

[href="//website.com/exact/path"]{
  pointer-events: none;
}
Run Code Online (Sandbox Code Playgroud)

禁用包含一段路径的链接: *=

此处,/keyword/将禁用包含在路径中的任何链接

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

[href*="/keyword/"]{
  pointer-events: none;
}
Run Code Online (Sandbox Code Playgroud)

禁用以下列开头的链接: ^=

[attribute^=value]操作者的目标与一个特定值开始的属性.允许您放弃网站和根路径.

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

[href^="//website.com/begins/with"]{
  pointer-events: none;
}
Run Code Online (Sandbox Code Playgroud)

您甚至可以使用它来禁用非https链接.例如 :

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

禁用以以下结尾的链接: $=

[attribute$=value]操作者的目标与特定值结束的属性.丢弃文件扩展名可能很有用.

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

[href$=".pdf"]{
  pointer-events: none;
}
Run Code Online (Sandbox Code Playgroud)

或任何其他属性

Css可以定位任何HTML属性.可能是rel,target,data-custom等...

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

[target=_blank]{
  pointer-events: none;
}
Run Code Online (Sandbox Code Playgroud)

组合属性选择器

您可以链接多个规则.假设您要禁用每个外部链接,而不是那些指向您网站的链接:

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

或禁用指向特定网站的pdf文件的链接:

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

[href^="//website.com"][href$=".jpg"] {
  color: red;
}
Run Code Online (Sandbox Code Playgroud)

浏览器支持

自IE7以来,支持属性选择器.:not()自IE9以来的选择器.


Ben*_*enk 8

试试这个:

<style>
.btn-disable {
    display:inline-block;
    pointer-events: none;       
}
</style>
Run Code Online (Sandbox Code Playgroud)


Ali*_*eza 6

指针的事件属性,可控制HTML元素如何响应鼠标/触摸事件-包括CSS悬停/活动状态,单击/点击事件在Javascript中,光标是否是可见的.

不是禁用链接的唯一方法,而是一种适用于IE10 +和所有新浏览器的好方法:

.current-page {
  pointer-events: none;
  color: grey;
}
Run Code Online (Sandbox Code Playgroud)
<a href="#" class="current-page">This link is disabled</a>
Run Code Online (Sandbox Code Playgroud)


小智 6

我用了:

.current-page a:hover {
pointer-events: none !important;
}
Run Code Online (Sandbox Code Playgroud)

而且还不够;在某些浏览器中,它仍然显示链接,闪烁。

我必须添加:

.current-page a {
cursor: text !important;
}
Run Code Online (Sandbox Code Playgroud)

  • 我认为 `a[disabled]:active { pointer-events: none !important; }` 更好。 (3认同)

Vip*_*oni 6

在 HTML 上应用以下类。

.avoid-clicks {
  pointer-events: none;
}
Run Code Online (Sandbox Code Playgroud)