【问题标题】:Apply css style to element when its container/parent element is hovered Angular当其容器/父元素悬停时将css样式应用于元素
【发布时间】:2018-08-09 06:33:53
【问题描述】:

当我将鼠标悬停在一个元素的容器上时,我希望该元素通过 css/scss 接收视觉变化。

要求: - 需要在子组件或 sass 文件中发生。无法了解父子关系。 - sass css 或角度组件内

我已经尝试过 Angular 的主机监听器装饰器,但这只是主机元素而不是它的父元素。

我尝试过 :host 和 :host-context 选择器,但与主机侦听器有类似的经验。

任何建议将不胜感激。

编辑:为了形象化,我可以在一个大正方形元素中放置一个小正方形元素,然后当小正方形元素与大正方形元素的区域不重叠的空间悬停时,小正方形接收一个样式。

澄清:

【问题讨论】:

  • 子元素(示例中的小方块)是 Angular 组件还是只是 HTML 元素?
  • @ConnorsFan 子元素是一个角度组件。
  • 为此,仅使用 CSS,您需要在 较大的正方形 内添加 2 个元素,一个填充较大的正方形,获得悬停规则,而较小的正方形。这里的主要关键是小方块不能是具有悬停规则的那个的孩子。
  • 这是一个修改后的版本,可以更好地表达我的意思:jsfiddle.net/6egc7f21/1 ...正如您所见,悬停与容器无关
  • 也许这两个堆栈闪电中的一个可以满足您的要求:stackblitz1stackblitz2。我是用事件监听器来做的,因为你想控制来自孩子的一切,而且 CSS 中没有“父”选择器。

标签: css angular sass


【解决方案1】:

在小方块的HTML中,用div包裹起来:

<div class="small-square">
  // rest of HTML
</div>

在小方块的CSS中:

.small-square:hover {
  // styles
}

你为什么不能这样做?对不起,如果我不完全理解这个问题。

更新:

您可以在全局样式表 (AKA styles.css) 中执行此操作:

.large-square:hover .small-square {
  // styles for small square when large square is hovered
}

更新 2:

不确定主机上下文是否支持使用 :hover,如下所示:

:host-context(.large-square:hover) .small-square {
  // styles for small square when large square is hovered
}

:host-context(*:hover) .small-square {
  // styles for small square when large square is hovered
}

如果没有,那么我认为您别无选择,只能使用全局样式表。

【讨论】:

  • 感谢您的回复! “小方块”可以包含许多包含元素。大小将不得而知。孩子或“小方块”不应该知道它的容器。然而,当容器悬停时,孩子应该收到一个样式。
  • (1) 不管它的包含元素是什么,它在悬停时仍然应该改变颜色? (2)我看不到尺寸的相关性(3)当父容器悬停时,孩子应该收到样式吗?或者当孩子悬停时,孩子应该收到样式?
  • 当父元素悬停时,子元素应该接收样式。这不能在父级中实现。查看我添加到帖子中的图片,谢谢!
  • 我想避免全局样式。实施应在子级内。
  • 正如我上面评论的,使用全局选择器,例如*:hover .smaller_square {background: red;} ...也许与子选择器组合在一起&gt;
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-11-05
  • 2011-07-01
  • 2018-05-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-10-28
相关资源
最近更新 更多