Styled-jsx 样式不适用于 Framer-Motion 元素
Styled-jsx styling not applied to Framer-Motion element
我觉得我疯了。
我创建了一个新的 Nextjs 项目,通过 NPM 安装了 Framer-Motion,运行 该项目处于开发模式。一切都会编译并加载页面,但是只要我向元素添加动作,它就会消失而不会出现任何错误。
我在 PC 和 Mac 上都得到了这个。我什至删除了我的节点模块和 package.lock 文件,并回滚到我过去使用过的 Next.js & framer-motion 版本,但它没有起到作用。只是为了好玩,我创建了一个带有 framer-motion 的新 React 应用程序,它在那里工作没有问题。
import {motion} from 'framer-motion';
export default function Home() {
return (
<>
<motion.div
className="test"
animate={{ scale: 1.5 }}
/>
<style jsx>{`
.test {
width: 100px;
height: 100px;
background-color: red;
}
`}</style>
</>
)
}
那是因为您的 styled-jsx
样式没有应用到 framer-motion
元素。
要为 motion.div
元素等第三方组件设置样式,您需要使用 resolve
tag from styled-jsx/css
.
import { motion } from 'framer-motion';
import css from 'styled-jsx/css';
const { className, styles } = css.resolve`
div {
width: 100px;
height: 100px;
background: red;
}
`;
export default function Home() {
return (
<>
<motion.div
className={className}
animate={{ scale: 1.5 }}
/>
{styles}
</>
)
}
我觉得我疯了。
我创建了一个新的 Nextjs 项目,通过 NPM 安装了 Framer-Motion,运行 该项目处于开发模式。一切都会编译并加载页面,但是只要我向元素添加动作,它就会消失而不会出现任何错误。
我在 PC 和 Mac 上都得到了这个。我什至删除了我的节点模块和 package.lock 文件,并回滚到我过去使用过的 Next.js & framer-motion 版本,但它没有起到作用。只是为了好玩,我创建了一个带有 framer-motion 的新 React 应用程序,它在那里工作没有问题。
import {motion} from 'framer-motion';
export default function Home() {
return (
<>
<motion.div
className="test"
animate={{ scale: 1.5 }}
/>
<style jsx>{`
.test {
width: 100px;
height: 100px;
background-color: red;
}
`}</style>
</>
)
}
那是因为您的 styled-jsx
样式没有应用到 framer-motion
元素。
要为 motion.div
元素等第三方组件设置样式,您需要使用 resolve
tag from styled-jsx/css
.
import { motion } from 'framer-motion';
import css from 'styled-jsx/css';
const { className, styles } = css.resolve`
div {
width: 100px;
height: 100px;
background: red;
}
`;
export default function Home() {
return (
<>
<motion.div
className={className}
animate={{ scale: 1.5 }}
/>
{styles}
</>
)
}