在悬停时定位另一个样式组件

新手上路,请多包涵

处理样式组件中悬停的最佳方法是什么。我有一个包装元素,当悬停时会显示一个按钮。

我可以在组件上实现一些状态并在悬停时切换属性,但想知道是否有更好的方法来使用 styled-cmponents。

像下面这样的东西不起作用,但会是理想的:

 const Wrapper = styled.div`
  border-radius: 0.25rem;
  overflow: hidden;
  box-shadow: 0 3px 10px -3px rgba(0, 0, 0, 0.25);
  &:not(:last-child) {
    margin-bottom: 2rem;
  }
  &:hover {
    .button {
      display: none;
    }
  }
`

原文由 nickspiel 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 726
2 个回答

从 styled-components v2 开始,您可以插入其他样式组件以引用它们自动生成的类名。在你的情况下,你可能想要做这样的事情:

 const Wrapper = styled.div`
  &:hover ${Button} {
    display: none;
  }
`

有关更多信息,请参阅 文档

组件的顺序很重要。只有在 ButtonWrapper 之前/之前定义时,它才会起作用。


如果您使用的是 v1 并且需要这样做,您可以使用自定义类名来解决它:

 const Wrapper = styled.div`
  &:hover .my__unique__button__class-asdf123 {
    display: none;
  }
`

<Wrapper>
  <Button className="my__unique__button__class-asdf123" />
</Wrapper>

由于 v2 是 v1 的直接升级,我建议更新,但如果这不在卡片中,这是一个很好的解决方法。

原文由 mxstbr 发布,翻译遵循 CC BY-SA 4.0 许可协议

与 mxstbr 的回答类似,您也可以使用插值来引用父组件。我喜欢这条路线,因为它比在父组件中引用子组件更好地封装了组件的样式。

 const Button = styled.button`
  ${Wrapper}:hover & {
    display: none;
  }
`;

我无法告诉您何时引入此功能,但这从 v3 开始有效。

相关链接: https ://www.styled-components.com/docs/advanced#referring-to-other-components

原文由 Omegalen 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进