我有一张图片,当用户点击该图片时,我希望显示在该图片下方的另一张图片。我正在寻找一个简单的仅使用 CSS 的解决方案。
这是否可行?
input[type="checkbox"] {
content: url('http://placekitten.com/150/160');
appearance: none;
display: block;
width: 150px;
height: 150px;
}
input[type="checkbox"]:checked {
content: url('http://placekitten.com/170/180');
}
<input type="checkbox" />
复选框输入是一种本地元素,用于实现切换功能,我们可以利用它来实现我们的目的。
利用:checked
伪类——将其附加到复选框的伪元素上(因为你无法真正影响input
本身的背景),并相应地更改其背景。
input[type="checkbox"]:before {
content: url('images/icon.png');
display: block;
width: 100px;
height: 100px;
}
input[type="checkbox"]:checked:before {
content: url('images/another-icon.png');
}
这里是一个在 jsFiddle 上完整工作的演示,以说明这种方法。
这有点繁琐,我们可以进行一些更改来清理不必要的东西;因为我们实际上并没有应用背景图片,而是设置了元素的content
,所以我们可以省略伪元素,并直接在复选框上设置。
诚然,在这里它们没有真正的作用,只是用于掩盖复选框的本机渲染。我们可以简单地删除它们,但这将导致在最好的情况下出现FOUC,或者如果我们未能获取图像,则仅显示一个巨大的复选框。
出现了appearance
属性:
(-moz-)appearance
CSS 属性被用来...基于操作系统主题使用平台原生样式来显示元素。
我们可以通过分配appearance: none
来覆盖平台原生样式,从而完全绕过该故障(自然地,我们必须考虑供应商前缀,而无前缀形式目前没有在任何地方得到支持)。然后,选择器得到简化,代码更加健壮。
input[type="checkbox"] {
content: url('images/black.cat');
display: block;
width: 200px;
height: 200px;
-webkit-appearance: none;
}
input[type="checkbox"]:checked {
content: url('images/white.cat');
}
这里有一个改进版本的jsFiddle在线演示。
注意: 目前仅适用于webkit,我正在努力使gecko引擎也能够支持。一旦完成将发布更新版本。
更新: appearance
属性现在已经得到广泛采用,因此使用供应商前缀就显得多余了。好耶!
input
不是具有闭合标签的元素,因此无法具有 after
或 before
伪元素来包含该伪元素。因此,它基本上是不正确的。 - Shikkediel您可以使用不同样式的<a>
标签:
a:link { }
a:visited { }
a:hover { }
a:active { }
我建议将其与CSS雪碧图一起使用:https://css-tricks.com/css-sprites/
有些人建议使用“visited”属性,但是访问过的链接会保留在浏览器缓存中,所以下次用户访问页面时,链接将显示第二张图片。我不知道这是否是您想要的效果。无论如何,您可以混合使用JS和CSS:
<style>
.off{
color:red;
}
.on{
color:green;
}
</style>
<a href="" class="off" onclick="this.className='on';return false;">Foo</a>
<a id="test"><img src="normal-image.png"/></a>
CSS:
a#test {
border: 0;
}
a#test:visited img, a#test:active img {
background-image: url(clicked-image.png);
}
<input readonly="true">
可允许你附加一个 input:focus
选择器,然后修改 background-image
。 当然,这需要对 input
应用特定的CSS以覆盖浏览器默认值,但这确实表明可以在不使用Javascript的情况下触发点击操作。<input/>
。 - daleyjem
event
)。但你可以在鼠标悬浮时更改图片。 - naveenimg:hover { background: url(/path-to-image/img.jpg); }
,或者像下面的答案中提到的那样使用雪碧图。你可以在这里,这里,和这里阅读更多关于鼠标悬停的内容。 - L84