HTML – 如何平滑宽度和高度的过渡?

前端之家收集整理的这篇文章主要介绍了HTML – 如何平滑宽度和高度的过渡?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

我创建了这个动画,但它并不流畅.当您将鼠标悬停在蓝色圆圈上时,会打开一个彩色圆圈,但开口不稳定,不是100%平滑.动画可以平滑,怎么样?

  1. #container {
  2. border: 1px solid black;
  3. width: 600px;
  4. height: 600px;
  5. position: relative;
  6. }
  7. #circle {
  8. margin: 0;
  9. padding: 0;
  10. border: 1px solid black;
  11. width: 50px;
  12. height: 50px;
  13. border-radius: 50%;
  14. position: absolute;
  15. top: 50%;
  16. left: 50%;
  17. transform: translate(-50%,-50%);
  18. overflow: hidden;
  19. transition: width 0.2s,height 0.2s;
  20. }
  21. #circle a {
  22. margin: 0;
  23. display: block;
  24. padding: 0;
  25. width: 250px;
  26. height: 220px;
  27. position: absolute;
  28. top: 50%;
  29. left: 50%;
  30. transform-origin: 0 0;
  31. }
  32. #circle a:hover {
  33. opacity: 0.5;
  34. cursor: pointer;
  35. }
  36. #trap1 {
  37. background-color: green;
  38. transform: rotate(0deg) skewX(30deg);
  39. }
  40. #trap2 {
  41. background-color: yellow;
  42. transform: rotate(60deg) skewX(30deg);
  43. }
  44. #trap3 {
  45. background-color: red;
  46. transform: rotate(120deg) skewX(30deg);
  47. }
  48. #trap4 {
  49. background-color: blue;
  50. transform: rotate(180deg) skewX(30deg);
  51. }
  52. #trap5 {
  53. background-color: orange;
  54. transform: rotate(240deg) skewX(30deg);
  55. }
  56. #trap6 {
  57. background-color: purple;
  58. transform: rotate(300deg) skewX(30deg);
  59. }
  60. #hide {
  61. position: absolute;
  62. top: 50%;
  63. left: 50%;
  64. z-index: 1;
  65. transform: translate(-50%,-50%);
  66. width: 50px;
  67. height: 50px;
  68. border-radius: 50%;
  69. background-color: cyan;
  70. }
  71. #circle:hover {
  72. width: 500px;
  73. height: 500px;
  74. }
最佳答案
原因:(没有链接/来源备份,这只是一个有根据的猜测)

我在过去遇到了类似的情况,我设法发现的是由于(我相信)子像素渲染问题而发生抖动.

当高度和宽度转换时,元素的更新似乎逐个像素地发生.例如,在下面的片段中有两个div元素,其高度和宽度正在转换(第一个增加3px超过5s而第二个增加5px).这里要注意的关键是,对于第一个div,有三个可见步骤,而第二个步骤有五个步骤(意味着它们逐个像素地增加).

  1. div{
  2. display: inline-block;
  3. height: 100px;
  4. width: 100px;
  5. background: red;
  6. border: 1px solid;
  7. margin: 10px;
  8. transition: all 5s linear;
  9. }
  10. div:nth-child(1):hover{
  11. height: 103px;
  12. width: 103px;
  13. }
  14. div:nth-child(2):hover{
  15. height: 105px;
  16. width: 105px;
  17. }

现在你会问我这与震动有什么联系.连接是高度和宽度逐像素增加但转换(-50%,– 50%)意味着没有.用于转换元素的px有时是分数,似乎在实际转换期间发生了一些修正以克服这些小数值.

解决方案:(或解决方案)

而不是使用平移(-50%,– 50%)技巧进行水平垂直居中,如果我们通过提供顶部和左侧像素直接定位元素,您会发现没有抖动.根据我的理解,这是因为浏览器逐个像素地转换所有4个属性(高度,宽度,顶部和左侧),因此没有导致校正的小数值.

(在最新的Chrome Windows 10上测试过.)

  1. #container {
  2. border: 1px solid black;
  3. width: 600px;
  4. height: 600px;
  5. position: relative;
  6. }
  7. #circle {
  8. margin: 0;
  9. padding: 0;
  10. border: 1px solid black;
  11. width: 50px;
  12. height: 50px;
  13. border-radius: 50%;
  14. position: absolute;
  15. top: 275px;
  16. left: 275px;
  17. overflow: hidden;
  18. transition: all 0.2s;
  19. }
  20. #circle a {
  21. margin: 0;
  22. display: block;
  23. padding: 0;
  24. width: 250px;
  25. height: 220px;
  26. position: absolute;
  27. top: 50%;
  28. left: 50%;
  29. transform-origin: 0 0;
  30. }
  31. #circle a:hover {
  32. opacity: 0.5;
  33. cursor: pointer;
  34. }
  35. #trap1 {
  36. background-color: green;
  37. transform: rotate(0deg) skewX(30deg);
  38. }
  39. #trap2 {
  40. background-color: yellow;
  41. transform: rotate(60deg) skewX(30deg);
  42. }
  43. #trap3 {
  44. background-color: red;
  45. transform: rotate(120deg) skewX(30deg);
  46. }
  47. #trap4 {
  48. background-color: blue;
  49. transform: rotate(180deg) skewX(30deg);
  50. }
  51. #trap5 {
  52. background-color: orange;
  53. transform: rotate(240deg) skewX(30deg);
  54. }
  55. #trap6 {
  56. background-color: purple;
  57. transform: rotate(300deg) skewX(30deg);
  58. }
  59. #hide {
  60. position: absolute;
  61. top: 50%;
  62. left: 50%;
  63. z-index: 1;
  64. transform: translate(-50%,-50%);
  65. width: 50px;
  66. height: 50px;
  67. border-radius: 50%;
  68. background-color: cyan;
  69. }
  70. #circle:hover {
  71. width: 500px;
  72. height: 500px;
  73. left: 50px;
  74. top: 50px;
  75. }

猜你在找的HTML相关文章