css - 我该如何使用:has() selector to add animation to preview sibling when hovering over a specific element?

标签 css css-selectors

我有一个包含三张文章卡的代码,每张都包含图像和描述。当我将鼠标悬停在特定卡片上时,我想模糊预览和下一张同级卡片。

我尝试使用 ~ 选择器,但它只选择下一个同级。

.articles>*:hover ~ * {
    filter: blur(1px);
}

然后,我尝试使用 :has() 选择器来选择预览同级,但没有成功。

也许我做错了什么?

.articles>*:hover:has(~ .articles>*) {
    filter: blur(1px);
}

@import url("https://fonts.googleapis.com/css2?family=Work+Sans:wght@400;800&display=swap");
body {
  font-family: "Work sans", Arial, Monospace, sans-serif;
  background-color: #282a3a;
}

h3 {
  font-weight: 800;
  font-size: clamp(1.13rem, calc(0.86rem + 1.05vw), 1.65rem);
  margin-block: 1rem;
  color: #10cab7;
}

p {
  font-weight: 400;
  font-size: calc(1rem + 1px);
  color: #829299;
}

.articles {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  padding: 4rem;
  gap: 2rem;
  cursor: pointer;
}

.articles>* {
  transition: all 0.5s ease;
  background-color: #181823;
  border-radius: 4px;
  box-shadow: 2px 2px 2px 1.5px rgba(0, 0, 0, 0.306);
}

.articles>*:hover {
  box-shadow: 0px 2px 2px 3px rgba(0, 0, 0, 0.306);
  transform: scale(1.03);
}


/* add blur to all next sibling article cards when you hover over on a specific card */

.articles>*:hover~* {
  filter: blur(1px);
}


/* add blur to all preview sibling article cards when you hover over on a specific card */

.articles>*:hover:has(~.articles>*) {
  filter: blur(1px);
}

.articles img {
  display: block;
  max-width: 100%;
  border-bottom: solid 3px;
  border-top-right-radius: 4px;
  border-top-left-radius: 4px;
  -webkit-border-image: linear-gradient( to left, rgb(5, 60, 64), rgb(0, 255, 157)) 27 / 35px;
  -moz-border-image: linear-gradient(to left, rgb(5, 60, 64), rgb(0, 255, 157)) 27 / 35px;
  -ms-border-image: linear-gradient(to left, rgb(5, 60, 64), rgb(0, 255, 157)) 27 / 35px;
  border-image: linear-gradient(to left, rgb(5, 60, 64), rgb(0, 255, 157)) 27 / 35px;
  border-image-width: 0px 0px 4px auto;
}

.articles .article-desc {
  padding: 2rem;
  border-bottom-left-radius: 4px;
  border-bottom-right-radius: 4px;
}
<div class="articles bkg-gray">

  <div class="article-1">
    <img src="https://i.imgur.com/nzK9N7l.png" alt="services">

    <div class="article-desc">
      <h3>
        Graphic Design
      </h3>
      <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Officia, velit? Inventore voluptas quis eveniet expedita numquam pariatur tempora.</p>
    </div>
  </div>
  <div class="article-2">
    <img src="https://i.imgur.com/5EOzUIQ.png">

    <div class="article-desc">
      <h3>
        Graphic Design
      </h3>
      <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Officia, velit? Inventore voluptas quis eveniet expedita numquam pariatur tempora.</p>
    </div>
  </div>
  <div class="article-3">
    <img src="https://i.imgur.com/7cnLyBD.png" alt="services">
    <div class="article-desc">
      <h3>
        Graphic Design
      </h3>
      <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Officia, velit? Inventore voluptas quis eveniet expedita numquam pariatur tempor.</p>
    </div>

  </div>
</div>

最佳答案

你可以使用这个CSS:

.articles:hover > *:not(:hover) {
    filter: blur(1px);
}

当您用鼠标输入 .articles 时,所有文章都会变得模糊,但您将鼠标悬停在其上的文章除外。不幸的是,当您将鼠标悬停在两篇文章之间的间隙时,它也会模糊所有文章。

@import url("https://fonts.googleapis.com/css2?family=Work+Sans:wght@400;800&display=swap");
body {
  font-family: "Work sans", Arial, Monospace, sans-serif;
}

h3 {
  font-weight: 800;
  font-size: clamp(1.13rem, calc(0.86rem + 1.05vw), 1.65rem);
  margin-block: 1rem;
  color: #10cab7;
}

p {
  font-weight: 400;
  font-size: calc(1rem + 1px);
  color: #2c4755;
}

.articles {
  display: grid;
  grid-template-columns: repeat(auto-fit, minmax(300px, 1fr));
  padding: 4rem;
  gap: 2rem;
  cursor: pointer;
}

.articles>* {
  transition: all 0.5s ease;
  border-radius: 4px;
  box-shadow: 2px 2px 2px 1.5px rgba(0, 0, 0, 0.306);
}

.articles>*:hover {
  box-shadow: 0px 2px 2px 3px rgba(0, 0, 0, 0.306);
  transform: scale(1.03);
}

.articles:hover > *:not(:hover) {
  filter: blur(1px);
}

.articles img {
  display: block;
  max-width: 100%;
  border-bottom: solid 3px;
  border-top-right-radius: 4px;
  border-top-left-radius: 4px;
  -webkit-border-image: linear-gradient( to left, rgb(5, 60, 64), rgb(0, 255, 157)) 27 / 35px;
  -moz-border-image: linear-gradient(to left, rgb(5, 60, 64), rgb(0, 255, 157)) 27 / 35px;
  -ms-border-image: linear-gradient(to left, rgb(5, 60, 64), rgb(0, 255, 157)) 27 / 35px;
  border-image: linear-gradient(to left, rgb(5, 60, 64), rgb(0, 255, 157)) 27 / 35px;
  border-image-width: 0px 0px 4px auto;
}

.articles .article-desc {
  padding: 2rem;
  border-bottom-left-radius: 4px;
  border-bottom-right-radius: 4px;
}
<div class="articles bkg-gray">

  <div class="article-1">
    <img src="https://i.imgur.com/nzK9N7l.png" alt="services">

    <div class="article-desc">
      <h3>
        Graphic Design
      </h3>
      <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Officia, velit? Inventore voluptas quis eveniet expedita numquam pariatur tempora.</p>
    </div>
  </div>
  <div class="article-2">
    <img src="https://i.imgur.com/5EOzUIQ.png">

    <div class="article-desc">
      <h3>
        Graphic Design
      </h3>
      <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Officia, velit? Inventore voluptas quis eveniet expedita numquam pariatur tempora.</p>
    </div>
  </div>
  <div class="article-3">
    <img src="https://i.imgur.com/7cnLyBD.png" alt="services">
    <div class="article-desc">
      <h3>
        Graphic Design
      </h3>
      <p>Lorem ipsum dolor sit amet consectetur, adipisicing elit. Officia, velit? Inventore voluptas quis eveniet expedita numquam pariatur tempor.</p>
    </div>

  </div>
</div>

关于css - 我该如何使用:has() selector to add animation to preview sibling when hovering over a specific element?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/75946944/

相关文章:

javascript - 我应该如何在 IE 6 中通过背景重复使用透明 png?

javascript - 如何使 R 中的粘性导航栏 Shiny ?

html - 当我在过滤器中使用 requestdispatcher 重定向页面时,CSS 内容未应用于页面

html - css 动画状态栏不从 0 加载到它的值

css - 覆盖父级 :hover on child :hover

css - 如何选择另一个 ID 之前的 ID

当长度未知时,CSS nth-child 选择除最后一个元素之外的所有元素

html - 为所有浏览器设置带有背景图像的 HTML 表单样式

jquery - 有没有类似:eq() in jQuery?的标准CSS选择器

java - 使用 Java/Selenium - 正在运行多少个动画