Perché menu personalizzati Nav genera così tanti lezioni su voci di elenco? Posso gestire questo in qualche modo?
-
16-10-2019 - |
Domanda
Di seguito è riportato un esempio. 3 classi associate a ciascun elemento, ad eccezione della voce corrente, che ha 6. Posso Pare questo giù in qualche modo?
<ul id="menu-global-nav" class="sf-menu">
<li id="menu-item-63" class="menu-item menu-item-type-post_type current-menu-item page_item page-item-5 current_page_item menu-item-63"><a href="#">Home</a></li>
<li id="menu-item-30" class="menu-item menu-item-type-post_type menu-item-30"><a href="#">Services</a>
<ul class="sub-menu">
<li id="menu-item-39" class="menu-item menu-item-type-post_type menu-item-39"><a href="#">Case Studies</a></li>
<li id="menu-item-38" class="menu-item menu-item-type-post_type menu-item-38"><a href="#">Story Discovery</a></li>
</ul>
</li>
<li id="menu-item-32" class="menu-item menu-item-type-post_type menu-item-32"><a href="#">Company</a></li>
<li id="menu-item-29" class="menu-item menu-item-type-post_type menu-item-29"><a href="#">Why Case Studies?</a></li>
<li id="menu-item-28" class="menu-item menu-item-type-post_type menu-item-28"><a href="#">Case Study Showcase</a></li>
<li id="menu-item-27" class="menu-item menu-item-type-post_type menu-item-27"><a href="#">Resources</a></li>
<li id="menu-item-26" class="menu-item menu-item-type-post_type menu-item-26"><a href="#">Online Store</a></li>
<li id="menu-item-25" class="menu-item menu-item-type-post_type menu-item-25"><a href="#">Contact Us</a></li>
</ul>
Soluzione
vado contro la maggioranza su questo:)
Sì, può essere una buona idea per mettere a nudo il basso. Personalmente mi sto tenendo solo le classi di tipo current-xxx
e la loro sostituzione con active
, e active-parent
(per genitore attivo o antenato elementi).
Perché?
- giro per il web, attiva è diventata la classe standard per le voci di menu attivi (in cima a quello WP ha classe incoerente convenzioni di denominazione tra i suoi nomi propria classe).
- si arriva a scrivere le regole CSS meno; la larghezza di banda che si salva potrebbe non essere molto, ma rende sicuramente il file CSS più leggibile
Codice Aggiornato:
// for custom menus
add_filter('nav_menu_css_class', 'normalize_wp_classes', 10, 2);
// for the page menu fallback (wp_list_pages)
add_filter('page_css_class', 'normalize_wp_classes', 10, 2);
/**
* @param $classes array
* @param $item object
* @return array
*/
function normalize_wp_classes(array $classes, $item = null){
// old classes to be replaced with 'active'
$replacements = array(
'current-menu-item',
'current-menu-parent',
'current-menu-ancestor',
'current_page_item',
'current_page_parent',
'current_page_ancestor',
);
// if any of the classes above are present,
// return an array with a single class ('active')
return array_intersect($replacements, $classes) ? array('active') : array();
}
Aggiornamento: Per chiunque usi questo codice, la classe active-parent
non è più necessario (a meno che non hai ancora bisogno di IE 6 supporto). Con il selettore bambino (>
) si può efficacemente lo stile del genitore attivo e bambino attivo qualsiasi modo si desidera.
Altri suggerimenti
Il href="http://codex.wordpress.org/Function_Reference/wp_nav_menu"> wp_nav_menu funzione
Se si dà un'occhiata alla
Nota: Da quello che vedo nel codice, se si passa un array vuoto. Wordpress sarà ancora includere l'attributo class per l'elemento LI, sarà solo vuoto.
Tutte le classi sono per aggancio utili in javascript per qualcosa come Superfish, non solo per IE6.
Inoltre, senza una classe, come current_page_item
, si potrebbe non essere in grado di evidenziare la pagina corrente all'interno della navigazione.
La flessibilità è la chiave. Aggiungere tutte le classi, quelli unici per oggetti unici nella lista, dare al progettista fine un sacco di flessibilità in styling. Ma io sono d'accordo, che è un buttload di classi. Un programmatore HTML decente, progettista potrebbe fare l'equivalente con molta codice meno.
EDIT: ha reso più chiaro quello che volevo dire, senza mancare di rispetto inteso
Modificato da One Trick Pony di codice in quanto non ha funzionato per me con una versione corrente di WP (3.5.1).
Aggiunte le classi tratteggiate come WP ora include entrambe le versioni sottolineato e tratteggiate delle classi gerarchia pagina.
array_diff cambiato -.> Array_intersect come ritorni diff tutte le classi invece della lista filtrato
// for custom menus
add_filter('nav_menu_css_class', 'normalize_wp_classes', 10, 2);
// for the page menu fallback (wp_list_pages)
add_filter('page_css_class', 'normalize_wp_classes', 10, 2);
/**
* @param $classes array
* @param $item object
* @return array
*/
function normalize_wp_classes($classes, $item){
// old class => new class
$replacements = array(
'current-menu-item' => 'active',
'current-menu-parent' => 'active-parent',
'current-menu-ancestor' => 'active-parent',
'current_page_item' => 'active',
'current_page_parent' => 'active-parent',
'current_page_ancestor' => 'active-parent',
'current-page-item' => 'active',
'current-page-parent' => 'active-parent',
'current-page-ancestor' => 'active-parent'
);
// do the replacements above
$classes = strtr(implode(',', $classes), $replacements);
$classes = explode(',', $classes);
// remove any classes that are not present in the replacements array,
// and return the result
return array_unique(array_intersect(array_values($replacements), $classes));
}
non voglio raccomandare paring giù. Sì, il markup potrebbe apparire gonfio, ma questo è il solo modo si può veramente limitare lo stile, se volete che il vostro sito a guardare bene, per esempio, IE6. Tenete a mente che IE6 non supporta nativamente più selettori (cioè li.menu-item.current si romperà e predefinito li.current), quindi se si sta facendo ogni fantasia CSS e desidera lavorare con IE6, è meglio di avere un sacco di selettori di classe a disposizione che non abbastanza.
Quindi, in realtà, è potrebbe pare la lista a class = "menu-item" ... ma se avete intenzione di mai avere un menu con più di un tipo postale, avrete bisogno di menu-item-tipo-post_type ... e se si vuole fare il filtraggio più elaborato, potrai beneficiare dal menu-item -. ## classe così
Ricordate, nessuno sarà probabilmente mai vedere il codice vero e proprio dietro il vostro sito, e dopo aver definito più classi non sarà male a nessuno.
@Ray Gulick: odio immersioni in, ma concordo con @ Dan Gale, @EAMann e @ Insanity5902. Il "gonfiare" non causa alcun problema tanbgible e consente un designer per tema il menu in un sacco di modi flessibili.
Sono curioso perché la "gonfiare" vi preoccupa? Io so che non è abbastanza, ma accanto nessuno potrà mai vedere. Se la sua una preoccupazione prestazioni che sono centinaia di altre cose da affrontare prima come la riduzione delle richieste HTTP e la rasatura le dimensioni delle immagini l'ultima delle quali probabilmente avere un ordine di grandezza più benefici.