变形:平移、旋转与缩放

变形就是指通过css来改变元素的形状或位置

变形不会影响到页面的布局

transform用来设置元素的变形效果

1、平移

  • translateX() 沿着由方向平移
  • translateY() 沿着y轴方向平移
  • translateZ() 沿着z轴方向平移平移元素

百分比是相对于自身计算的

几种水平垂直双方向居中的方式对比

  1. 绝对定位的方式

    1. /* 这种居中方式,只适用于元素的大小确定 */
    2. position: absolute;
    3. top: 0;
    4. left: 0;
    5. bottom: 0;
    6. right: 0;
    7. margin: auto;
  2. table-cell的方式

    1. /* table-cell的方式具有一定局限性 */
    2. display: table-cell;
    3. vertical-align: middle;
    4. text-align: center;
  3. transform的方式

    1. /* transform变形平移的方式 */
    2. position: absolute;
    3. left: 50%;
    4. top: 50%;
    5. transform: translateX(-50%) translateY(-50%);

浮出效果

  1. div {
  2. float: left;
  3. width: 200px;
  4. height: 300px;
  5. background-color: silver;
  6. margin: 100px 50px auto 50px;
  7. transition: all .3s;
  8. }
  9. div:hover {
  10. box-shadow: 0 0 10px rgba(0, 0, 0, .2);
  11. transform: translateY(-5px);
  12. }

15.变形:平移、旋转与缩放 - 图1

2、Z轴平移

z轴平移,调整元素在z轴的位置,正常情况就是调整元素和人眼之间的距离,距离越大,元素离人越近

z轴平移属于立体效果(近大远小),默认情况下网页是不支持透视,如果需要看见效果必须要设置网页的视距

透视效果

  1. html {
  2. background-color: rgb(71, 44, 32);
  3. perspective: 800px;
  4. }
  5. .box {
  6. width: 200px;
  7. height: 300px;
  8. background-color: silver;
  9. margin: 100px auto;
  10. transition: all .3s;
  11. }
  12. .box:hover {
  13. box-shadow: 0 0 10px rgba(0, 0, 0, .2);
  14. transform: translateZ(200px);
  15. }

15.变形:平移、旋转与缩放 - 图2

3、旋转

通过旋转可以使元素沿着x、y或z旋转指定的角度

  • rotateX()
  • rotateY()
  • rotateZ()
  1. /* transform: rotateY(0.5turn); */
  2. transform: rotateY(180deg);

15.变形:平移、旋转与缩放 - 图3

4、缩放

对元素进行缩放的函数

  • scalex() 水平方向缩放
  • scaleY() 垂直方向缩放
  • scale() 双方向的缩放
  1. .box {
  2. height: 200px;
  3. width: 200px;
  4. background-color: #bfa;
  5. margin: 200px auto;
  6. transition: 2s;
  7. }
  8. .box:hover {
  9. /* transform: scaleX(2); */
  10. /* transform: scaleY(2); */
  11. transform: scale(2);
  12. /* 变形的原点 */
  13. transform-origin: 0 0;
  14. }

15.变形:平移、旋转与缩放 - 图4

5、实战

鸭子表

html代码

  1. <div class="clock">
  2. <div class="hour-wrapper">
  3. <div class="hour"></div>
  4. </div>
  5. <div class="minute-wrapper">
  6. <div class="minute"></div>
  7. </div>
  8. <div class="second-wrapper">
  9. <div class="second"></div>
  10. </div>
  11. </div>

css代码

  1. .clock {
  2. width: 500px;
  3. height: 500px;
  4. background-image: url("assets/鸭子表/clock.png");
  5. background-image: url("assets/鸭子表/clock_duck.jpg");
  6. background-size: cover;
  7. margin: 100px auto;
  8. position: relative;
  9. }
  10. .clock>div {
  11. position: absolute;
  12. top: 0;
  13. bottom: 0;
  14. left: 0;
  15. right: 0;
  16. margin: auto;
  17. }
  18. .clock>div>div {
  19. height: 50%;
  20. margin: 0 auto;
  21. }
  22. /* 时针 */
  23. .hour-wrapper {
  24. height: 60%;
  25. width: 60%;
  26. animation: clock-run 720s infinite;
  27. }
  28. .hour {
  29. width: 8px;
  30. background-color: black;
  31. }
  32. /* 分针 */
  33. .minute-wrapper {
  34. height: 75%;
  35. width: 75%;
  36. animation: clock-run 60s steps(60) infinite;
  37. }
  38. .minute {
  39. width: 4px;
  40. background-color: black;
  41. }
  42. /* 秒针 */
  43. .second-wrapper {
  44. height: 90%;
  45. width: 90%;
  46. animation: clock-run 1s steps(60) infinite;
  47. }
  48. .second {
  49. width: 2px;
  50. background-color: red;
  51. }
  52. @keyframes clock-run {
  53. from {
  54. transform: rotateZ(0);
  55. }
  56. to {
  57. transform: rotateZ(360deg);
  58. }
  59. }

15.变形:平移、旋转与缩放 - 图5

复仇者联盟

html代码

  1. <div class="cube">
  2. <div class="surface1"></div>
  3. <div class="surface2"></div>
  4. <div class="surface3"></div>
  5. <div class="surface4"></div>
  6. <div class="surface5"></div>
  7. <div class="surface6"></div>
  8. </div>

css代码

  1. html {
  2. perspective: 800px;
  3. }
  4. .cube {
  5. height: 200px;
  6. width: 200px;
  7. margin: 200px auto;
  8. position: relative;
  9. /* 设置3d变形效果 */
  10. transform-style: preserve-3d;
  11. animation: cube-rotate 12s infinite linear;
  12. }
  13. .cube div {
  14. height: 200px;
  15. width: 200px;
  16. background-size: cover;
  17. position: absolute;
  18. top: 0;
  19. left: 0;
  20. /* 为元素设置透明效果 */
  21. opacity: .85;
  22. }
  23. .surface1 {
  24. background-image: url("/assets/复仇者联盟/1.jpg");
  25. transform: translateX(-100px) rotateY(90deg);
  26. }
  27. .surface2 {
  28. background-image: url("/assets/复仇者联盟/2.jpg");
  29. transform: translateX(100px) rotateY(90deg);
  30. }
  31. .surface3 {
  32. background-image: url("/assets/复仇者联盟/3.jpg");
  33. transform: translateY(-100px) rotateX(90deg);
  34. }
  35. .surface4 {
  36. background-image: url("/assets/复仇者联盟/4.jpg");
  37. transform: translateY(100px) rotateX(90deg);
  38. }
  39. .surface5 {
  40. background-image: url("/assets/复仇者联盟/5.jpg");
  41. transform: translateZ(-100px);
  42. }
  43. .surface6 {
  44. background-image: url("/assets/复仇者联盟/6.jpg");
  45. transform: translateZ(100px);
  46. }
  47. @keyframes cube-rotate {
  48. from {
  49. transform: rotateX(0) rotateY(0) rotateZ(0);
  50. }
  51. to {
  52. transform: rotateX(1turn) rotateY(2turn) rotateZ(3turn);
  53. }
  54. }

15.变形:平移、旋转与缩放 - 图6