csshtmlhoversiblings

How to display and hide a div with CSS?


In my script there are three divs. I want to display div with class="ab" when I hover on first line and display div with class="abc", when hover on second line. Otherwise I want to display div with class="a" by default.

But it never displays the div with class="a".

.abc,.ab {
    display: none;
}
#f:hover ~ .ab {
    display: block;

}
#f:hover ~ .abc,.a {
    display: none;

}
#s:hover ~ .abc {
    display: block;

}
#s:hover ~ .ab,.a {
    display: none;
}
<a id="f">Show First content!</a>
<br/>
<a id="s">Show Second content!!</a>
<div class="a">Default Content</div>
<div class="ab">First content</div>
<div class="abc">Second content</div>

Here is my JSFiddle of my problem: JSFiddle Link


Solution

  • You need

    .abc,.ab {
        display: none;
    }
    
    #f:hover ~ .ab {
        display: block;
    }
    
    #s:hover ~ .abc {
        display: block;
    }
    
    #s:hover ~ .a,
    #f:hover ~ .a{
        display: none;
    }
    

    Updated demo at http://jsfiddle.net/gaby/n5fzB/2/


    The problem in your original CSS was that the , in css selectors starts a completely new selector. it is not combined.. so #f:hover ~ .abc,.a means #f:hover ~ .abc and .a. You set that to display:none so it was always set to be hidden for all .a elements.