我正在尝试使列表元素的不透明度从元素中更改徘徊我的 HTML 标记是
<ul class="list-unstyled">
<li>
Lorem ipsum dolor sit amet
</li>
<li>
Consectetur adipiscing elit
</li>
<li>
Integer molestie lorem at massa
</li>
<li>
Facilisis in pretium nisl aliquet
</li>
<li>
Nulla volutpat aliquam velit
</li>
<li>
Faucibus porta lacus fringilla vel
</li>
<li>
Aenean sit amet erat nunc
</li>
<li>
Eget porttitor lorem
</li>
</ul>
我在哪里使用此 css
.list-unstyled li:first-of-type {
opacity:1;
}
.list-unstyled li:nth-of-type(2){
opacity:0.60;
}
.list-unstyled li:nth-of-type(3){
opacity:0.35;
}
.list-unstyled li {
opacity:0.35;
}
.list-unstyled li:hover {
opacity:1 !important;
}
.list-unstyled li:hover ~ li {
opacity:0.65 !important;
}
.list-unstyled li:hover ~ li ~li {
opacity:0.35 !important;
}
我想使悬停元素直接同级具有 35% 的不透明度层其余的应该有 65% 的不透明度层。
而在初始阶段,我希望第一个 li 元素的不透明度层为 1,当它被取消悬停时,它应该随着其他元素的悬停而更改为相应的样式 我怎样才能实现这一点。
CSS没有以前的同级选择器,因此仅使用CSS无法实现您想要实现的目标。
如果你对 JavaScript 解决方案持开放态度,你可以这样做:
var items=document.getElementsByTagName("li"),
hovered=items[0],
x=items.length,
previous;
hovered.classList.add("hovered");
while(x--)
items[x].addEventListener("mouseover",function(){
hovered.classList.remove("hovered");
if(previous)
previous.classList.remove("previous");
hovered=this;
previous=this.previousSibling;
hovered.classList.add("hovered");
if(previous)
previous.classList.add("previous");
},0);
ul{list-style:none;margin:0;padding:0;}
li{width:100px;height:100px;background:red;display:inline-block;}
li{
opacity:0.35;
transition:opacity .25s;
}
.hovered{
opacity:1;
}
.previous,.hovered+li{
opacity:.65;
}
<ul><li></li><li></li><li></li><li></li><li></li></ul>
+
和~
选择器可以选择下一个相邻元素和其他元素,但不幸的是,没有CSS可以选择CSS中的先前元素
检查这个 是否有"前兄弟姐妹"CSS 选择器?
你只需要再添加一个CSS代码
.list-unstyled:hover li:first-of-type {
opacity:.35;
}
这是您问题的工作演示
如果是直系同级,则可以使用 +
选择器。然后,任何不是直系兄弟姐妹的兄弟姐妹都可以使用 ~
选择器
.list-unstyled li:hover + li {
opacity:0.35;
}
.list-unstyled li:hover ~ li {
opacity:0.65;
}