使用 HTML、CSS 和 JS 创建一个固定的 header,滚动时会缩小

Using HTML, CSS & JS to create a fixed header that shrinks on scroll

我正在尝试从该站点复制作品:

http://codepen.io/anon/pen/OMwWyj

但它失败了,我无法让 javascript 按预期工作。我正在使用嵌入式 javascript 并将 post 下面的所有代码。预期的结果在超链接页面上,您可以看到一旦用户向下滚动页面,header 应该如何缩小大小。

@import compass;


@font-face {
    font-family: 'Bruss';
    src: url('bruss-webfont.eot');
    src: url('bruss-webfont.eot?#iefix') format('embedded-opentype'),
         url('bruss-webfont.woff2') format('woff2'),
         url('bruss-webfont.woff') format('woff'),
         url('bruss-webfont.ttf') format('truetype'),
         url('bruss-webfont.svg#Bruss') format('svg');
    font-weight: normal;
    font-style: normal;
}

body {
 background-color: #1d3558; 

}

h1 {
   font-family: Bruss;
   font-size: 4em;
   color: #d3d3d3;
   text-align: center;

}

body {
  background: #eee;
  margin: 0;
  padding: 0;
  font-family: "Source Sans Pro", sans-serif;
  color: #333;
}

header {
  width: 100%;
  padding: 10px 0;
  background: #fff;
  /* animation magic */
  -webkit-transition: all 0.4s ease-in-out;
  -moz-transition: all 0.4s ease-in-out;
  z-index: 9999;
  top: 0;
  position: fixed;
}

header h1 {
  font-size: 30px;
  text-indent: 40px;
  font-weight: bold;
}

.container {
  width: 40%;
  margin: 180px auto;
}

.shrink {
  padding: 20px 0;
}

p {
  margin: 0 0 40px 0;
  line-height: 24px;
}

strong {
  font-weight: bold;
}
<!DOCTYPE html>

<!-- 
 Sunday, 31st January 2016. | v . 01
-->

<html>
 <head>

 <title>Test example</title>
 <link rel="stylesheet" href="styling.css"/>
 <script>
  $(document).on("scroll", function(){
  if
      ($(document).scrollTop() > 100){
    $("header").addClass("shrink");
   updateSliderMargin();
  }
  else
  {
   $("header").removeClass("shrink");
   updateSliderMargin();
  }
 });
 </script>

 </head>

 <body>
 <header>
 <h1>
  Test example
      </h1>
 </header>




 </body>
</html>

感谢您抽出宝贵时间,您可能会从糟糕的缩进和其他不良做法中看出我是新手,因此欢迎就如何使代码更健壮提出任何一般性意见。

试试

$(window).scroll(function () {
      if ($(window).scrollTop() > 100) {
           //animate(css property,time,callback)
           $('header').animate({'padding':'20px 0'},1000,function(){      
             //callback animation
             //If you need you can add more animations here, like a chained animation
             console.log('End');
           }); 
       }else{
          $('header').animate({'padding':'0'},1000); 
      }
   });

希望对你有所帮助。

您可以使用 jquery 将 class 添加到滚动导航,如下所示:

$(window).scroll(function() {  
var scroll = $(this).scrollTop();
if (scroll > 80) {
    $('nav').addClass('nav-shrink');
} else {    
   $('nav').removeClass('nav-shrink');
}
});

https://jsfiddle.net/jxqt8qqu/

我用我的 li 元素的内边距设置了导航的高度。当用户从顶部滚动 80px 时,我将 "nav-shrink" 的 class 添加到导航,并使用新的 class 减少导航的 li 元素上的填充。请务必在 li 元素上使用 css 缓动过渡以获得高度变化的缓动效果。

好的 header 有 CSS 转换 属性

/* animation magic */
  -webkit-transition: all 0.4s ease-in-out
  -moz-transition: all 0.4s ease-in-out

还有两个类.shrink.header,在.header 顶部和底部的填充设置为 60px,在 .shrink 中,顶部和底部的填充设置为 20px。
使用 jQuery 检测 window 的滚动级别

$(document).on("scroll", function(){
  if ($(document).scrollTop() > 100) {
    $("header").addClass("shrink");
  } else {
    $("header").removeClass("shrink");
  }
});

类 被交换,并且由于 header 中的 CSS 过渡 属性,填充的变化是动画的。

现在开始有趣的事情,我已经为您创建了一个没有所有额外内容的工作示例。
(请原谅我 "fake content" 需要一些 "content" 来滚动)

<!DOCTYPE html>
<html>
<head>
  <meta charset="UTF-8" />
  <style type="text/css">
    * {margin:0;padding:0;}
    .header {width:100%;height:20px;position:fixed;top:0;padding:40px 0;background-color:#ff0;transition:all 0.4s ease-in-out;line-height:20px;}
    .shrink {padding:10px 0}
  </style>
  <script type="text/javascript" src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
  <script type="text/javascript">
    jQuery(document).ready(function() {
       $(document).on("scroll", function(){
        if ($(document).scrollTop() > 100) {
          $(".header").addClass("shrink");
        } else {
          $(".header").removeClass("shrink");
        }
      });
    });
  </script>
</head>
<body>
  <header class="header">
    It's Me!
  </header>
  <div class="fake-content">
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
    lorem lorem<br />lorem lorem<br />lorem lorem<br />
  </div>
</body>
</html>