【问题标题】:Is there a CSS alternative to JS click, (as :hover is an alternative mouseover / mouseout)?是否有 JS click 的 CSS 替代品(因为 :hover 是 mouseover / mouseout 的替代品)?
【发布时间】:2017-06-23 13:57:07
【问题描述】:

更新:感谢 Crowes 和 Boltclock 下面的解释,我现在对 CSS 伪类明确地静态有了更清晰的理解(即描述元素的状态)当下)。

虽然 javascript 事件存在时间维度,但 CSS 伪类则相反,当前为真

因此,与表面上类似的 javascript 事件不同,CSS 伪类不会(也不能)引用用户之前与该元素的交互。

这使我的问题在很大程度上是多余的。


在 2017 年,令人惊讶的是,尽管 CSS 已经拥有 :hover 几十年了,但它仍然缺乏伪类最明显的补充 - :click

我搜索了 Stackoverflow,并在 2012 年 11 月的这个问题中:

Can I have an onclick effect in CSS?

评分最高的答案:

使用:active

不是onclick 的一个很好的替代品——如果有的话:active 实际上是onmousedown 的替代品。

评分第二高的答案 -

使用复选框技巧

不是语义化的(而且......随着黑客的发展,感觉很hacky)。

所以。 javascript 的onclick 是否有最小的纯 CSS 替换?

【问题讨论】:

  • 1) :hover 是一个伪类,正如您正确标记的那样。 “伪元素”和“伪类”不可互换 2) :click 甚至如何工作?如果它代表一个被点击的元素,那么它会瞬间发生,以至于您将永远无法看到您在包含该伪类的规则中应用的样式。这样的伪类不存在一点也不奇怪,因为它根本没有意义。
  • 感谢@BoltClock 强调我的错字。是的,我的意思是伪类。已更正。
  • 在阅读了您在上面链接的问题中的“动态伪类表示状态”解释后,我可以更好地理解您的问题“如何 :click 还能工作吗?” 我的回答是:click 代表:has-been-clicked 而不是:is-being-clicked(如果我没记错的话, 毕竟:active 代表什么)。但我知道:has-been-clicked 与状态:is-being-hovered-over 不同。
  • 这确实更有意义。尽管它没有语义,但复选框 hack 已尽可能接近。它在 2017 年仍然具有相关性是有原因的。即使我已经屈尊使用它,但我不确定我是否对此感到高兴。

标签: javascript css css-selectors pseudo-class


【解决方案1】:

是否有最小的努力纯 CSS 替换 javascript 的 onclick?

是的,有一种直接使用 CSS 实现 onclick 行为的简单方法。

两步:

  1. tabindex="0" 添加到需要onclick 行为的元素中
  2. 使用:focus 伪元素激活onclick 行为

示例:

p {
width: 100px;
height: 100px;
margin: 0;
line-height: 100px;
font-size: 16px;
text-align:center;
color: rgb(255,255,255);
background-color: rgb(255,0,0);
font-weight: bold;
cursor: pointer;
transform: rotateY(0deg);
transition:
    width 1s ease-out,
    font-size 1s ease-out,
    line-height 2s ease-out,
    height 1s ease-out 1s,
    transform 1s ease-out 2s;
}

p::after {
content:' Me';
}

p:focus {
width: 300px;
height: 200px;
line-height: 200px;
font-size: 36px;
transform: rotateY(360deg);
}

p:focus::after {
content:' Elsewhere';
}
<p tabindex="0">Click</p>

【讨论】:

  • 这不会保持状态。您只是通过使用焦点事件为其提供了转换的机会。几乎没有“点击”事件,它应该允许元素保持原样,而不是在退出时取消。
  • 是的,你是对的!它不会保持状态。这是一个很好的观点,@Crowes。所以......这个:focus 技术也不能真正替代onclick
猜你喜欢
  • 2017-03-25
  • 2013-01-29
  • 2011-01-19
  • 2020-06-11
  • 1970-01-01
  • 1970-01-01
  • 2013-08-23
  • 2010-09-13
  • 2015-11-13
相关资源
最近更新 更多