我想旋转框架,但不旋转其中的图像。这是一个JSFiddle,它可以旋转,但是图像仍然可以移动。如何保持图像静止不动,而仅移动框架。
https://jsfiddle.net/q6n2w4qm/2/
HTML:
<body>
<div class="center">
<div class="hexagon">
<div class="hexagon-in1">
<div class="hexagon-in2">
</div></div>
</div>
</div>
</body>
CSS:
.center{
width: 200px;
margin: auto;
margin-top: -50px;
}
.hexagon{
width: 200px;
height: 400px;
overflow: hidden;
visibility: hidden;
transform: rotate(120deg);
cursor: pointer;
-moz-transition: all 1s ease-in-out;
-webkit-transition: all 1s ease-in-out;
-o-transition: all 1s ease-in-out;
transition: all 1s ease-in-out;
}
.hexagon-in1{
overflow: hidden;
width: 100%;
height: 100%;
transform: rotate(-60deg);
}
.hexagon-in2{
width: 100%;
height: 100%;
visibility: visible;
transform: rotate(-60deg);
background: url('http://lorempixel.com/g/250/350/city');
repeat: no-repeat;
position: relative;
}
.hexagon:hover{
-ms-transform: rotate(150deg); /* IE 9 */
-webkit-transform: rotate(150deg); /* Chrome, Safari, Opera */
transform: rotate(150deg);
}
最佳答案
1)PNG伪蒙版覆盖
我创建了一个简单的HTML / CSS解决方案,但只有通过以下三个条件才能实现:
图像后面的背景色是纯色
图像各边都有足够的空白
您有Photoshop或一些类似的图像编辑软件
工作实例
body {
background-color:#222222;
}
.hex-hack {
position:relative;
top:0;
left:0;
}
.base-image {
position:relative;
top:0;
left:0;
z-index:1;
margin: 84px;
}
.hex-overlay {
position:absolute;
width:568px;
height:568px;
top:0px;
left:0px;
z-index:3;
-moz-transition: all 1s ease-in-out;
-webkit-transition: all 1s ease-in-out;
-o-transition: all 1s ease-in-out;
transition: all 1s ease-in-out;
}
.hex-overlay:hover {
-ms-transform: rotate(30deg); /* IE 9 */
-webkit-transform: rotate(30deg); /* Chrome, Safari, Opera */
transform: rotate(30deg);
}
<body>
<div class="hex-hack">
<img class="base-image" src="https://lorempixel.com/output/technics-q-g-400-400-2.jpg" alt="" />
<img class="hex-overlay" src="https://i.imgur.com/zYa31Tw.png" alt="" />
</div>
</body>
请注意,顶部图像的边距是底部图像和顶部图像宽度之间的差异的一半,以使其居中。
我如何在Photoshop中制作六角形蒙版
我首先在800 x 800的画布上绘制了400 x 400的图像,然后在图像周围创建了一个完美的圆,使图像的每个角像素都接触到该圆。我将画布裁剪到圆圈的宽度(568px)。目的是确保六角形遮罩旋转时完全覆盖图像。
接下来,我必须创建一个350 x 400的无填充六边形,将其旋转30度,然后将其居中放置在画布中间。然后,我选择了六边形的像素(Ctrl +单击六边形层),反转选择(Shift + Ctrl + I),并使用#222222背景色填充新层。我隐藏了其他所有图层并将其另存为png。
2)CSS剪切路径和动画
您可以考虑的另一种解决方案是使用CSS通过clip-path和animate属性为图像的剪切路径设置动画。这可能是一种更简单的方法,但是clip-path属性相对较新,并且没有最大的浏览器支持-尤其是对于IE,Edge和Opera。以下是一些可供参考的资源:
CSS Masking-关于clip-path属性的出色文章(包括动画演示)
Clippy-创建CSS剪切路径的好工具
3)SVG动画和clipPath
最后,这是一个非常适合浏览器的解决方案,但是您需要一些软件(例如Illustrator)才能从图像创建SVG。这也是我没有实际经验的东西,但是我很肯定可以通过一些研究和一些反复试验来实现。这里有一些资源可以帮助您入门。
SVG clipping/masking techniques
Animating SVGs with CSS