如何在悬停时放大 div 并缩小所有其他 div

Posted

技术标签:

【中文标题】如何在悬停时放大 div 并缩小所有其他 div【英文标题】:How to Scale Up a div on hover and Scale Down all other divs 【发布时间】:2017-11-21 22:43:13 【问题描述】:

我现在一直在尝试解决这个问题,但没有成功。

以下是 6 个圆形 div。当用户将鼠标悬停在其中一个上时,我希望悬停的 div 扩大一点(放大),而所有其他 div 缩小一点(缩小)。

我测试了以下内容:

#container div:hover 
  transform: scale(1.1);


#container div:not(:hover) 
  transform: scale(0.9);

但是,这会使所有 div 的比例保持在 0.9(我希望它们仅在其他 div 之一悬停时缩小。

我还测试了以下内容:

#container div:hover 
  transform: scale(1.1);


#container:hover div:not(:hover) 
  transform: scale(0.9);

但是,由于当整个容器/父元素悬停时,这会缩小所有 div,而不是单个 div,所以这个解决方案也不起作用。

基本上,当一个圆圈(并且只有那个圆圈)悬停时,我希望它扩大而所有其他圆圈缩小。

我非常喜欢纯 CSS 解决方案,但我对 jQuery 持开放态度。

我还附上了一个 jsfiddle,这就是为什么在容器上使用悬停不起作用:https://jsfiddle.net/e5vjL7k7/

【问题讨论】:

【参考方案1】:

scale-upscale-down 创建类并在悬停时为悬停的元素添加放大类,为其兄弟元素添加缩小类。

$("li").hover(function() 
  $(this).toggleClass('scale-up').siblings().toggleClass('scale-down')
)
ul 
  list-style: none;

li 
  width: 50px;
  height: 50px;
  border: 1px solid black;
  display: inline-block;
  transition: all 0.3s ease-in;
  border-radius: 50%;
  margin: 10px;

.scale-up 
  transform: scale(1.2);

.scale-down 
  transform: scale(0.8);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<ul>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
  <li></li>
</ul>

【讨论】:

感谢您的回复,但我不能使用 display: flex,我需要将我的 div 设置为“inline-block”并居中(请参阅我附加的图片)。【参考方案2】:

只使用 html/CSS 试试这个:

HTML

<div class="container">
    <div class="target"></div>
    <div class="target"></div>
    <div class="target"></div>
</div>

CSS

.target 
    width: 300px;
    height: 100px;
    border: 1px solid #000;
    margin: 10px;

.container 
    float: left;

.container:hover .target 
    transform: scale(0.9);
    transition-timing-function: ease-in;
    transition: 0.2s;

.container .target:hover 
    transform: scale(1.1);
    transition-timing-function: ease-in;
    transition: 0.2s;

jsfiddle

编辑:添加缓动

【讨论】:

谢谢,但使用容器正是我试图避免的事情。因为我的容器很大而且我的 div 是圆形的,所以这不起作用(见我的图片) 嗯,它必须坐在什么东西里面,是吗?这只是实际代码如何工作的 jsfiddle 示例。没有理由这不应该工作吗?无论容器和 div 形状的外形尺寸如何?另外,您的示例代码中有容器吗?哈哈。你从来没有说过你不想要一个容器。 我有一个容器,但是在这里,您注意到它们在您将鼠标悬停在 div 上之前是如何缩小的吗?在您的示例中很难看到,因为它们是矩形,但在我的情况下,在容器上应用悬停会使 div 缩小,即使没有悬停:jsfiddle.net/e5vjL7k7 好的,我知道你的问题是什么。 很遗憾,我使用了 Nenad Vracar 的解决方案

以上是关于如何在悬停时放大 div 并缩小所有其他 div的主要内容,如果未能解决你的问题,请参考以下文章

当用户在 Mozilla Firefox 上放大和缩小页面时,如何保持 <div> 的大小不变

使用 jQuery 在悬停/退出时展开/缩小 div

如果图像未悬停,则隐藏 div

css里如何让div水平平均分布以至于放大缩小界面都不会改变位置

放大和缩小 d3 地图时如何查询数据集?

悬停时,DIV 扩展并与其他对象重叠