Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

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

like image 270
mridul Avatar asked Dec 15 '13 19:12

mridul


People also ask

Can you hide a div in CSS?

You can hide an element in CSS using the CSS properties display: none or visibility: hidden . display: none removes the entire element from the page and mat affect the layout of the page. visibility: hidden hides the element while keeping the space the same.

How do I hide an entire div?

To hide an element, set the style display property to “none”.

How do I completely hide an element in CSS?

Completely hiding elements can be done in 3 ways: via the CSS property display , e.g. display: none; via the CSS property visibility , e.g. visibility: hidden; via the HTML5 attribute hidden , e.g. <span hidden>


2 Answers

To hide an element, use:

display: none; visibility: hidden; 

To show an element, use:

display: block; visibility: visible; 

The difference is:

Visibility handles the visibility of the tag, the display handles space it occupies on the page.

If you set the visibility and do not change the display, even if the tags are not seen, it still occupies space.

like image 51
multiplatform Avatar answered Sep 22 '22 21:09

multiplatform


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.

like image 26
Gabriele Petrioli Avatar answered Sep 22 '22 21:09

Gabriele Petrioli