0

我有一组按钮,当鼠标悬停时,它们会改变颜色。这些的 CSS 以这种方式运行:

#navsite ul li button
{
    height: 60px;
    width: 60px;
    background-image: -moz-linear-gradient(bottom, black, #4D4D4D);
    box-shadow: 2px 3px 3px 2px #888888;
    border-radius: 15px;
    border-color: 359ABC;
    cursor: pointer;
    margin-left: 5px;
    margin-right: 5px;
    vertical-align: bottom;
}

#navsite ul li button:hover
{
    height: 60px;
    width: 60px;
    background-image: none;
    background-color: #00054C;
    box-shadow:  2px 3px 3px 2px #888888;
    border-radius: 15px;
    border-color: 359ABC;
    cursor: pointer;
    margin-left: 5px;
    margin-right: 5px;
    vertical-align: bottom;
}

然后,JavaScript 在点击时更改颜色(下面的示例涵盖了五个按钮之一,每个按钮都有一个函数,请原谅大容量):

function dude()
{
    document.getElementById("dude").hidden=false;
    document.getElementById("bob").hidden=true;
    document.getElementById("ted").hidden=true;
    document.getElementById("joe").hidden=true;
    document.getElementById("fred").hidden=true;
    document.getElementById("button1").style.background='#00054C';
    document.getElementById("button2").style.background='-moz-linear-gradient(bottom, black, #4D4D4D)';
    document.getElementById("button3").style.background='-moz-linear-gradient(bottom, black, #4D4D4D)';
    document.getElementById("button4").style.background='-moz-linear-gradient(bottom, black, #4D4D4D)';
    document.getElementById("button5").style.background='-moz-linear-gradient(bottom, black, #4D4D4D)';
}

我现在的问题是这个脚本激活后,CSS规则#navsite ul li button:hover不再适用,根本没有鼠标悬停效果。如何修复脚本,使其不会阻止 CSS 正常运行?

编辑:我是否应该考虑将该 CSS 子句转换为脚本本身的一部分?我发现将脚本转换为 CSS 子句是不可能的,我希望使用最少的资源。


我已经更改了脚本,以便它列出活动和非活动类,而不是列出颜色本身。不过,它仍然相当笨重。关于如何浓缩它的任何想法?

4

2 回答 2

2

不要将样式直接添加到使用 javascript 的元素中,而是创建一个类 .active 并将其附加到单击的元素中。然后在不再活动时删除该类。

.active{-moz-linear-gradient(bottom, black, #4D4D4D)}
于 2012-07-10T18:17:00.040 回答
0

我是否应该考虑将该 CSS 子句转换为脚本本身的一部分?

不。将演示从行为中移开。

我发现无法将脚本转换为 CSS 子句

不。在你的 CSS 中使用类,你可以用 JavaScript 动态改变它们:

button.active, button:hover {
    background: #00054C;
    /* forget about all the other properties, they are inherited!
    You know what the "C" in "CSS" stands for? */
}

JS:

document.getElementById("button1").className = "active";

顺便说一句,我猜你不应该使用 IE 不支持的hidden属性来隐藏你的内容。改用内联样式:

document.getElementById("dude").style.display = "none";
于 2012-07-10T18:25:25.987 回答