我试图制作在较小屏幕上显示网页时隐藏和显示菜单的按钮。当显示宽度大于640px时,我想保留整个菜单。我只允许使用CSS和JavaScript。
这是我写的JS函数:
var b = document.getElementById ("menu-button");
b.addEventListener("click", showMenu, false);
var i = 0;
function showMenu () {
i++;
if(i % 2 == 1)
document.getElementById("menu").style.display = "block";
else
document.getElementById("menu").style.display = "none";
}
在较小的屏幕上显示页面时它正在工作。
当我点击按钮隐藏菜单(更改"菜单"显示到none
)然后增加页面大小时,当屏幕变大时我的菜单不显示比640px。
此媒体媒体查询无法完成此任务:
@media screen and (min-width:640px) {
#menu {
display: block;
}
}
答案 0 :(得分:6)
您需要将!important
添加到CSS属性中,例如:
#menu { display:block!important; }
您的Javascript将style
属性添加到元素中,该元素具有higher priority,而不是任何内部或外部CSS样式,除非它们“是”!important
。
您还可以考虑采取措施避免这种情况,即在Javascript中切换一些CSS类,而不是设置style
属性。这样您就可以避免使用!important
。
答案 1 :(得分:3)
我建议不要像这样设置元素style
,建议在元素上切换一个类
旁注,我也从id
更改为class
,这也是推荐的
此外,specificity是原因,已在评论/答案中指出,为什么您的代码无法运作,更多内容请阅读此处:https://developer.mozilla.org/en/docs/Web/CSS/Specificity
var b = document.querySelector(".menu-button");
b.addEventListener("click", function(e) {
document.querySelector(".menu").classList.toggle("show");
});

.menu {
display: none;
}
.menu.show {
display: block;
}
@media screen and (min-width:640px) {
.menu {
display: block;
}
}

<div class="menu show">Hi, I'm a menu element</div>
<button class="menu-button">Show/Hide</button>
&#13;
答案 2 :(得分:2)
Connexo已经指出了答案,但扩展对你和将来来到这里的其他人可能会有所帮助。
HTML元素的“样式”可以设置在至少3个位置。如果发生冲突,浏览器必须决定哪个应该赢。使用的规则称为“特异性”。如果你想要更全面的解释,这里有一篇关于这个主题的好文章https://css-tricks.com/specifics-on-css-specificity/。
粗略地说,在最初的HTML'style'属性中定义的任何样式都是最强大的,所以这将赢得CSS文件规则。重要的是,在用例中设置样式,操作HTML样式属性。
因此,您的CSS被代码中的样式属性设置所取代。
对于纯JS解决方案,您可以考虑向窗口onResize事件添加一个监听器。如果您研究这种方法,请注意在某些浏览器中,事件会触发每个像素的大小更改,因此请寻找一个考虑到this one之类的解决方案,否则该函数将被多次触发并可能减少您带给用户的快乐。
答案 3 :(得分:0)
正如其他评论建议的那样,您在代码中尝试了不同的东西。 我建议使用css解决方案,您可以查看大多数网格用于设置其媒体查询的样式,以便在调整浏览器窗口大小或监视器缩小时显示/隐藏元素。
非常酷,轻量级的网格称为简单网格。
https://github.com/ThisIsDallas/Simple-Grid/blob/master/simplegrid.css
在第177行,“手持式”设备的媒体查询开始。 例如,将其添加到HTML文档中:
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<link rel="stylesheet" href="https://github.com/ThisIsDallas/Simple-Grid/blob/master/simplegrid.css">
</head>
<body>
<button class="hide-on-mobile">MyButton</button>
</body>
如果浏览器窗口低于767px
,则该按钮将不可见答案 4 :(得分:-1)
您需要在css属性中添加!important。因为您的JavaScript代码设置的元素样式属性优先于任何css选择器样式。