Próbuję utworzyć stronę HTML AMP (zobacz https://www.ampproject.org) Ale nie mogę znaleźć nigdzie, jak masz stworzyć responsywne menu hamburgera? JavaScript jest niedozwolony i nie ma dostępnych komponentów AMP?Jak utworzyć elastyczne menu hamburgerów w AMP HTML
Odpowiedz
Nie jest to obecnie możliwe bez większych hacków.
Idź wzdłuż na żądanie funkcja błędu: https://github.com/ampproject/amphtml/issues/827
I dokonał tego z użyciem :target
pseudoclass.
HTML
<nav id="slide-in-menu">
...nav menu content...
</nav>
<section class="content-section">
<a href="#slide-in-menu">Hamburger Icon</a>
</section>
CSS
#slide-in-menu {
transform: translateX(-100%);
transition: transform .2s ease-in-out;
... additional required styles ...
}
#slide-in-menu:target {
transform: translateX(0);
}
Tak też bym to zrobił, tym bardziej, że pseudo-klasa ': focus' nie działa w niektórych przeglądarkach na komputerach ze względu na rodzaj paradoksu przyczynowego, który wydaje się występować (przynajmniej w Chrome). ': target' jest znacznie bardziej efektywny i działa również na karuzele, [tak jak to odkryłem.] (https://dev.amdouglas.com/amphtml-examples/nojs-carousel/#div1) – amdouglas
Można to zrobić za pomocą: skupić pseudo klasy. Spójrz na https://fresnobee.relaymedia.com/amp/news/local/education/article61889207.html na przykład na żywo (www.washingtonpost.com również robi to w ten sposób). Możesz też poczekać, aż tag <amp-sidebar>
uruchomi się.
kod wygląda
<a id="burger" tabindex="0">☰</a>
<div id="burgerCancel" tabindex="0">☰</div>
<div id="burgerMenu">
<ul>
<li><a href="/news/local/#navlink=ampnav">Local News</a></li>
<li><a href="/sports/#navlink=ampnav">Sports</a></li>
</ul>
</div>
<button id="burgerMask"></button>
i css
#burger:focus ~ #burgerMenu {
transform: translateY(0px); /* or whatever other way you want it to appear */
}
#burgerMask {
position: fixed;
top: 0;
left: 0;
width: 100vw;
height: 100vh;
background: #000;
z-index: 998;
border: 0;
opacity: 0;
transition: opacity 250ms cubic-bezier(0, .67,0,.67);
pointer-events: none; /*this is important */
}
#burger:focus ~ #burgerMask {
pointer-events: auto;
opacity: 0.7;
display: block;
}
Na żywo przykład nie działa, po kliknięciu elementu menu, menu zamyka się i nie przechodzi do adresu URL, kod w przykładzie robi to samo. Czy zdarzyło Ci się, że ten kod działa poprawnie? –
AMP ma teraz wsparcie dla menu przy użyciu komponentu amp-sidebar.
Czy próbujesz utworzyć witrynę wielostronicową za pomocą AMP? Nie jest to przypadek użycia, który moim zdaniem jest przeznaczony dla AMP. Przykłady, które widzę/buduję są "stronami", a nie "stronami internetowymi" - są uproszczonymi widokami poszczególnych artykułów ze strony spoza AMP. – MatCarey
@MatCarey Więc jak możemy uczynić strony wzmacniacza zbędnymi? Czy musimy tworzyć indywidualne strony dla wszystkich produktów, aby utworzyć stronę szczegółów wzmacniacza? –