我有一个带有左侧菜单的Web应用程序。当浏览器窗口很宽(例如,桌面)时,该菜单很有用,但当窗口很窄(例如,移动)时占用太多空间。
使用css @media
的东西,我可以这样做,如果你让浏览器窗口小于一些调整大小宽度,它将切换到移动模式。在这种模式下,我仍然希望菜单可用,但是在用户单击按钮启动菜单之前,它仍然是隐藏的。
这很容易,但我遇到了问题。如果是普通的桌面用户:
display:
设置为block
)display:
设置为none
)然后菜单仍在使用display:none
并且不可见,即使它始终在桌面模式下可用。
这是working illustration of the problem。
我的问题:我能做些什么来防止这种情况发生?也许是一种方法来检测浏览器何时切换它正在使用的样式表,并在重新进入桌面模式时将菜单栏重置为display:block
?
<link rel="stylesheet" href="desktop.css" media="all and (min-width: 600px)"/>
<link rel="stylesheet" href="mobile.css" media="all and (max-width: 600px)"/>
...
<div id="left"> ... menu bar ... </div>
<div id="right"> ... content ... </div>
#left { display: none; position: fixed; z-index: 100; ... }
#right { left: 0px; ... }
#left { display: block; position: fixed; left: 0; ...}
#right { position: fixed; left: 170px; ...}
function toggleLeft() { $("#left").toggle(); } // Using jQuery
非常感谢!!
答案 0 :(得分:2)
这是一个问题,我自己遇到了相当多的问题。我倾向于使用类而不是直接隐藏/显示移动菜单。例如:
function toggleLeft() { $("#left").toggleClass("active"); }
然后在CSS媒体查询中,只使用移动样式表中的.active。
#left { display: none; position: fixed; z-index: 100; ... }
#left.active { display: block; }
答案 1 :(得分:1)
问题是你的desktop.css中的display: block;
优先级低于按元素属性样式直接样式:
<div id="left" style="display: none"> ... </div>
这正是javascript的toggle()所做的。
最好的方法是切换课程。但是,您只需将display: block !important
添加到desktop.css即可。直接样式不会更改!important
的样式。
答案 2 :(得分:0)
我认为你应该在窗口调整大小时使用jQuery切换css:
$(window).on('resize', function(){
var win = $(this); //this = window
if (win.height() >= 820) { /* toggle css or class etc */ }
if (win.width() >= 1280) { /* ... */ }
});
这样,当浏览器再次放大时,您只需切换或更改类就可以了!
答案 3 :(得分:0)
看起来toggle()
正在设置style
上的实际node
,这将覆盖css。
您可以尝试将!important
添加到您的css中,以便它会覆盖桌面模式下的样式,但它有点hacky。