将鼠标悬停在另一个样式化的组件上


83

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

我可以在组件上实现某些状态并在悬停时切换属性,但是想知道是否有更好的方法可以使用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;
    }
  }
`

Answers:


158

从样式组件v2开始,您可以插值其他样式组件以引用其自动生成的类名。在您的情况下,您可能需要执行以下操作:

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

请参阅文档以获取更多信息!

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


如果您正在使用v1,并且需要执行此操作,则可以使用自定义类名称解决该问题:

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

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

由于v2是v1的直接升级,因此我建议您进行更新,但是如果不在此范围内,这是一个很好的解决方法。


15
对于任何阅读本书的人来说,组件的顺序都很重要。只有在Button以上/之前定义的情况下,它才有效Wrapper
泰坦(Titan)

实际上,另一个重要的文档是引用其他组件
L_K

如果我想依靠从包装器传递给Button的一些道具怎么办,那么悬停外观会因这些道具而有所不同?
rmartrenado



By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.