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

如何为同一元素应用两个transform属性及实现图片Hover缩放效果?

问题解答

1. 能否为同一元素应用两个transform属性?

可以,但不能分开声明两个transform属性(后声明的会覆盖前一个),正确方式是在同一个transform中用空格分隔多个变换函数,示例:

.element {
  transform: scale(1.1) rotate(10deg);
}

2. 解决悬停图片缩放的问题

你的SCSS代码失效是因为选择器逻辑错误:&__img:hover &__img:not(:hover)编译后是.gallery__img:hover .gallery__img:not(:hover),它只会匹配被hover的img内部的子级img,但你的HTML中所有img是同级关系,并非嵌套,所以无法选中目标元素。

方案1:使用:has()选择器(现代浏览器推荐)

利用:has()检测容器内是否有被hover的子元素,统一控制所有图片的缩放,再单独覆盖被hover图片的样式:

.gallery {
  &__img {
    transition: transform 0.3s ease; // 添加过渡动画提升交互体验
  }

  // 容器内存在被hover的item时,所有图片缩小
  &:has(&__item:hover) &__img {
    transform: scale(0.9);
  }

  // 被hover的item中的图片放大,覆盖缩小样式
  &__item:hover &__img {
    transform: scale(1.1);
  }
}

方案2:兼容旧浏览器(不依赖:has())

通过兄弟选择器控制前后同级元素,需配合容器的弹性/网格布局:

.gallery {
  display: flex; // 或grid,根据布局需求调整
  gap: 1rem; // 可选,增加图片间距

  &__img {
    transition: transform 0.3s ease;
  }

  // 被hover的item之后的所有兄弟item内的图片缩小
  &__item:hover ~ &__item &__img {
    transform: scale(0.9);
  }

  // 前面存在被hover兄弟的item内的图片缩小
  &__item:has(~ &__item:hover) &__img {
    transform: scale(0.9);
  }

  // 被hover的item内的图片放大
  &__item:hover &__img {
    transform: scale(1.1);
  }
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 21:25:22