我想只用CSS缩放图像。下面的代码在按住鼠标左键的同时缩放图像但是我想用鼠标点击放大和缩小。我怎样才能做到这一点?
.container img {
transition: transform 0.25s ease;
cursor: zoom-in;
}
.container img:active {
-webkit-transform: scale(2);
transform: scale(2);
cursor: zoom-out;
}
答案 0 :(得分:14)
让我们在这里使用一个技巧,一个输入复选框:
input[type=checkbox] {
display: none;
}
.container img {
margin: 100px;
transition: transform 0.25s ease;
cursor: zoom-in;
}
input[type=checkbox]:checked ~ label > img {
transform: scale(2);
cursor: zoom-out;
}
<div class="container">
<input type="checkbox" id="zoomCheck">
<label for="zoomCheck">
<img src="https://placehold.it/200">
</label>
</div>
答案 1 :(得分:2)
注意:我在引用我们想要操作的元素时使用 target 这个词,并且触发作为元素我们用来操纵目标。
:检查
使用复选框或无线电和:checked
来确定或导致目标的状态和/或采取措施。
<label>
<input type="checkbox">
<!--or-->
<input type="radio">
<checkbox>
display:none
<checkbox>
有一个id
,并且<label>
的{{1}}属性的值与for
的{{1}}相匹配} id
,<checkbox>
,~
。+
>
:目标
使用<label for='chx'>CHX</label>
<input id='chx' type="checkbox">
<div>TARGET</div>
nchor并在目标元素上应用#chx:checked + div {...
伪选择器。
<a>
:target
分配给目标。<a href=""></a>
分配给前面带有哈希id
id
<a>
属性
href
#
:焦点
触发器元素必须是<a href='#target'>A</a>
<div id='target'>TARGET</div>
类型 或 具有属性#target:target {...
才能使用<input>
。
tabindex
:focus
或<div tabindex='0'>ANY INPUT OR USE TABINDEX</div>
事件。 blur
unfocus
:活性
这是一个巧妙利用<nav tabindex='0'>
<a href='#/'>TARGET</a>
<a href='#/'>TARGET</a>
<a href='#/'>TARGET</a>
</nav>
属性的hack,以便在没有脚本的情况下实现持久状态。
nav:focus ~ a {...
transition-delay
两次。
<a href='#/'>A</a>
transition
看起来很糟糕,对吗?我会尝试解释一下,但你最好先阅读article。
在正常情况下,如果您的触发器拥有<a href="#/">A</a>
<div class='target'>TARGET</div>
伪选择器,我们就可以在 keydown上操作目标 。这意味着我们的活跃状态实际上是活跃的,只要你把手指放在按钮上......这是蹩脚和无用的,我的意思是你希望做什么才能使.target {
opacity: 1;
transition: all 0s 9999999s;
}
a:active ~ .target {
opacity: 0;
transition: all 0s;
}
有用?也许是一个镇纸和一些橡皮筋,以保持按钮稳定和持久的压力?
我们会以:active
的方式离开:跛脚和无用。代替:
.active
。.active
...确定然后... opacity:1
有效,接下来是transition:
...好吧这个过渡不是& #39;将会看到它的持续时间为0秒,最后...... all
......延迟了116天?
我们将回过头来看看,我们将继续讨论下一个规则集...... 0s
的新状态是持久的!没有镇纸,技术已经走过了漫长的道路。 9999999s
在没有橡皮筋和纸镇的情况下工作太懒惰而且无法工作。持久状态是被感知的而不是真实的,因为目标仍然离开由opacity:0
带来的状态,这将在大约116天之前发生。 ;)此代码段包含前面提到的4种方式。我知道OP请求缩放(其中有特色),但认为这是重复和无聊的,所以我添加了不同的效果以及缩放。
:active
&#13;
:active
&#13;
答案 2 :(得分:0)
<html>
<head>
<title>Image Zoom</title>
<style type="text/css">
#imagediv {
margin:0 auto;
height:400px;
width:400px;
overflow:hidden;
}
img {
position: relative;
left: 50%;
top: 50%;
}
</style>
</head>
<body>
<input type="button" value ="-" onclick="zoom(0.9)"/>
<input type="button" value ="+" onclick="zoom(1.1)"/>
<div id="imagediv">
<img id="pic" src=""/>
</div>
<script type="text/javascript" language="javascript">
window.onload = function(){zoom(1)}
function zoom(zm) {
img=document.getElementById("pic")
wid=img.width
ht=img.height
img.style.width=(wid*zm)+"px"
img.style.height=(ht*zm)+"px"
img.style.marginLeft = -(img.width/2) + "px";
img.style.marginTop = -(img.height/2) + "px";
}
</script>
</body>
</html>
答案 3 :(得分:0)
.container img {
margin: 100px;
transition: transform 0.25s ease;
cursor: zoom-in;
}
input[type=checkbox]:checked ~ label > img {
transform: scale(2);
cursor: zoom-out;
}
<div class="container">
<input type="checkbox" id="zoomCheck">
<label for="zoomCheck">
<img src="https://placehold.it/200">
</label>
</div>
答案 4 :(得分:0)
以@Nhan为基础:https://stackoverflow.com/a/39859268/661872
范围更广,不需要多个元素的跟踪ID。
.click-zoom input[type=checkbox] {
display: none
}
.click-zoom img {
margin: 100px;
transition: transform 0.25s ease;
cursor: zoom-in
}
.click-zoom input[type=checkbox]:checked~img {
transform: scale(2);
cursor: zoom-out
}
<div class="click-zoom">
<label>
<input type="checkbox">
<img src="https://placehold.it/200">
</label>
</div>
<div class="click-zoom">
<label>
<input type="checkbox">
<img src="https://placehold.it/200">
</label>
</div>