Ez a menü bot egyszerű, nem figyel ablak átméretezést és hasonlókat.
Ha nincs benne tapasztalatod és nem akarsz vele szórakozni, akkor legegyszerűbb egy bootstrap-es navbart behúzni: https://getbootstrap.com/docs/4.1/components/navbar/
Felbontásfüggetlen menü, mely mobil eszközön összeugrik és hamburger ikonnal nyitható.
A működő kódot ide kattintva tudod megnézni.
<nav>
<div class="navbar clear">
<a href="" class="logo">Logo</a>
<div class="menu-toggle"><span class="icon-bar"></span><span class="icon-bar"></span><span class="icon-bar"></span></div>
<div class="menu">
<ul>
<li><a href="">menu 1</a></li>
<li><a href="">menu 2</a></li>
<li>
<span class="open-submenu">menu 3 <span class="arrow down"></span></span>
<ul>
<li><a href="">almenupont 1</a></li>
<li><a href="">almenupont 2</a></li>
<li><a href="">almenupont 3</a></li>
<li><a href="">almenupont 4</a></li>
</ul>
</li>
<li><a href="">menu 4</a></li>
</ul>
</div>
</div>
</nav>
* {
margin: 0;
padding: 0;
border: 0
}
body {
background: #f4f4f4;
font-family: tahoma;
font-size:14px
}
a { text-decoration:none }
.clear:before,
.clear:after {
content:" ";
display: table
}
.clear:after { clear: both }
.arrow {
display: inline-block;
width: 0;
height: 0;
margin-left: 2px;
vertical-align: middle
}
.arrow.down {
border-top: 4px solid;
border-right: 4px solid transparent;
border-left: 4px solid transparent
}
.arrow.up {
border-bottom: 4px solid;
border-right: 4px solid transparent;
border-left: 4px solid transparent
}
nav {
width: 100%;
background: #6CC49B
}
nav .navbar {
width: 95%;
max-width: 1000px;
margin:0 auto
}
nav a { color: #fff }
nav .logo {
float: left;
display: inline-block;
font-size: 30px;
font-weight: bold
}
nav .menu-toggle {
cursor: pointer;
display: none;
float: right;
padding: 12px;
margin: 10px 0;
background: #62b38d;
transition: background-color .5s
}
nav .icon-bar {
background-color: #fff;
display: block;
width: 22px;
height: 2px
}
nav .icon-bar + .icon-bar { margin-top: 4px }
nav .menu ul { float: right }
nav .menu li {
float: left;
list-style: none;
border-left: 2px solid #62b38d
}
nav .menu li:first-child { border-left: 0 }
nav .menu li a,
nav .open-submenu {
color: #fff;
cursor: pointer;
position: relative;
display: block;
padding: 12px 20px;
transition: background-color .3s
}
nav .menu li a:hover,
nav .open-submenu:hover ,
nav .open-submenu.active,
nav .menu-toggle.active {
background: #FFBB22;
transition: background-color .5s
}
nav .menu ul ul {
z-index: 100;
display: none;
float: none;
position: absolute;
background: #FFBB22
}
nav .menu ul ul li {
float: none;
border: 0
}
nav .menu ul ul a:hover {
background: #62b38d;
transition: background-color .3s
}
@media(max-width:600px) {
nav .logo { padding-top: 8px }
nav .menu-toggle { display: inline-block }
nav .menu { display: none; clear: both }
nav .menu > ul { float: none }
nav .menu li { width: 100%; border: 0 }
nav .menu li:last-child { margin: 0 0 15px 0 }
nav .menu li a,
nav .open-submenu {
display: block;
background: #62b38d;
padding: 10px;
margin: 2px 0 0 0
}
nav .menu ul ul {
position: static;
background: transparent;
display:none
}
nav .menu ul ul a { background: transparent }
nav .menu ul ul a:hover { background: #FFBB22 }
}
var menu = $(".menu");
$(window).resize(function(){
$(".menu-toggle").removeClass("active");
if($(window).innerWidth() > 600){
menu.show();
} else {
menu.hide();
}
});
$(".menu-toggle").click(function(){
$(this).toggleClass("active");
menu.slideToggle();
})
$(".open-submenu").click(function(){
$(this).toggleClass("active");
$(this).next("ul").slideToggle();
$(this).children(".arrow").toggleClass("down up");
});
Reszponzív menünél hogyan lehetne azt megcsinálni, hogy a menü oldalról kússzon be úgy ahogy neked volt itt? Gondolom egészen más markup kell hozzá.
Hali, csináltam egy hasonló menüt, csak nekem hoverre nyílik le az almenü. Viszont ezzel az a problémám, hogy meg kellene oldani valahogy, hogy mobil eszközön mikor megjelenik, ne hover hanem click legyen. Írtam rá egy feltételt a javascriptben, de valamiért nem működik.. Nagyjából ennyi a kód:
if($(window).innerWidth() > 800) {
$(".page_item_has_children1").hover(function(){
$('.open-submenu.1').toggleClass("active");
$('.open-submenu.1').next("ul").fadeToggle("fast");
$(this).children(".arrow").toggleClass("down up");
});
} else {
$(".page_item_has_children1").click(function(){
$('.open-submenu.1').toggleClass("active");
$('.open-submenu.1').next("ul").fadeToggle("fast");
$(this).children(".arrow").toggleClass("down up");
});
}
Köszi a választ! Megcsináltam, és most igazából működne a dolog, csak nekem olyan a menüm, hogy a lenyitható menük is “a” tagek, és ha rákattintunk, átvisz a másik page-ra mielőtt lenyílna. Gondolom számtalan megoldás van a probléma kiküszöbölésére, nekem most van egy ötletem, de az kicsit túl bonyolított, ezért kérdezlek inkább téged, hogy te hogy oldanád ezt meg?
Köszönöm megint a segítséget! Sikerült megoldani. Ez mellett még hozzá írtam a feltételhez, hogy ne csak mobil eszközöknél, hanem 800 alatti ablakszélesség mellett is kattintani kelljen. (A feltétel így néz ki: if(jQuery.browser.mobile || window.innerWidth < 800) ) Működni működik, viszont ha összehúzom a böngészőablakot 800 alatti méretre, csak azután fog működni a clickes dolog, miután frissítettem az oldalt, addig hover van. Fordítva ugyan így igaz. Gondolom ez azért van, mert a script csak az oldal betöltésekor fut végig, és amilyen eredményt kapott az elágazásban, azt tartja meg, nem ellenőrzi le újra a feltételt, csak ha újra töltődik az oldal. Ez igazából annyira nem nagy probléma, mert egy átlagos felhasználó normál esetben nem fogja összevissza méretezni a böngésző ablakát, viszont ettől függetlenül talán ezt a problémát meg tudom majd oldani azzal a függvénnyel, amit ebben a videóban is használtál a .menu-toggle "active" class-jának eltávolítására ablak átméretezés esetén. Úgy gondoltam ki, hogy minden ablakátméretezéskor az elágazást végig futtatja, és így talán majd megfelelően működni fog, de ma már nem próbálom ki, csak holnap.
A hover nélküli egyszerűbb változatot én is szívesebben megcsinálnám, viszont úgy gondoltam jobb ezen is végigmenni, mert ha majd webdesignerként dolgozok, és ezt követelik tőlem, valahogy ezt is meg kell oldani. Jelenleg most még tapasztalatot gyűjtök, és eközben a portfóliómat készítem, és szerintem jó ha egy portfólióban elemenként több fajta megoldás is található, és nem egyféleképpen van megoldva az összes.
Hali! JQuery-ben slideToggle-n kívül milyen toggle effectek vannak még? Igazából én csak egy sima, fokozatosan megjelenő almenüt akarok és nem legördülőt. Sima toggleval megy a dolog, csak szeretnék egy kis transition hatást elérni megjelenéskor.
Köszi
Kedves Tamás!
Megörültem a példa menüdnek, ki is próbáltam (amúgy tetszik), de két problémába ütköztem:
– 1./ha több almenüm van, akkor ha egyikből átlépek a másikba, nem csukja be az előzőt, így beteríti az oldalt (ez a teljes képernyőnél is így van).
-2./ mivel nincsenek oldalak a példában, összeházasítottam, egy másik responzív site-al, de a menü így egyáltalán nem csuk be (ez csak a mobil nézetben van így).
Köszönöm előre is: V. Péter
Szia Tamás!
A tutorialod alapján elkészítettem a reszponzív menüt. Amikor a számítógép böngészőjén húzom össze a képet, tökéletesen követi a képméret változását a media query-k szerint. Mobilon viszont nem a telefon kijelzőjének megfelelő media query jut érvényre, hanem eggyel nagyobb. Ennek mi lehet az oka?
Szia Tamás!
Lehetséges elérni valahogy, hogy az almenük szélessége azonos legyen az elem szélességével, amire rákattintottunk, hogy megjelenjen?
Szia
Ott még nem tartok, hogy magamnak legyártsak egy ilyet, de ezt nagyon szépen testre tudom szabni és jól is működik.
Egy dologra még nem jöttem rá: hogy tudom azt elérni, hogy ezek a menüpontok a középre legyen igazítva? Balra és jobbra már sikerült, de mit és hova írjak be, hogy szépen középen legyenek?
Köszönöm 🙂
Szia írd azt, hogy :
align=”center”
Vagy
css-ben: center center fixed;
Szia,
Nagyon jó ez a menü, az alapjait jól tudom használni. Egy problémám azonban felmerült. Hogyan lehet kiegészíteni úgy a hamburger ikonos menüt, hogy amikor valamelyik linkre (oldalon belülit használok) kattintok, akkor a menü visszacsukódjon automatikusan. Ugyan ezt szeretném akkor is elérni ha valaki megnyitja a menüt, de mégsem kattint bele csak elkezd fel-le görgetni az oldalon, akkor is visszamenjen a menü.
Előre is köszi a segítséget 🙂
Üdv!
Jó ez az egész blog, amit csinálsz, irtó hasznos! De ezzel a CSS menüvel van egy kis magán-problémám. Én úgy szoktam meg a menü rendszert, hogy ha ráhúzom a kurzort, akkor magától kinyílik a lenyíló menü. Ha pedig elviszem felőle, akkor bezáródik. Itt viszont az van, hogy csak akkor nyílik- és záródik, ha ráklikkelek, még akkor is, ha az összes lenyíló menüt megnyitom. Ezt nem lehetne orvosolni valahogy?
Köszönöm!
Hello Cyrex!
Az mért van, hogy ha az almenüre ráírom pl, hogy left: -10px vagy akármi, akkor azt nem a hozzá legközelebb álló relative elemhez pozícionálja, hanem a böngésző széléhez pozícionálja?
Válaszodat előre köszönöm 🙂
Helló Tamás!
Tudom, hogy ez a kérdés nem ehhez a témához tartozik, de azt szeretném tudni, hogy miért van az, hogy van egy inputom, amin van bal- és jobb oldalon is 10 px padding és erre az inputra ráteszem a 100%-os szélességet akkor túl fog lógni 20px-el, de látom, hogy nálad is van az inputokon belül 10px-es bal és jobb padding mégsem lóg túl nálad, pedig 100%-ra van állítva nálad is a szélességük. Nálam miért lóg túl?
Válaszodat előre is köszönöm! 🙂
Hello!
Nagyon jó és hasznos responsive menü, de safari böngészőben megnyitás után ha sok benne a menü és kicsit legörgetnék közöttük rögtön összecsukódik. Teszteltem iphone 4s-en iphone 5s-en és iphone 6-on viszont chrome böngészőben az iphoneokon is jól működik.
Szia én még nagyon kezdő vagyok, és meg kell jegyeznem nagyon tetszik amit csinálsz.
De lenne egy kérdésem nekem mégsem müködik ez amit csináltál mi lehet a baj a teljes html-t és css-t li másoltam minden ugyan az mégsem nyílik le a hamburger ikon.
Köszönöm a segítséget.
Igen ebben teljesen biztos vagyok, hogy nálam van a probléma és 90%-ig biztos vagyok benne, hogy a jquery.js – nél van gond mivel még nem használtam ilyet vagy a head részből hagytam ki valamit vagy nem tudom.
Köszönöm a gyors válaszod
nice very nice tutorial thank you for jquery codes.. I didn’t see before responsive menu tutorial with submenu and toggle class. Good luck!
Kedves Tamás nekem a fejlécben lévő adatok kellenének de azokat nem tudom leírni mivel a videóban nem mutatod meg kérlek el tudnád küldeni.
előre is köszönöm!
Tegnap infórmatika órára a példaképedet kellet bemutatni! Ha nem bánod téged választotalak! 😀 Csak így tovább Tamás!!!
Kedves Tamás!
Próbából elkészítettem a Responsive menü-t, de nem működik.
Nem nyílik le az almenü.
Szerintem a jqueri.js hiányzik. Honnan tudom letölteni???
Túl gyorsan tettem fel a kérdést!
Közben már megoldottam a problémát.
De azért köszi
Szuperul működik!!!!
Innen is betudod tölteni a könyvtárakat:
https://developers.google.com/speed/libraries/devguide#jquery
Kedves László!
Hogy sikerült megoldanod ezt a problémát, mert én is ezzel küszködök. :/
Nekem egy lezáró tag hiányzott a jquery-nél…rögtön sokkot kapok 🙂
Üdv!
Azt szeretném elérni hogy ha a honlapomon ha egy cikk címére húzom az egeret akkor ne a cím kapjon hover effect-et hanem a hozzá tartozó kép. Tehát pl. a kép világosodjon meg.
Szia!
Köszi a videót, nagyon hasznos volt, sokat segítettél! 🙂
Ugyanakkor van egy kis problémám: kicsit más számokkal dolgoztam, de a lényeg, hogy 810px-nél kéne, hogy átváltson mobil nézetbe. Ez szépen meg is történik, viszont ha elkezdem összehúzni a böngészőt, 825px-nél eltünteti az eredeti menüt, és a 810px-nél megjelenő mobilos menüig gyakorlatilag nincs navigáció az oldalamon. Ha a js kódot kiszedem jó, ha a “$(window).resize(function(){…” részletet kiszedem, úgyszintén.
A js kódban egyébként módosítottam 810-re a számot.
Egyszerűen nem tudok rájönni, hogy mi lehet a hiba. Elírhattam valamit?
Előre is köszi a segítséget!
Mivel kevered ki a színt?
Ééértem!
…és Bootstrap-ről lesz fent videó? Szerintem sokakat érdekelne… 🙂
Juhhúú! 🙂 Erre a tutorialra vártam! 🙂 Köszi a feltöltést!
Amúgy nekem a window innerWidth 600 helyett jobban tetszik az, h 601px fölött egy display: block !important-al mindig megjeleníti a menüsort! Vagy ez rossz megoldás?
Amúgy jó lett az új design! Tetszik a színe! 🙂 Csak a gombok még olyan pirosas színűek… ha azok is kékek lennének… 😉
nagyon szaftos anyag, köszönet!
Kedves Tamás!
Régebben fenn voltak az oldaladon az eddig elkészített munkáid (weboldalaid).
Erről most esetleg nincsen valami elérhetőség?
én ez annyival egészítettem ki magamnak, ha az elvetemült user a kisfelbontáson mégis a teljes nézetet akarja megnézni akkor lehessen váltani ezt egy kis php-val oldottam meg és két styl sheettel:
ez pedig a head tag-ek közé
<?php echo "”;?>
Hali. Ez attól függ, hogy mit írsz bele a szerződésbe. Általában amúgy 50% előleget szoktak kérni, én is ennyit kérek az ügyfeleimtől, és a szerződésb...
Idővel helyrejön magától....
Üdv. Annyi lenne a kérdésem, hogy nemrég frissítettem a weboldalamon az SSL titkosítással kapcsolatos kulcsokat, certificate-okat, és minden böngészőb...
Nem vagyok programozó, de ezek nagyon alap dolgok. A WP-ben használt függvények nevei és paraméterei megtalálhatók a dokumentációban....
Szia Tamás! Valahol régebben írtad, hogy te webdesigner vagy és nem webfejlesztő (ahol már kódolás kell), mégis profin vágod a php-t. pl., hogy hívju...
Nem tudom, én nagy projektekbe csak alvállalkozóként megyek bele ahol órabérben lehet számlázni és a fővállalkozó garantáltan fizet. De azt is csak ak...
Köszönöm szépen!...
add_action( 'wp_print_styles', 'remove_css', 100 ); function remove_css() { wp_dequeue_style( 'wp-block-library' ); wp_deregister_style( 'wp-b...
Szia Tamás! Hogy lehet kigyakni a head-ből az új, 5.0.2-es wordpress Gutenberg CSS link-rel sorát? Ezt: Próbáltam egy csomó remove_action-t de ...
Az előleg hány százalék? Ha megcsinálod az egészet, és mégsem kell neki, akkor is bukod a teljes munkadíjat, nem? Vagy fázisonként fizettesz vele?...
A media object-ed tudod erre használni: https://www.w3schools.com/bootstrap/bootstrap_media_objects.asp...
Kedves Tamás! Nagyon szuper ez a videód is. Szeretnélek megkérdezni, hogy Bootstrap 3-ban működik-e az, hogy a dobozok szöveges tartalmát nem a doboz ...
Kedves Tamás,
nagyon tetszik amit csináltál az egész weboldalad igen hasznos szerintem mindenki számára.
Ezzel a menüvel kapcsolatban lenne pár kérdésem, amit nem tudtam megoldani.
Szeretném ha a az almenüt jelző háromszög csak akkor változna át kattintásra, amikor mobil verzió van, amikor asztali verzióban vagyok mindig lefele mutatna, sajnos ezt nem tudtam megoldani.
Illetve amikor le vannak nyitva az almenük és megmozdítom az ablak szélességét akkor ami le volt nyitva az nyitva maradt, s mivel több almenüs főcímem van egymás mellett ezért egymáson vannak ha kisképernyőről átváltok asztali nézetre.
Ezekben ha tudnál segíteni nagyon örülnék, sajnos én csak most ismerkedem a jqueryvel, nem igazán megy még.
Nagyon köszönöm előre is a válaszod!