如何使用 CSS 和 HTML 获得“悬停”和“活动”状态?

Posted

技术标签:

【中文标题】如何使用 CSS 和 HTML 获得“悬停”和“活动”状态?【英文标题】:How to get 'hover' and 'active' states working with CSS and HTML? 【发布时间】:2012-11-18 21:04:05 【问题描述】:

我的网站顶部的标题中有 3 个菜单项(它目前不可用,所以我无法提供链接 - 抱歉)。这 3 个“按钮”不是 CSS 按钮意义上的按钮 - 它们是呈现为图像的文本(不理想,我知道但它们看起来很漂亮,所以......)。

无论如何,每张图片都包含不同的版本:1 代表默认外观,1 代表鼠标悬停,另一个代表 onclick/active。我目前使用的 html 和 CSS 如下所示:

HTML

<li>
    <a id="About" class="button" href="About Us.cshtml">About Us</a>
</li>
<li style="margin-left: 30px;">
    <a id="Services" class="button" href="Services.cshtml">Services</a>
</li>
<li style="margin-left: 30px;">
    <a id="Contact" class="button" href="Contact Us.cshtml">Contact Us</a>
</li>

CSS

#About background: url(../Buttons/About.png) no-repeat 0 0; width: 87px;
#Services background: url(../Buttons/Services.png) no-repeat 0 0; width: 112px;
#Contact background: url(../Buttons/Contact.png) no-repeat 0 0; width: 117px;
a.button height: 20px; display: inline-block;
a.button:hover background-position: 0 -20px;
a.button:active background-position: 0 -40px;

出于某种原因,“悬停”和“活动”状态无效。我注意到,如果我为每个按钮而不是 id 定义类,它可以正常工作 - 但这对我来说毫无意义。每个按钮都有自己的图像和宽度,因此是独一无二的(这就是为什么我给他们 id 而不是类)。

谁能解释我哪里出错了?我对这一切都是新手,所以任何解释都需要外行。

【问题讨论】:

请尝试在 jsfiddle 中复制问题。您将获得更快更好的答案。 欢迎来到 CSS 特性的美妙世界!阅读:coding.smashingmagazine.com/2007/07/27/… @Gurpreet Singh - 谢谢,我没有考虑过。 @Scott Brown - 非常感谢您提供的链接。我会读一读。 【参考方案1】:

问题在于您的 ID 选择器比您的类 + 伪选择器组合更具体。但如果你不在 ID 选择器中指定位置,你会没事的。例如:

#About background-image: url(../Buttons/About.png); width: 87px;
#Services background-image: url(../Buttons/Services.png); width: 112px;
#Contact background-image: url(../Buttons/Contact.png); width: 117px;
a.button height: 20px; display: inline-block; background-repeat: no-repeat
a.button:hover background-position: 0 -20px;
a.button:active background-position: 0 -40px;

【讨论】:

啊啊啊,好的。我正在使用'background:url ...',这覆盖了类选择器中的'background-position'属性 - 所以现在我已经将它更改为'background-image:url ...',不再有冲突。我猜想在 id 选择器中有“不重复”会增加问题。正确的?谢谢你的帮助。我想我现在理解得更好了。 完全正确。学习 CSS 确实很痛苦,但听起来你很快就会掌握它的窍门 :)【参考方案2】:

它不适用于 ids 但适用于类的原因是 ids 将被覆盖,因为它们更“特定”。

当遇到冲突时,CSS 优先顺序包括样式与元素匹配的具体程度,并且 id 是您可以获得的最具体的。

您是否有不想只使用类的原因?在语义网络中,类通常会被视为处理这种情况的方式。

【讨论】:

我怀疑这可能与特异性有关。我试图避免使用类的唯一真正原因是每个按钮都有一个类。据我了解,应该使用 id 定义唯一项目。我想我错过了一些东西。不管怎样,我都会接受你的建议。谢谢你的帮助!莱昂 如果您要使用 javascript 与元素交互,那么使用 id 可以提高性能,但对于 CSS 样式,类定义就可以了。 有趣的是你应该提到它——我的下一个问题是:如何让按钮在被点击后保持活动状态?我想它可能需要一些javascript。我最好在单独的线程上问这个问题吗?

以上是关于如何使用 CSS 和 HTML 获得“悬停”和“活动”状态?的主要内容,如果未能解决你的问题,请参考以下文章

Html和CSS如何使具有悬停效果的图像成为超链接

CSS嵌套和悬停[关闭]

使用css将鼠标悬停在按钮上时如何更改站点背景图像?

如何使图像在悬停css上旋转

如何通过使用引导程序和 HTML/CSS 单击按钮来激活按钮的切换?

如何在 html-tag 中使用 CSS 悬停? [复制]