以下是我的HTML
<h1>Heading</h1>
<a class="button" href="#"></a>
我想要做的是,当我将<a>
标记悬停时,我想纯粹使用CSS更改<h1>
标记的颜色。我怎样才能做到这一点?
PS ----- *编辑* ----------
如果我在其中包含带有id的div,该怎么办?
<div id="banner">
<h1>Heading</h1>
<a class="button" href="#"></a>
</div>
这会有帮助吗?
答案 0 :(得分:60)
当该元素悬停时,您可以制作跟随元素更改的兄弟元素,例如,当a
悬停时,您可以更改h1
链接的颜色,但你不能以同样的方式影响之前的兄弟。
h1 {
color: #4fa04f;
}
h1 + a {
color: #a04f4f;
}
h1:hover + a {
color: #4f4fd0;
}
a:hover + h1 {
background-color: #444;
}
<h1>Heading</h1>
<a class="button" href="#">The "Button"</a>
<h1>Another Heading</h1>
我们将H1的颜色设置为绿色色调,并将A的颜色设置为H的兄弟色!偏红(前2条规则)。第三条规则符合我的描述 - 当H1悬停时改变A颜色。
但是请注意第四条规则a:hover h1
只会更改跟随锚点的H1的背景颜色,而不会改变它之前的那个。
答案 1 :(得分:13)
没有CSS selector可以执行此操作(in CSS3, even)。在CSS中,元素永远不会知道它们的父元素,因此您不能执行a:parent h1
(例如)。他们也不知道他们的兄弟姐妹(在大多数情况下),所以你不能做#container a:hover { /* do something with sibling h1 */ }
。 基本上,CSS属性不能修改任何元素及其子元素(它们不能访问父母或兄弟姐妹)。
您可以在{/ 1}} 中包含h1
,但这也会使您的a
也可以恢复。
您只能使用JavaScript(jsFiddle proof-of-concept)来实现此目的。这看起来像是:
h1
答案 2 :(得分:7)
Html:
<div id="banner">
<h1>Heading</h1>
<a class="button" href="#">link</a>
</div>
CSS:
#banner:hover h1 {
color: red;
}
#banner h1:hover {
color: black;
}
a {
position: absolute;
}
小提琴:http://jsfiddle.net/joplomacedo/77mqZ/
a
元素绝对定位。对于你现有的结构,可能并不完美。请告诉我,我可能会找到一种解决方法。
答案 3 :(得分:2)
首先,多年来我一直在使用stackoverflow,并感谢大家提供的出色答案和帮助。 但是,现在该是该注册并开始为陷入困境的人提供我帮助的了,即使这个问题已经很久了:
仅需几行CSS和一些基本的Flexbox的理解,就可以实现这一点。 与Stephen P said in his answer一样,adjacent sibling combinator的确选择了紧随其后的兄弟姐妹。要实现OP的要求,您可以使用两种弹性方法:
方法1(using "flex-flow" shorthand property)
.flex-parent {
display: flex;
flex-flow: column-reverse wrap
}
.flex-child-1:hover + .flex-child-2 {
color: #FF3333;
}
<div class="flex-parent">
<a class="flex-child-1">Hover me</a>
<h1 class="flex-child-2">I am changing color</h1>
</div>
方法2(using "order" property和多个孩子)
.flex-parent {
display: flex;
flex-direction: column;
}
.flex-child-1 {
order: 2;
}
.flex-child-2 {
order: 1;
}
.flex-child-3 {
order: 3;
}
.flex-child-1:hover+.flex-child-2 {
color: #FF3333;
}
<div class="flex-parent">
<h1 class="flex-child-3">I am not changing color</h1>
<a class="flex-child-1">Hover me</a>
<h1 class="flex-child-2">I am changing color</h1>
</div>
奖金:
答案 4 :(得分:1)
将H1标签更改为链接,其样式可能与普通文本相同吗? 然后使用它,
a:link {color:#FF0000;}
a:hover {color:#FF00FF;}
当你悬停时它应该可以工作:)你也可以通过将它包含在div中然后将它作为目标来实现它:
.exampledivname a:link {color:#FF0000;}
.exampledivname a:hover {color:#FF00FF;}
这应该有所帮助。
答案 5 :(得分:1)
http://plnkr.co/edit/j5kGIav1E1VMf87t9zjK?p=preview
<!DOCTYPE html>
<html>
<head>
<link rel="stylesheet" href="style.css">
<script src="script.js"></script>
<style>
ul:hover > li
{
opacity: 0.5;
}
ul:hover li:hover
{
opacity: 1;
}
</style>
</head>
<body>
<h1>Hello Plunker!</h1>
<ul>
<li>Hello</li>
<li>Hello</li>
<li>Hello</li>
<li>Hello</li>
<li>Hello</li>
</ul>
</body>
</html>
这是一个如何在纯css中完成它的例子,希望它可以帮助某人
答案 6 :(得分:0)
有人帮助了我,所以我想我也要在这里分享。
在您的第一个示例中,使用纯CSS实际上是不可能的。但是,当您将其与父容器一起包装后,便可以处理带有悬停子代的东西。
df <- structure(list(Tag = c("V1", "V1", "V1", "V1", "V1", "V1", "V2",
"V2", "V2", "V3", "V3", "V3", "V3", "V4", "V4", "V4"), From_ID = c("FR212",
"BL342", "PX123", "KJ214", "SD234", "BL342", "FR231", "CV231",
"BL231", "KJ875", "TR543", "FR342", "PX239", "DS329", "DF321",
"FR321"), To_ID = c("SD234", "KJ214", "FG342", "BL342", "BL342",
"FR212", "BL231", "KJ123", "FR231", "FG432", "TR998", "PX239",
"KJ123", "HG734", "FR321", "DF321"), Date = c("24/08/2019", "5/05/2019",
"22/04/2019", "1/01/2019", "13/09/2018", "30/04/2018", "16/09/2019",
"7/01/2018", "11/01/2017", "14/11/2019", "26/10/2019", "2/07/2019",
"15/07/2017", "30/01/2019", "6/05/2017", "20/03/2017"), Rank = c(1L,
2L, 3L, 4L, 5L, 6L, 1L, 2L, 3L, 1L, 2L, 3L, 4L, 1L, 2L, 3L),
Flag = c(TRUE, TRUE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE,
FALSE, FALSE, FALSE, FALSE, FALSE, FALSE, TRUE, FALSE)),
class = "data.frame", row.names = c("1",
"2", "3", "4", "5", "6", "7", "8", "9", "10", "11", "12", "13",
"14", "15", "16"))
#banner:hover>h1{
color:red;
}
h1:hover{
color:black !important;
}
#banner{
display:inline-block;
}
.button{
display:inline-block;
font-size:24px;
width:100%;
border:1px solid black;
text-align:center;
}
h1{
padding:0;
margin:0;
}
父母只控制当前没有被盘旋的孩子。然后,您可以为单个元素和类设置悬停状态,从而无需JS就可以进行同级选择。
这是此操作的更高级示例
答案 7 :(得分:0)
对于同级元素中的设置样式,可以使用〜字符 在第一种情况下,当h1悬停为标签设置颜色时 在第二种情况下,当a悬停时,更改h1部分的背景颜色
h1:hover ~ a {
color: #e34423;
}
a:hover ~ h1 {
background-color: #eee;
}
答案 8 :(得分:0)
这可能行得通,我最近使用了这个想法来停止动画中的兄弟元素。
h1 { color: inherit; }
#banner:hover { color: your choice; }