3D轮播

目的

  • 掌握 transform 3D 效果
  • 熟悉 perspective属性
基本概念

CSS3 3D 转换:使元素改变位置、旋转、视角

试一试

先来看一看3D 坐标系
3D 坐标系如下图:


3D轮播_第1张图片
  • transform: rotateX(40deg) 沿X 坐标轴旋转40度
  • transform: rotateY(40deg) 沿Y 坐标轴旋转40度
  • transform: rotateZ(40deg) 沿Z 坐标轴旋转40度
  • transform: translateX(-40px) 在 X 坐标轴负向移动 40px
  • transform: translateY(40px) 在 Y 坐标轴正向移动 40px
  • transform: translateZ(40px) 在 Z 坐标轴正向移动 40px
  • transform: translateZ(-40px) 在 Z 坐标轴负向移动 40px
    
origin
rotateX(40deg)
rotateY(40deg)
rotateZ(40deg)
translateX:-40px
translateY:40px
translateZ:40px
translateZ:-40px
// CSS .rotateX { transform: rotateX(40deg); } .rotateY { transform: rotateY(40deg); } .rotateZ { transform: rotateZ(40deg); } .tranlateX { transform: translateX(-40px); } .tranlateY { transform: translateY(40px); } .tranlateZ { transform: translateZ(40px); } .tranlateZ2 { transform: translateZ(-40px); }

效果图如下:

3D轮播_第2张图片

问题来了?为什么旋转和 Z 轴的偏移没有 3D的感觉? 因为没有透视

perspective

3D轮播_第3张图片

perspective属性有两种书写形式,一种用在 3d元素父亲上;第二种就是用在当前 3d元素上,与 transform的其他属性写在一起。:

.ct {
    perspective: 200px;
}
或
#ct .box {
    transform: perspective(200px) rotateY(45deg);
}
perspective-origin

perspective-origin定义了元素的位置,默认是3d 容器的中心。
当为元素定义perspective-origin 属性时,其子元素会获得透视效果,而不是元素本身。
该属性必须与 perspective 属性一同使用,而且只影响 3D 转换元素,如perspective-origin: 10% 10%;

设置backface-visibility:hidden;看不见元素的背面

3D 轮播

第一步:创建轮播图

第二步,设置图片视角

.container {
  width: 210px;
  height: 140px;
  position: relative;
  perspective: 1000px;
}
#carousel {
  width: 100%;
  height: 100%;
  position: absolute;
  transform-style: preserve-3d;
}
#carousel figure {
  margin: 0;
  display: block;
  position: absolute;
  width: 186px;
  height: 116px;
  left: 10px;
  top: 10px;
  border: 2px solid black;
}

第三步,移动图片

#carousel figure:nth-child(1) { transform: rotateY(   0deg ); }
#carousel figure:nth-child(2) { transform: rotateY(  40deg ); }
#carousel figure:nth-child(3) { transform: rotateY(  80deg ); }
#carousel figure:nth-child(4) { transform: rotateY( 120deg ); }
#carousel figure:nth-child(5) { transform: rotateY( 160deg ); }
#carousel figure:nth-child(6) { transform: rotateY( 200deg ); }
#carousel figure:nth-child(7) { transform: rotateY( 240deg ); }
#carousel figure:nth-child(8) { transform: rotateY( 280deg ); }
#carousel figure:nth-child(9) { transform: rotateY( 320deg ); }
3D轮播_第4张图片
#carousel figure:nth-child(1) { transform: rotateY(   0deg ) translateZ( 288px ); }
#carousel figure:nth-child(2) { transform: rotateY(  40deg ) translateZ( 288px ); }
#carousel figure:nth-child(3) { transform: rotateY(  80deg ) translateZ( 288px ); }
#carousel figure:nth-child(4) { transform: rotateY( 120deg ) translateZ( 288px ); }
#carousel figure:nth-child(5) { transform: rotateY( 160deg ) translateZ( 288px ); }
#carousel figure:nth-child(6) { transform: rotateY( 200deg ) translateZ( 288px ); }
#carousel figure:nth-child(7) { transform: rotateY( 240deg ) translateZ( 288px ); }
#carousel figure:nth-child(8) { transform: rotateY( 280deg ) translateZ( 288px ); }
#carousel figure:nth-child(9) { transform: rotateY( 320deg ) translateZ( 288px ); }

你可能感兴趣的:(3D轮播)