将 Material 图标与样式化组件一起使用
Using Material Icons with Styled Components
刚开始玩 Styled Components。有没有办法设置第三方图标的样式,例如 Material Design Icons?这是我到目前为止的代码,但显然它不起作用。 相关代码在内容组件下方谢谢!
const MaterialIcon = (props) => <i className="material-icons">account_balance</i>;
const Icon = styled(MaterialIcon)`
background-color: green;
font-size: 50px;
`;
const CheckThisOut = props => (
<Wrapper>
<Header>
<h5>{props.title}</h5>
<Icon />
</Header>
<Divider />
<Content>
<p>5% of all participants in this campaign were first time users.</p>
</Content>
</Wrapper>
);
export default CheckThisOut;
要使 styled(AnyComp)
符号正常工作,AnyComp
需要接受传入的 className
属性并将其附加到 DOM 节点。
要使您的示例正常工作,MaterialIcon
必须使用传入的 className
,否则样式会被注入但没有 DOM 节点被定位:
const MaterialIcon = (props) => (
<i className={`material-icons ${props.className}`}>account_balance</i>
);
// WORKS
const Icon = styled(MaterialIcon)`
background-color: green;
font-size: 50px;
`;
查看我们的 documentation page about styling any component 了解更多信息!
我知道这是一个旧的 post,但这里有另一种将其写为单个表达式的方法。使用样式组件的 .attrs()
(see docs) 作为 class 名称和 CSS ::after
选择器作为图标名称。
const ThumbUp = styled.i.attrs(() => ({ className: "material-icons" }))`
background-color: green;
font-size: 50px;
&:after {
content: "thumb_up";
}
`;
以更通用的方式编写它可以让您将它用于任何可用的图标。这利用了样式组件的能力来根据道具进行调整(有关详细信息,请参阅 styled components docs)。
const MaterialIcon = styled.i.attrs(() => ({ className: "material-icons" }))`
background-color: green;
font-size: 50px;
&:after {
content: ${props => props.iconName || "help"};
}
`;
你可以这样使用:
<MaterialIcon iconName="check" />
刚开始玩 Styled Components。有没有办法设置第三方图标的样式,例如 Material Design Icons?这是我到目前为止的代码,但显然它不起作用。 相关代码在内容组件下方谢谢!
const MaterialIcon = (props) => <i className="material-icons">account_balance</i>;
const Icon = styled(MaterialIcon)`
background-color: green;
font-size: 50px;
`;
const CheckThisOut = props => (
<Wrapper>
<Header>
<h5>{props.title}</h5>
<Icon />
</Header>
<Divider />
<Content>
<p>5% of all participants in this campaign were first time users.</p>
</Content>
</Wrapper>
);
export default CheckThisOut;
要使 styled(AnyComp)
符号正常工作,AnyComp
需要接受传入的 className
属性并将其附加到 DOM 节点。
要使您的示例正常工作,MaterialIcon
必须使用传入的 className
,否则样式会被注入但没有 DOM 节点被定位:
const MaterialIcon = (props) => (
<i className={`material-icons ${props.className}`}>account_balance</i>
);
// WORKS
const Icon = styled(MaterialIcon)`
background-color: green;
font-size: 50px;
`;
查看我们的 documentation page about styling any component 了解更多信息!
我知道这是一个旧的 post,但这里有另一种将其写为单个表达式的方法。使用样式组件的 .attrs()
(see docs) 作为 class 名称和 CSS ::after
选择器作为图标名称。
const ThumbUp = styled.i.attrs(() => ({ className: "material-icons" }))`
background-color: green;
font-size: 50px;
&:after {
content: "thumb_up";
}
`;
以更通用的方式编写它可以让您将它用于任何可用的图标。这利用了样式组件的能力来根据道具进行调整(有关详细信息,请参阅 styled components docs)。
const MaterialIcon = styled.i.attrs(() => ({ className: "material-icons" }))`
background-color: green;
font-size: 50px;
&:after {
content: ${props => props.iconName || "help"};
}
`;
你可以这样使用:
<MaterialIcon iconName="check" />