L'header di un sito è sicuramente una delle sezioni più difficili da formattare con i CSS. Le difficoltà sono quasi tutte nell'esatto allineamento verticale ed orizzontale degli elementi. Se abbiamo un titolo, una descrizione, un menu di navigazione e un form di ricerca, dobbiamo fare in modo che lo spazio sia distribuito equamente e che non si verifichino sovrapposizioni quando l'utente ridimensiona la finestra del browser o modifica la dimensione dei font. Vediamo come procedere.
Partiamo dalla seguente struttura:
<div id="green-solutions">
<div id="branding">
<h1>Green</h1>
<p id="tagline">CSS makes it easy!</p>
<hr />
<form id="search" action="" method="get">
<div>
<input type="text" name="q" id="q" />
<input type="image" src="img/search.png" name="search-btn" id="search-btn" alt="Search" />
</div>
</form>
<hr />
</div>
<div id="navigation">
<ul>
<li><strong>Home</strong></li>
<li><a href="#">The Project</a></li>
<li><a href="#">About</a></li>
<li><a href="#">Contacts</a></li>
</ul>
</div>
</div>
Resettiamo subito gli stili predefiniti dei browser:
/*= Elementi HTML */
body {
margin: 0;
padding: 0;
background: #fff;
color: #333;
font: 62.5%/1 Arial, Helvetica, sans-serif;
}
a:link, a:visited {
color: #466432;
}
a:hover {
color: #9c3;
}
hr {
display: none;
}
h1, h2, h3, h4, h5, h6 {
margin: 0;
font-family: Georgia, serif;
font-size:. 100%;
}
p, li {
line-height: 1.4;
}
input, textarea, select { /* Normalizza l'altezza degli elementi dei form */
font: 1em Arial, Helvetica, sans-serif;
vertical-align: middle;
}
Usiamo misure dei font in em, che andremo ad aumentare sul contenitore del sito:
/*=Layout */
/*= Contenitore del sito */
#green-solutions {
width: 100%;
font-size: 1.3em;
}
Definiamo quindi un'altezza per l'header e gli assegniamo un'immagine ripetuta di sfondo:
/*= Header */
#branding {
height: 10em;
background: #446432 url(img/branding.gif) repeat-x;
color: #fff;
padding-left: 1.5em;
position: relative;
}
Abbiamo creato un posizionamento contestuale con la dichiarazione position: relative
che ci servirà per posizionare gli elementi all'interno dell'header:
#branding h1 {
font-size: 4em;
font-weight: normal;
letter-spacing: 0.1em;
color: #446432;
float: left;
height: 2.5em;
text-indent: 125px;
padding-top: 35px;
background: transparent url(img/h1.png) no-repeat 0 100%;
text-transform: uppercase;
}
#branding #tagline {
margin: 0;
font-variant: small-caps;
font-style: italic;
font-weight: bold;
font-size: 1.5em;
padding-bottom: 0.2em;
border-bottom: 0.4em solid #fff;
color: #fff;
float: left;
padding: 45px 0.4em 0 2em;
}
#branding #search {
position: absolute;
height: 2em;
margin: 0;
top: 45px;
right: 1.5em;
}
#branding #search #q {
width: 150px;
height: 2em;
display: block;
border: none;
background: #fff;
}
#branding #search #search-btn {
position: absolute;
display: block;
top: 0.5em;
right: 0;
}
Il menu di navigazione deve essere portato più in alto, quindi useremo il posizionamento relativo negativo:
/*=Navigazione */
#navigation {
width: 60%;
margin: 0 auto;
position: relative;
height: 2em;
top: -2.1em;
font-size: 1.2em;
}
#navigation ul {
margin: 0;
padding: 0;
list-style: none;
height: 100%;
}
#navigation ul li {
float: left;
height: 100%;
margin-right: 0.5em;
}
#navigation ul li a {
float: left;
display: block;
height: 100%;
line-height: 2;
background: #446432;
color: #fff;
font-weight: bold;
text-decoration: none;
padding: 0 1em;
border-radius: 5px 5px 0 0;
}
#navigation ul li strong {
float: left;
display: block;
height: 1.6em;
line-height: 1.6;
border-top: 0.4em solid #446432;
padding: 0 1em;
}
#navigation ul li a:hover {
background: #ccee98;
color: #333;
height: 1.8em;
line-height: 1.8;
border-top: 0.2em solid #446432;
}
Per spostare il menu in alto abbiamo usato la sua altezza come valore negativo della proprietà top
. Potete visionare l'esempio finale in questa pagina.