如何扩展 css 情感风格的基础组件?
How to extend css emotion styled base components?
https://codesandbox.io/s/w242n1vonw
我有一个项目使用 styled-system 和 react-emotion。
为了可重用性,我设计了继承自基础 css 的标题样式。
有时我希望能够使用样式系统覆盖属性,例如:
<H1 color='green'/>
当我的基本组件是:
const BaseHeading = ({ theme, ...props }) => css`
color: ${props.color ? props.color : theme.secondary};
`;
但是如果我想潜在地覆盖十个属性,我需要有条件地重用该道具。这是编写此类功能的惯用方式吗?
我认为这是覆盖多个属性的正确方法。例如,如果您有其他固定属性,例如 margin
,您可以执行如下操作来帮助阐明您的 "css" 文件。
const marginMap = {
sm: '4px',
md: '8px',
lg: '10px',
default: '0',
}
const BaseHeading = styled.header`
margin: ${({ margin = 'default'}) => marginMap[margin]};
`;
您可以将 'default'
更改为您的基本主题样式
但对于你的问题,我还没有看到使用样式化 system/styled 组件覆盖属性的更好方法
您可以使用来自@emotion/styled 的样式函数创建一个新的自定义样式组件,它扩展了不同样式的组件。假设您有一个名为 BoldText 的样式化组件。
const BoldText = styled("div")`
font-size: 16px;
font-weight: bold;
`;
您可以通过创建一个基于 BoldText 的新样式组件来覆盖 BoldText 的某些属性,类似于 BoldText 从 div.
构建的方式
import styled from "@emotion/styled";
import BoldText from "./BoldText"
const BigBoldText = styled(BoldText)`
font-size: 20px;
`
<BoldText>I'm bold and 16px</BoldText>
<BigBoldText>I'm bold and 20px</BigBoldText>
https://codesandbox.io/s/w242n1vonw
我有一个项目使用 styled-system 和 react-emotion。
为了可重用性,我设计了继承自基础 css 的标题样式。
有时我希望能够使用样式系统覆盖属性,例如:
<H1 color='green'/>
当我的基本组件是:
const BaseHeading = ({ theme, ...props }) => css`
color: ${props.color ? props.color : theme.secondary};
`;
但是如果我想潜在地覆盖十个属性,我需要有条件地重用该道具。这是编写此类功能的惯用方式吗?
我认为这是覆盖多个属性的正确方法。例如,如果您有其他固定属性,例如 margin
,您可以执行如下操作来帮助阐明您的 "css" 文件。
const marginMap = {
sm: '4px',
md: '8px',
lg: '10px',
default: '0',
}
const BaseHeading = styled.header`
margin: ${({ margin = 'default'}) => marginMap[margin]};
`;
您可以将 'default'
更改为您的基本主题样式
但对于你的问题,我还没有看到使用样式化 system/styled 组件覆盖属性的更好方法
您可以使用来自@emotion/styled 的样式函数创建一个新的自定义样式组件,它扩展了不同样式的组件。假设您有一个名为 BoldText 的样式化组件。
const BoldText = styled("div")`
font-size: 16px;
font-weight: bold;
`;
您可以通过创建一个基于 BoldText 的新样式组件来覆盖 BoldText 的某些属性,类似于 BoldText 从 div.
构建的方式import styled from "@emotion/styled";
import BoldText from "./BoldText"
const BigBoldText = styled(BoldText)`
font-size: 20px;
`
<BoldText>I'm bold and 16px</BoldText>
<BigBoldText>I'm bold and 20px</BigBoldText>