我想旋转框架,但不旋转其中的图像。这是一个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

07-24 09:38
查看更多