【问题标题】:Splitting one Div into two css sections?将一个 Div 分成两个 CSS 部分?
【发布时间】:2013-12-23 11:50:36
【问题描述】:

我需要一些帮助来让我的 css 正常工作。

现在我想做的是在用户开始滚动时在 div 上显示阴影。

目前我有。

HTML

<div class="head shadow"></div>

CSS

    .head {
    background: #edeff0;
    position: fixed;
    width: 70%;
    height: 70px;
    top: 0;
    left: 85px;
    right: 15px;
    z-index: 100;
}
.shadow {
    display:none;
    -webkit-transition-duration: 0.2s;
    -moz-transition-duration: 0.2s;
    -o-transition-duration: 0.2s;
    transition-duration: 0.2s;
    -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
    -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
    -webkit-transition-duration: 0.2s;
    -moz-transition-duration: 0.2s;
    -o-transition-duration: 0.2s;
}

Javascript

     $(document).scroll(function () {
     var y = $(this).scrollTop();
     if (y > 1) {
         $('.shadow').fadeIn();
     } else {
         $('.shadow').fadeOut();
     }

 });

现在如果我删除 显示:无; 一切都会显示,如果我把它放回去,它会隐藏一切。

我怎样才能让它只隐藏阴影并让 javascript 工作。

Here is a working (well it's not working) version

谢谢

阿莱德

【问题讨论】:

  • 只需使用 toggleClass() 或者如果你想使用单独的功能,使用 addClass() 和 removeClass()
  • 我想做的是使用 css 隐藏阴影,以便脚本可以在滚动时再次将它们穿上鞋?
  • 我在下面的回答概述了您需要做的事情。它根据发生的情况添加或删除影子类。你需要去掉 display: none;
  • 我希望看到任何能真正解释问题所在以及他们的解决方案为何能解决问题的答案。

标签: javascript html css scroll


【解决方案1】:

工作小提琴 - http://jsfiddle.net/andyjh07/yY4U8/

HTML:

<div class="head"></div>

jQuery:

$(document).scroll(function () {
    var y = $(this).scrollTop();
    if (y > 1) {
        $('.head').addClass('shadow');
    } else {
        $('.head').removeClass('shadow');
    }
});

CSS:

.shadow {
    -webkit-transition-duration: 0.2s;
    -moz-transition-duration: 0.2s;
    -o-transition-duration: 0.2s;
    transition-duration: 0.2s;
    -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
    -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
    -webkit-transition-duration: 0.2s;
    -moz-transition-duration: 0.2s;
    -o-transition-duration: 0.2s;
}

如果滚动为真,上述解决方案将shadowclass 添加到类为head 的元素中,否则将其移除。您之前遇到问题的原因是因为您使用的是display: none;,它将完全隐藏整个元素,而不仅仅是该类的样式

【讨论】:

  • jsfiddle.net/aled2305/pBYgs/12我已经更新了代码,但是还是不行?
  • jsfiddle.net/andyjh07/yY4U8 - 这是一个工作小提琴。一切正常
  • 谢谢安迪,还有一件事,有没有办法让阴影淡入淡出?
  • 你可能不得不用一些 css 魔法来做到这一点。不透明度的转换等。我已经添加了关于为什么我的解决方案对您有用的解释,如果它有帮助,请投票并接受:)
【解决方案2】:

这里是Working Fiddle

(请不要忘记包含 jquery)

HTML

<div class="head"></div>

CSS

.head {
    background: #edeff0;
    position: fixed;
    width: 70%;
    height: 70px;
    top: 0;
    left: 85px;
    right: 15px;
    z-index: 100;
}
.shadow {
    -webkit-transition-duration: 0.2s;
    -moz-transition-duration: 0.2s;
    -o-transition-duration: 0.2s;
    transition-duration: 0.2s;
    -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
    -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
    -webkit-transition-duration: 0.2s;
    -moz-transition-duration: 0.2s;
    -o-transition-duration: 0.2s;
}

jQuery

$(document).scroll(function () {
     var y = $(this).scrollTop();
     if (y > 1) {
         $('.head').addClass("shadow");
     } else {
        $('.head').removeClass("shadow");
     }

 });

【讨论】:

    【解决方案3】:
    .shadow {
      -webkit-transition-duration: 0.2s;
      -moz-transition-duration: 0.2s;
      -o-transition-duration: 0.2s;
      transition-duration: 0.2s;
    
      -webkit-transition-property: all
      -moz-transition-property: all
      -ms-transition-property: all
      -o-transition-property: all
      transition-property: all
    
      -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0);
      -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0);
      box-shadow: 0 2px 4px rgba(0, 0, 0, 0);
    }
    
    .shadow.scrolled {
      -webkit-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
      -moz-box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
      box-shadow: 0 2px 4px rgba(0, 0, 0, 0.2);
    }
    
    $(document).scroll(function () {
      if ($(this).scrollTop() > 0) {
         $('.shadow').addClass("scrolled");
      } else {
         $('.shadow').removeClass("scrolled");
      }
    });
    

    【讨论】:

    • 顺便说一下不要使用供应商前缀...例如使用 precompiler.sass 和 compass。或更少
    • 在快速启动的事件(例如滚动)上使用 toggleClass() 时要小心。你想对发生的事情有精确的控制。 toggleClass() 很好用,但会导致不一致。
    猜你喜欢
    • 2021-01-13
    • 1970-01-01
    • 2023-04-06
    • 2014-12-09
    • 1970-01-01
    • 1970-01-01
    • 2011-11-23
    • 2013-10-21
    • 1970-01-01
    相关资源
    最近更新 更多