You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React组件中CSS-in-JS动画无法生效问题咨询

React中Emotion CSS-in-JS动画不生效的解决方案

问题原因

你当前的写法错误在于直接将Emotion的keyframes对象通过React的style属性传递。React内联style只支持标准CSS属性值,而Emotion的keyframes返回的是一个特殊对象,拼接成字符串后会变成[object Object],浏览器无法识别这个无效的动画名称,导致动画不生效。

解决方案

方案1:使用Emotion的css函数与css属性

修改Styles.js,用css函数包裹样式对象:

import { keyframes, css } from '@emotion/react';

const bounceAnimation = keyframes`
  0%, 100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(20px);
  }
`;

const classes = {
  loadingContainer: css({
    fontSize: '84px',
    fontWeight: 800,
    textAlign: 'center',
  }),
  loadingSpan: css({
    display: 'inline-block',
    animation: `${bounceAnimation} 0.7s infinite`,
    color: 'red',
    margin: '0 -.05em',
  }),
};

export default classes;

然后在组件中使用Emotion的css属性(需确保项目已配置支持Emotion的css prop,比如通过babel插件):

import React from 'react';
import styles from './styles';

const Loader = () => {
  return (
    <div css={styles.loadingContainer}>
      <span css={styles.loadingSpan}>loading</span>
    </div>
  );
};

export default Loader;

方案2:使用Emotion的Styled组件

改用Styled组件写法,这是Emotion推荐的方式之一:
修改Styles.js为Styled组件:

import { keyframes, styled } from '@emotion/react';

const bounceAnimation = keyframes`
  0%, 100% {
    transform: translateY(0);
  }
  50% {
    transform: translateY(20px);
  }
`;

export const LoadingContainer = styled.div`
  font-size: 84px;
  font-weight: 800;
  text-align: center;
`;

export const LoadingSpan = styled.span`
  display: inline-block;
  animation: ${bounceAnimation} 0.7s infinite;
  color: red;
  margin: 0 -.05em;
`;

组件中直接使用定义好的Styled组件:

import React from 'react';
import { LoadingContainer, LoadingSpan } from './styles';

const Loader = () => {
  return (
    <LoadingContainer>
      <LoadingSpan>loading</LoadingSpan>
    </LoadingContainer>
  );
};

export default Loader;

内容的提问来源于stack exchange,提问作者PageSource

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.29 03:37:32