styled-components:扩展样式并更改元素类型

Posted

技术标签:

【中文标题】styled-components:扩展样式并更改元素类型【英文标题】:styled-components: extend styles and change element type 【发布时间】:2019-09-10 14:48:29 【问题描述】:

假设我有以下样式:

color: black;
border: 1px solid white;

我想将它们都应用于不同类型的两个元素:

const SomeImg = styled.img`
  margin: 2em;
`;

const SomeDiv = styled.div`
  margin: 3em;
`;

如何让这两个元素都扩展这些样式?


如果他们都是<div><img>,那就很容易了。我可以这样做:

const ExtendMe = styled.div`
  color: black;
  border: 1px solid white;
`;

const SomeDiv = styled(ExtendMe)`
  margin: 2em;
`;

const OtherDiv = styled(ExtendMe)`
  margin: 3em;
`;

【问题讨论】:

【参考方案1】:

您可以使用 styled-components 中的 prop "as" 来更改组件的 html 标签: https://www.styled-components.com/docs/api#as-polymorphic-prop

下面是您想要的示例:

const ExtendMe = styled.div`
  color: black;
  border: 1px solid white;
`;

const SomeImg = styled(ExtendMe).attrs(
  as: "img"
)`
  margin: 2em;
`;


const SomeDiv = styled(ExtendMe)`
  margin: 3em;
`;

你可以看到:https://codesandbox.io/embed/mj3j1xp6pj?fontsize=14

【讨论】:

以上是关于styled-components:扩展样式并更改元素类型的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 styled-components 更改其他组件中单个组件的样式?

使用 styled-components 覆盖 material-ui 按钮样式

react——css-in-js——styled-components库——定义样式——样式继承——属性传递

styled-components - 为啥在组件样式之后注入全局样式?

使用 styled-components 在组件/元素之间共享样式

styled-components不能覆盖antd组件样式?