【问题标题】:Is there a css equivalent of onclick from the html element? [duplicate]html元素中是否有与onclick等效的css? [复制]
【发布时间】:2017-01-14 07:55:38
【问题描述】:

在 javascript 中,您可以轻松地直接从 html 元素执行 onclick 事件:

<div onclick="..javascript here.."></div>

我知道您可以使用 style> 标签更改 css 样式,但我想知道您是否能够像下面的示例一样执行它:

<div onclick="..css here.."></div>

【问题讨论】:

  • &lt;div onclick="this.className='otherclass'"&gt;&lt;/div&gt;
  • 如果我理解正确,我认为你可以(不完全)通过 CSS 做到这一点。 stackoverflow.com/a/32721572/3693726

标签: javascript html css


【解决方案1】:

如果你想纯粹通过css 来做,你必须使用:active 或者:focus

div:hover  { color: red; }  /* mouse-over */
div:active { color: red; }  /* mouse-down (this cause also focus) */
input:focus{ color: red; }  /* got focus (by tab key or mouse-down) */

/* for <a> element: */
a:link    { color: red; } /* unvisited links */
a:visited { color: red; } /* visited links */

注意::active 在用户释放鼠标按钮后不会保持永久不变,但它适用于文本输入或纽扣。有一个名为"Checkbox Hack" 的解决方法,您可以在其中使用连接的标签和复选框输入以及您尝试控制的其他一些元素。..

另外,如果你想改变 css 类或内联样式,你可以这样做:

 &lt;div onclick="this.style['border'] = '2px solid red';"&gt;Click me&lt;/div&gt;

【讨论】:

    【解决方案2】:

    有,但是元素需要有tabindex属性。

    元素上有一个tabindex,你可以使用:

    element:focus {
     /* some_CSS; */
    }
    

    'some_CSS' 会在元素被点击时启动。

    【讨论】:

    • 据我所知,:focus 用于当元素获得焦点时,通常是通过鼠标单击,但也可以在用户按下之前元素中的 Tab 键时完成。你可以使用:active 正如我在回答中提到的那样
    • @S.Serp - 是的,但:active 仅适用于按住鼠标按钮的情况......两种 CSS 方法都有其缺陷,我们是否同意这是一个 Javascript 问题? ;o)
    • 是的,检查这个也很有用:Checkbox Hack
    【解决方案3】:

    您可以使用 javascript 来更改 div 或任何其他元素的样式。但我不知道是否有一种方法可以通过 onclick 事件更改 css 而无需使用 javascript。

    我可以解释一下我的方法。

    <script>
    function change_css(){ 
     document.getElementById('change_css').className='newClassName';
    }
    </script>
    <div onclick="change_css()" class="initial_class">content</div>
    

    上面的代码将帮助你通过改变类来改变样式,前提是你已经用css创建了一个类。它替换了之前为该 div 提供的所有类并添加了新的类。

    要在不替换现有类的情况下向 div 添加额外的类,请在 javascript 中使用以下语句:

    document.getElementById('change_css').className+='  newClassName';
    

    【讨论】:

    • className += newClassName 不能保证像这样工作。它是字符串连接,所以如果原来的名字是myClass,你可能会得到myClassnewClassNameelement.classList.add(newClassName); 对串联更安全。
    • 在 className+=' 和 newClassName' 之间有一个空格,我错过了指定;
    • 感谢您的通知。
    猜你喜欢
    • 1970-01-01
    • 2018-06-04
    • 1970-01-01
    • 2010-09-08
    • 2019-01-29
    • 2011-09-21
    • 1970-01-01
    • 2010-11-30
    • 2012-06-21
    相关资源
    最近更新 更多