我有一个图像元素,我想在点击时改变它。
<img id="btnLeft">
如此:
#btnLeft:hover {
width: 70px;
height: 74px;
}
但我需要的是:
#btnLeft:onclick {
width: 70px;
height: 74px;
}
但是,很明显,这是行不通的。是否有可能在CSS中有onclick行为(即,不使用JavaScript)?
我有一个图像元素,我想在点击时改变它。
<img id="btnLeft">
如此:
#btnLeft:hover {
width: 70px;
height: 74px;
}
但我需要的是:
#btnLeft:onclick {
width: 70px;
height: 74px;
}
但是,很明显,这是行不通的。是否有可能在CSS中有onclick行为(即,不使用JavaScript)?
当前回答
使用一个纯粹的CSS解决方案,而不是(那么)俗气。
.page { position: fixed; top: 0; bottom: 0; right: 0; left: 0; background-color: #121519; color: whitesmoke; } .controls { display: flex; align-items: center; justify-content: center; height: 100%; width: 100%; } .arrow { cursor: pointer; transition: filter 0.3s ease 0.3s; } .arrow:active { filter: drop-shadow(0 0 0 steelblue); transition: filter 0s; } <body class="page"> <div class="controls"> <div class="arrow"> <img src="https://i.imgur.com/JGUoNfS.png" /> </div> </div> </body>
TylerH的反应很好,但它是一个相当复杂的解决方案。我有一个解决方案,你只是想要一个简单的“onclick”效果与纯CSS没有一堆额外的元素。
我们将简单地使用CSS过渡。你也可以用动画来做类似的事情。
诀窍是更改转换的延迟,以便在用户单击时它将持续。
.arrowDownContainer:active,
.arrowDownContainer.clicked {
filter: drop-shadow(0px 0px 0px steelblue);
transition: filter 0s;
}
这里我也添加了“clicked”类,这样JavaScript也可以在需要时提供效果。我使用了一个零像素的投影过滤器,因为在我的例子中,它会以这种方式突出显示给定的透明图形蓝色。
我在这里有一个0的过滤器,所以它不会生效。当效果释放时,我可以添加一个延迟的过渡,这样它就会提供一个很好的“点击”效果。
.arrowDownContainer {
cursor: pointer;
position: absolute;
bottom: 0px;
top: 490px;
left: 108px;
height: 222px;
width: 495px;
z-index: 3;
transition: filter 0.3s ease 0.3s;
}
这允许我设置当用户单击按钮时,它突出显示蓝色,然后慢慢淡出(当然,您也可以使用其他效果)。
虽然您在这里受到限制,因为要突出显示的动画是即时的,但它仍然提供了所需的效果。你可以在动画中使用这个技巧来产生更平滑的整体过渡。
其他回答
你能得到的最接近的是:active:
#btnLeft:active {
width: 70px;
height: 74px;
}
但是,这只会在按住鼠标按钮时应用样式。应用样式并保持它在click上应用的唯一方法是使用一点JavaScript。
首先我将使用焦点
这样做的原因是它很适合我所展示的例子。如果有人想要鼠标按下类型事件,那么使用active。
HTML代码:
<button class="mdT mdI1" ></button>
<button class="mdT mdI2" ></button>
<button class="mdT mdI3" ></button>
<button class="mdT mdI4" ></button>
CSS代码
/* Change *button size, border, bg color, and align to middle* */
.mdT {
width: 96px;
height: 96px;
border: 0px;
outline: 0;
vertical-align: middle;
background-color: #AAAAAA;
}
.mdT:focus {
width: 256px;
height: 256px;
}
/* Change Images Depending On Focus */
.mdI1 { background-image: url('http://placehold.it/96x96/AAAAAA&text=img1'); }
.mdI1:focus { background-image: url('http://placehold.it/256x256/555555&text=Image+1'); }
.mdI2 { background-image: url('http://placehold.it/96x96/AAAAAA&text=img2'); }
.mdI2:focus { background-image: url('http://placehold.it/256x256/555555&text=Image+2'); }
.mdI3 { background-image: url('http://placehold.it/96x96/AAAAAA&text=img3'); }
.mdI3:focus { background-image: url('http://placehold.it/256x256/555555&text=Image+3'); }
.mdI4 { background-image: url('http://placehold.it/96x96/AAAAAA&text=img4'); }
.mdI4:focus { background-image: url('http://placehold.it/256x256/555555&text=Image+4'); }
jsfiddle.net/00wwkjux/
OP只希望在单击事件期间效果持续。虽然这并不完全满足这种需求,但已经很接近了。active会在鼠标放下时进行动画,任何需要持续更长时间的更改都需要使用JavaScript来完成。
根据您想要做的事情,让焦点保持变化可能是一种选择?
<button></button>
<style>
button {
width: 140px;
height: 70px;
background: url('http://www.ranklogos.com/wp-content/uploads/2015/06/Stack-Overflow-Logo.png');
background-size: cover;
}
button:focus {
width: 240px;
height: 120px;
}
</style>
https://jsfiddle.net/anm92d0r/
注意,这对image标签不起作用。但根据你的元素id,我假设你在寻找按钮功能。
下面是一个类似于JavaScript的onclick的onclick,而不是:active伪类。
这只能通过JavaScript或复选框Hack来实现。
复选框黑客本质上是让你点击一个标签,“检查”一个复选框,允许你按照自己的意愿设置标签的样式。
这个演示。
在OP澄清他想要什么之前回答了。
您可以使用伪类:target来模拟打开单击事件。让我给你们举个例子。
#{东西 显示:没有; } {#的东西:目标 显示:块; } < a href = " #“>显示< / > < div id = "东西" >宾果!< / div >
这是它的样子:http://jsfiddle.net/TYhnb/
需要注意的一点是,这仅限于超链接,因此如果您需要在其他超链接上使用,例如按钮,您可能需要稍微修改一下,例如将超链接样式化,使其看起来像按钮。