【问题标题】:How to only use jquery .css() on a specific media query?如何仅在特定媒体查询上使用 jquery .css()?
【发布时间】:2015-05-27 01:50:36
【问题描述】:

当用户浏览器的宽度小于 1160 像素时,会设置媒体查询来折叠我网站的右侧边栏。他们可以通过单击一个小箭头将其取回,然后它将与内容重叠(绝对定位)。

无论如何,我使用以下 jQuery 来实现这一点:

$('.right_sidebar_preview').on('click', function() {
     $('.right_sidebar_preview').css('display', 'none');
     $('.right_sidebar').css('display', 'block');
});
$('.right_sidebar').on('click', function() {
     $('.right_sidebar_preview').css('display', 'block');
     $('.right_sidebar').css('display', 'none');
});

所以基本上我已经在浏览器大于 1160 像素并且侧边栏可见时隐藏了预览,在媒体查询中我设置了它,所以当它低于 1160 像素时,侧边栏变得不可见并且“侧边栏预览”是显示哪些用户可以点击放大。

CSS:

.right_sidebar {
  width: 242px;
  height: 100%;
  background-color: #d8e1ef;
  float: right;
  position: relative;
}
.right_sidebar_preview {
  display: none;
}
@media(max-width:1160px) {
  .right_sidebar {
    position: absolute;
    right: 0;
    display: none;
  }
  .right_sidebar_preview {
    display: block;
    background-color: #d8e1ef;
    position: absolute;
    right: 0;
    width: 15px;
    height: 100%;
  }
}

我的问题是,当我使用上面的代码时,假设我们在小于 1160 像素的媒体查询中,我将打开侧边栏然后再次折叠它,当我将浏览器拉开返回时,它还关闭了大于 1160px 媒体查询的侧边栏。

那么我是否可以使用 .css() (或替代方法)来指向特定的媒体查询?

【问题讨论】:

    标签: javascript jquery html css media-queries


    【解决方案1】:

    这样的?

    $(window).resize(function(){
       if ($(window).width() <= 1160){  
          // lets party
       }    
    });
    

    【讨论】:

    • 我仍然遇到同样的问题。您的代码可以正常工作,除非我折叠侧边栏(小于 1160 像素)而不是显示大于 1160 的折叠,我总是希望它显示在其中。
    【解决方案2】:

    在最近的一个项目中,我不得不根据浏览器的大小在 jQuery 中处理一个函数。最初我打算检查设备宽度是否适用于移动设备(320px):

    jQuery

    $(window).resize(function(){
    
           if ($(window).width() <= 320) {  
    
                  // your code here
    
           }     
    
    });
    

    $(window).resize(function(){     
    
           if ($('header').width() == 320 ){
    
                  // your code here
    
           }
    
    });
    

    【讨论】:

    • 我仍然遇到同样的问题。您的代码可以正常工作,除非我折叠侧边栏(小于 1160 像素)而不是显示大于 1160 的折叠,我总是希望它显示在其中。
    【解决方案3】:

    不要操纵 CSS display: 属性。相反,使用 CSS 类来控制侧边栏及其句柄的可见性。这样您就可以使用媒体查询来控制元素是否显示。

    在以下演示中,单击“整页”按钮以查看其在 > 1160 像素的屏幕上的工作原理。

    $(function() {
      $('.right_sidebar, .right_preview').on('click', function() {
        $('.right_sidebar, .right_preview').toggleClass('lt-1160-hide lt-1160-show');
      });
    });
    .right_sidebar {
      width: 100px;
      height: 100px;
      background-color: papayawhip;
      float: left;
      display: block;
    }
    .right_preview {
      width: 20px;
      height: 100px;
      background-color: palegoldenrod;
      float: left;
      display: none;
    }
    @media(max-width: 1160px) {
      /* note: the following rules do not apply on larger screens */
      .right_sidebar.lt-1160-show, .right_preview.lt-1160-show {
        display: block;
      }
      .right_sidebar.lt-1160-hide, .right_preview.lt-1160-hide {
        display: none;
      }
    }
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.1/jquery.min.js"></script>
    
    
    <div class="right_sidebar lt-1160-hide">Sidebar</div>
    <div class="right_preview lt-1160-show">&rsaquo;</div>

    【讨论】:

    • 喜欢使用 .addClass()?如果我将 .css() 添加到他们当前的课程中,那不会给我同样的结果吗?
    • @Brad:不,不会,如果像 Salman 所说的那样,您将类设置为仅在匹配媒体查询时影响元素……
    • 重点是你使用添加/删除类函数而不是.css("display");然后在您的样式表中设置规则,以便侧边栏始终可见,并且上一个按钮始终隐藏在较大的屏幕上。我会尝试添加一个示例。
    • 非常感谢萨尔曼,我也想通了。今天还了解到木瓜鞭是一种颜色。被选为最佳答案。
    猜你喜欢
    • 2021-08-21
    • 2019-08-14
    • 1970-01-01
    • 2022-07-07
    • 1970-01-01
    • 2011-09-21
    • 2014-05-20
    • 2019-09-29
    • 2017-09-16
    相关资源
    最近更新 更多