如何 select parents 与 CSS 同胞?
How to select parents sibling with CSS?
当我悬停在第一个 <li>
上时,我想更改 .arrow-tip
class 的 background-color
。你能帮我找到正确的 CSS 规则吗?
HTML:
<nav>
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
</nav>
<div class="arrow-tip">A triangle tip for the nav menu</div>
CSS:
nav > ul > li:nth-child(1):hover ~ .arrow-tip {
background-color: #FF0;
}
我想要一个纯粹的 CSS 解决方案。
不,目前CSS不可能,read this。
不过,我想你可以做这样的事情 JsFiddle。
ul {
list-style: none;
padding: 0;
width: 45px;
text-align: center;
position: relative;
}
li {
background: silver;
margin: 0 0 5px;
}
li:after {
content:"be";
font-size: 2em;
position: absolute;
left: 10px;
top: 35px;
}
li:hover:after {
z-index: 1;
}
li:nth-child(1):hover:after {
color: red;
}
li:nth-child(2):hover:after {
color: blue;
}
<ul>
<li>A</li>
<li>B</li>
</ul>
编辑:这是 JsFiddle OP 真正想要实现的目标。
感兴趣的可以关注上面的评论
.menu {
list-style: none;
padding: 0;
}
.menu > li {
position: relative;
background: fuchsia;
width: 100px;
height: 20px;
display: inline-block;
vertical-align: top;
}
.submenu {
position: absolute;
top: 0;
left: 0;
width: 100%;
list-style: none;
padding: 30px 0 0;
margin: 0;
}
.submenu > li {
background: fuchsia;
display: block;
}
.submenu > li:before {
content: "";
position: absolute;
top: 20px;
left: 50%;
margin-left: -10px;
width: 0;
height: 0;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-bottom: 10px solid aqua;
z-index: -1;
}
/* hide */
.submenu {
display: none;
}
/* hover */
.menu > li:hover {
background: aqua;
}
.menu > li:hover > ul {
display: block;
}
.submenu > li:hover {
background: aqua;
}
.submenu li:not(:nth-child(1)):hover:before {
border-bottom: 10px solid fuchsia;
z-index: 0;
}
<ul class="menu">
<li>one
<ul class="submenu">
<li>a</li>
<li>b</li>
<li>x</li>
<li>y</li>
<li>z</li>
</ul>
</li>
<li>two
<ul class="submenu">
<li>c</li>
<li>d</li>
</ul>
</li>
<li>three
<ul class="submenu">
<li>e</li>
<li>f</li>
</ul>
</li>
<li>four
<ul class="submenu">
<li>g</li>
<li>h</li>
</ul>
</li>
</ul>
当我悬停在第一个 <li>
上时,我想更改 .arrow-tip
class 的 background-color
。你能帮我找到正确的 CSS 规则吗?
HTML:
<nav>
<ul>
<li>Item 1</li>
<li>Item 2</li>
</ul>
</nav>
<div class="arrow-tip">A triangle tip for the nav menu</div>
CSS:
nav > ul > li:nth-child(1):hover ~ .arrow-tip {
background-color: #FF0;
}
我想要一个纯粹的 CSS 解决方案。
不,目前CSS不可能,read this。
不过,我想你可以做这样的事情 JsFiddle。
ul {
list-style: none;
padding: 0;
width: 45px;
text-align: center;
position: relative;
}
li {
background: silver;
margin: 0 0 5px;
}
li:after {
content:"be";
font-size: 2em;
position: absolute;
left: 10px;
top: 35px;
}
li:hover:after {
z-index: 1;
}
li:nth-child(1):hover:after {
color: red;
}
li:nth-child(2):hover:after {
color: blue;
}
<ul>
<li>A</li>
<li>B</li>
</ul>
编辑:这是 JsFiddle OP 真正想要实现的目标。
感兴趣的可以关注上面的评论
.menu {
list-style: none;
padding: 0;
}
.menu > li {
position: relative;
background: fuchsia;
width: 100px;
height: 20px;
display: inline-block;
vertical-align: top;
}
.submenu {
position: absolute;
top: 0;
left: 0;
width: 100%;
list-style: none;
padding: 30px 0 0;
margin: 0;
}
.submenu > li {
background: fuchsia;
display: block;
}
.submenu > li:before {
content: "";
position: absolute;
top: 20px;
left: 50%;
margin-left: -10px;
width: 0;
height: 0;
border-left: 10px solid transparent;
border-right: 10px solid transparent;
border-bottom: 10px solid aqua;
z-index: -1;
}
/* hide */
.submenu {
display: none;
}
/* hover */
.menu > li:hover {
background: aqua;
}
.menu > li:hover > ul {
display: block;
}
.submenu > li:hover {
background: aqua;
}
.submenu li:not(:nth-child(1)):hover:before {
border-bottom: 10px solid fuchsia;
z-index: 0;
}
<ul class="menu">
<li>one
<ul class="submenu">
<li>a</li>
<li>b</li>
<li>x</li>
<li>y</li>
<li>z</li>
</ul>
</li>
<li>two
<ul class="submenu">
<li>c</li>
<li>d</li>
</ul>
</li>
<li>three
<ul class="submenu">
<li>e</li>
<li>f</li>
</ul>
</li>
<li>four
<ul class="submenu">
<li>g</li>
<li>h</li>
</ul>
</li>
</ul>