【问题标题】:chaining a:not(x)::before selector链接 a:not(x)::before 选择器
【发布时间】:2021-11-08 23:45:49
【问题描述】:

我有一个带有 CSS 动画链接的导航(在元素顶部画一条线)

a, a.nav-link{
    text-decoration: none;
    color: #594922;
}
a.nav-link:hover{
    color: #4dd897 
}
a.nav-link::before{
    content: '';
    height: 1px;
    background: #594922;
    display: block;
    transform: scale(0, 1);
    transition: transform 0.4s cubic-bezier(1, 0, 0, 1)
}
a.nav-link:hover::before {
  transform-origin: right top;
  transform: scale(1, 1)
}
<ul>
  <li>
    <a class="nav-link">abcde</a>
  </li>
  <li>
    <a class="nav-link">b</a>
  </li>
  <li>
    <a class="nav-link">c</a>
  </li>
</ul>

我现在要做的是忽略第一个链接上的动画,我尝试添加 :not(:first-of-type) 但它破坏了整个动画

a, a.nav-link{
    text-decoration: none;
    color: #594922;
}
a.nav-link:hover{
    color: #4dd897 
}
a.nav-link:not(:first-of-type)::before{
    content: '';
    height: 1px;
    background: #594922;
    display: block;
    transform: scale(0, 1);
    transition: transform 0.4s cubic-bezier(1, 0, 0, 1)
}
a.nav-link:hover::before {
  transform-origin: right top;
  transform: scale(1, 1)
}
<ul>
  <li>
    <a class="nav-link">abcde</a>
  </li>
  <li>
    <a class="nav-link">b</a>
  </li>
  <li>
    <a class="nav-link">c</a>
  </li>
</ul>

感谢您的帮助,谢谢

【问题讨论】:

  • 是你要选择的第一个li,而不是li里面的第一个a
  • 当然a.nav-link:not(:first-of-type) 会破坏一切,因为这样,您的没有 个链接将不再被选中。它们都是其各自父级(即 LI)中该类型的第一个(也是最后一个也是唯一的)元素。

标签: css pseudo-element pseudo-class


【解决方案1】:

您需要选择不是第一个的每个 li 元素并将样式应用于其中的导航链接。只需将 li:not(:first-of-type) 放在您的 CSS 选择器前面,如下所示。你也可以使用 li:not(:first-child)。原因是“a”元素不是彼此的兄弟,它们被包裹在 li 元素中。 li 元素是彼此的兄弟,因此当您将 :first-of-type 放在 a 元素上时,它始终只是 li 内部的一个元素,这就是为什么它会为所有元素移除它,而不仅仅是第一个一个。

li:not(:first-of-type) a.nav-link::before{
content: '';
height: 1px;
background: #594922;
display: block;
transform: scale(0, 1);
transition: transform 0.4s cubic-bezier(1, 0, 0, 1)}

li:not(:first-of-type) a.nav-link:hover::before {transform-origin: right top;transform: scale(1, 1)}

【讨论】:

  • 我试过了,还是破坏了效果:(
  • 其实我才意识到li:not(:first-of-type) .nav-link::before 有效,只需要删除a
  • 你还必须在这些行前面加上 a.nav-link:hover::before { transform-origin: right top;变换:比例(1, 1)}
猜你喜欢
  • 2012-07-25
  • 1970-01-01
  • 2016-07-24
  • 2018-06-22
  • 2011-07-29
  • 2010-10-16
  • 1970-01-01
  • 2015-08-26
  • 2014-05-04
相关资源
最近更新 更多