Ok, sono quasi le tre, ma ho un po’ di idee in mente.
Se salvo un paio di schizzi su un file nel desktop è come averlo già perso, qui diventa obbligo morale concludere il progettino.
Ho cercato in giro una soluzione che mi accontentasse, ma tra le decine di progetti seri e decenti solamente un paio meritavano di essere notati. Uno costa parecchio, l’altro rientra nelle YUI (Yahoo User Interfaces) ed è fuori scala.
Dev’essere semplice,
che contenga al più una lista di elementi o un nodo al cui interno sono già inseriti gli elementi del menù dropdown. Nel caso più semplice deve essere tollerata la lista pura <ul>...</ul> e nel caso più complesso devono essere tollerati N sottolivelli.
E’ necessario considerare gli elementi interni ed esterni
al blocco che contiene il menù e non dev’essere modificato il loro stile, nè tantomeno va forzato il position, il display o il float del blocco del menù cosicché non collassino eventuali elementi esterni.
La semantica in primo luogo,
altrimenti lo scopo del progetto va a farsi benedire. Tra l’altro che senso ha avere liste annidate N volte se si costringe uno screen reader ad affrontarsi nodi e nodi di DOM?
Una volta stabilita la semantica
più adatta a supportare tale progetto il codice non si tocca più e tutte le modifiche vengono fatte a caldo via DOM.
Il menù dev’essere avviato non appena disponibile
senza dunque essere legati all’evento window.onload.
I fogli di stile devono essere separati
in core (che si occupano di gestire i posizionamenti dei sottolivelli, le visualizzazioni nonché i vari float) e in style (ovvero l’aspetto estetico dei livelli e dei sottolivelli, dai colori ai caratteri, dai padding alla dimensione dei blocchi).
Un sottolivello non è necessariamente una lista,
ma può benissimo contenere immagini, object o altro. Un sottolivello è un blocco, poi sta all’implementatore decidere come utilizzarlo.
Se un sottolivello ha determinate caratteristiche (palesi sotto-sottolivelli) il clientscript si deve occupare di trattare anche lui alla stregua di un parent.
Se la tecnologia degrada (#1)
il sistema degrada armoniosamente. Il che significa che, trattandosi di xhtml si deve prevedere la mancanza di css e di js o di un parziale e potenzialmente dannoso supporto degli stessi.
Javascript, tra l’altro, deve essere di supporto a CSS per gestire DOM laddove CSS3 non è disponibile e per forzare il cross-browser.
Se la tecnologia degrada (#2)
si deve fare il possibile per mantenere gradevole l’aspetto estetico del menù.
Se Javascript esplode c’è ancora CSS.
Se CSS esplode siamo cagati.
Deve girare ovunque,
anche sul mio casio del ‘78. E deve funzionare anche su AMAYA.
Appena ho un po’ di tempo trasformo queste idee in qualcosa di funzionale.
Se qualcuno di voi “del giro” ha idee e suggerimenti da aggiungere non faccia il timido.
Un primo banalissimo esempio di xhtml è il seguente e voglio portare la vostra attenzione sul fatto che i sottolivelli sono blocchi a parte. Notate l’utilizzo degli header e delle ancore per distinguere il menù principale da quelli minori e dedicati ad una sottocategoria.
<div id="navbar">
<h2>Menu</h2>
<div id="mainmenu">
<h3>Main menu</h3>
<ul>
<li><a href="#verdura">Verdura</a></li>
<li><a href="#pasta">Pasta</a></li>
<li><a href="#pane">Pane</a></li>
<li><a href="http://www.playboy.com">Playboy</a></li>
</ul>
</div>
<div id="verdura">
<h4>Verdure</h4>
<ul>
<li><a href="#">Insalata</a></li>
<li><a href="#">Pomodori</a></li>
<li><a href="#">Zucchine</a></li>
<li><a href="#">Cavolfiore</a></li>
</ul>
</div>
<div id="pasta">
<h4>Pasta</h4>
<ul>
<li><a href="#">Tortiglioni</a></li>
<li><a href="#">Pennette</a></li>
<li><a href="#">Cellentani</a></li>
<li><a href="#">Spaghetti</a></li>
</ul>
</div>
<div id="pane">
<h4>Pane</h4>
<ul>
<li><a href="#">Zoccolette</a></li>
<li><a href="#">Tartarughe</a></li>
<li><a href="#">Baguette</a></li>
</ul>
</div>
</div>