在主横幅上透明的粘性标题?

时间:2015-08-19 14:56:56

标签: javascript jquery css navigation squarespace

我在Squarespace上构建了client's site

我想创建一个标题:

1)当用户第一次到达页面时具有透明背景 2)当用户向下滚动时,获取背景颜色并保持贴在视口顶部。

谢谢!

2 个答案:

答案 0 :(得分:0)

一些信息

CSSTricks在如何做到这一点上有一个很好的例子(这是常见的解决方案)。

此解决方案的基础是您收听滚动事件并检查何时到达正确的位置(如果需要,可以以编程方式计算该点)。如果这样做,则向执行以下操作的标头添加一个类:

  • 使标题颜色为您想要的颜色

  • 制作标题position: fixed; top: <num>;position: absolute; top: <num>(我已在现场看到两种解决方案)

    !重要! position:absolute解决方案不太安全,因为position: fixed将元素相对于视口定位。 position:absolute如果没有position:relative的任何前任,position: sticky将执行相同的 [更多信息,请查看this link]

有一个实验性的css功能,可以添加A = set(range(10,20)) B = set(range(5,17)) C = set(range(15,25)) D = set(range(18,30)) A.intersection(B).intersection(C) set([15, 16]) A.intersection(B) set([10, 11, 12, 13, 14, 15, 16]) A.intersection(C).intersection(D) set([18, 19]) A.intersection(B).intersection(C).intersection(D) set() 选项。从理论上讲,这将自己做粘性部分[你可以通过MDN旁边的实验徽章看到它的实验]。

实际解决方案

https://css-tricks.com/scroll-fix-content/

它还包含一个demo,代码在codepen.io上。请注意,您需要滚动视图框(class =&#34; wrap&#34;)而不是页面本身。

答案 1 :(得分:0)

你必须结合一些事情。

首先,在标题position: fixed

的css设置中

然后您必须设置透明度。类似的东西应该足够了:opacity: 0.5。您甚至可以使用RGBA指定颜色和透明度(我更喜欢这个):background-color: rgba(255, 0, 0, 0.3)

最后,您必须使用JavaScript绑定处理程序以滚动事件。如果你可以使用jQuery,这样的东西就足够了(我想你有一个id =&#34的元素;标题&#34;):

 $("#header").scroll(myScrollHandler);

 function myScrollHandler () {
     if (window.pageYOffset > 50)
     {
         $("#header").fadeTo(200, 0.9);
     } 
     else
     {
         $("#header").fadeTo(200, 0.3);
     } 
 }

我使用了样本值,第一个是以ms为单位的持续时间,第二个是目标不透明度,其中0是不可见的,1是满的。如果我将页面的偏移量与标题开始出现之后的像素数进行比较。

所以,回顾一下,在你的CSS中你应该有这样的东西:

#header {
    position: fixed;
    top: 0;
    width: 100%;
    rgba(255, 0, 0, 0.3);
}

在你的html中就像这样

<script>
    $("#header").scroll(myScrollHandler);

     function myScrollHandler () {
         if (window.pageYOffset > 50)
         {
             $("#header").fadeTo(200, 0.9);
         } 
         else
         {
             $("#header").fadeTo(200, 0.5);
         } 
     }
</script>

<div id="header">
    Your header content
</div>