Crearea unui meniu responsive in WordPress doar din HTML si CSS

Crearea unui meniu responsive in WordPress doar din HTML si CSS

wordpress-menu-in-php-shortcode-responsive

Fisierele de care avem nevoie:
header.php (sau fisierul in care avem meniul)
style.css (sau fisierul ce contine stilul elementelor din header.php)

Pentru a crea un meniu responsive urmam pasii de mai jos:

1. Cream meniul pentru versiunea desktop(neresponsive) adaugand functia WordPress pentru meniu in header.php:

<?php wp_nav_menu(); ?>

care poate avea si argumente, ca aici:

<?php wp_nav_menu( array( 'theme_location' => 'primary', 'menu_class' => 'nav-menu' ) ); ?>

pe care o includem intr-un wrapper cu id-ul #main-menu:

<div id="main-menu"><?php wp_nav_menu(); ?></div>



2. Cream meniul responsive duplicand pasul 1 si inlocuind id-ul #main-menu cu id-ul #responsive-menu:

<div id="responsive-menu"><?php wp_nav_menu(); ?></div>



3. Adaugam butonul de toggle deasupra meniului cu id-ul #responsive-menu. Butonul va fi label-ul unui checkbox; deci adaugam un label (care nu va contine nici un text pentru ca ii vom atribui o imagine in CSS-pasul 6) si un checkbox cu id-ul #show-menu. Adaugam atributul for label-ului, care primeste ca valoare id-ul checkbox-ului, #show-menu (for="show-menu"). De asemenea, ii adaugam clasa .show-menu label-ului ca sa il putem personaliza (pasul 6).

<label for="show-menu" class="show-menu"> </label>
<input type="checkbox" id="show-menu" role="button">



4.HTML-ul ar trebui sa arate asa:

<div id="main-menu"><?php wp_nav_menu(); ?></div>
<label for="show-menu" class="show-menu"> </label>
<input type="checkbox" id="show-menu" role="button">
<div id="responsive-menu">
<?php wp_nav_menu(); ?>
</div>



Urmeaza partea de CSS pe care o introducem in fisierul style.css:


5. Adaugam stil meniurilor : meniul pentru desktop va afisa elementele orizontal, iar meniului responsive va afisa elementele vertical(puteti adauga si alte elemente de stil cum ar fi: padding, text-underline, color sau background-color ca sa obtineti stilul dorit pentru meniul vostru):

#main-menu ul li {
float: left;
text-align: center;
padding: 10px 20px;
}
#responsive-menu ul li {
float: none;
text-align: center;
}



6. Ati observat ca label din HTML nu contine nici un text, deci nu o sa apara nimic inaintea checkboxului; in loc de text vrem un buton de meniu responsive format din 3 linii orizontale; de aceea personalizam tag-ul <label> printr-o imagine menu.png (pe care o puteti crea intr-un program de grafica, cum ar fi Photoshop, sau poate o aveti deja) ca sa arate ca un buton de meniu responive. Adaugam imaginea in folderul images din tema noastra:

.show-menu {
background: url(../images/menu.png) center no-repeat;
background-size: contain;
height: 20px;
text-align: center;
padding: 10px 0;
display: none;
cursor: pointer;
text-decoration: none;
color: #fff;
}



7. Ascundem checkbox-ul si label-ul pentru versiunea desktop; label-ul il vom afisa doar pentru dimensiunile dispozitivelor mobile (pasul 9):

input[type=checkbox]{
display: none;
}
.show-menu {
display: none;
}



8. Cand checkbox-ul este bifat, vom afisa toate elementele imediat urmatoare checkbox-ului, care au id-ul #responsive-menu:

input[type=checkbox]:checked + #responsive-menu{
display: block;
}



Urmeaza partea responsive:


9. Alegem pana la ce dimensiune a ecranului sa se afiseze meniul responsive, printr-un media query; eu am ales 768px; ascundem meniul cu id-ul #main-menu, afisam label-ul cu clasa .show-menu; peste dimensiunea de 768px se va afisa meniul initial, cel cu id-ul #main-menu:

@media only screen and (max-width: 768px) {
#main-menu {
display: none;
}
.show-menu {
display:block;
}
}



10. CSS-ul ar trebui sa arate asa:

#main-menu ul li {
float: left;
text-align: center;
padding: 10px 20px;
}
#responsive-menu ul li {
float: none;
text-align: center;
}
.show-menu {
background: url(../images/menu.png) center no-repeat;
background-size: contain;
height: 20px;
text-align: center;
padding: 10px 0;
display: none;
cursor: pointer;
text-decoration: none;
color: #fff;
}
input[type=checkbox]{
display: none;
}
.show-menu {
display: none;
}
input[type=checkbox]:checked + #responsive-menu{
display: block;
}
@media only screen and (max-width: 1020px) {
#main-menu {
display: none;
}
.show-menu {
display:block;
}
}

Leave a Reply

Your email address will not be published. Required fields are marked *