css 悬停时影响两侧相邻的div [复制]

wh6knrhe  于 2023-06-25  发布在  其他
关注(0)|答案(1)|浏览(108)

此问题已在此处有答案

Is there a "previous sibling" selector?(33答案)
昨天关门了。
我有一个导航栏.navbar,它有7个直接子项navbar-item
目前,我使它当你悬停在一个导航栏项目,它会增加它的宽度和高度20px。但我想要的是,当你悬停在其中一个项目上时,它会增加它的高度和宽度20px,它会增加它的直接相邻divs,(所以左右divs,除非它是在边缘),宽度和高度10px。
我想要的一个很好的例子是macOS应用程序栏效果。
代码:

body {
  background-color: #D3D3D3;
}

.navbar {
    width: 600px;
    height: 50px;
    border-radius: 999px;
    background-color: white;
    padding: 5px;
    display: flex;
    align-items: center;
    justify-content: space-around;
}

.navbar-item {
    border: 1px solid black;
    height: 50px;
    width: 50px;
    border-radius: 50%;
}

.navbar-item:hover{
    width: 70px;
    height: 70px;
}
<div class="navbar">
  <div class="navbar-item"></div>
  <div class="navbar-item"></div>
  <div class="navbar-item"></div>
  <div class="navbar-item"></div>
  <div class="navbar-item"></div>
  <div class="navbar-item"></div>
  <div class="navbar-item"></div>
</div>

我尝试使用.navbar-item:hover + .navbar-item,但这只是改变了实际悬停在其上的div右侧的宽度和高度。
我读了这个问题:How to affect other elements when one element is hovered
但它没有回答我的问题。

whlutmcx

whlutmcx1#

:has()选择器可以在这里帮助您。我使用的是比例而不是宽度/高度,但与主要技巧无关

body {
  background-color: #D3D3D3;
}

.navbar {
  width: 600px;
  height: 50px;
  border-radius: 999px;
  background-color: white;
  padding: 5px;
  display: flex;
  align-items: center;
  justify-content: space-around;
}

.navbar-item {
  border: 1px solid black;
  height: 50px;
  width: 50px;
  border-radius: 50%;
  transition: .3s;
}

.navbar-item:hover { /* main element */
  scale: 1.5;
}
/* direct neighbors */
.navbar-item:hover + *,
.navbar-item:has(+ .navbar-item:hover){
  scale: 1.2;
}
<div class="navbar">
  <div class="navbar-item"></div>
  <div class="navbar-item"></div>
  <div class="navbar-item"></div>
  <div class="navbar-item"></div>
  <div class="navbar-item"></div>
  <div class="navbar-item"></div>
  <div class="navbar-item"></div>
</div>

相关问题