问题出在滚动条上。
1008px-992px=16px //the scrollbar dimension
实际上,如果将overflow: hidden 属性添加到HTML 标记中,一切都会正常工作。
您的媒体查询和 javascript 计算的宽度不同(一个有滚动条,另一个没有滚动条)。
Here a JSFiddle example 的问题。
调试网站,JS(缩小)和功能(它的一部分)是:
/prestashop/PRS01/PRS0100014/themes/cenzo/assets/js/theme.js
//.........FOLLOW THIS LINE............................................................................_____HERE______
u.default.responsive = u.default.responsive || {}, u.default.responsive.current_width = (0, s.default)(window).width(), u.default.responsive.min_width = 992, u.default.responsive.mobile = u.default.responsive.current_width < u.default.responsive.min_width, (0, s.default)(window).on("resize", function() {
var e = u.default.responsive.current_width,
t = u.default.responsive.min_width,
n = (0, s.default)(window).width(),
i = e >= t && n < t || e < t && n >= t;
u.default.responsive.current_width = n, u.default.responsive.mobile = u.default.responsive.current_width < u.default.responsive.min_width, i && o()
}), (0, s.default)(document).ready(function() {
u.default.responsive.mobile && o()
})
u.default.responsive.current_width 中视口为 1007 时,您可以看到 991
u.default.responsive.min_width 是 992
条件u.default.responsive.current_width < u.default.responsive.min_width 为真,触发remove node 函数。
为了调试这个,在 chrome 的“元素”选项卡上找到元素 ID top-menu 并设置 break on... node removal,检查堆栈你可以找到上面的函数和所有值。 chrome 的“Window Resizer”插件可以帮助你同时检查 Viewport 和 Window 大小。
您的解决方案有点复杂,因为 CMS 和/或框架很复杂。你可以用window.innerWidth 替换(window).width() 可能你解决了它,但我不知道主题的其余部分会发生什么。
但你可以在 stackoverflow 上找到一些解决方案:
CSS Media Queries and Firefox's Scrollbar Width
或这里
$(window).width() not the same as media query
希望对你有帮助:)