【问题标题】:Is there another way to add "hover" effect without !important after JS has set a value?在 JS 设置值之后,是否有另一种方法可以在没有 !important 的情况下添加“悬停”效果?
【发布时间】:2019-06-19 20:47:14
【问题描述】:

学习网站开发(HTML、CSS、JS、PHP、yadda yadda)。我正在尝试通过 CSS 在元素上创建悬停效果,但是在 JS 函数设置了值之后,如果不使用!important,我似乎无法覆盖。

我在 JS 中有一个滚动功能,可以设置不透明度/颜色/等。用户向下滚动后。似乎 JS 直接影响元素的内联样式,它总是比我的样式表中的任何东西都具有更高的特异性。因此,我的 :hover 效果(增加按钮的不透明度)将被覆盖。

window.onscroll = function() {arcScrollEffect()}; // calls scroll function on scrolling
function arcScrollEffect() {
    btn = document.getElementsByClassName("arcHeaderBtn")[0];
    if (document.body.scrollTop > 50 || document.documentElement.scrollTop) {
        btn.style.width = '20%';
        btn.style.fontSize = '2em';
        btn.style.backgroundColor = '#DDD';
        btn.style.color = 'rgba(0, 0, 0, 1)';
        btn.style.opacity = '0.3';
    } else {
        btn.innerHTML = 'RED';

    }
}
.arcHeaderBtn {
    background-color: inherit;
    border: none;
    position: fixed;
    top: 10vh; 
    left: 0;
    width: 100%;
    font-size: 6em;
    text-align: center;
    opacity: 0.5;
    border-radius: 0 0.6em 0.6em 0;
    transition: color 1s, background-color 1s, width 1s, top 1s, font-size 1s, opacity 1s;
}

button.arcHeaderBtn:hover {
    opacity: 0.5 !important;
}
<button class="arcHeaderBtn">Button</button>

请注意,在这种特殊情况下,我确实有一种解决方法,例如根本不在 JS 中设置不透明度或在 CSS 中使用 !important(效果很好)。但是,有人告诉我 !important 不是好的编码,相当于旧语言中的 GOTO 和 I fear velociraptor attacks. 有什么建议吗?

【问题讨论】:

  • 我认为您要问的是“如何通过 CSS 覆盖内联样式?”如果是这样,请查看此相关 SO 帖子 - stackoverflow.com/a/16813263/864233
  • 问题是滚动事件处理程序正在为不透明度设置内联值。内联样式具有最高程度的粒度,因此它们总是优先。 !important 覆盖优先级。如果您不想使用 !important,则需要重新评估您的内联样式
  • 为什么不让滚动处理程序只应用类名而不是内联样式?
  • 另外,IntersectionObserver 开始得到相当普遍的支持。

标签: javascript css css-specificity


【解决方案1】:

我不建议直接从 JavaScript 应用样式,因为如您所见,内联样式将始终具有优先权,除非您使用 !important 标志。

作为一种解决方法,您可以使用 JavaScript 使用 element.classList.add 将 CSS 类添加到您的元素,然后您可以更好地控制您的样式。

【讨论】:

  • 真是天才!但是,这仍然允许动画吗?我明天必须测试一下。
  • 嘿,@Seraphendipity!很高兴我能提供帮助,但是是的,您可以在通过 JavaScript 插入 CSS 类时正常使用 animation :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-01-03
  • 1970-01-01
  • 2018-07-29
  • 2017-08-09
  • 2019-06-16
相关资源
最近更新 更多