2020年11月更新:我认为本文中的方法 4 是实现此目的的最佳方法。<div>
(或任何包装元素)保持语义和可访问性,同时在整个区域内“可点击”。它不会破坏文本选择,并尊重其他“嵌套”的交互式元素。
这完全有效的 HTML
<a href="http://example.com">
<div>
anything
</div>
</a>
并且请记住,您可以使链接display: block;
,这样整个矩形区域都变成“可点击”。但是,如果其中包含大量内容,对于可访问性来说绝对是糟糕的,因为所有这些内容都被读取为交互式链接。
如果您绝对需要使用 JavaScript,一种方法是在 div 中查找链接,并在点击 div 时转到其href
。这是使用 jQuery 的方法
$(".myBox").click(function() {
window.location = $(this).find("a").attr("href");
return false;
});
查找类名为“myBox”的 div 内部的链接。在点击 div 中的任何位置时重定向到该链接的值。
参考 HTML
<div class="myBox">
blah blah blah.
<a href="http://google.com">link</a>
</div>
或者,您可以在<div data-location="http://place.com">
上设置data-*
属性,并执行以下操作
window.location = $(".myBox").data("location");
效果非常好。谢谢。
我创建了一个 Jquery 插件来执行此操作。查看此内容:http://plugins.jquery.com/project/divlinker
可点击 div 的最佳解决方案。谢谢。
顺便说一句,@Leandro,链接无法使用 :(
你是我的英雄,这完美地解决了我的问题!
感谢 HTML5 更新!帮我避免了一些愚蠢的操作。
Chris,感谢你的分享。当我尝试这个时,它可以对 div 中的空白区域进行悬停,但不能对链接本身进行操作;当我点击链接本身时,它会显示 404 错误。有什么想法吗?
它将使任何具有 .myBox 类的 div 可点击,因此如果其中没有链接,它将显示 404,是这个问题吗?
非常棒。
我今天参加了一个工作面试。当被问及是否定期阅读任何博客时,我提到了 css-tricks,面试官说这也是他的最爱之一。
我很高兴听到这个!
很棒的技术。
如果要在链接的 div 内包含其他链接怎么办?如何让它们仍然可以工作?
您可以为要定位的确切元素创建一个变量。问题是,为什么要这样做?如果您能够控制 DOM,就在那里进行操作。这更多的是作为最后手段,例如在 Drupal Core 链接上使用它。
这对我的当前项目非常有用
如果您使用 RealURL,则“window.location”似乎在 IE 中不起作用。有什么想法吗?
谢谢
Christoph
我用这种方式修复了它
我想我会尝试在表格中使用它……或者有更简单的方法吗?
它在表格上有效吗?
哇……非常棒的想法:-)
谢谢
干得好
非常有帮助
有一种纯 CSS 的方法可以实现这一点。只需在 DIV 内有一个锚(a)标签,链接到您想要的 URL。然后,将其设置为块显示、相对定位、left 和 top 等于 0、width 和 height 为全屏(或使用 jQuery 将 DIV 内的所有 A 的尺寸与 DIV 相匹配)。
很棒的解决方案!这真的帮了我的忙。
太棒了……这帮了我很大的忙!
很棒的技巧,但应该是绝对定位而不是相对定位。
因此,将 div 设置为相对定位,并将“a”标签设置为
display:block; absolute; top:0; left:0; width: 300px; height:200px;
不要听上面那个人的。
他们会将你的整个页面变成一个链接……
相对定位将使你的“top:0; left:0;”相对于包含它的 DIV,而不是绝对定位,它使它成为 PAGE 的顶部/左侧,而不仅仅是 DIV。
不客气 :)
顺便说一句,此方法有效,但根据你在同一个 div 中的其他文本/图像/等内容的不同,它会产生不同的交互方式,因为它采用的是块显示,因此请确保在设置之前知道你想要什么内容放在哪里。
绝对定位将相对于第一个设置了定位的父元素。在 dan 的帖子中,他说将 div 的位置设置为相对,然后将链接的位置设置为绝对。这意味着 top:0; left:0; 将引用包含 div,而不是页面主体。如果父 div 或任何其他祖先元素上未设置位置,那么它将占据整个页面,正如你指出的那样。
话虽如此,我不确定对于链接使用绝对定位还是相对定位更好,或者两者之间是否存在显着差异。
Michael 的回答并不完全正确,Malcolm 对此进行了很好的解释。
我也想知道在这里是否需要绝对/相对定位。我已经成功地使整个 div 可点击,而无需更改链接的位置。嗯,我需要研究一下。
我相信 Dan 的回答是正确的,并且遗憾的是,要将此内容浮动到文本和图像流之外需要绝对定位(在相对定位的父元素内)。
Micheal 的评论似乎将“绝对”与“固定”混淆了,“固定”会自动使用浏览器 chrome 的边缘进行定位。
但是,css3 定位的支持不如当前的 jQuery 普遍。
是的。是的,是的,是的。太棒了。谢谢,TerranRich。
非常棒的解决方案。
我同意上面那些说绝对定位相对于父容器的人,如果父容器的位置不同于默认位置(静态)。
无论如何,非常棒,谢谢。
这太棒了。我一直在尝试找出更好的方法来解决这个问题。
如何确保当我在 div 上悬停时显示 href 标题,以及在浏览器状态栏中显示 URL?
非常棒,谢谢:D
fasf
这样好多了,不用把整个div都包裹在a标签里。
为了可用性(取决于你用它做什么),记得在你的css中添加cursor:pointer。简洁的代码,谢谢。
你好,
我想让整个div都可点击,但是我的div包含新闻滚动,并且每个新闻链接到不同的URL,这种解决方案在这种情况下有效吗?
谢谢,
Dearthelusion
在新窗口中打开怎么样?
糟糕,我不是想直接回复=]
我是jQuery脚本的新手。如何将目标设置为新窗口?
任何帮助将不胜感激!
@l3v1tcl30s
那么如何将它与Chris的代码结合起来呢?我尝试了各种组合,比如
但我无法使其工作
这不起作用
正如Mike所问,有没有办法将target=”_blank”添加到roy帖子最初的jQuery代码中?
提前感谢。
这似乎在IE 8.0中不起作用。正确吗?
如果div包含多个超链接。jQuery会读取哪个URL?
是的roy!谢谢!
快速轻量级,谢谢!你也可以将一堆元素包裹在“a”标签中,这是语义化的HTML5标记。但在旧版浏览器中遇到过问题。如果你要走这条路,确保“a”内部的所有元素默认都是内联的(比如span或p),如有必要,你可以在CSS中将它们更改为display: block。
不过Chris的方法看起来更简洁;)
哦,谢谢!这正是我一直在寻找的解决方案!
好技巧,谢谢!
为什么不这样做
这真的很简单,而且效果很好。
John先生,你的想法非常简单,并且适用于所有浏览器类型:)
看起来这是一个旧帖子,但嘿,它对我仍然很有用!
另外,感谢我上面的人(John),我实际上使用了你的解决方案。
此致
将此应用到Joomla!网站的最佳实践是什么?
我找到了这个方法,我想与大家分享,因为我发现它正是我需要的,用于包含多个链接的DIV
如果window.location对两者都相同,你甚至可以将此用于多个div,如下所示
很酷的解决方案,但如果有人在谷歌搜索解决方案(就像我今天一样),我在stackoverflow上找到一个没有js的解决方案
http://stackoverflow.com/questions/796087/make-a-div-into-a-link
对于那些寻找没有javascript的有效HTML方法的人。
干杯!
惊人的简单解决方案。
通过添加少量jQuery,你可以让所有你想要的链接在新窗口中打开
http://jsfiddle.net/hf75B/81/
好的搜索Tak,非常感谢。
解决方案变得更加简单……不需要jQuery大小调整或任何其他操作
div {
position: relative;
}
a {
position: absolute;
top: 0;
bottom: 0;
right: 0;
left: 0;
}
或者通过在你的div标签中插入以下内容
onclick=”location.href=’http://www.example.com’;” style=”cursor:pointer;
对于使用HTML 5的用户,你现在可以将任何块级元素包裹在A标签中
<a href=”#”>
<div>
blah blah blah
</div>
</a>
对于悬停状态,只需向你的div添加一个类,然后添加一个css类 .whatever:hover {}。
这是一个javascript技巧……而不是CSS技巧。
谢谢,这就像魔法一样有效
嗨,这是我获得2个带有图像背景的可点击div的方法
我只是在寻找使其在新窗口中打开的解决方案target:”_blank”
有人可以帮我解决这个问题吗,因为上面的信息对我无效
对不起,但任何涉及javascript的解决方案都是完全过度的。这可以通过仅使用HTML和CSS轻松实现
HTML代码
CSS代码
只需指定可点击区域的宽度和高度。
越少的代码行越好。
我仅在必要时使用javascript。请记住,3%的用户在其浏览器上禁用了它。
或者你可以在你的div标签中简单地添加此内容
onclick=”location.href=’http://www.example.com’;” style=”cursor:pointer;
尽可能少的行!
你好,
有没有办法将
target="_blank"
添加到其中简单地添加
作为jQuery代码块中的一个新函数对我无效。
提前感谢。
这真的很酷。但是如何使整个不可点击。
我的意思是整个li而不是div可点击
这里有一个更简单的方法
将此插入到要使其可链接的DIV标签中
onclick=”location.href=’http://www.example.com’;” style=”cursor:pointer;
这就是你要做的。
谢谢Chris,我刚刚在我的网站主页上使用了它并添加了
.myBox { cursor: hand; cursor: pointer; }
在悬停时强制使用手形光标。
出于好奇,为什么不只是使用jQuery触发链接上的点击事件?
要使链接在新窗口/新标签页中打开,请使用以下代码
哈利路亚,你救了我的一天……
在许多网站(包括stackoverflow)上的许多答案之后,这个帖子实际上有可行的解决方案。感谢大家。
我有一个可点击的div。使用HTML5 data-属性,我声明了链接
例如 <div class=”item” data-href=”LINK”></div>
在这个 div 中有一个链接。如果我点击链接,页面就会跳转到 data-href 指定的链接。
但是,如果点击文本中的链接,能否阻止跳转到 data-href 指定的链接呢?
jsfiddle 上的示例
使用 JavaScript 有点过度了……一个更简单的解决方案是将 div 包裹在一个“链接”中,并设置 display:block 样式。
然后使用 CSS 样式去除下划线或其他任何内容。希望这有帮助。:)
Adam,这个解决方案非常有效。谢谢。
Adam,Jaret,
我认为这在 HTML 5 中是有效的,但在 HTML 4 中有效吗?
Adam,
效果非常好。非常简单有效。感谢分享。
它有效,但对 SEO 非常不利。Adam 的方法要好得多。
如果您不必担心 IE8 及更低版本,那就更好,如果您删除内联 CSS 规则,那就更好了……
您可以为此添加功能,允许您通过插入 else 语句并插入以下内容来从第一个插入后续链接
else{
window.location=e.attr(“href”);
}
记不起在哪里找到这个了,否则我会给出来源,但对我来说,这是有效的。
div
{
position: relative;
}
我使用了这种方法,效果非常好。
不错,Giancarlo,
不幸的是,这是否会阻止我在悬停时更改背景颜色?
我已经阅读了以上所有内容。在 IE7 及更高版本中有效的解决方案是什么,并且允许在悬停时更改背景颜色?我有点困惑。最初的方案不行吗?
不错的技巧,但我们可以简化为:
jQuery
以上代码将创建一个正方形的可点击 div,唯一令人烦恼的是,如果点击它,地址栏末尾会添加“#”,要解决这个问题,请将 div 的 data-href 属性中的“#”替换为“javascript:;”。已在 FireFox 19 上测试。
太棒了!快速且简洁的解决方案!
嗨
我在我的 WordPress 主题中使用此代码时遇到错误,有什么建议吗?
意外的“(”,预期变量(T_VARIABLE)或‘$’
在我的情况下,我需要该函数验证链接是否为外部链接。这是我使用的代码。运行良好。
@Liz (https://css-tricks.org.cn/snippets/jquery/make-entire-div-clickable/#comment-454372),
太感谢你了!太感谢你了!太感谢你了!太感谢你了!太感谢你了!
我的天哪,我花了几个小时(太多)才找到这个完美的代码片段。非常感谢。
这太令人惊奇了,使用如此简单的技巧就能获得如此好的效果。
我想这是一个很简单的问题。假设我使用此函数转换多个同名的 div,并且如果存在某个图像属性,我想关闭其中一个。如何从单个 div 中删除此功能?
谢谢!
我爱 CSS-TRICKSDOTCOM!!!
非常棒!效果非常好!!
但是使用 target “_blank” - 它不起作用。
有什么想法吗?
干杯
抱歉,我想你理解错了。
它是一个小符号图像 - 希望点击后可以在另一个页面打开。
点击工作正常 - 很好。
要在新窗口中打开链接,而不是使用 window.location = someurl,请使用 window.open([someurl])
感谢这个很棒的想法和技巧。
我有一个问题,希望您也能解决。
我正在我的网站上使用 CPC 网络广告作为发布者。
通常,这些网站会提供需要放置在 . 内的脚本。
我将代码放置如下
<div class="someclass"> <script type="text/javascript" src="URL"></script></div>
每次加载页面时,都会为广告生成一个新的 URL。
我想捕获该 URL 并将其存储在 NEW-LINK 中。
<a href="NEW-LINK"> LINK </a>
这样,当我点击 NEW-LINK 时,它就会点击 CPC 脚本生成的 URL。
我尝试过使用 iframe,但没有成功。
感谢您的支持。
几年过去了,仍然很有帮助。
感谢这个很棒的想法和技巧。
嗨
我创建了一个可点击的 div 标签,只需使用一段 CSS 代码,无需 JavaScript!
以下是解决方案
http://jsfiddle.net/chriscoyier/y7L9D/
您需要
因为每个人都贴上了自己的代码 :)
这是我的解决方案
很棒的代码片段。我稍微修改了一下,以便根据您的 HTML 在新标签页或同一标签页中打开。
之后,您只需将
click-box
类添加到您的div
中,并使用box-link
类包含链接。然后,您可以将target
设置为_self
或_blank
,具体取决于您希望链接的行为。另一种方法是在 DIV 中添加 onclick=”location.href=’#’;” style=”cursor: pointer
如果我有多个 Div 呢?您认为此代码会起作用吗?也许每个 div 都必须具有唯一的 id 和唯一的 js 代码。我们不能合并它们吗?
是否有任何 HTML5 解决方案?在大型网站中,即使 JavaScript 放置在底部,加载也需要大量时间。
<div>
<a href="#" taregt="_blank">
<div>
</div>
</a>
</div>
改为将一个 a 标签的 display 设置为 block……
哥们。谢谢!
很棒又简单.. 谢谢,解决了问题。
我完全同意 Chris 最初的建议,只需将您的 div 嵌套在锚标记中即可。这样更新起来更友好,而且我越少使用 JS 来处理 UI 就越好。锚标记本应是链接,对屏幕阅读器也更有帮助。
我最初写了一些类似的东西,但对我来说,它看起来太丑了。
你的第二个解决方案可能有点丑,但它非常适合我目前正在处理的一个网站的需求。谢谢!=)
不幸的是,html5 技术在 ModX 中不起作用。ModX 在保存时会自动删除
<a>
标签。太糟糕了。
据我了解,在锚元素内放置 div 不是常见的做法。现在这样做可以接受吗?因为我听到过两种说法。一方说这不是一个好主意,另一方说只要被锚定的 div 内没有交互式项目,就可以。
对此事的一些澄清将非常有帮助,谢谢。
谢谢!我使用了 jQuery 方法,运行完美 :)
谢谢!我正在处理一个旧项目,无法使用 HTML5。我使用了 jQuery 方法,它起作用了!
有人可以告诉我这段代码中的 window.location 是做什么的吗?当我们设置窗口对象的 location 时,它如何才能只影响单个 div?我查阅了文档,但没有找到答案。
抱歉问了,我现在有了答案,当设置 window.location 时,它会将页面重定向到指定的地址,因此当点击 div 时,它就像将 div 放入锚标签(HTML5)中一样。
你好!
window.location
定位它所分配的对象的区域。在本例中,它作用域于$(this)
,即.myBox
类。希望这有帮助!为什么这必须返回 false?
你好,快速提问。你介意分享一下你正在使用哪个博客平台,以及你是否推荐它吗?
我将要开始自己的博客(我希望很快就能建立
起声誉),但我很难在
Squarespace/WordPress/Wix/Tumblr 和 Drupal 之间做出决定。你有什么
建议吗?
毫无疑问是 WordPress。
https://mediatemple.net/blog/news/css-tricks-is-a-poster-child-wordpress-site/
但是,就像任何其他东西一样,选择适合工作的正确工具,以及让你最舒适的工具。
你好,我正在创建一个网站,我想在其中添加可点击的盒子容器。
我正在使用 Atom。我应该写什么来添加盒子,以及在 CSS 部分应该做什么?
出于 SEO 原因,我将使用 jQuery 查找 myBox 内的目标链接,以确保搜索引擎机器人找到链接。
你为什么返回 false
当你在一个 div 中有两个锚标签时,可能会出现问题
如何修改它以处理鼠标中键点击和 Ctrl+点击的默认浏览器行为?这通常会在新标签页中打开 url。
我的意思是,如果我在那个 div 中有两个 a 标签怎么办
我一直都在使用 css-tricks,但由于这些小细节,我每天都在更多地使用它,比如有人有先见之明地在本文的旧文章中添加了 2020 年 11 月的更新说明。非常感谢!
它帮助我为 Angular 的material2-carousel 幻灯片图像添加了链接功能,就像一个魅力!
<button>
<div>
</div>
<button>
这在语义上是不正确的,有人可以纠正它吗?