Shrink Header Image on Scroll

时间:2020-05-20 作者:Greg Stoltz

我目前正在本地服务器上使用免费版本的neve,我正在尝试使我的粘性标题基于滚动响应。

文本响应正确且变小,但徽标没有缩小。在javascript函数之外,我可以通过更改开发人员选项中的类来调整它的大小,但不响应滚动。

感谢您的帮助!

附加CSS

.header.shrink {
  font-size: 13px;
  position: fixed; 
    z-index:999999;
  top: 0;
  width: 100%;
  transition: 0.2s;
}

.site-logo.shrink img{
    max-height: 45px;
}
功能。php

<script>
jQuery(document).ready(function($) {
    $(window).scroll(function () {
        if ($(window).scrollTop() > 10) { 
            $(\'header\').addClass(\'shrink\');
        $(\'site-logo\').addClass(\'shrink\');
        }
        else{
            $(\'header\').removeClass(\'shrink\');
        $(\'site-logo\').removeClass(\'shrink\');
        }
    });
});
</script>
样式。css

.site-logo {
  align-items: center;
  display: flex;
  padding: 10px 0;
}

.site-logo amp-img img {
  max-height: 60px;
}

.site-logo .brand {
  display: flex;
  flex-direction: column;
  justify-content: center;
}

.site-logo .title-with-logo {
  display: flex;
  flex-direction: row;
  align-items: center;
}

.site-logo .title-with-logo > img:first-child, .site-logo .title-with-logo > div:first-child {
  margin-right: 10px;
}

.site-logo h1, .site-logo p {
  font-family: inherit;
  font-size: 1.25em;
  margin-bottom: 0;
  font-weight: 600;
}

.site-logo small {
  width: 100%;
  display: block;
}


.site-logo a {
  color: #404248;
  display: inline;
}

.site-logo a:hover {
  color: #404248;
  text-decoration: none;
  opacity: .9;
}

1 个回复
最合适的回答,由SO网友:Tony Djukic 整理而成

所以这里有两件事我们需要注意。我们必须首先确保向jQuery/javascript指定要选择的内容。在这段代码中,您的目标是HTML标题元素,然后也是“site logo”,但jQuery找不到名为“site logo”的元素。

<script>
jQuery(document).ready(function($) {
    $(window).scroll(function () {
        if ($(window).scrollTop() > 10) { 
            $(\'header\').addClass(\'shrink\');
        $(\'site-logo\').addClass(\'shrink\');
        }
        else{
            $(\'header\').removeClass(\'shrink\');
        $(\'site-logo\').removeClass(\'shrink\');
        }
    });
});
</script>
解决方案要求您指定目标,因为“site logo”是一个类,所以您必须在其前面加上一个句号,如下所示:

<script>
jQuery(document).ready(function($) {
    $(window).scroll(function () {
        if ($(window).scrollTop() > 10) { 
            $(\'.header\').addClass(\'shrink\');
            $(\'.site-logo\').addClass(\'shrink\');
        }
        else{
            $(\'.header\').removeClass(\'shrink\');
            $(\'.site-logo\').removeClass(\'shrink\');
        }
    });
});
</script>
因为某些页面可能有多个<header> 元素,我强烈建议您也可以针对主标题指定一个特定的类或ID,除非您希望它们在滚动时都应用“收缩”类。

另一件事,我不确定这是否是一个问题,就是当你使用CSS转换时,你必须从X值到Y值.shrink 正在设置类max-height:45px, 您应该确保另一个类为相同的规则指定了一个起点,如max-height:75px.

.site-logo img {
  max-height: 75px;
  -webkit-transition:max-height 1s ease-out;
  -moz-transition:max-height 1s ease-out;
  -o-transition:max-height 1s ease-out;
  transition:max-height 1s ease-out;
}
.site-logo.shrink img {
  max-height: 45px;
}

相关推荐

css to fit image by HEIGHT

我试图找到一种方法,通过浏览器窗口不断变化的高度(而不是宽度)来响应图像。因此,当您使浏览器窗口更窄,而不更改(比方说全高)高度时,图像将缩小以适合。但是如果你做相反的事情,使全宽窗口变短,图像将无法缩放,除非它是页面上唯一的东西。有没有办法做到这一点?看见https://www.harryorlyk.com/portfolio/studio-yard/我有一个媒体查询,因此在1024倍时,图像的高度会降低,但我希望能根据浏览器窗口的高度自动改变其高度。我尝试了以下几种变体:.postid-5582 im