Sticky navbar funktioniert nicht?
Guten Tag, ich muss für die Schule eine Webseite erstellen und wollte eine Sticky navbar einfügen. Dabei soll der untere Teil mit La Petite France, Cathédrale, rivière kleben bleiben. Kann mir jemand helfen?
<script>
window.onscroll = function() {myFunction()};
var navbar = document.getElementById("navbar");
var sticky = navbar.offsetTop;
function myFunction() {
if (window.pageYOffset >= sticky) {
navbar.classList.add("sticky")
} else {
navbar.classList.remove("sticky");
}
}
</script>
<header>
<section class="hero is-medium">
<div class="hero-head">
<nav class="navbar">
<div class="container">
<div class="navbar-brand">
<a class="navbar-item" href="index.html">
<img src="cigogne_strasbourg.png" alt="Logo">
</a>
<span class="navbar-burger" data-target="navbarMenuHeroB">
<span></span>
<span></span>
<span></span>
</span>
</div>
<div id="navbarMenuHeroB" class="navbar-menu">
<div class="navbar-end">
<a class="navbar-item is-active" href="index.html">
Home
</a>
<a class="navbar-item" href="details.html">
Y arriver
</a>
<a class="navbar-item" href="anmeldung.html">
Composer ses vacances
</a>
<span class="navbar-item">
<a class="button is-info is-inverted">
<!--<span class="icon">
<i class="fab fas fa-fingerprint"></i>
</span>-->
<span>Einloggen</span>
</a>
</span>
</div>
</div>
</div>
</nav>
</div>
<div class="hero-body">
<div class="tile is-ancestor">
<div class="tile is-parent">
<div class="tile is-child is-4 is-align-content-end">
<h1 class="title is-2">Strasbourg</h1>
<h2 class="subtitle is-4">La P'tit Venise</h2>
</div>
<div class="tile is-child is-8">
<figure class="image">
<img width="10" src="cathedralefenetre.jpg" alt="Fenêtre"/>
</figure>
</div>
</div>
</div>
</div>
<div id="navbar">
<nav class="tabs is-boxed is-fullwidth">
<div class="container">
<ul>
<li class="is-active">
<a href="javascript:void(0)">La Petite France</a>
</li>
<li>
<a href="javascript:void(0)">La Cathédrale Notre-Dame</a>
</li>
<li>
<a href="javascript:void(0)">La rivière</a>
</li>
</ul>
</div>
</nav>
</div>
</section>
</header>
CSS:
.content {
padding: 16px;
}
.sticky {
position: fixed;
top: 0;
width: 100%;
}
.sticky + .content {
padding-top: 60px;
}
1 Antwort
Vom Fragesteller als hilfreich ausgezeichnet
Du brauchst keine Javascript Funktion, die dir die Klasse "sticky" zum Element hinzufügt.
Du benötigst nur:
position: sticky;
top: 30px;
Bei der CSS Klasse.
Dann bleibt das Element im Versatz 30px von oben kleben.
Woher ich das weiß:Studium / Ausbildung – Begeisterter Beweger der 0 und 1
Vielen Dank für den Kommentar. Ich habe es ausprobiert und die Leiste bleibt jetzt immer oben kleben. Das ist schonmal super :)
Allerdings war meine Idee, dass sie erst sticky wird, wenn ich an ihr "vorbeiscrolle". (Wie zB hier gezeigt: https://www.w3schools.com/howto/tryit.asp?filename=tryhow_js_navbar_sticky). (Ich habe es auch nach dieser Webseite ausprobiert, allerdings schaffte ich es immer nur soweit, dass die Leiste immer oben klebt).
Ich kenne mich leider noch nicht so aus mit CSS und erst recht nicht mit Javascript, aber vielleicht klappt es doch noch mit ein paar Anleitungen und Tipps.