【发布时间】:2014-09-19 00:41:00
【问题描述】:
这是我的网站:http://stage.samkeddy.com/
它使用几个媒体查询和一个由 javascript 提供支持的移动菜单按钮来响应。
这里是菜单按钮的javascript:
function toggleMenu () {
if (menuIsVisible == false) {
collapsibleMenu.style.height = 'auto';
content.style.paddingTop = '290px';
menuIsVisible = true;
}
else {
collapsibleMenu.style.height = '0';
content.style.paddingTop = '80px';
menuIsVisible = false;
}
}
所以你可以看到我需要调整内容div顶部的填充,以偏移菜单
但是,如果调整为移动设备大小,打开菜单,然后调整回桌面大小,则媒体查询不会修复填充,因为仍然存在来自 javascript 的内联样式。我尝试在桌面版 !important 上制作填充,但在调整大小时填充仍然不会改变,即使根据 this !important beats inline。
您可以通过打开尺寸(外观应该如何)、调整到移动宽度(导航将消失,您将看到菜单按钮)、单击菜单按钮(保持菜单打开)来进行测试,然后将站点大小调整回桌面宽度。您会看到填充仍然存在。如果您检查它,您会看到原始填充被划掉以支持内联样式。
我知道这可以通过使用 javascript 监控宽度并设置填充来实现,但我真的不想这样做,也不认为我应该这样做。
编辑:已解决
首先,我应该添加类,而不是在我的 javascript 中添加 CSS。
然后我假设将 !important 放在媒体查询之外会使其仅显示在桌面上,但它会接管所有媒体查询。所以把它放在一个查询中就可以了。请注意,如果我使用 2 个单独的菜单(移动/桌面),我不需要这个,但由于它是固定的并且 #content 需要填充,所以必须完成它。但是使用这种技术,您也可以只使用单个菜单,但以这种方式为菜单设置高度。我已经在 codepen 中演示了该技术:http://codepen.io/anon/pen/JFvay
【问题讨论】:
-
你为什么不使用@media 查询来确定菜单的大小...对这些样式使用 javascript/jQuery 只会发现你即将陷入的人孔。
-
您也可以停止使用那些内联样式。创建几个类并给元素一个或其他类。 (但当然可以尽可能使用媒体查询。)
-
那么你的 !important 风格出现在你的开发工具中了吗?如果没有,也许你在该样式之前的某个地方有语法错误。
-
媒体查询确实改变了菜单的大小,javascript 只是隐藏/取消隐藏它。我会尝试使用类然后更新。
-
在不复制 htm 的情况下可以有两个不同的菜单。使用媒体查询以不同的方式格式化页面。您可能必须使用不同的显示属性,例如固定、混合边距 - 但可以这样做。
标签: javascript html css css-specificity