Почему мое меню Superfish не работает должным образом в Firefox?

Я пытаюсь использовать плагин jQuery Superfish для улучшения раскрывающегося меню на сайт. Однако раскрывающееся меню не открывается при наведении курсора на него в браузере Firefox (версия 21.0), как должно. В Chrome и Opera все работает. Без плагина Superfish раскрывающееся меню работает также в Firefox с простым CSS.

При использовании параметра cssArrows для Superfish стрелки не отображаются ни в одном браузере (даже при использовании большего количества отступов). Не знаю, связана ли эта проблема с первой.

Вот моя разметка:

<nav>
    <ul>
        <li><a href="#">Page 1</a></li>
        <li>
            <a href="#">Page 2</a>
            <ul>
                <li><a href="#">Page 2.1</a></li>
                <li><a href="#">Page 2.2</a></li>
                <li><a href="#">Page 2.3</a></li>
            </ul>
        </li>
        <li><a href="#">Page 3</a></li>
        <li><a href="#">Page 4</a></li>
        <li><a href="#">Page 5</a></li>
    </ul>
</nav>

А вот мой CSS / SASS:

 nav {
    width: 100%;
    float: left;

    ul {
        display: block;
        float: left;
        width: 100%;

        li {
            position: relative;
            display: block;
            float: left;

            a {
                display: block;
                padding: 14px 14px;
            }
            /* drop-down */
            ul {
                display: none;
                position: absolute;
                left: 0;
                top: 100%;
                padding: 0;
                border: 1px solid #aaa;
                border-top-width: 0;

                li {
                    float: none;
                    a {
                        padding: 8px 3px;
                        border-top: 1px solid #aaa;
                    }
                }
            }

            &:hover,
            &.sfHover {
                ul {
                    display: block;
                }
            }
        }
    }
}

Вот мой призыв Superfish:

$('nav').superfish();

В Firefox, когда я нахожу указатель на тег li, содержащий меню второго уровня, li не получает класс sfHover, как должно было случиться. Вместо этого ul верхнего уровня получает присвоенный ему sfHover класс. Затем, когда я нажимаю левую кнопку мыши на этом теге li, он получает тег sfHover и появляется раскрывающееся меню. В Chrome и Opera класс sfHover назначается нужным элементам.

Примеры с сайта плагина Superfish работают и в моем браузере Firefox, но они не помогли мне решить эту проблему. Моя разметка html для меню почти такая же, как в этих примерах.

Я пытался

  • назначать z-индексы для разных элементов, но это не помогло (не ожидал). В настоящее время ни одному элементу на странице не присвоен z-индекс.
  • назначать ширину для элементов li и a, поскольку я читал, что это помогло в некоторых проблемных ситуациях.
  • используйте таблицы стилей из примеров Superfish, но они не работают лучше.
  • скрыть раскрывающееся меню с margin-left: -9999px вместо display: none, но это не помогло.
  • использовать все параметры при инициализации Superfish
  • используйте position: relative в тегах a вместо тегов li

Я также проверил, что мой html проверяет.

Кто-нибудь может разобраться в чем проблема? Буду очень признателен за любые предложения.


person Community    schedule 02.07.2013    source источник
comment
Можете ли вы добавить jsFiddle?   -  person Dan Grahn    schedule 02.07.2013
comment
@screenmutt, я придумал скрипку: jsbin.com/okafoz/1/edit И в FF22 все оказалось нормально.   -  person Andrey Mikhaylov - lolmaus    schedule 02.07.2013
comment
Спасибо обоим. Скрипка у меня тоже работает в FF21. Что еще могло вызвать это?   -  person    schedule 02.07.2013
comment
Мы не сможем понять это, не имея доступа к вашему проекту. Можете ли вы сделать его общедоступным в сети?   -  person Andrey Mikhaylov - lolmaus    schedule 02.07.2013
comment
К сожалению, не могу. Я надеялся, что пропустил что-то очевидное, что появится в объяснении или предоставленном коде.   -  person    schedule 02.07.2013
comment
Проблема решена! @Andrey 'lolmaus' Михайлов Я снова посмотрел на вашу скрипку, и она использовала jQuery 2.0.2. У меня в проекте стояла 1.8.3. С 2.0.2 меню работает. Хотя я, наверное, не могу использовать 2.0.2 в своем проекте. Думаю, я попробую обновиться до 1.9.1, в которой есть примеры superfish. Извините, что я не понял версию jQuery.   -  person    schedule 02.07.2013
comment
Хорошо, это не решено. На мгновение я подумал, что это сработало. Выложил решение ниже. Это была глупая проблема, но спасибо вам, кто ее разобрал. Никогда не был так счастлив видеть раскрывающееся меню.   -  person    schedule 02.07.2013


Ответы (2)


Я не могу протестировать его в Firefox 21, так как мой Firefox только что обновился до 22.

Но в 22 он работает, как ожидалось, вот где я тестировал: http://jsbin.com/okafoz/1/edit

Вероятно, это проблема, не связанная с Superfish.

person Andrey Mikhaylov - lolmaus    schedule 02.07.2013
comment
Спасибо. Это снижает количество возможных причин. - person ; 02.07.2013

Хорошо, проблема не в версии jQuery. Думаю, я на мгновение ошибочно подумал, что это сработало.

Я использую в проекте wordpress 3.5.2, и он конфликтует с superfish. У меня нет времени вдаваться в подробности прямо сейчас, но я выяснил вот что:

wp-includes / js / admin-bar.min.js использует функцию hoverIntent, если во время выполнения этого скрипта jQuery уже включен, но hoverIntent не определен, он определяет саму функцию jQuery.fn.hoverIntent.

Плагин hoverIntent jQuery при желании можно использовать с superfish. superfish вызывает hoverIntent функцию этого плагина один раз, если она определена. Из-за этого вызова мое раскрывающееся меню не отображалось, так как это вызывало ошибку, когда я наводил курсор на элемент списка, содержащий подменю («b.browser is not defined» в admin-bar.min.js).

Причина, по которой он появился только в Firefox, заключалась в том, что я был авторизован на этом сайте wordpress только в Firefox, а не в других браузерах ...

Но: есть вариант disableHI в superfish. Если вы установите для него значение true, superfish не будет вызывать hoverIntent. Я думал, что уже пробовал этот вариант, но в любом случае он, конечно, сработал.

person Community    schedule 02.07.2013