0

I am trying to have my navigation bar change from transparent background to a black background when scrolling. Like this template: https://www.templatemonsterpreview.com/demo/58900.html?_gl=1*vx82om*_ga*MTc0ODAzMTI4OS4xNjI3NTcxNDQw*_ga_FTPYEGT5LY*MTYyNzYwNzQ4Mi40LjEuMTYyNzYwODA2NC40Nw..&_ga=2.184031919.825417510.1627571440-1748031289.1627571440 . I have tried the answers from: How to Change Navigation Bar Background with Scroll? and Changing nav-bar color after scrolling? but it does not seem to work for me.

This is my html:

<!DOCTYPE html>
<html>

<head>
    <meta charset="UTF-8">
    <meta http-equiv="X-UA-Compatible" content="IE=edge">
    <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1.0, maximum-scale=1.0, user-scalable=0">
    <title>Cuppela</title>
    <script src="js/jquery.min.js" type="text/javascript"></script>
    <script src="js/bootstrap.min.js" type="text/javascript"></script>
    <script src="js/popper.min.js" type="text/javascript"></script>
    <link rel="stylesheet" href="css/bootstrap.min.css" type="text/css">
    <link rel="stylesheet" href="css/test.css" type="text/css">
</head>
<body>
<div id="nav-menu">
    <nav id="main-nav" class="navbar navbar-expand-md fixed-top navbar-dark bg-transparent">
        <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#collapsibleNavbar">
            <span class="navbar-toggler-icon"></span>
          </button>
          <div class="collapse navbar-collapse" id="collapsibleNavbar">
            <ul class="nav navbar-nav mx-auto">
                <li class="nav-item">
                    <a class="nav-link" href="#">Home</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Shop</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">About</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Contact</a>
                </li>
            </ul>
        </div>
    </nav>
</div>
<div class="container-fluid" id="top-main"> 

    <div id="top_text">
        <h1>Cuppela Made With Sugar</h1>
        <p style="font-size: x-large;">Delicious Homemade Cakes</p>
    </div>
    
</div>

<div id="best-sellers "class="container">
    <h2>Best Sellers</h2>
    <hr>
    <div id="best-seller-cakes" class="row">
        <div class="col-xs-12 col-sm-6 col-lg-3">
            <img src="images/chocolate_cake.jpg">
            <h4>Good<br>Cakes</h4>
            <p>Delicious Cake with Awesome Goodness</p>
        </div>
        <div class="col-xs-12 col-sm-6 col-lg-3">
            <img src="images/red_velvet_cake.jpeg">
            <h4>Awesome<br>Cakes</h4>
            <p>Delicious Cake with Awesome Goodness</p>
        </div>
        <div class="col-xs-12 col-sm-6 col-lg-3">
            <img src="images/strawberry_cake.jpg">
            <h4>Great<br>Cakes</h4>
            <p>Delicious Cake with Awesome Goodness</p>
        </div>
        <div class="col-xs-12 col-sm-6 col-lg-3">
            <img src="images/cake_seven.jpg">
            <h4>Delicious<br>Cakes</h4>
            <p>Delicious Cake with Awesome Goodness</p>
        </div>
    </div>
</div>

<footer>
    <div class="container-fluid" id="footer-content">
    <h3>Test</h3>
    </div>
</footer>

<script type="text/javascript">
$(document).ready(function(){
    $(window).on("scroll",function(){

        if($(document).scrollTop() > 50)
        {
            $("#nav-menu").css({background:"black"});
        }
        else
        {
            $("#nav-menu").css({background:"transparent"});
        }
    })
});
</script>

</body>
</html>

This is my css:

body{
    margin: 0px;
}

li a:hover {
    background-color: #ff9900;
    border-radius: 10px;
}

li a{
    color: white !important;
}

.nav-link{
    padding: 0 0 .2rem
}

#top-main{
    background-image: url(../images/cake_six_two.jpg);
    height: 100vh;
}

#nav-menu{
    font-size: medium;
    position: relative;
}

#top_text{
    color: white;
    text-align: center;
    position: relative;
    top: 50%;
    left: 50%;
    /* bring your own prefixes */
    transform: translate(-50%, -50%);
}

h1{
    font-size: 500%;
    text-align: center;
}


h2{
    text-align: center;
}

#best-sellers{
    text-align: center;
}

#best-seller-cakes{
    text-align: center;
}

h4
{
    font-size: x-large;
    font-weight: bold;
    font-family: Georgia, 'Times New Roman', Times, serif;
}

#footer-content
{
    text-align: center;
}
mmm000
  • 89
  • 8
  • You can remove/add class from jquery like **$('#main-nav').removeClass('bg-transparent')** or **$('#main-nav').addClass('bg-dark');** – Raeesh Alam Aug 05 '21 at 09:30

3 Answers3

2

add/remove class by jQuery on #main-nav instead of #nav-menu.

See below running snippet.

$(document).ready(function () {
    $(window).on("scroll", function () {
        if ($(document).scrollTop() > 50) {
            $("#main-nav").addClass('bg-dark').removeClass('bg-transparent');
        }
        else {
            $("#main-nav").addClass('bg-transparent').removeClass('bg-dark');
        }
    })
});
li a:hover {
    background-color: #ff9900;
    border-radius: 10px;
}
li a{
    color: white !important;
}
.nav-link{
    padding: 0 0 .2rem
}
#top-main{
    background-image: url(https://i.stack.imgur.com/Z12tw.png);
    height: 100vh;
}
#nav-menu{
    font-size: medium;
    position: relative;
}
#top_text{
    color: white;
    text-align: center;
    position: relative;
    top: 50%;
    left: 50%;
    /* bring your own prefixes */
    transform: translate(-50%, -50%);
}
h1{
    font-size: 500%;
    text-align: center;
}
h4{
    font-size: x-large;
    font-weight: bold;
    font-family: Georgia, 'Times New Roman', Times, serif;
}
<link href="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/css/bootstrap.min.css" rel="stylesheet">

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.5.1/jquery.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/@popperjs/core@2.9.3/dist/umd/popper.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@5.1.0/dist/js/bootstrap.min.js" ></script>


<div id="nav-menu">
    <nav id="main-nav" class="navbar navbar-expand-md fixed-top navbar-dark bg-transparent">
        <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#collapsibleNavbar">
            <span class="navbar-toggler-icon"></span>
        </button>
        <div class="collapse navbar-collapse" id="collapsibleNavbar">
            <ul class="nav navbar-nav mx-auto">
                <li class="nav-item">
                    <a class="nav-link" href="#">Home</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Shop</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">About</a>
                </li>
                <li class="nav-item">
                    <a class="nav-link" href="#">Contact</a>
                </li>
            </ul>
        </div>
    </nav>
</div>

<div class="container-fluid" id="top-main">
    <div id="top_text">
        <h1>Cuppela Made With Sugar</h1>
        <p style="font-size: x-large;">Delicious Homemade Cakes</p>
    </div>
</div>

<div id="best-sellers" class="container text-center">
    <h2>Best Sellers</h2>
    <hr>
    <div id="best-seller-cakes" class="row text-center">
        <div class="col-xs-12 col-sm-6 col-lg-3">
            <img src="https://i.stack.imgur.com/Z12tw.png" class="w-100">
            <h4>Good<br>Cakes</h4>
            <p>Delicious Cake with Awesome Goodness</p>
        </div>
        <div class="col-xs-12 col-sm-6 col-lg-3">
            <img src="https://i.stack.imgur.com/Z12tw.png" class="w-100">
            <h4>Awesome<br>Cakes</h4>
            <p>Delicious Cake with Awesome Goodness</p>
        </div>
        <div class="col-xs-12 col-sm-6 col-lg-3">
            <img src="https://i.stack.imgur.com/Z12tw.png" class="w-100">
            <h4>Great<br>Cakes</h4>
            <p>Delicious Cake with Awesome Goodness</p>
        </div>
        <div class="col-xs-12 col-sm-6 col-lg-3">
            <img src="https://i.stack.imgur.com/Z12tw.png" class="w-100">
            <h4>Delicious<br>Cakes</h4>
            <p>Delicious Cake with Awesome Goodness</p>
        </div>
    </div>
</div>

<footer>
    <div class="container-fluid text-center" id="footer-content">
        <h3>Test</h3>
    </div>
</footer>
Raeesh Alam
  • 3,380
  • 1
  • 10
  • 9
1

Ok you using Bootstrap. First you need to remove class bg-transparent because it have !important background color:

enter image description here

And here is tested working solution for you:

(function($){
    $(window).on("scroll",function(){
        var $navbar = $('#main-nav');
        if($(document).scrollTop() > ($navbar.height()+10))
        {
            $navbar
                .removeClass('bg-transparent')
                .addClass('bg-dark');
        }
        else
        {
            $navbar
                .addClass('bg-transparent')
                .removeClass('bg-dark');
        }
    });
}(jQuery || window.jQuery));

How this work?

Generally, during the scroll I check how far the document is from the top of the screen. I take the header height and add 10px to it for some offset.

When the position of the document is larger than the header (when we scrolled down) then I remove the transparent background and add black background. If I scroll up, I remove the black background and restore the transparent background.

I just automatically add and remove classes in the header.

Ivijan Stefan Stipić
  • 6,249
  • 6
  • 45
  • 78
0

Try with this way

I have change Target #nav-menu to #main-nav

$(document).ready(function(){
    $(window).on("scroll",function(){

        if($(document).scrollTop() > 50)
        {
            $("#main-nav").css('background', 'black !important;');
        }
        else
        {
            $("#main-nav").css('background','transparent !important;'});
        }
    })
});
Lalji Tadhani
  • 14,041
  • 3
  • 23
  • 40