Home > Software design >  Making my navbar scale with a resized window
Making my navbar scale with a resized window

Time:01-26

I'm trying to learn how to make a responsive navbar. I have managed to get the bar itself to resize depending on monitor resolution but the buttons don't resize with it.

Ive tried using %, vm and vh, but I don't believe this is the correct solution or I'm implementing it incorrectly. Here's my CSS.

Thanks in advance.

#topnav {
     width: 100vw;
     height:10vh;
     position: fixed;
     top: 0;
     right: 0;
     background-color: Black;
     font-family: "Lucida Grande", "Lucida Sans Unicode", "Lucida Sans", "DejaVu Sans", Verdana, "sans-serif";
     font-size: 20px;
     float: right;
     display: flex;
     justify-content: space-between;
    
}
 .nav-link-container {
     display: flex;
     align-content: center 
}
 #logo {
     width: 300px;
     background-color: black;
     font-weight: bold;
     color: green;
     float: left;
}
 .nav-link {
     display: block;
     padding: 1em;
     color: green;
     text-align: center;
     line-height: 60px;
     text-decoration: none;
}
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Lochquarry Outdoor Centre</title>
    <link rel="stylesheet" href="style.css" />
  </head>

  <body>
    <nav id="topnav">
      <a id="logo"  href="index.html">Lochquarry Outdoor Centre</a>
      <div >
        <a  href="#">News</a>
        <a  href="#">About</a>
        <a  href="#">Area info</a>
      </div>
    </nav>
      
    <div>
      <img  src="media/home_page_pic.jpg" width="800"/>
    </div>
      
  </body>
</html>

CodePudding user response:

Try this:

* {
  box-sizing: border-box;
}

body {
  margin: 0px;
  font-family: 'segoe ui';
}

.nav {
  height: 50px;
  width: 100%;
  background-color: black;
  position: relative;
}

.nav > .nav-header {
  display: inline;
}

.nav > .nav-header > .nav-title {
  display: inline-block;
  font-size: 22px;
  color: #fff;
  padding: 10px 10px 10px 10px;
}

.nav > .nav-btn {
  display: none;
}

.nav > .nav-links {
  display: inline;
  float: right;
  font-size: 18px;
}

.nav > .nav-links > a {
  display: inline-block;
  padding: 13px 10px 13px 10px;
  text-decoration: none;
  color: #efefef;
}

.nav > .nav-links > a:hover {
  background-color: rgba(0, 0, 0, 0.3);
}

.nav > #nav-check {
  display: none;
}

@media (max-width:600px) {
  .nav > .nav-btn {
    display: inline-block;
    position: absolute;
    right: 0px;
    top: 0px;
  }
  .nav > .nav-btn > label {
    display: inline-block;
    width: 50px;
    height: 50px;
    padding: 13px;
  }
  .nav > .nav-btn > label:hover,.nav  #nav-check:checked ~ .nav-btn > label {
    background-color: rgba(0, 0, 0, 0.3);
  }
  .nav > .nav-btn > label > span {
    display: block;
    width: 25px;
    height: 10px;
    border-top: 2px solid #eee;
  }
  .nav > .nav-links {
    position: absolute;
    display: block;
    width: 100%;
    background-color: #333;
    height: 0px;
    transition: all 0.3s ease-in;
    overflow-y: hidden;
    top: 50px;
    left: 0px;
  }
  .nav > .nav-links > a {
    display: block;
    width: 100%;
  }
  .nav > #nav-check:not(:checked) ~ .nav-links {
    height: 0px;
  }
  .nav > #nav-check:checked ~ .nav-links {
    height: calc(100vh - 50px);
    overflow-y: auto;
  }
}
<!DOCTYPE html>
<html>
  <head>
    <meta charset="utf-8" />
    <title>Lochquarry Outdoor Centre</title>
    <link rel="stylesheet" href="style.css" />
  </head>

  <body>
    <div >
      <input type="checkbox" id="nav-check">
      <div >
        <div >
          Lochquarry Outdoor Centre
        </div>
      </div>
      <div >
        <label for="nav-check">
          <span></span>
          <span></span>
          <span></span>
        </label>
      </div>
      
      <div >
        <a href="#">News</a>
        <a href="#">About</a>
        <a href="#">Area info</a>
      </div>
    </div>      

  </body>
</html>

CodePudding user response:

you can set when your button should resize with @media (max-width: //your screen width here//){ } and then put font-size: //your size here// to resize your button. with @media (max-width: //your screen width here//){ } you can use css under certain condition, say when your monitor width is 390 pixel wide (width of a iphone 14), then this button has a size of 23 px/1.4 rem

hope i could help you

  • Related