2013-05-21 11 views
9
  • display:none sarà completamente nascondere un elemento come se ora aveva una larghezza e un'altezza pari a zero
  • visibility:hidden d'altra parte si nasconde un elemento, ma prenotare un rettangolo della larghezza e altezza originali dell'elemento nel documento.

C'è un modo attraverso puro CSS, per nascondere un elemento tale che occupa altezza zero ma la sua larghezza originale? Impostando la sua altezza su zero non funziona perché non so a quale altezza impostare l'elemento una volta che voglio mostrarlo di nuovo.CSS: nascondere elemento, ma mantenere la larghezza (e non altezza)

In particolare voglio raggiungere i seguenti obiettivi:

#top ul  {take up zero height but original width} 
#top:hover ul {restore original dimensions} 

Edit: risolto! L'idea è di impostare height:auto per ripristinare l'altezza originale.

Vedi qui http://jsfiddle.net/yP59s/ per la versione completa o qui il css:

ul {margin:0px} 
#top {border:1px solid} 
#top ul {height:0px;overflow:hidden} 
#top:hover ul {height:auto;} 

e il codice html:

<div id="top"> 
    <h1>foobar</h1> 
    <ul> 
     <li>foo</li> 
     <li>bar</li> 
    </ul> 
</div> 
blubber 
+3

Basta impostare height: auto quando si vuole 'ripristinare' l'altezza. – powerbuoy

+1

Non consiglierei di utilizzare "top" come ID elemento, questa è una parola riservata. –

+0

Questo in realtà non risponde alla tua domanda, ma potresti voler usare un ** altezza ** piccola (ad es. 1px o 2px) invece di 0. Altrimenti, con un'altezza di 0, non ci sarà alcuna superficie su cui aleggiare. – Sildoreth

risposta

4
#top   { width: 300px; height:0px; max-height:0px; } 
#top:hover {height: auto; width: 300px; } 

http://jsfiddle.net/G5cgY/

+2

' height: auto' era quello che stavo cercando, grazie! Anche se deve essere combinato con 'visibility: hidden' quando non si passa il mouse e' visibility: visible' quando si passa con il mouse, altrimenti il ​​contenuto viene comunque visualizzato anche se la sua altezza è 0px. – josch

+1

controlla jsfiddle, dandogli un overflow: nascosto è abbastanza –

+1

infatti, 'overflow: hidden' fa quello che voglio - grazie ancora! – josch

0

usando css

<a href="#box1">Show Box 1</a>|<a href="#box2">Show Box 2</a>|<a href="#hidebox">Hide All</a> 

<div id="box1" class="box"> Contents of Box 1 </div> 
<div id="box2" class="box"> Contents of Box 2 </div> 

e css

.box{ 
border: 2px solid #ccc; 
padding:20px; 
margin:20px 0 0; 
max-height:150px; 
max-width:300px; 
display:none; } 



.box:target{ 
    display:block; 
} 

e ho trovato questo bel violino qualche mese fa, può essere utile: http://jsfiddle.net/DbXQs/