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

如何使用MUI v5的SX属性实现旋转SVG加载动画?

解决MUI v5中用SX属性实现旋转SVG加载动画的问题

先纠正你代码里的两个明显问题:

  • 单位写错了:rotate(0dg)应该是rotate(0deg)(正确单位是deg不是dg)
  • MUI的SX属性不支持在单个元素的SX配置里直接定义@keyframes——SX本质是内联样式的扩展,而@keyframes属于样式表级别的规则,无法直接内联在元素上。

下面给你两种不用单独CSS文件或手动类名的可行方案:

方案一:使用MUI的keyframes工具函数(推荐)

MUI提供了keyframes函数来创建作用域内的动画规则,直接在组件里定义和使用即可:

import { Box, keyframes } from '@mui/material';

// 定义旋转动画
const spinAnimation = keyframes`
  from {
    transform: rotate(0deg);
  }
  to {
    transform: rotate(360deg);
  }
`;

// 组件中使用
function SpinningSvgLoader() {
  return (
    <Box
      sx={{
        animation: `${spinAnimation} 1s linear infinite`,
        width: 40, // 按需调整SVG尺寸
        height: 40,
        color: '#1976d2', // 按需设置SVG颜色
      }}
    >
      {/* 示例环形SVG加载动画,替换成你的SVG代码即可 */}
      <svg viewBox="0 0 24 24" fill="none">
        <circle
          cx="12"
          cy="12"
          r="10"
          stroke="currentColor"
          strokeWidth="2"
          strokeDasharray="50"
          strokeDashoffset="0"
          strokeLinecap="round"
        />
      </svg>
    </Box>
  );
}

方案二:在Theme中全局定义动画(适合多组件复用)

如果需要在多个地方使用这个旋转动画,可以把它定义在MUI主题里,然后在SX中引用:

import { createTheme, ThemeProvider, Box } from '@mui/material';

// 创建自定义主题,添加旋转动画
const customTheme = createTheme({
  keyframes: {
    spin: {
      from: { transform: 'rotate(0deg)' },
      to: { transform: 'rotate(360deg)' },
    },
  },
  transitions: {
    animations: {
      spin: 'spin 1s linear infinite',
    },
  },
});

// 在ThemeProvider包裹的组件中使用
function App() {
  return (
    <ThemeProvider theme={customTheme}>
      <Box
        sx={{
          animation: theme => theme.transitions.animations.spin,
          width: 40,
          height: 40,
        }}
      >
        {/* 你的SVG代码 */}
      </Box>
    </ThemeProvider>
  );
}

这两种方案都完全基于MUI的CSS-in-JS能力实现,不需要额外的CSS文件或手动管理类名。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 11:05:22