Я работаю с веб-приложениями React. когда я пытаюсь применить анимацию к тегу кода, анимация не показывалась. Мой App.js также прост и представлен ниже.

import './App.css';


export default function App() {
  return (
    <div className="App">
      <code>this is sample web page</code>
    </div>
  );
}

Вот App.css

html{
  background-color: #282c34;
  color: white;
}
body{
  font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', 'Roboto', 'Oxygen',
  'Ubuntu', 'Cantarell', 'Fira Sans', 'Droid Sans', 'Helvetica Neue',
  sans-serif;
  -webkit-font-smoothing: antialiased;
  -moz-osx-font-smoothing: grayscale;
}

code {
  font-family: source-code-pro, Menlo, Monaco, Consolas, 'Courier New',
    monospace;
    animation: spin 3s linear infinite;
}

.App {
  text-align: center;
}

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

Я пытаюсь перейти на другой тег, например h1, вместо кода, с которым он работает нормально. Примечание: использование Google Chrome

0
Sri12866 30 Окт 2023 в 09:50
Привет @Sri12866, проблема связана со стилями CSS по умолчанию блока , конфликтующими с вашими пользовательскими стилями. Чтобы решить эту проблему, рассмотрите возможность замены блока на блок
.
 – 
DineshMsd
30 Окт 2023 в 10:03
Можете ли вы объяснить подробнее @DineshMsd, почему это происходит?
 – 
Sri12866
30 Окт 2023 в 10:06
1
Привет @Sri12866, элемент является встроенным, что означает, что display: inline по умолчанию находится в . если вы добавите класс к элементу и примените display: block, он будет работать, а сзади происходит то, что вы переопределяете свойство отображения кода на встроенное для блокировки. CSS по умолчанию для элемента
display: block, поэтому изначально он у нас работает!
 – 
DineshMsd
30 Окт 2023 в 10:20

2 ответа

Добавьте оболочку к тегу <code> и установите для нее анимацию.

Например:

.code-wrapper{
  animation: spin 3s linear infinite;
}

.App {
  text-align: center;
}

@keyframes spin {
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
}
<div class="App">

  <div class="code-wrapper">
    <code>
      Hello world
    </code>
  </div>

</div>
1
Jarmo T 30 Окт 2023 в 10:03

Попробуйте применить CSS к родительскому элементу div вместо code. Причина в том, что элемент code является встроенным и его нельзя анимировать.

Это указано в соответствующей спецификации:

Трансформируемый элемент

Трансформируемый элемент - это элемент одной из следующих категорий:

элемент, компоновка которого регулируется блочной моделью CSS, которая является либо блочным, либо атомарным встроенным элементом, либо свойство отображения которого вычисляется в table-row, table-row-group, table-header-group, table-footer -group, table-cell или table-caption [CSS21]

элемент в пространстве имен SVG и не регулируется блочной моделью CSS, которая имеет атрибуты transform, patternTransform или gradientTransform [SVG11].

1
taile239 30 Окт 2023 в 10:35