旋转帧但不旋转图像

时间:2017-04-03 02:41:58

标签: css web transform

我想旋转一个帧而不是它内部的图像。这是一个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 个答案:

答案 0 :(得分:1)

1)PNG伪掩模覆盖

我创建了一个简单的HTML / CSS解决方案,但只能使用以下三个标准:

  1. 图像背后的背景颜色为纯色
  2. 图像的所有边都有足够的边距
  3. 你有Photoshop或一些类似的图像编辑软件
  4. 工作示例

    &#13;
    &#13;
    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);
    }
    &#13;
    <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>
    &#13;
    &#13;
    &#13;

    请注意,顶部图像的边距是底部图像和顶部图像宽度之差的一半,以使其保持居中。

    我如何在Photoshop中制作六边形面具

    我在800 x 800画布上开始使用400 x 400图像,并在图像周围创建了一个完美的圆圈,以便图像的每个角点都触及圆圈。我将画布裁剪到圆的宽度(568像素)。这样做的目的是保证在六边形面罩旋转时图像被完全覆盖。

    接下来,我必须创建一个没有填充的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