Creare un pipe separatore tramite CSS
martedì 9 settembre, 2008Capita spesso di vedere una serie di link distribuiti orizzontalmente separati dal carattere pipe “|”, il simbolo grafico dell’asticella verticale. Inoltre, se è presente una buona stesura HTML, ci si accorge che questa serie di link – apparentmente orizzontali – altro non sono che liste puntate UL o OL. Ne deriva che invece di scrivere:
Sarebbe meglio usare:
1 2 3 4 5 |
Tuttavia aggiungere il pipe come carattere sporcherebbe un codice così pulito. Possiamo usare in alternativa un bordo, tramite il codice:
1 2 3 4 5 6 | ul li { list-style:none; float:left; padding:0 12px 0 12px; border-right:1px solid #666; } |
Ottenendo:
Possiamo notare due problemi: il primo link ha il padding sulla sinistra e l’ultimo link ha il pipe alla sua destra, cosa non bella da vedere! Ecco quindi che possono essere utilizzare le pseudo-classi :first-child e :last-child del CSS2, per formattare graficamente la nostra lista. Usando il seguente foglio di stile sul codice HTML mostrato prima:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | ul li { list-style:none; float:left; padding:0 12px 0 12px; border:1px solid #666; } /* rimuove il padding dal "primo figlio", dal primo LI */ ul li:first-child { padding:0 12px 0 0; } /* rimuove il bordo "dall'ultimo figlio", LI */ ul li:last-child { padding:0 0 0 12px; border:none; } |
Ottenendo in questo modo un miglior risultato:
Ovviamente, come spesso accade, attenzione alla compatibilità con i vari browser, soprattutto Internet Explorer.
Variante al float
Ancora meglio, se volete evitare il float, usate questo codice:
1 2 3 4 5 6 7 8 9 10 11 12 13 | ul li{ list-style:none; display:inline; padding:0 12px 0 12px; border-right:1px solid #666; } ul li:first-child { padding:0 12px 0 0; } ul li:last-child { padding:0 0 0 12px; border:none; } |
Risultato identico, almeno su FireFox











1

Perchè, secondo il tuo punto di vista, la sintassi
è peggiore di
In termini di codifica, non vedo alcun vantaggio evidente, o meglio, ne vedo, ma di relativamente trascurabili ed integrabili comunque. Mi sta sfuggendo qualcosa ?
@Giulio: per qualità di codice si tende a scrivere l’HTML non curandosi dell’aspetto grafico finale. Ne segue che una “lista” di link, essendo appunto una lista, dovrebbe essere elencata come
UL LI. Poi, visualizzarla orizzontale o verticale, dovrebbe essere – appunto – compito del foglio di stile CSS. Tuttavia non c’è nulla di male a scrivere una sequenza di Link come serie di TAGA. La questione è che eliminando i fogli di stile come risulta la pagina? Usando una sequenza di TAGA, separati da pipe, questi saranno così visibili anche in assenza del foglio di stile. Usando invece una listaUL LIla pagina avrà comunque un aspetto gradevole e leggibile anche senza foglio di stile.Interessante trick. Tuttavia provando l’ultima soluzione (sostituire il float con display:inline), il layout del menu cambia leggermente. Ovvero il padding non risulta uguale a destra e sinistra, come avviene invece con il float.
S.
@sXe: ovviamente il comportamento
floatnon è identico aldisplay:inline; anche se molto dipende dal browser utilizzato. Tuttavia agendo sumarginepaddingildisplay:inlineè, a mio avviso, migliore rispetto alfloatche, come ben sai, ha altri problemi di layout…