【问题标题】:Control (override) inline style using media query使用媒体查询控制(覆盖)内联样式
【发布时间】:2014-06-20 04:20:53
【问题描述】:

我在这里遇到了关于媒体查询和内联样式的不同问题,但没有一个涵盖我想要的。

我正在做一个小项目,我要做的就是将移动视图上的主菜单更改为collapse/expand

无论如何,我有这个简单的js来改变移动视图菜单的display

  $("#toggler").click(
        function () {
            if ($("#navigation").css("display") == "none") {
                $("#navigation").css("display", "block");
            }
            else {
                $("#navigation").css("display", "none");
            }
        }
        );

当移动视图css 媒体查询处于活动状态时,我有这个media query 来显示toggler btn,并隐藏菜单。然后用户可以按toggler btn 打开/显示菜单。

 @media screen and (max-width:500px) {
        #navigation {
            display: none;
            width: 100%;
            float: none;
        }  
        #toggler {
            display: block;
        }
    }

现在,如果浏览器激活了移动视图并且用户按下了toggler 来显示菜单然后他再次按下它来隐藏它,#navigation 将具有display:none 作为内联样式,那么如果用户再次将浏览器的大小调整回其正常视图(大于 500 像素),则会发生媒体查询不会更改(覆盖)内联 display:none 回到 display:block

对如何通过media queries 更改内联样式有任何建议吗?

【问题讨论】:

  • 您可以添加/删除强制更改所需更改的类名,而不是将 css 推送到元素中吗?

标签: jquery html css media-queries


【解决方案1】:

您可以切换元素上的类,而不是更改内联样式。 JSBin

JS

$("#toggler").click(function () {
   $("#navigation").toggleClass('unhidden');
})

CSS

@media screen and (max-width:500px) {
    #navigation {
        display: none;
        width: 100%;
        float: none;
    }
    #navigation.unhidden {
        display:block;
    }  
    #toggler {
        display: block;
    }
}

【讨论】:

  • 谢谢,这更容易做到
  • 您如何考虑通过这种方法使用动画?
  • @LukeA.Leber 您基本上绑定到 transitionEnd 并更改处理程序中的类。有一些关于该事件在某些移动浏览器中的可靠性的讨论。我倾向于远离动画,但使用供应商前缀的 iirc 可以处理 99.9% 的兼容性问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 2012-02-16
  • 2012-10-12
  • 2018-03-06
  • 2013-10-03
  • 1970-01-01
相关资源
最近更新 更多