【问题标题】:Expand absolute positioned circle from center从中心展开绝对定位的圆
【发布时间】:2023-12-25 01:38:01
【问题描述】:

我有绝对定位的 div,它代表一个圆形通过更圆的边框。当 div 发生悬停事件时,我需要扩展这个圆圈,问题是圆圈向右/下方向扩展,我需要它从中心扩展。这是因为 top/left 参数具有固定值而发生的,我设法使用负的 top/left margin 克服了这个问题。最后一个问题是我想添加从正常状态到扩展状态的平滑过渡,这会产生不好的结果。 HTML 代码:

<div class="circle"></div>

CSS 代码:

.circle {

  position: absolute;
  left: 150px;
  top: 150px;
  border: 5px solid #000;
  -webkit-border-radius: 50%;
  -moz-border-radius: 50%;
  border-radius: 50%;
  width: 40px;
  height: 40px;
  margin-left: -20px;
  margin-top: -20px;
  -webkit-transition: width 0.5s, height 0.5s;
  -moz-transition: width 0.5s, height 0.5s;
  -o-transition: width 0.5s, height 0.5s;
  transition: width 0.5s, height 0.5s;
}
.circle:hover
{
  width: 60px;
  height: 60px;
   margin-left: -30px;
  margin-top: -30px;
}

工作示例:https://jsfiddle.net/ArturoO/4qLr0tc2/5/

如果您删除过渡规则,那么它会起作用,但我需要动画发生。有什么想法吗?

【问题讨论】:

  • 只需在过渡中添加边距,或者像这样进行一般过渡(对于所有道具):jsfiddle.net/azizn/1c9ypdew 我不知道为什么你需要在绝对定位的元素上使用边距......

标签: html css css-transitions


【解决方案1】:

使用平移变换而不是边距

.circle {
  position: absolute;
  left: 150px;
  top: 150px;
  border: 5px solid #000;
  border-radius: 50%;
  width: 40px;
  height: 40px;
  transform: translate(-50%, -50%);
  transition: width 0.5s, height 0.5s;
}
.circle:hover {
  width: 60px;
  height: 60px;
}
&lt;div class="circle"&gt;&lt;/div&gt;

【讨论】:

  • 为什么还要使用translate呢?这个动画可以通过使用transform: scale(1.5)来实现。没有?
  • 不...实际上并没有使元素变大...只是使其看起来变大。
  • 是的,没错。但如果这只是视觉效果,那transform会更好吗?
最近更新 更多