【问题标题】:SmartMenus not working properly on Chrome because of display:flex;由于 display:flex,SmartMenus 在 Chrome 上无法正常工作;
【发布时间】:2017-10-15 08:41:15
【问题描述】:


对于一个新项目,我将 Bootstrap 3SmartMenus 插件一起用于子菜单。

我的问题是,在 Chrome (v 58) 上,具有子菜单的链接上的插入符号在加载时消失,子菜单在点击而不是悬停时显示,并且它们没有关闭当另一个打开时。

我已经找到了这个问题的来源。 .sm-collapsible 类在加载时应用于我的 ul.navbar-nav 元素。 但是,仅当 ul.navbar-nav 元素在 Chrome 上具有 display:flex; AND 时才适用。我尝试使用 display:table;display:table-cell; 重现我的布局,但它也无法正常工作。

所以这并不是一个特别的 flex 问题,但 它来自布局,它会弄乱 JavaScript。

我不知道为什么或怎么可能。

您可以在此处查看在线版本:https://lesdeuxvagues.com/laloupe(悬停/单击目录查看问题)

提前谢谢...我真的被困在这里了。

编辑
我刚刚找到添加 .sm-collapsible 类的负责 JS 行。这里是:
obj.isCollapsible = function() { return !/^(left|right)$/.test(this.$firstLink.parent().css('float')‌​);};

它在 Chrome 上始终返回 true(当 display:flex; 未注释时),但仅在 Firefox 和 Edge 的移动设备上。

【问题讨论】:

    标签: javascript html css twitter-bootstrap flexbox


    【解决方案1】:

    这对我有用:

    obj.isCollapsible = function() {
        return (!/^(flex)$/.test(this.$firstLink.parent().parent().css('display'))) && (!/^(left|right)$/.test(this.$firstLink.parent().css('float')));
    };
    

    注意: display: flex 必须在 ul.navbar-nav

    【讨论】:

      【解决方案2】:

      我联系了插件的编辑,因为插件的编码方式似乎有问题,现在已修复。显示:弹性;不再造成问题。

      【讨论】:

        【解决方案3】:

        您可以尝试在CSS中将ul.navbar-nav更改为display: block;(您可以修改bootstrap.less:#header #navbar > ul { display: block; }或在您自己的less文件中覆盖它)或通过查找负责添加的函数来修改插件的JS .sm-collapsible 并删除该操作。

        【讨论】:

        • 嗨!谢谢回答。好吧,将其设置为 display:block; 并不能解决我的问题,因为我需要使用 justify-content:space-between; 进行布局。我实际上刚刚找到了添加此类的负责函数:obj.isCollapsible = function() { return !/^(left|right)$/.test(this.$firstLink.parent().css('float')); };。它在 chrome 上返回 true,但在 Firefox 上不返回。我不知道这条线是如何工作的......
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-02-01
        • 2017-10-14
        • 2016-09-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多