0

I don't understand why my anchor hover isn't causing the div box below to turn yellow. Here's my code:

<?xml version="1.0" encoding="iso-8859-1"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style type="text/css">
a {background-color:Blue; width:400px; height:200px;}
#hide { width:500px; height:500px;background-color:black; }
a:hover #hide {background-color:yellow; }
</style>
</head>
<body>
<a>hover</a>
<div id="hide">turn yellow</div>
</body>
</html>

I'm very tired right now, so I must be overlooking something simple

8 Answers 8

2

You are closing the <a> before introducing hide, so the path

a:hover #hide 

will never apply.

Sign up to request clarification or add additional context in comments.

Comments

2

Your HTML should look like this for your CSS to work:

<a>hover
  <div id="hide">turn yellow</div>
</a>

But again I am afraid It isn't valid markup. To work around that, you could have wrapped that into another div:

<div>hover
  <div id="hide">turn yellow</div>
</div>

But yet if you did in CSS:

div:hover{.....}

That won't work in IE6 because IE6 supports :hover pseudo selector only for links.

So the simple solution if you want to use a link (your markup structure):

<a id="link">hover</a>
<div id="hide">turn yellow</div>

You need to use javascript like this:

var el = document.getElementById('link');
var dv = document.getElementById('hide');

el.onmouseover = function(){      
  dv.style.backgroundColor = 'yellow';
};

el.onmouseout = function(){
  dv.style.backgroundColor = 'blue';
};

Comments

0

a:hover #hide - means you need to apply the style to a child contained inside the anchor tag

In the HTML you show, the DIV #hide is not a child of the anchor tag

HTH

Comments

0
a:hover #hide {background-color:yellow; }

This does not exist, you want this:

a:hover div#hide

AND you want to put your div inside your anchor if this is your desired outcome:

<a>hover
  <div id="hide">turn yellow</div>
</a>

1 Comment

a:hover #hide and a:hover div#hide is basically the same selector.
0

In modern browsers, this should work too (the adjacent sibling selector '+'):

a:hover + #hide {background-color:yellow;}

But that would be rather odd. The solutions that mention putting the div inside the a is the common form of the html. To make it valid html, however, the div needs to change to a span and then if you need the block qualities of a div set it to display: block.

Comments

0

As noted by the other posters, you could place the #hide div inside the link; however, if you really wanted the div outside the link, you could use:

a:hover + #hide { background-color:yellow; }

This should style the element with id hide that comes directly after the link being hovered over.

Comments

0

a:hover #hide targets an element with ID "hide" inside any a-element, for example this:

<a href="...">
<span id="hide">...</span>
</a>

What you're really after in your case is a:hover + #hide, as this would mean "the element with id "hide" right after an anchor element which is being hovered".

Comments

0

I do not think this will work. I think you will have to color it via javascript:

<a onmouseover="document.getElementById("hide").stylebackgroundcolor='yellow'">hover</a>

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.