Как я могу анимировать кнопку, не перемещая текст внутри?

У меня есть кнопка, к которой я применил постоянную вращающуюся анимацию.

@keyframes rotateinf {
  from { transform: rotate(  0deg); }
   to  { transform: rotate(360deg); }
}

Проблема в том, что к дочернему тексту тоже применяется анимация.

Мне удалось найти дешевое решение этой проблемы: я создал элемент и установил абсолютную позицию, поместив его прямо поверх кнопки с атрибутами top и right. Класс imptxt просто устанавливает шрифт.

<span class = "imptxt" style = "position: absolute;z-index: 10; color: black; top:40%; right:44%; pointer-events: none;"
  >
  All about
</span>
<span class = "imptxt" style = "position: absolute;z-index: 10; color: black; top:48%; right:48%; pointer-events: none;"
  >
  me
</span>
<button id = "trns" class = "buttonrot" onmousedown = "redirect()"></button>

Класс buttonrot следующий:

padding: 200px ;
  border-radius: 50px;
  z-index: 9;
  animation:fadeintop 1s ease-in-out, rotateinf 10s linear infinite 1s;
  position: relative;
  display: inline-block;
  cursor: pointer;
  overflow: hidden;
  transform-origin: center;

Вот результат (.gif):

Как я могу анимировать кнопку, не перемещая текст внутри?

Есть ли реальный и лучший способ заставить текст оставаться неподвижным и применить анимацию вращения к кнопке?

Фрагмент кода:

.buttonrot {
  padding: 200px;
  border-radius: 50px;
  z-index: 9;
  animation: fadeintop 1s ease-in-out, rotateinf 10s linear infinite 1s;
  position: relative;
  display: inline-block;
  cursor: pointer;
  overflow: hidden;
  transform-origin: center;
}

@keyframes rotateinf {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}
<span class = "imptxt" style = " position: absolute;z-index: 10; color: black; top:40%; right:44%; pointer-events: none;">All about</span>
<span class = "imptxt" style = "position: absolute;z-index: 10; color: black; top:48%; right:48%; pointer-events: none;">me</span>
<button id = "trns" class = "buttonrot" onmousedown = "redirect()"></button>
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Ангулярный шаблон для бронирования путешествий
Toor - Travel Booking Angular Template один из лучших Travel & Tour booking template in the world. 30+ валидированных HTML5 страниц, которые помогут...
0
1
52
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Ответ принят как подходящий

Поместите текст в span внутри кнопки и переверните анимацию в диапазоне.

.buttonrot {
  padding: 50px;
  border-radius: 10px;
  animation: rotateinf 10s linear infinite;
  position: relative;
  display: inline-block;
  cursor: pointer;
  overflow: hidden;
}

.buttonrot span {
  display: inline-block;
  animation: rotateinf 10s linear reverse infinite;
}

@keyframes rotateinf {
  100% {
    transform: rotate(360deg);
  }
}
<button id = "trns" class = "buttonrot" onmousedown = "redirect()"><span>All About Me</span></button>

Мне кажется, текст немного размыт.

j08691 05.09.2024 18:26

Спасибо! Похоже, это работает :) Не могу поверить, что ответ оказался таким простым...

Hardway Studios 05.09.2024 18:34

Вы даже можете использовать свойство ::after для достижения желаемого без каких-либо дополнительных элементов.

.buttonrot {
  padding: 50px;
  border-radius: 10px;
  animation: rotateinf 10s linear infinite;
  position: relative;
  display: inline-block;
  cursor: pointer;
  overflow: hidden;
}

.buttonrot::after {
  content: attr(data-text);
  display: inline-block;
  animation: rotateinf 10s linear reverse infinite;
}

@keyframes rotateinf {
  100% {
    transform: rotate(360deg);
  }
}
<button id = "trns" class = "buttonrot" onmousedown = "redirect()" data-text = "About Me"></button>

Другие вопросы по теме