Html #标记背景图像,但.Class未在悬停时应用背景位置
我将有瓷砖的图像链接到资源。每个磁贴都是不同的,我希望每个元素都有一个ID,并使用ID加载唯一的图像。然后我希望磁贴类在磁贴上应用统一的行为。特别是悬停功能,它似乎不起作用。尝试了我能想到的关于继承的所有排列,以使其发挥作用。但是,瓷砖的其他属性继承得很好。提前感谢您的帮助Html #标记背景图像,但.Class未在悬停时应用背景位置,html,css,Html,Css,我将有瓷砖的图像链接到资源。每个磁贴都是不同的,我希望每个元素都有一个ID,并使用ID加载唯一的图像。然后我希望磁贴类在磁贴上应用统一的行为。特别是悬停功能,它似乎不起作用。尝试了我能想到的关于继承的所有排列,以使其发挥作用。但是,瓷砖的其他属性继承得很好。提前感谢您的帮助 <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>DEVELOPMENT</title&
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>DEVELOPMENT</title>
<style type="text/css">
.Tile{
margin: 10px;
float: left;
width: 160px;
height: 140px;
/* background: url("Images/Webmail.jpg") no-repeat 0 0;
Obviously with the background here it works.
All tiles will animate the same way
(slide background-position on :hover)
but I have to load different images for each tile.
#Webmail should inherit Tile and apply the position
change to whatever tile is hovered over. Each tile has a unique
tag that loads the image.
*/
}
.Tile:hover{
background-position: 0 -140px;
}
.Tile span{
position: absolute;
top: -999em;
}
#Webmail{
background: url("Images/Webmail.jpg") no-repeat 0 0;
}
#ITEM2{
background: url("Images/ITEM2.jpg") no-repeat 0 0;
}
#ITEM3{
background: url("Images/ITEM3.jpg") no-repeat 0 0;
}
</style>
</head>
<body>
<div id="Tile_Container">
<!-- Start Row 1 -->
<div id="Row">
<a id="Webmail" class = "Tile" href="#" title="Webmail">
<span>Webmail</span>
</a>
<a id="ITEM2" class = "Tile" href="#" title="ITEM2">
<span>ITEM2</span>
</a>
<a id="ITEM3" class = "Tile" href="#" title="ITEM3">
<span>ITEM3</span>
</a>
</div>
<!-- Start Row 2 ... more rows and items-->
</body>
</html>
发展
.瓷砖{
利润率:10px;
浮动:左;
宽度:160px;
高度:140像素;
/*背景:url(“Images/Webmail.jpg”)不重复0;
显然,在这里的背景下,它是有效的。
所有瓷砖将以相同的方式设置动画
(幻灯片背景位置:悬停)
但是我必须为每个瓷砖加载不同的图像。
#Webmail应继承平铺并应用该位置
更改为悬停在任何互动程序上。每个互动程序都有一个唯一的
加载图像的标记。
*/
}
.Tile:悬停{
背景位置:0-140px;
}
.瓷砖跨度{
位置:绝对位置;
顶部:-999em;
}
#网络邮件{
背景:url(“Images/Webmail.jpg”)不重复0;
}
#项目2{
背景:url(“Images/ITEM2.jpg”)不重复0;
}
#项目3{
背景:url(“Images/ITEM3.jpg”)不重复0;
}
您正在使用背景:
在#Webmail
、#ITEM2
和#ITEM3
中。CSS属性background
是所有背景样式的组合,如背景位置
、背景图像
、背景重复
等。因此,背景位置
被背景
覆盖
要解决此问题,可以使用以下代码段:
.Tile {
margin: 10px;
float: left;
width: 160px;
height: 140px;
background-repeat: no-repeat;
background-position: 0 0; /* you don't even have to specify that */
}
.Tile:hover {
background-position: 0 -140px;
}
.Tile span {
position: absolute;
top: -999em;
}
#Webmail {
background-image: url("Images/Webmail.jpg");
}
#ITEM2 {
background-image: url("Images/ITEM2.jpg");
}
#ITEM3 {
background-image: url("Images/ITEM3.jpg");
}
背景位置
值.Tile:hover
比#Webmail
等中的值具有更少的特异性,这意味着更具体的CSS规则将优先于:hover
规则中设置的值
请注意,background
short-hand属性将在应用background
规则中指定的值之前,将所有背景属性(例如background position
)初始化为默认值,如果background
属性出现在CSS规则中任何单个背景属性之后,则可能导致意外结果
您可以在以下位置阅读background
属性的工作原理:
.Tile{
利润率:10px;
浮动:左;
宽度:160px;
高度:140像素;
边框:1px点蓝色;
背景重复:无重复;
背景位置:0;
}
.Tile:悬停{
背景位置:0-20px;
}
.瓷砖跨度{
位置:绝对位置;
顶部:-999em;
}
#网络邮件{
背景图像:url(“http://placehold.it/100x100");
}
#项目2{
背景图像:url(“http://placehold.it/140x100");
}
#项目3{
背景图像:url(“http://placehold.it/100x120");
}
问题在于,您试图在.class上设置悬停操作,而在#id上设置背景位置。该id具有更高的特定性,因此覆盖了.class:hover 问题说明:
.Tile{
利润率:10px;
浮动:左;
宽度:160px;
高度:140像素;
}
/*这就是问题所在*/
.Tile:悬停{
背景位置:0-140px;
}
.瓷砖跨度{
位置:绝对位置;
顶部:-999em;
}
#网络邮件{
背景:url(“http://lorempixel.com/160/280)不重复0;
}
#项目2{
背景:url(“http://lorempixel.com/170/280)不重复0;
}
#项目3{
背景:url(“http://lorempixel.com/180/280)不重复0;
}
构建一个复制错误的代码笔或JSFIDLE,这样我们就可以为您调试它。id
比类
更具特殊性,并且您的类(及其:hover
状态)在id之前定义,使得id很可能覆盖类行为。与其更改整个背景属性,不如只将背景图像更改为特定属性,因为它只会覆盖图像源。另外,仅供参考,在类中使用大写字母似乎是一个令人困惑的想法,以及ID的奇怪间距和大写字母。在这里读一读:@MarcAudet我也在想同样的事情。如果投票人愿意解释,也许我们可以达成一项协议,让你重新获得你的代表积分。@Lister先生相应地更新了我的答案,谢谢你的反馈。