next.js 如何将父母风格的jsx应用到孩子身上?

wnavrhmk  于 2023-06-22  发布在  其他
关注(0)|答案(1)|浏览(130)

如何将父样式的JSX应用到子组件?我的JSX样式将应用于下面的父按钮元素(因为它有自己的JSX类),但不应用于其子元素。
下面是父按钮元素的代码:

export function LoginButton({children, className, ...props}){
        return (
            <>
                <style jsx>
                    {`
                        .loginButton {
                            padding: .75rem 2rem;
                            width: 100%;
                            border-radius: 2rem;
                            background: var(--primary);
                            color: var(--back); 
                            font-size: 2rem !important;
    
                        }
    
                        .loginButton:hover i {
                            transform: translateX(.5rem);
                        }
    
    
                    `}
                </style>
                <button className={`loginButton ${className}`} {...props}>
                    {children}
                </button>
            </>
        )
}

下面是我如何使用此代码的示例:

<LoginButton className="flex center gap1">
    <h3>Sign in</h3>
    <i className="bx bxs-right-arrow-alt"></i>
</LoginButton>

<i>元素没有获取按钮的JSX样式。我尝试过克隆元素并将JSX更新为global,但都不起作用。
如何将JSX样式应用于组件的子组件?

f1tvaqid

f1tvaqid1#

从这篇nextjs博客文章
添加到组件使用的样式只影响该组件内部的元素,而不影响子组件。
在您的示例中,.loginButton样式可以正常工作,但不会应用.loginButton:hover i,因为组件代码中没有i元素:

<button className={`loginButton ${className}`} {...props}>
  {children}
</button>

有时,我们可能需要覆盖子组件的某种样式。为此,StyledJSX提供了:global(),允许访问一次性全局选择器。
您可以使用:global(i)来设置子元素的样式:

.loginButton:hover :global(i) {
  transform: translateX(.5rem);
}

相关问题