样式化的组件:扩展样式并更改元素类型

aba*_*haw 2 html javascript css reactjs styled-components

想象一下我有以下样式:

color: black;
border: 1px solid white;
Run Code Online (Sandbox Code Playgroud)

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

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

const SomeDiv = styled.div`
  margin: 3em;
`;
Run Code Online (Sandbox Code Playgroud)

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


如果两个<div>或两个都足够容易<img>。我可以做:

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

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

const OtherDiv = styled(ExtendMe)`
  margin: 3em;
`;
Run Code Online (Sandbox Code Playgroud)

Dev*_*eve 6

您可以从样式化组件中使用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;
`;

Run Code Online (Sandbox Code Playgroud)

您可以在以下网址看到:https : //codesandbox.io/embed/mj3j1xp6pj?fontsize=14