CSS :last-child AND :hover 在 ul 中的链接上
Posted
技术标签:
【中文标题】CSS :last-child AND :hover 在 ul 中的链接上【英文标题】:CSS :last-child AND :hover on an a link in a 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 的唯一孩子,但由于你的问题是题外话,我投票结束:寻求调试帮助的问题(“为什么这段代码不工作吗?") 必须包含所需的行为、特定问题或错误以及在问题本身中重现它所需的最短代码。 (外部链接可能会失效,这是为未来用户提供信息的存储库) 【参考方案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 的一些额外信息,所有<a>
元素都是它们的 <li>
元素的“最后一个孩子”,所以它们都变成了红色。
谢谢 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;
【讨论】:
以上是关于CSS :last-child AND :hover 在 ul 中的链接上的主要内容,如果未能解决你的问题,请参考以下文章