Styled-Components:在父鼠标悬停时指定子元素的样式

Posted

技术标签:

【中文标题】Styled-Components:在父鼠标悬停时指定子元素的样式【英文标题】:Styled-Components: specify styles of children on parents hover 【发布时间】:2017-12-15 14:59:16 【问题描述】:

我有一个简单的组件 这是它的 2 个版本 - 带有和不带有样式组件:

没有样式化的组件

<div id="container">
    <div id="kid"></div>
</div>


#container 
    width: 100px;
    height: 100px;


#kid 
    width: 20px;
    height: 20px;


#container:hover #kid
    background: green;

使用样式化组件

const Container = styled.div`
    width: 100px;
    height: 100px;
`;

const Kid = styled.div`
    width: 20px;
    height: 20px;
`;

<Container>
    <Kid />
</Container

如何实现与上一个示例中相同的悬停行为?

【问题讨论】:

Best way to handle hover in styled-components with react的可能重复 可能重复 【参考方案1】:

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

const Container = styled.div`
  &:hover $Kid 
    display: none;
  
`

更多信息请见the documentation!

这是从我的回答 here 复制和粘贴的。

【讨论】:

我正在通过文档和项目的问题寻找这个。它不应该是 styledcomponents 基本或高级部分而不是常见问题的一部分吗?感谢您的出色工作。【参考方案2】:

尝试:

const Container = styled.div`
    width: 100px;
    height: 100px;
    &:hover #kid 
        background: green;
    
`;

const Kid = styled.div`
    width: 20px;
    height: 20px;
`;

<Container>
    <Kid id="kid" />
</Container>

【讨论】:

谢谢!但是我在使用样式化组件时删除了所有 id 和类 试试 &:hover > * 背景:绿色; 谢谢。你在通过 fcc 吗? @ArslArsl 是的,你可以在我的 github 上看到我完成的项目 这看起来不像是正确的解决方案。 ID 不能与组件一起使用 - 在 DOM 中只能有一个唯一的。并且使用 * 将针对所有元素,因此一旦您更改结构,例如。在中间再添加一个 div,它将停止工作 - 所以最好专门针对 Kid - 就像上面的答案一样。

以上是关于Styled-Components:在父鼠标悬停时指定子元素的样式的主要内容,如果未能解决你的问题,请参考以下文章

通过 CSS 将鼠标悬停在父元素上时显示 :after

鼠标悬停时打开角度材质菜单

如何让元素在父级悬停时显示?

防止在父 Div 上触发 Div 的悬停事件?

导航列表子项在悬停时强制向下父列表

ASP 动态菜单 子菜单 鼠标悬停在子菜单上时消失。