鼠标悬停卡片scale缩放时右侧图片偏移问题求助
解决卡片hover缩放时右侧图片上移的问题
核心问题分析
- 边框尺寸突变:hover时新增3px边框,导致卡片整体尺寸变大,内部flex布局的
space-between会重新分配空间,底部图片因此被挤压上移 - 缩放渲染偏移:默认缩放原点虽为中心,但元素布局的微小变化在缩放时会被放大,进一步加剧视觉上的偏移感
修复方案
- 给卡片默认添加透明边框,hover时仅修改边框颜色,彻底避免尺寸突变
- 显式设置
transform-origin: center,确保缩放始终以卡片中心为基准 - 固定内部容器的布局规则,防止空间分配异常
修改后的完整代码
CSS 部分
/* GÉNÉRAL */ :root { --color-accent: #4e6eff; --color-accent-dark: #3a56d3; --color-black: #252728; --color-white: #fdfdff; --color-blacker: #0c0d0d; } html { scroll-behavior: smooth; scroll-padding-top: 0; } body::-webkit-scrollbar { display: none; } * { font-family: Arial, Helvetica, sans-serif; margin: 0; padding: 0; box-sizing: border-box; } *::selection { background-color: #4e6effba; } body { background-color: var(--color-black); color: var(--color-white); } /* COMMON STYLE */ .bg-accent { background-color: var(--color-accent); color: var(--color-white); } a { color: var(--color-white); text-decoration: none; } img { width: 100%; } /* */ .select-membres__row--2 { display: flex; justify-content: space-evenly; gap: 2rem; padding: 2rem 0; } .membre-carte { display: flex; padding: 1em; width: 400px; height: 200px; gap: 8%; border-radius: 25px; background-color: var(--color-blacker); text-align: center; scale: 1; transition: scale 100ms ease-out, border-color 150ms ease; border: 3px solid transparent; transform-origin: center; } .membre-carte:hover { scale: 1.1; transition: scale 150ms cubic-bezier(0.22, 0.47, 0.35, 0.92), border-color 150ms ease; border-color: var(--color-accent); } .membre-carte>* { width: 50%; } .membre-carte .carte-pp { border-radius: calc(25px - 0.5em); height: 100%; object-fit: cover; } .perso-cont { display: flex; flex-direction: column; justify-content: space-between; height: 100%; } .carte__nom { font-size: 1.2rem; } .perso-cont .img-cont { width: 120px; margin-inline: auto; display: flex; flex-shrink: 0; }
HTML 部分(保持原结构即可)
<div class="select-membres__row--2"> <a href="#"> <div class="membre-carte"> <img src="https://source.unsplash.com/random/50x50" class="carte-pp"> <div class="perso-cont"> <h4 class="carte__nom">image 1</h4> <p class="carte__surnom">lorem</p> <div class="img-cont"> <img src="https://source.unsplash.com/random/40x40"> </div> </div> </div> </a> <a href="#"> <div class="membre-carte"> <img src="https://source.unsplash.com/random/50x50" class="carte-pp"> <div class="perso-cont"> <div> <h4 class="carte__nom">image 2</h4> <p class="carte__surnom">lorem</p> </div> <div class="img-cont"> <img src="https://source.unsplash.com/random/40x40"> </div> </div> </div> </a> </div>
额外优化点
- 父容器添加
gap和padding,防止卡片缩放时互相重叠 - 左侧图片设置
object-fit: cover,确保固定尺寸内保持比例 - 底部图片容器添加
flex-shrink: 0,避免被布局压缩
内容的提问来源于stack exchange,提问作者auTiStiC WizArD
相关产品推荐
相关产品推荐

