【问题标题】:Bootstrap Transparent Navbar not Working引导透明导航栏不起作用
【发布时间】:2016-06-12 21:06:54
【问题描述】:

我试图让我的引导导航栏最初具有透明背景,但当用户向下滚动时为纯白色。我已经咨询了许多关于此的 SO 帖子并尝试了建议的解决方案 herehere,但没有效果。我正在使用 Rails 4.2.5 和 bootstrap-sass gem 作为我的引导程序,通过我的 application.scss 文件导入:

@import "bootstrap-sprockets";
@import "bootstrap";

我认为我的引导程序有些问题,因为我无法通过将transparent 作为类添加到导航菜单来实现透明导航栏,但输入navbar-inverse 可以更改配色方案。此外,我必须在此样式表上的所有 css 项目中使用 !important 以使它们覆盖引导程序。这是我的导航栏 html.erb 代码:

 <nav class="navbar" id="main_navbar">
    <div class="container-fluid">
      <div class="navbar-header">
        <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-responsive-collapse">
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
          <span class="icon-bar"></span>
        </button>
        <a class="navbar-brand" href="/"><%= image_tag 'Flame.png', style: "height: 100%"%></a>
      </div>
      <div class="navbar-collapse collapse navbar-responsive-collapse">
        <ul class="nav navbar-nav">
          <li><%= link_to 'Workouts', workouts_path, class:"waves-effect waves-light" %></li>
          <!-- <li><a href="javascript:void(0)">Generator</a></li> -->
          <li><%= link_to 'Blog', posts_path, class:"waves-effect waves-light" %></li>
          <li><%= link_to 'Weekly WOW', weeklies_path, class:"waves-effect waves-light" %></li>
          <li><%= link_to 'Rants', rants_path, class:"waves-effect waves-light" %></li>
          <li><%= link_to 'About Us', home_about_path, class:"waves-effect waves-light" %></li>
          <% if current_user %>
            <li><%= link_to('My Profile', edit_user_registration_path(current_user)) %></li>
          <% else %>
            <li><%= link_to('Sign In', new_user_session_path) %></li>
          <% end %>
        </ul>
      </div>
    </div>
  </nav>

我知道这个帖子主题可能与其他人重复,但我已经阅读了几十篇 SO 帖子,但没有一个解决了这个问题。任何帮助将不胜感激。

【问题讨论】:

    标签: css ruby-on-rails twitter-bootstrap


    【解决方案1】:

    要在滚动时将颜色更改为白色,您需要一些 javascript。

    这是一个有效的fiddle

    $(document).ready(function(){       
       var scroll_start = 0;
       var startchange = $('#startchange');
       var offset = startchange.offset();
        if (startchange.length){
       $(document).scroll(function() { 
          scroll_start = $(this).scrollTop();
          if(scroll_start > offset.top) {
              $(".navbar-default").css('background-color', '#f0f0f0');
           } else {
              $('.navbar-default').css('background-color', 'transparent');
           }
       });
        }
    });
    

    对于透明导航栏,你可以在navbar-default上编辑一些css

    .navbar-default {
       background: transparent;
       border: none !important; 
    }
    

    更新:https://jsfiddle.net/p7p9t0a0/3/ 使用@daniel 提到的词缀

    【讨论】:

    • 如果使用 Bootstrap,为什么要编写那么多 js 代码而不是使用 affix bootstrap 插件。 Affix - Bootstrap?使用词缀类切换来更改颜色和其他东西会更有效。
    • 好电话,@Daniel 虽然我不认为 js 会严重影响网站的效率,但我仍然使用 Affix 更新了答案,fiddle 工作。
    • 感谢您考虑我的建议。抱歉,高效我的意思是为什么要编写新代码而不是使用已经存在的功能。例如,如果您出于某些原因需要取消绑定用户事件侦听器,则 $(window).off("scroll") 将终止所有全局侦听滚动事件。使用 $("#myelement").off("affix") 取消绑定 affix 事件侦听器只会杀死侦听您选择的元素的实例
    • 感谢您的回答和 javascript 大师班 (@DanielPfisterer)。这很有帮助。
    猜你喜欢
    • 1970-01-01
    • 2013-04-29
    • 1970-01-01
    • 2015-11-28
    • 1970-01-01
    • 2017-03-06
    相关资源
    最近更新 更多