【问题标题】:CSS :last-child AND :hover on an a link in a ulCSS :last-child AND :hover 在 ul 中的链接上
【发布时间】:2019-04-25 06:24:12
【问题描述】:

我正在为导航菜单的最后一个子项设置样式,我似乎可以使用以下代码完成此操作:

.aston-menu-light ul > li:last-child {
    border:2px solid blue;
    border-radius: 50px;
    padding:0 20px 0 20px;
} 

.aston-menu-light ul > li > ul > li:last-child {
    border:none !important;
    padding:0 !important;
} 

.aston-menu-light ul > li:last-child:hover {
    background-color:#ffff;
    -webkit-transition: all .5s;
    -o-transition: all .5s;
    transition: all .5s;
} 

当我尝试将<a> 定位在悬停的最后一个孩子上时,麻烦就来了。我正在使用这个:

.aston-menu-light ul > li > a:last-child:hover {
    color:red !important;
} 

但它似乎设置了所有<a> 标签的样式,而不仅仅是最后一个孩子。我试过变体,例如:ul > li a,但我似乎无法让它正常工作。

我这里有一个 Codepen:https://codepen.io/shaun-taylor/pen/LXdGGN

我猜这个链接的主要目标是仅将顶层的最后一个链接变为红色,当您将鼠标悬停在它上面时 - 感谢您阅读!

【问题讨论】:

  • 我猜你所有的 a 都是最后一个孩子,因为他们可能是 li 的唯一孩子,但由于你的问题是题外话,我投票结束:寻求调试帮助的问题(“为什么这段代码不工作吗?") 必须包含所需的行为、特定问题或错误以及在问题本身中重现它所需的最短代码。 (外部链接可能会失效,这是为未来用户提供信息的存储库)

标签: html css css-selectors hover href


【解决方案1】:

你应该改变

.aston-menu-light ul > li > a:last-child:hover {
    color:red !important;
}

.aston-menu-light>ul>li:last-child > a:hover {
    color:red !important;
} 

/* CSS Document */


a {
	color: black;
}

nav {
	margin: 50px 0;

}

nav ul {
	padding: 0;
  margin: 0;
	list-style: none;
	position: relative;
	}
	
nav ul li {
	display:inline-block;
}

nav a {
	display:block;
	padding:0 10px;	
	color:#black;
	font-size:20px;
	line-height: 60px;
	text-decoration:none;
}


/* Hide Dropdowns by Default */
nav ul ul {
	display: none;
	position: absolute; 
	top: 60px; /* the height of the main nav */
}
	
/* Display Dropdowns on Hover */
nav ul li:hover > ul {
	display:inherit;
}
	
/* Fisrt Tier Dropdown */
nav ul ul li {
	width:170px;
	float:none;
	display:list-item;
	position: relative;
}

/* Second, Third and more Tiers	*/
nav ul ul ul li {
	position: relative;
	top:-60px; 
	left:170px;
}

	
/* Change this in order to change the Dropdown symbol */
li > a:after { content:  ' +'; }
li > a:only-child:after { content: ''; }

.aston-menu-light ul > li:last-child {
	border:2px solid blue;
	border-radius: 50px;
	padding:0 20px 0 20px;
} 

.aston-menu-light ul > li > ul > li:last-child {
	border:none !important;
	padding:0 !important;
} 

.aston-menu-light ul > li:last-child:hover {
	background-color:#ffff;
	-webkit-transition: all .5s;
	-o-transition: all .5s;
	transition: all .5s;
} 

.aston-menu-light>ul>li:last-child > a:hover {
	color:red !important;
} 
<nav class="aston-menu-light">
    <ul>
        <li><a href="#">link</a>
          <!-- First Tier Drop Down -->
          <ul>
              <li><a href="#">link</a></li>
              <li><a href="#">link</a></li>
              <li><a href="#">link</a></li>
          </ul>
        </li>
        <li><a href="#">link</a>
          <!-- First Tier Drop Down -->
          <ul>
              <li><a href="#">link</a></li>
              <li><a href="#">link</a></li>
              <li><a href="#">link</a></li>
          </ul>        
        </li>
        <li><a href="#">link</a></li>
        <li><a href="#">link</a>
          <!-- First Tier Drop Down -->
          <ul>
              <li><a href="#">link</a></li>
              <li><a href="#">link</a></li>
              <li><a href="#">link</a></li>
          </ul>
        </li>
        <li><a href="#">link</a>
          <!-- First Tier Drop Down -->
          <ul>
              <li><a href="#">link</a></li>
              <li><a href="#">link</a></li>
              <li><a href="#">link</a></li>
          </ul>
        </li>
        <li><a href="#">link</a></li>
        <li><a href="#">link</a></li>
    </ul>
</nav>

【讨论】:

  • 是的,对于 Shaun 的一些额外信息,所有 &lt;a&gt; 元素都是它们的 &lt;li&gt; 元素的“最后一个孩子”,所以它们都变成了红色。
  • 谢谢 AboAlimk!完美 - 我明白我现在做错了什么!另外,谢谢杰里米的解释:)
【解决方案2】:

使用这个:

.aston-menu-light ul > li:last-child a:hover {
  color:red;
}

【讨论】:

    【解决方案3】:

    你应该重写

    .aston-menu-light ul > li > a:last-child:hover {
      color:red !important;
    } 
    

    .aston-menu-light ul > li:last-child > a:hover {
      color:red;
    } 
    

    您做错的是在所有li 元素中,a 元素始终是最后一个子元素!因此,在所有这些中,当您悬停时它会变成红色。 您需要的是最后一个 li 元素,因此在 CSS 中使用 li:last-child

    另外,没有必要使用!important,因为这个 CSS 选择器比仅仅更具体

    a {
      color: black;
    }
    

    反正它会是红色的。

    【讨论】:

      【解决方案4】:

      这样做只是为了简化它。

      .aston-menu-light ul li:last-child a:hover {
          color:red !important;
      }
      

      【讨论】:

        猜你喜欢
        • 2012-02-26
        • 2012-07-04
        • 2012-03-02
        • 1970-01-01
        • 2017-01-31
        • 1970-01-01
        • 2021-09-11
        • 2012-05-20
        • 2010-12-13
        相关资源
        最近更新 更多