In questa lezione analizziamo le classi css che servono a dare forma a elenchi di pagine e tassonomie, sidebar e widget. Le ultime dichiarazioni per completare il file style.css
.
La navigazione delle pagine
Le funzioni di WordPress che producono mark-up sono diverse, alcune delle quali assegnano una o più classi agli elementi generati. Tra queste, wp_page_menu
genera una div
di classe menu
contenente la lista non ordinata delle pagine:
wp_page_menu( 'show_home=1&exclude=56&menu_class=page-navi&sort_column=menu_order' );
Tra i parametri passati alla funzione, menu_class
permette di sovrascrivere la classe menu
, assegnata di default al container. L'output inviato al browser è strutturato come segue:
<div class="page-navi">
<ul>
<li><a href="http://example.com/">Home</a></li>
<li class="page_item page-item-2">
<a href="http://example.com/pagina-di-esempio/">Pagina di esempio</a>
</li>
<li class="page_item page-item-4 current_page_item">
<li class="page_item page-item-4 page_item_has_children current_page_item">
<a href="http://example.com/nuova-pagina/">Nuova Pagina</a>
<ul class="children">
<li class="page_item page-item-56">
<a href="http://example.com/nuova-pagina/pagina-figlio/">Pagina figlio</a>
</li>
</ul>
</li>
</ul>
</div>
Quello che segue è l'elenco delle classi generate da wp_page_menu
:
.menu {} /* can be overwitten by menu_class parameter */
.page_item {} /* single list item */
.page-item-{id} {} /* specific list item */
.page_item_has_children {} /* parent list item */
.current_page_item {} /* active list item */
.children {} /* unordered child list */
La funzione wp_list_pages
genera una lista pressoché identica alla precedente, con la sola differenza che gli elementi dell'elenco non vengono inseriti in una div
, ma in un elemento li
di classe pagenav
:
<li class="pagenav">
Pagine
<ul>
...
</ul>
</li>
L'elenco completo dei selettori è reperibile nello "zip" allegato all'articolo .
Gli elenchi di categorie
Seguendo lo stesso schema degli elenchi di pagine, la funzione wp_list_categories
genera un list item contenente una o più liste annidate, i cui elementi individuano le categorie o qualsiasi tassonomia registrata. Queste le classi generate dal framework:
.categories {} /* or any registered taxonomy */
.cat-item {}
.cat-item-{id} {}
.current-cat {}
.current-cat-parent {}
.children {}
Se alla funzione wp_list_categories
viene richiesta una tassonomia, al list item esterno sarà assegnato un nome di classe corrispondente al nome della tassonomia.
Le sidebar e i widget
Per WordPress una sidebar non è letteralmente una barra laterale, ma un'area destinata ad accogliere widget, ossia blocchi di codice HTML generati dinamicamente. WordPress dispone di una dozzina di widget predefiniti, i quali generano elenchi di categorie, articoli recenti, tag, pagine, menu personalizzati, ed altro ancora. Una sidebar viene inserita nel tema grazie alla seguente funzione:
<?php dynamic_sidebar( 'sidebar-primary' ); ?>
La funzione dynamic_sidebar()
manda a video la sidebar-primary
, che sarà definita più avanti nel file functions.php
. La sidebar così generata viene popolata di widget dalla pagina di amministrazione "Aspetto > Widget". Ognuno di questi ha una precisa struttura HTML, e ai rispettivi elementi vengono assegnati classi e id che permettono di selezionarli agevolmente.
Due nomi di classe sono comuni a tutti i widget:
.widget {} /* widget container */
.widgettitle {} /* widget title */
La prima classe viene assegnata alla div
esterna, mentre la seconda all'elemento h2
che racchiude il titolo. Si deve sottolineare che sia le classi widget
e widgettitle
, che l'elemento h2
, possono essere sostituiti con nomi di classe ed elementi HTML personalizzati, come si vedrà più avanti in questa guida. Alla div esterna, oltre alla classe widget
, viene assegnata una classe specifica per il tipo di widget:
.widget_categories {}
.widget_recent_comments {}
.widget_calendar {}
.widget_recent_entries {}
.widget_archive {}
.widget_nav_menu {}
.widget_pages {}
.widget_text {}
.widget_tag_cloud {}
.widget_rss {}
.widget_meta {}
.widget_search {}
I contenuti dei widget vengono generalmente visualizzati all'interno di liste non ordinate, a meno che non si tratti di elementi specifici, come il calendario e il box di ricerca. Per il tema "seventyone", che si sta sviluppando in questa guida, sono state impostate le dimensioni generali dei widget con la seguente dichiarazione:
.widget {
line-height: 2;
margin-bottom: 2em;
width: 100%;
}
L'aspetto del calendario viene invece stabilito dai seguenti blocchi:
.widget_calendar table {
width: 100%;
line-height: 2;
margin: 0;
}
.widget_calendar caption {
color: #fff;
font-weight: 700;
line-height: 1.7142857142;
margin-bottom: 18px;
text-align: left;
text-transform: uppercase;
}
.widget_calendar tbody {
border-bottom: 1px solid rgba(57, 114, 73, 0.6);
border-top: 1px solid rgba(57, 114, 73, 0.6);
}
.widget_calendar tbody td,
.widget_calendar thead th {
text-align: center;
}
.widget_calendar tbody a {
background-color: rgba(199, 225, 186, 0.6);
display: block;
}
.widget_calendar tbody a:hover {
background-color: #c7e1ba;
color: #000;
}
.widget_calendar #prev {
padding-left: 5px;
}
.widget_calendar #next {
padding-right: 5px;
text-align: right;
}
Nel box di ricerca viene, infine, nascosto il pulsante di invio:
/* Search Widget*/
.widget_search input[type="submit"] {
visibility: hidden;
display: none;
}
Potrebbe sembrare che la progettazione delle sidebar, e soprattutto dei widget, comporti un gran lavoro di codifica CSS. Eppure, a ben guardare, dal punto di vista strutturale i widget non si differenziano molto l'uno dall'altro. Il numero consistente di classi potrà essere un utile strumento per rifinire e differenziare, ma l'aspetto base potrà essere definito con dichiarazioni di carattere generale:
.widget li {} /* all list items */
.widget li li {} /* nested list items */
Nello "zip" allegato è disponibile l'elenco completo dei selettori degli elementi che compongono i widget predefiniti.
Il footer
Il piè di pagina può ospitare diverse informazioni: un menu di navigazione alternativo, disclaimer e informazioni di copyright, collegamenti a social network ed anche un form per un contatto rapido. Grazie ai widget, è possibile inserire e modificare queste informazioni direttamente dal pannello di amministrazione. Chi sviluppa il tema potrà, quindi, prevedere una nuova sidebar.
Al foglio di stile si aggiungano, quindi, i due seguenti blocchi di dichiarazioni:
#footer-sidebar {
border-bottom: 1px solid black;
border-top: 1px solid black;
overflow: hidden;
width: 100%
}
#footer-sidebar .widget {
margin-right: 0.52083335%;
margin-left: 0.52083335%;
padding: 0.52083335%;
width: 22.9166666%;
float: left;
background-color: #eee;
}
Gli elementi div.widget
sono affiancati a sinistra con la proprietà float
. Un problema dei layout basati sui float è che i contenitori collassano su se stessi se non opportunamente progettati. In questo caso si è fatto ricorso ad una tecnica poco nota, ma perfettamente cross-browser. Il primo blocco di dichiarazioni, quindi, permetterà al contenitore #footer-sidebar
di non collassare, e i blocchi interni ed esterni saranno resi correttamente. Il secondo blocco assegna le dimensioni ai widget e li affianca l'uno all'altro.
Nella figura qui sopra, i bordi della #footer-sidebar
e gli sfondi dei widget hanno il solo scopo di evidenziare il comportamento del browser, e possono essere resi nei colori più opportuni.
Rendere responsive la sidebar
L'ultimo task consiste nel rendere responsive la sidebar del footer. Se nel layout generale si è voluto dare ai singoli widget una larghezza pari a circa il 25% dell'area disponibile, su schermi di dimensioni inferiori sarà opportuno ridimensionarli. Ad esempio, se la finestra del browser ha una larghezza in pixel compresa tra i 640 e gli 800, i widget potrebbero occupare ognuno la metà (circa) della larghezza del contenitore:
@media screen and (min-width: 641px) and (max-width: 800px) {
#site-footer {
width: 100%;
}
#footer-sidebar .widget {
width: 47.9166666%;
float: left;
}
}
Infine, per gli schermi di dimensioni inferiori a 640px, ogni widget dovrà estendersi su tutta la larghezza disponibile:
@media screen and (max-width: 640px) {
...
#sidebar {
float: left;
width: 100%;
margin-right: 0;
}
#site-footer {
width: 100%;
}
#footer-sidebar .widget {
width: 97.9166666%;
float: none;
}
...
}
Il foglio di stile del tema seventyone è ora completo ed è disponibile nello "zip" allegato all'articolo dove sarà possibile reperire anche l'elenco dei selettori descritti.
Riferimenti
In questo capitolo si è fatto riferimento alle seguenti risorse: