În acest tutorial vom trece printr-o metodă simplă dar eficientă pentru crearea unui meniu în afara canvasului cu HTML, CSS și JavaScript.
Pentru a obține o idee inițială despre ceea ce vom construi, aruncăm o privire la demo-ul CodePen (consultați versiunea mai mare pentru o experiență mai bună):
Notă: Acest tutorial nu se va concentra pe modul de a face meniul off-panvas accesibil sau receptiv, astfel încât acestea ar fi cu siguranță valabile pașii următori.
Marcajul nostru constă din două elemente de înfășurare:
.top-banner
element.top-nav
elementIată codul HTML:
Cu pregătirea pentru marcare, să examinăm cele mai importante stiluri necesare pentru meniul nostru.
Notă: De dragul lizibilității, acest cod CSS nu este optimizat - veți observa proprietăți duplicate pe care ați putea dori să le eliminați în versiunea proprie.
.top-banner
elementul arata astfel:
În ceea ce privește stilurile sale, facem următoarele:
.Meniul împachetarea
element.Iată stilurile de care avem nevoie pentru a realiza toate acestea:
.top-banner afișare: flex; lățime: calc (100% - 150px); înălțime: 100vh; transform: translateX (150px); background: url (IMAGE_PATH) centru de repetare / fixare; .top-banner-overlay afișare: flex; direcție flexibilă: coloană; justify-content: centru; lățime: 350px; padding: 20px; tranziție: transformare .7s; culoare albă; fundal: rgba (0, 0, 0, .7);
.top-nav
elementul arata astfel:
În acest caz, vom face următoarele:
.-Meniu fix
element..Meniul împachetarea
element implicit. Pentru a face acest lucru, nu îi acordăm o valoare de proprietate, cum ar fi afișare: niciuna
. De fapt, folosim Traduceți()
funcția de mutare este 200px spre stânga. Rețineți că lățimea elementului este de 350 px, astfel încât o parte din acesta este încă în fereastra de vizualizare. Cu toate acestea, nu este vizibil deoarece elementul este poziționat sub .-Meniu fix
element.Aruncați o privire asupra stilurilor CSS corespunzătoare:
.top-nav .menu-wrapper poziție: fix; top: 0; stânga: 0; fund: 0; lățime: 350px; padding: 20px; transformă: translateX (-200px); tranziție: transformare .7s; fundal: # B1FFE5; .top-nav .menu-wrapper .menu opacitate: 0; tranziție: opacitate .4s; .top-nav .fixed-menu poziție: fix; top: 0; stânga: 0; fund: 0; afișaj: flex; direcție flexibilă: coloană; lățime: 150px; padding: 20px; fundal: acvamarină;
În acest moment, vom folosi un cod JavaScript simplu pentru a manipula starea meniului off-canvas.
Să descriem acțiunile necesare:
.meniu deschis
este apăsat butonul, meniul ar trebui să apară cu un efect frumos de alunecare și suprapunerea ar trebui să fie împinsă simultan spre dreapta. Opțional, putem face mai multe lucruri în această stare. În exemplul nostru, adăugăm o umbră cutie la ::inainte de
pseudo-element al suprapunerii și dezvăluie lista de meniuri utilizând un efect de decolorare..meniu close
butonul trebuie să dispară cu un efect frumos de alunecare și suprapunerea ar trebui să fie împinsă simultan în stânga.Iată codul JavaScript care implementează acest comportament:
const meniuOpen = document.querySelector (". top-nav .menu-deschis"); const meniuClose = document.querySelector ("top-nav .menu-close"); const menuWrapper = document.querySelector ("top-nav .menu-wrapper"); const topBannerOverlay = document.querySelector ("top-banner-overlay"); funcția toggleMenu () menuOpen.addEventListener ("click", () => menuWrapper.classList.add ("este deschis"); topBannerOverlay.classList.add ("este mutat"); menuClose.addEventListener ("click", () => menuWrapper.classList.remove ("este deschis"); topBannerOverlay.classList.remove ("este mutat");); toggleMenu ();
Și mai jos veți găsi stilurile CSS asociate:
.top-banner-overlay.is-a mutat transform: translateX (350px); .top-banner-overlay.is-mutat :: înainte de content: "; position: absolute; top: 0; bottom: 0; right: 100%; .top-nav .menu-wrapper.is-a deschis transform: translateX (150px); .top-nav .menu-wrapper.is-deschise .menu opacity: 1; transition-delay: .6s;
Această demonstrație va funcționa bine numai pe browserele desktop. Dispozitivele mobile vor necesita un alt aspect al paginii, dar acest lucru depășește scopul acestui tutorial. Ca de obicei, folosim Babel pentru a compila codul ES6 până la ES5.
Singura problemă mică pe care am întâlnit-o în timpul testării este schimbarea redării textului care se întâmplă atunci când suprapunerea este animată. Deși am încercat mai multe abordări propuse în diferite filete de suprapunere Stack, nu am reușit să găsesc o soluție directă pentru toate sistemele de operare și browserele. Deci, păstrați-vă în minte că s-ar putea vedea mici probleme de randare font ca suprapunerea este animat.
Asta e, oameni buni! Am reușit să construim un meniu util în afara canvasului cu un cod relativ simplu.
Sper că v-ați bucurat de rezultatul final și îl veți folosi ca pe o sursă de inspirație pentru crearea unor meniuri chiar mai puternice în afara pânzei. Și, bineînțeles, dacă construiți ceva, nu uitați să le împărtășiți cu noi!