这是另一个想法,允许你影响其他元素,而不考虑任何特定的选择器,只使用:悬停状态的主元素。
为此,我将依赖于使用自定义属性(CSS变量)。我们可以从说明书中读到:
自定义属性是普通属性,因此可以在
任何元素,都用正常的继承和级联进行解析
规则……
这个想法是在主元素中定义自定义属性,并使用它们来设置子元素的样式,因为这些属性是继承的,我们只需要在hover的主元素中更改它们。
这里有一个例子:
#{容器
宽度:200 px;
高度:30 px;
Border: 1px solid var(——c);
——c:红色;
}
#容器:{徘徊
——c:蓝色;
}
#容器> div {
宽度:30 px;
高度:100%;
background - color: var (- c);
}
< div id = "容器" >
< div >
< / div >
< / div >
为什么这可以比使用特定的选择器结合悬停更好?
我可以提供至少2个理由,使这种方法成为一个很好的考虑:
If we have many nested elements that share the same styles, this will avoid us complex selector to target all of them on hover. Using Custom properties, we simply change the value when hovering on the parent element.
A custom property can be used to replace a value of any property and also a partial value of it. For example we can define a custom property for a color and we use it within a border, linear-gradient, background-color, box-shadow etc. This will avoid us reseting all these properties on hover.
下面是一个更复杂的例子:
.container {
--c:red;
width:400px;
display:flex;
border:1px solid var(--c);
justify-content:space-between;
padding:5px;
background:linear-gradient(var(--c),var(--c)) 0 50%/100% 3px no-repeat;
}
.box {
width:30%;
background:var(--c);
box-shadow:0px 0px 5px var(--c);
position:relative;
}
.box:before {
content:"A";
display:block;
width:15px;
margin:0 auto;
height:100%;
color:var(--c);
background:#fff;
}
/*Hover*/
.container:hover {
--c:blue;
}
<div class="container">
<div class="box"></div>
<div class="box"></div>
</div>
正如我们上面所看到的,我们只需要一个CSS声明来改变不同元素的许多属性。