【问题标题】:Change hover style under custom component in styled-component在 styled-component 中更改自定义组件下的悬停样式
【发布时间】:2019-06-14 20:47:54
【问题描述】:

我有一个下面的结构。

<Nav>
  <Title/>
  <DropDown />
</Nav>

&lt;Nav /&gt; 是一个类组件,当我将鼠标悬停在 &lt;Nav /&gt; 上时,我需要显示 Dropdown。

这里是&lt;Nav /&gt;的代码sn-p。

export default class HeaderLink extends React.PureComponent {
...
}

这里是&lt;DropDown /&gt;的代码sn-p。

const Container = styled.ul`
    opacity: 0;
    visibility: hidden;
    transform: translateY(20px);
    transition: all .3s ease-in-out;

    ${Nav}:hover & {
        opacity: 1;
        visibility: visible;
        transform: translateY(-2px);
    }
`;

const DropDown = ({ items }) => (
    <Container>
        {items.map(({ title, url }) => (
            <a href={url}>{title}</a>
        ))}
    </Container>
);

DropDown.propTypes = {
    items: PropTypes.array.isRequired
};

export default DropDown;

这不起作用,但我认为如果我将 &lt;Nav /&gt; 组件定义为样式组件,它会起作用

const Nav = styled.ul''

但它不适用于类组件。

对此有什么想法吗?

谢谢。

【问题讨论】:

  • 你必须设计最终生成的 HTML 而不是纯组件。

标签: reactjs styled-components


【解决方案1】:

您正在尝试将父级用作选择器,这在 CSS 中目前是不可能的(请参阅:Is there a CSS parent selector?)。您的 :hover 应该在您的 Nav 组件上,而该组件又以相应的子元素为目标。

在此处查看示例 CodeSandbox:https://codesandbox.io/s/x9lmkply4

【讨论】:

  • 谢谢。它有效,但&amp;:hover { &gt; ul { ... } }。您指定了ul,但我们可以直接指向自定义组件吗?所以我们可以用样式组件的方式来实现它。
  • 是的,如果您使用的是最新版本的样式组件,那么您可以使用插值。例如。 ${ChildComponent} { ...rules }。我已经适当地更新了沙盒。
猜你喜欢
  • 2018-12-14
  • 1970-01-01
  • 2018-07-28
  • 2020-06-09
  • 2021-10-31
  • 2019-03-06
  • 2019-07-10
  • 2019-05-23
  • 2021-09-25
相关资源
最近更新 更多