【问题标题】:How to rotate box shadow around a text?如何围绕文本旋转框阴影?
【发布时间】:2020-04-01 00:34:17
【问题描述】:

我正在研究 HTML/CSS,我发现了一个非常有趣的旋转框阴影示例。我想我会尝试使用它,但我无法转动我的文本周围的阴影。

我找到的示例有一个类似<div class="rotate-shadows"></div> 和这样的 CSS:

body {
  margin: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
}
.rotate-shadows {
  width: 220px;
  height: 220px;
  position: relative;
}
.rotate-shadows:after,
.rotate-shadows:before {
  content: "";
  border-radius: 50%;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  transform-origin: center center;
}
.rotate-shadows:before {
  box-shadow: inset 0 20px 0 rgba(0, 250, 250, 0.6), inset 20px 0 0 rgba(0, 200, 200, 0.6), inset 0 -20px 0 rgba(0, 150, 200, 0.6), inset -20px 0 0 rgba(0, 200, 250, 0.6);
  animation: rotate-before 2s -0.5s linear infinite;
}
.rotate-shadows:after {
  box-shadow: inset 0 20px 0 rgba(250, 250, 0, 0.6), inset 20px 0 0 rgba(250, 200, 0, 0.6), inset 0 -20px 0 rgba(250, 150, 0, 0.6), inset -20px 0 0 rgba(250, 100, 0, 0.6);
  animation: rotate-after 2s -0.5s linear infinite;
}
@keyframes rotate-after {
  0% {transform: rotateZ(0deg) scaleX(1) scaleY(1);}
  50% {transform: rotateZ(180deg) scaleX(0.82) scaleY(0.95);}
  100% {transform: rotateZ(360deg) scaleX(1) scaleY(1);}
}
@keyframes rotate-before {
  0% {transform: rotateZ(0deg) scaleX(1) scaleY(1);}
  50% {transform: rotateZ(-180deg) scaleX(0.95) scaleY(0.85);}
  100% {transform: rotateZ(-360deg) scaleX(1) scaleY(1);}
}
<div class="rotate-shadows"></div>

我发现我不需要body {},想出了我可以在哪里更改阴影的颜色、比例等。但我不知道哪个部分负责阴影的形状。

我可以让阴影像动画框架一样环绕我的文本吗:

Классная шляпная шляпа с широкими полями всего за два куська。 Да-да! Это не опечатка! Всего два динозаврических укуса и шляпа ваша!

我需要把我的文字放在哪里才能让阴影围绕它旋转? 以及如何改变阴影的形状?

我只是想明白。

【问题讨论】:

  • 将文本放入 div 并将display: flex; justify-content: center;align-items: center; 添加到.rotate-shadows,使用伪元素上的嵌入阴影制作阴影,更改形状将涉及与@987654321 的值一起播放@

标签: html css css-animations box-shadow


【解决方案1】:

如果我正确理解您的要求,这就是您需要的吗?

如果这不是问题,我在里面添加了一个额外的div 来包装text?此 div 的行为基于父级的位置。让它在中间。

body {
  margin: 0;
  display: flex;
  justify-content: center;
  align-items: center;
  height: 100vh;
  position: relative;
}

.rotate-shadows {
  width: 220px;
  height: 220px;
  position: relative;
}

#text {
  position: absolute;
  top: 50%;
  left: 50%;
  transform: translate(-50%, -50%);
  justify-content: center;
  align-items: center;
}

.rotate-shadows:after,
.rotate-shadows:before {
  content: "";
  border-radius: 50%;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  transform-origin: center center;
}

.rotate-shadows:before {
  box-shadow: inset 0 20px 0 rgba(0, 250, 250, 0.6), inset 20px 0 0 rgba(0, 200, 200, 0.6), inset 0 -20px 0 rgba(0, 150, 200, 0.6), inset -20px 0 0 rgba(0, 200, 250, 0.6);
  animation: rotate-before 2s -0.5s linear infinite;
}

.rotate-shadows:after {
  box-shadow: inset 0 20px 0 rgba(250, 250, 0, 0.6), inset 20px 0 0 rgba(250, 200, 0, 0.6), inset 0 -20px 0 rgba(250, 150, 0, 0.6), inset -20px 0 0 rgba(250, 100, 0, 0.6);
  animation: rotate-after 2s -0.5s linear infinite;
}

@keyframes rotate-after {
  0% {
    transform: rotateZ(0deg) scaleX(1) scaleY(1);
  }
  50% {
    transform: rotateZ(180deg) scaleX(0.82) scaleY(0.95);
  }
  100% {
    transform: rotateZ(360deg) scaleX(1) scaleY(1);
  }
}

@keyframes rotate-before {
  0% {
    transform: rotateZ(0deg) scaleX(1) scaleY(1);
  }
  50% {
    transform: rotateZ(-180deg) scaleX(0.95) scaleY(0.85);
  }
  100% {
    transform: rotateZ(-360deg) scaleX(1) scaleY(1);
  }
}
<div class="rotate-shadows">
  <div id="text">
    Once upon a time in Stackoverflow!!
  </div>
</div>

如果你需要单Div中的内容那么:

body {
  height: 100vh;
}

.rotate-shadows {
  width: 220px;
  height: 220px;
  position: absolute;
  transform: translate(-50%, -50%);
  justify-content: center;
  align-items: center;
  display: flex;
  text-align: center;
  vertical-align: middle;
  top: 50%;
  left: 50%;
}

.rotate-shadows:after,
.rotate-shadows:before {
  content: "";
  border-radius: 50%;
  position: absolute;
  top: 0;
  left: 0;
  width: 100%;
  height: 100%;
  transform-origin: center center;
}

.rotate-shadows:before {
  box-shadow: inset 0 20px 0 rgba(0, 250, 250, 0.6), inset 20px 0 0 rgba(0, 200, 200, 0.6), inset 0 -20px 0 rgba(0, 150, 200, 0.6), inset -20px 0 0 rgba(0, 200, 250, 0.6);
  animation: rotate-before 2s -0.5s linear infinite;
}

.rotate-shadows:after {
  box-shadow: inset 0 20px 0 rgba(250, 250, 0, 0.6), inset 20px 0 0 rgba(250, 200, 0, 0.6), inset 0 -20px 0 rgba(250, 150, 0, 0.6), inset -20px 0 0 rgba(250, 100, 0, 0.6);
  animation: rotate-after 2s -0.5s linear infinite;
}

@keyframes rotate-after {
  0% {
    transform: rotateZ(0deg) scaleX(1) scaleY(1);
  }
  50% {
    transform: rotateZ(180deg) scaleX(0.82) scaleY(0.95);
  }
  100% {
    transform: rotateZ(360deg) scaleX(1) scaleY(1);
  }
}

@keyframes rotate-before {
  0% {
    transform: rotateZ(0deg) scaleX(1) scaleY(1);
  }
  50% {
    transform: rotateZ(-180deg) scaleX(0.95) scaleY(0.85);
  }
  100% {
    transform: rotateZ(-360deg) scaleX(1) scaleY(1);
  }
}
<div class="rotate-shadows"> Once upon a time in Stackoverflow!!
</div>

【讨论】:

  • #text 上不需要 flexbox
  • 但是如果我引用body标签,我的整个页面不会有样式属性“margin, display”等吗?
  • 当然可以!我刚刚为您添加了另一个 sn-p,我制作了另一个 Div 以使其更简单。希望对您有所帮助!
  • @VladimirMarkiev 这个答案对你有帮助吗?
  • @Manjuboyz 有帮助,谢谢!我的文本仍然被阴影重叠,然后我添加了填充,现在,即使我调整了 div 的大小,也不会发生重叠。但我很难理解如何改变 div 的位置。如果我更改 .rotate-shadows { 的参数,由于某种原因它不会影响任何事情。
猜你喜欢
  • 2021-02-09
  • 1970-01-01
  • 2011-08-12
  • 2013-05-19
  • 2020-11-23
  • 2013-03-12
  • 1970-01-01
  • 2016-12-28
  • 1970-01-01
相关资源
最近更新 更多