【问题标题】:How to change the color of li elment on hover in html?如何在html中悬停时更改li元素的颜色?
【发布时间】:2015-07-24 16:09:53
【问题描述】:

我想在悬停时更改<li> 元素的颜色。问题是当我将鼠标悬停在子 li 元素上时,父 <li> 元素的颜色也会发生变化。

参见以下示例:

HTML:

<div id="tree">
<ul>
    <li>apple</li>
    <li>banana</li>
    <li>mango
        <ul>
            <li>date</li>
            <li>pear</li>
            <li>fig</li>
        </ul>
    </li>
</ul>

CSS:

#tree > ul > li:hover {
   background:brown;
}
#tree > ul > li:hover > ul >li{
   background:white;
}
#tree > ul > li > ul > li:hover {
   background:yellow;
}

https://jsfiddle.net/1v57nwg8/

感谢任何使用 css、javascript 或 jquery 的帮助。

【问题讨论】:

标签: javascript jquery html css


【解决方案1】:

在 LI 的文本内容周围放置一个 SPAN 或其他内容:

HTML:

<div id="tree">
    <ul>
        <li><span>apple</span></li>
        <li><span>banana</span></li>
        <li><span>mango</span>
            <ul>
                <li><span>date</span></li>
                <li><span>pear</span></li>
                <li><span>fig</span></li>
            </ul>
        </li>
    </ul>
</div>

CSS:

#tree > ul > li:hover > span {
   background:brown;
}
#tree > ul > li > ul > li:hover > span {
   background:yellow;
}

【讨论】:

    【解决方案2】:

    如果我猜对了您的问题,您需要为子 ul 添加规则,以便 背景不会从其父 li 继承其颜色:

    #tree > ul > li:hover > ul {
       background:white;
    }
    

    实例

    #tree > ul > li:hover {
       background:brown;
    }
    #tree > ul > li:hover > ul >li{
       background:white;
    }
    #tree > ul > li > ul > li:hover {
       background:yellow;
    }
    /* This is the new rule: */
    #tree > ul > li:hover > ul {
       background:white;
    }
    <div id="tree">
        <ul>
            <li>apple</li>
            <li>banana</li>
            <li>mango
                <ul>
                    <li>date</li>
                    <li>pear</li>
                    <li>fig</li>
                </ul>
            </li>
        </ul>
    </div>

    【讨论】:

    • 但我希望,当我将鼠标悬停在日期、梨或无花果上时,它不应该在芒果上显示颜色。
    • @SunilMadaan:不幸的是,这是 CSS 的限制之一:您不能根据后代元素的状态设置祖先元素的状态,在这种情况下您需要这样做.有人谈论在某个时候添加一个:has 伪类(jQuery 甚至在其选择器引擎中支持它),但它还没有在 CSS 中。
    • 您也可以使用 jquery 或 javascript 给我解决方案。我没问题
    • @SunilMadaan:您可以从 jQuery 文档中解决。
    【解决方案3】:

    试试这个:

    #tree > ul > li:hover > div {
       background:brown;
    }
    #tree > ul > li > ul > li:hover {
       background:yellow;
    }
    <div id="tree">
    <ul>
        <li><div>apple</div></li>
        <li><div>banana</div></li>
        <li><div>mango</div>
            <ul>
                <li>date</li>
                <li>pear</li>
                <li>fig</li>
            </ul>
        </li>
    </ul>

    【讨论】:

    • 您的所有代码都应该在一个 Stack Snippet 中,这样才能正常工作并显示一个实时示例。这次我已经为你解决了这个问题,但你下次可能想记住它。 :)
    猜你喜欢
    • 2017-07-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多