CSS 中的双击

Avatar of Chris Coyier
Chris Coyier

DigitalOcean 为您的旅程的每个阶段提供云产品。 立即开始使用 $200 免费积分!

随着触摸设备的迅速普及,全世界的网页设计师们正在失去我们心爱的鼠标指针。 关于我们如何在 CSS 中基本失去 :hover 伪类以及 JavaScript 中的 mouseenter、mouseleave 和 mousemove,有一些 有趣的话题。 然后就在本周早些时候,我发布了一篇关于如何 使用 tabindex 属性来基本上响应纯 CSS 的点击 的文章。 这让我开始思考,我们是否可以用纯 CSS 来实现双击? 这绝不意味着要取代悬停事件,而可能是一种替代方案,使操作序列变为:点按 → 更改状态/激活链接 → 再次点按以访问链接。

乱七八糟!

这些新式的触摸设备都支持 JavaScript! 您只需使用 JavaScript 来创建双击事件! 乱七八糟!

是的,您可以。 对于任何有兴趣的人,“dblclick” 是一个本机的 JavaScript 事件。 例如,如果您想强制链接进行双击而不是单击,则可以将一个简单的 { return false; } 函数绑定到单击事件。 然后将一个函数绑定到 dblclick,该函数会将 window.location 更改为链接的 href 属性。

本文并非讨论此问题,而是关于 **硬核 CSS 技术**,看看我们是否可以在不使用 JavaScript 的情况下实现它。

结果

我真的很想把它归结为一种技术,并宣称它是实现 CSS 双击的最佳方式。 但事实证明,存在太多问题和考量因素,无法做到这一点。 相反,我制作了一个页面,展示了所有尝试过的最有趣技术。

大多数技术都涉及某种覆盖元素,该元素在第一次点击时被隐藏、移出页面或被埋藏。 第一次点击可以是 :active 或 :focus 的形式。 :active 很好,因为它不需要 HTML5。 :focus 需要,因为它需要元素具有 tabindex 或 contenteditable 属性才能获得焦点。 解决这个问题的一种方法是使用输入元素进行覆盖,但它也有自己的怪癖。

总而言之,用这个想法探索一番真是很有趣。 可能还有几十种想法,但对于这种最终微不足道的事情,我不得不及时止损,并宣告结束。

查看演示

鸣谢

我和其他人可能尝试过超过 20 种不同的方法。 特别感谢 Darcy BrossForrst 上的这条评论 为首个可用的示例提供了线索,并感谢 Mattias BuelensTopher Wilson 参与其中并开发了各种变体。

更多

如果您想尝试一下这个想法,我建议您在 JSBin 上玩玩,并保存您最好的示例。 如果你找到一些很棒的示例,我会在这里链接起来。 以下是玩这个过程中出现的一些有趣的示例

http://jsbin.com/uqana4/2/
http://jsbin.com/owuso/6/