Issue
Related topic: beautiful Highlight selected button in Navigation bar
Result:
Header display good when use Chrome in Laptop
But in Mobile Device, header is too small although i added code
<meta name="viewport" content="width=device-width, initial-scale=1">
Link: https://jsfiddle.net/bvotcode/1rkjwh27/6/
CSS
    body {
      background: none #000;
      margin: 0;
    }
    
    .logo {
      text-transform: uppercase;
      color: burlywood;
      text-align: center;
      font-size: 3vw;
      font-family: cursive;
      height: 90vh;
    }
    
    .sticky .logo {
      height: 0;
    }
    
    ul.menu {
      text-align: center;
      list-style-type: none;
      margin: 0;
      padding: 2vh 0;
    }
    
    .sticky ul.menu {
      padding: 1vh 0;
      position: fixed;
      width: 100%;
      top: 0;
      left: 0;
      background: none #000;
    }
    
    ul.menu li {
      display: inline-block;
      vertical-align: middle;
      list-style-type: none;
      margin: 0 1vw;
    }
    
    ul.menu li.last {
      margin: 0;
    }
    
    ul.menu li a {
      text-decoration: none;
      text-transform: uppercase;
      font-size: 1.5vw;
      font-family: cursive;
      opacity: 1;
      padding: 0 1vw;
    }
    
    ul.menu li a:hover {
      opacity: 0.6;
    }
    
    ul.menu li.news a {
      color: #36d341;
    }
    
    ul.menu li.tour a {
      color: #ff25e8;
    }
    
    ul.menu li.video a {
      color: #7353ff;
    }
    
    ul.menu li.music a {
      color: #3dc6ff;
    }
    
    ul.menu li.photo a {
      color: #ecee24;
    }
    
    ul.menu li.album a {
      color: #fa6d27;
    }
    
    ul.menu li a.active {
      background: red;
      color: #fff;
    }
    
    #content>div {
      padding: 45vh 0;
      text-align: center;
      text-transform: uppercase;
      font-size: 2vw;
      font-family: monospace;
    }
    
    #content #news {
      background: -moz-linear-gradient(-34deg, #3434f7 0%, #34c8ff 50%, #27ef77 100%);
      background: -webkit-linear-gradient(-34deg, #3434f7 0%, #34c8ff 50%, #27ef77 100%);
      background: -o-linear-gradient(-34deg, #3434f7 0%, #34c8ff 50%, #27ef77 100%);
      background: -ms-linear-gradient(-34deg, #3434f7 0%, #34c8ff 50%, #27ef77 100%);
      background: linear-gradient(124deg, #3434f7 0%, #34c8ff 50%, #27ef77 100%);
    }
    
    #content #tour {
      background: -moz-linear-gradient(-34deg, #ecee24 0%, #EC4e24 50%, #fa6d27 100%);
      background: -webkit-linear-gradient(-34deg, #ecee24 0%, #EC4e24 50%, #fa6d27 100%);
      background: -o-linear-gradient(-34deg, #ecee24 0%, #EC4e24 50%, #fa6d27 100%);
      background: -ms-linear-gradient(-34deg, #ecee24 0%, #EC4e24 50%, #fa6d27 100%);
      background: linear-gradient(124deg, #ecee24 0%, #EC4e24 50%, #fa6d27 100%);
    }
    
    #content #video {
      background: -moz-linear-gradient(-34deg, #f21c36 0%, #ff26cf 50%, #a626ff 100%);
      background: -webkit-linear-gradient(-34deg, #f21c36 0%, #ff26cf 50%, #a626ff 100%);
      background: -o-linear-gradient(-34deg, #f21c36 0%, #ff26cf 50%, #a626ff 100%);
      background: -ms-linear-gradient(-34deg, #f21c36 0%, #ff26cf 50%, #a626ff 100%);
      background: linear-gradient(124deg, #f21c36 0%, #ff26cf 50%, #a626ff 100%);
    }
    
    #content #music {
      background: -moz-linear-gradient(-34deg, #36D341 0%, #4AC326 50%, #3DC6FF 100%);
      background: -webkit-linear-gradient(-34deg, #36D341 0%, #4AC326 50%, #3DC6FF 100%);
      background: -o-linear-gradient(-34deg, #36D341 0%, #4AC326 50%, #3DC6FF 100%);
      background: -ms-linear-gradient(-34deg, #36D341 0%, #4AC326 50%, #3DC6FF 100%);
      background: linear-gradient(124deg, #36D341 0%, #4AC326 50%, #3DC6FF 100%);
    }
    
    #content #photo {
      background: -moz-linear-gradient(-34deg, #f42df6 0%, #be34ff 50%, #4827ef 100%);
      background: -webkit-linear-gradient(-34deg, #f42df6 0%, #be34ff 50%, #4827ef 100%);
      background: -o-linear-gradient(-34deg, #f42df6 0%, #be34ff 50%, #4827ef 100%);
      background: -ms-linear-gradient(-34deg, #f42df6 0%, #be34ff 50%, #4827ef 100%);
      background: linear-gradient(124deg, #f42df6 0%, #be34ff 50%, #4827ef 100%);
    }
    
    #content #album {
      background: -moz-linear-gradient(-34deg, #F21D36 0%, #AAEEDD 50%, #FE1245 100%);
      background: -webkit-linear-gradient(-34deg, #F21D36 0%, #AAEEDD 50%, #FE1245 100%);
      background: -o-linear-gradient(-34deg, #F21D36 0%, #AAEEDD 50%, #FE1245 100%);
      background: -ms-linear-gradient(-34deg, #F21D36 0%, #AAEEDD 50%, #FE1245 100%);
      background: linear-gradient(124deg, #F21D36 0%, #AAEEDD 50%, #FE1245 100%);
    }
    
    #footer {
      padding: 2vw 0;
      text-align: center;
    }
Javascript
    jQuery(window).bind('scroll', function() {
  var navHeight = jQuery('ul.menu').height();
  if (jQuery(window).scrollTop() > navHeight) {
    jQuery('body').addClass('sticky');
  } else {
    jQuery('body').removeClass('sticky');
  }
});
// Scroll watcher
function getViewportHeight() {
  return window.innerHeight || document.documentElement.clientHeight;
}
function scrollWatch() {
  let elements = document.querySelectorAll(".scroll-watcher-item");
  if (!elements) {
    return;
  }
  [].forEach.call(elements, function(element) {
    scrollWatchElement(element);
  });
  scrollWatch__UpdateActiveMenuItem();
}
function scrollWatch__UpdateActiveMenuItem() {
  let menu_items = document.querySelectorAll("#navigation a");
  if (!menu_items) {
    return;
  }
  [].forEach.call(menu_items, function(item) {
    item.classList.remove("active");
  });
  let elements = document.querySelectorAll(".scroll-watcher-item");
  if (!elements) {
    return;
  }
  let active_expectant = null;
  let active_expectant_percent = 0;
  [].forEach.call(elements, function(element) {
    let percent = parseFloat(element.getAttribute("data-watcher-percent"));
    if (percent > active_expectant_percent) {
      active_expectant = element;
      active_expectant_percent = percent;
    }
  });
  if (!active_expectant) {
    return;
  }
  let active_menu_item_id = active_expectant.getAttribute("id");
  let active_menu_item = document.querySelector('#navigation a[href="#' + active_menu_item_id + '"]');
  if (!active_menu_item) {
    return;
  }
  active_menu_item.classList.add("active");
}
function scrollWatchElement(element) {
  let viewportHeight = getViewportHeight();
  if (!element) {
    return;
  }
  let rect = element.getBoundingClientRect();
  let top = rect.top;
  if (top < 0) top = 0;
  if (top > viewportHeight) top = viewportHeight;
  let bottom = rect.bottom;
  if (bottom < 0) bottom = 0;
  if (bottom > viewportHeight) bottom = viewportHeight;
  let percent = Math.round((100 * (bottom - top)) / viewportHeight, 2);
  element.setAttribute("data-watcher-percent", percent);
}
// https://developer.mozilla.org/ru/docs/Web/API/Document/scroll_event
let ticking = false;
window.addEventListener("scroll", function(e) {
  if (!ticking) {
    window.requestAnimationFrame(function() {
      setTimeout(function() {
        scrollWatch();
        ticking = false;
      }, 250);
    });
    ticking = true;
  }
});
scrollWatch();
HTML
<html>
<meta name="viewport" content="width=device-width, initial-scale=1">
<body>
<div id="navigation">
  <ul class="menu">
    <li class="first leaf news">
      <a href="#news" title="" class="scroll-to-anchor" data-scroll-offset="0">News</a>
    </li>
    <li class="leaf tour">
      <a href="#tour" title="" class="scroll-to-anchor" data-scroll-offset="0">Tour</a>
    </li>
    <li class="leaf video">
      <a href="#video" title="" class="scroll-to-anchor" data-scroll-offset="0">Video</a>
    </li>
    <li class="leaf music">
      <a href="#music" title="" class="scroll-to-anchor" data-scroll-offset="0">Music</a>
    </li>
    <li class="leaf photo">
      <a href="#photo" title="" class="scroll-to-anchor" data-scroll-offset="0">Photo</a>
    </li>
    <li class="leaf album last">
      <a href="#album" title="" class="scroll-to-anchor" data-scroll-offset="0">Album</a>
    </li>
  </ul>
</div>
<div id="content">
  <div id="news" class="scroll-watcher-item">
    News
  </div>
  <div id="tour" class="scroll-watcher-item">
    Tour
  </div>
  <div id="video" class="scroll-watcher-item">
    Video
  </div>
  <div id="music" class="scroll-watcher-item">
    Music
  </div>
  <div id="photo" class="scroll-watcher-item">
    Photo
  </div>
  <div id="album" class="scroll-watcher-item">
    Album
  </div>
</div>
<div id="footer">
  <div class="footer-tos">
    <a href="" target="_blank">Privacy Policy</a> | <a href="" target="_blank">Terms of Service</a>
  </div>
</div>
</body>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.6.0/jquery.min.js"></script>
</html>
Please see attached image
Solution
This is working well because you've set the font sizes based on view port (size of screen). font-size: 1.5vw; means 1.5% of view width, which can be too small.
For a better font-size for mobile screen, you can use 'px' and media queries.
Answered By - Mina Soleimanzadeh
 


0 comments:
Post a Comment
Note: Only a member of this blog may post a comment.