2012-10-20 9 views
5

Di seguito è riportato un menu all'interno di un'intestazione. Gli elementi ul e li sono fluttuanti e ora fluttuano sotto l'intestazione, che ho cercato di evitare con chiarezza: entrambi. Tuttavia, non sembra funzionare così mi chiedo ... cosa può essere sbagliato?chiaro: entrambi non funzioneranno

html:

<header> 
    <ul> 
     <li><a href='#'>Item 1</a></li> 
     <li><a href='#'>Item 2</a></li> 
     <li><a href='#'>Item 3</a></li> 
     <li><a href='#'>Item 4</a></li> 
    </ul> 
    <div class='clear'/> 
</header> 

css:

header { 
    background: #888; 
    height: 20px; 
    padding: 10px; 
} 

ul{ 
    margin: 18px 0; 
    padding: 0; 
    list-style: none; 
} 

ul li{ 
    margin: 0 10px 0 0; 
    padding: 0; 
    display: block; 
    float: left; 
    width: 80px; 
    height: 20px; 
    border: 1px solid #000; 
    background: red; 
} 

ul li a{ 
    display:block; 
    width: 100%; 
    height: 100%; 
    text-decoration: none; 
    float: left; 
    text-align: center; 
    padding-top: 2px; 
} 

ul li a:hover{ 
    color: #fff; 
    background-color: #000; 
}​ 

.clear { 
    clear:both; 
} 
+0

Cosa stai cercando di realizzare qui? Quel div è vuoto, quindi qual è il punto di averlo nell'intestazione? –

+0

Il problema è che anche i 'li' sono flottati. – Gareth

+2

Non una risposta, ma mi sento sempre meglio usare l'hack "overflow: hidden' sul contenitore. – PeeHaa

risposta

11

È possibile utilizzare un clearfix:

.clearfix:after { 
    clear:both; 
    content:"."; 
    display:block; 
    height:0; 
    line-height:0; 
    visibility:hidden; 
} 

e applicare che sia al ul e l'intestazione.

1

Non è possibile utilizzare /> per div. Cambialo da <div class='clear'/> a <div class="clear"></div>

Oppure prova ad aggiungere un altro li al di sotto di quelli correnti e assegnando quella classe chiara.

<header> 
    <ul> 
     <li><a href='#'>Item 1</a></li> 
     <li><a href='#'>Item 2</a></li> 
     <li><a href='#'>Item 3</a></li> 
     <li><a href='#'>Item 4</a></li> 
     <li class='clear'></li> 
    </ul> 
</header> 
+3

Puoi usare '/>' per 'div's. – Gareth

+2

Se si estrae la frase errata sulla chiusura automatica 'div's rimuovo il mio downvote. – Gareth

+3

I tag div non sono tag di chiusura automatica validi Gareth. – Mark

2

Meglio css per la vostra situazione sarebbe (testato in FF, Chrome, IE6 +)

header { 
    display: block; /* Necessary for older browsers to render this html5 element properly */ 
    background: #888; 
    height: 20px; 
    padding: 10px; 
} 

ul { 
    margin: 18px 0; 
    padding: 0; 
    list-style: none; 
} 

ul li { 
    margin: 0 10px 0 0; /* at least some margin-right is necessary to make inline-block work in IE */ 
    padding: 0 5px; /* you don't have to set a width any longer, so let padding define spacing */ 
    display: inline-block; 
    zoom: 1; /* part 1 of the IE hack to make inline-block work */ 
    *display: inline; /* part 2 of the IE hack to make inline-block work */ 
    /* height and line-height not necessary - driven by a element below */ 
    border: 1px solid #000; 
    background: red; 
} 

ul li a { 
    display:block; 
    height: 20px; 
    line-height: 20px; /* this will vertically center the text in the li */ 
    text-decoration: none; 
    text-align: center; 
} 

ul li a:hover{ 
    color: #fff; 
    background-color: #000; 
}​ 
2

Invece di utilizzare un cleardiv, forse si potrebbe provare il clearfix standard dal html5boilerplate?

Ecco il markup modificata:

<header class="clearfix"> 
     <ul> 
      <li><a href='#'>Item 1</a></li> 
      <li><a href='#'>Item 2</a></li> 
      <li><a href='#'>Item 3</a></li> 
      <li><a href='#'>Item 4</a></li> 
     </ul> 
    </header> 

e qui è il CSS per aggiungere:

.clearfix:before, 
.clearfix:after { 
    content: " "; /* 1 */ 
    display: table; /* 2 */ 
} 

.clearfix:after { 
    clear: both; 
} 


.clearfix { 
    *zoom: 1; 
} 

Dalla documentazione:

.clearfix

Aggiunta. clearfix ad un elemento assicurerà che sia sempre completamente c mantiene i suoi figli fluttuanti. Ci sono state molte varianti dell'hacfix nel corso degli anni, e ci sono altri hack che possono aiutarti anche a contenere i bambini flottati, ma l'HTML5 Boilerplate utilizza attualmente il micro-clearfix.

Problemi correlati