You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用MUI的styled实现Hover时缩放当前组件并缩小其他组件?

实现思路与代码示例

可以通过styled-components结合父容器的样式控制来实现这个效果,核心是利用父容器hover状态下的子元素样式规则,配合CSS的:not(:hover)选择器区分当前hover的组件和其他组件。

步骤1:创建父容器组件

给四个MyComponent套一个父容器,用来统一管理hover状态下的子组件样式:

const Container = styled('div')(({ theme }) => ({
  display: 'flex', // 根据布局需求调整,比如横向排列用flex,纵向用block
  gap: theme.spacing(2), // 可选,调整组件间间距
  width: '100%', // 确保父容器覆盖所有子组件的hover范围
}));

步骤2:修改MyComponent的样式

调整原有hover逻辑,加入过渡动画让效果更流畅:

const MyComponent = styled('div')(({ theme }) => ({
  // 保留你的原有基础样式
  // ... some styles

  // 添加过渡动画,避免缩放效果突兀
  transition: 'transform 0.3s ease-in-out',
  
  // 父容器内未被hover的子组件统一缩小
  '&:not(:hover)': {
    transform: 'scale(0.8)', // 缩小比例可按需调整
  },
  
  // 当前被hover的组件放大
  '&:hover': {
    transform: 'scale(1.2)',
    marginRight: '20px', // 保留你原本的margin需求
  },
}));

步骤3:组件使用方式

将四个MyComponent放入父容器中:

<Container>
  <MyComponent>some images...</MyComponent>
  <MyComponent>some images...</MyComponent>
  <MyComponent>some images...</MyComponent>
  <MyComponent>some images...</MyComponent>
</Container>

原理说明

当鼠标悬停在任意一个MyComponent上时,父容器Container也会处于hover状态,此时所有子MyComponent都会触发:not(:hover)的缩小样式,唯独当前被hover的组件会优先应用自身的:hover放大样式,最终实现“hover组件放大,其余组件缩小”的交互效果。

内容的提问来源于stack exchange,提问作者Leo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.07 15:30:53