Абсолютный элемент позиции вызывает нежелательные пробелы рядом с сайтом

0

Добрый вечер, у меня проблемы с моим выпадающим меню.

потому что я не знаю, как объяснить свою проблему на понятном английском языке, я начну с моего кода, чтобы вы могли видеть, о чем я говорю. (Он не отображается на 100% правильно на JSFiddle, но это не проблема, важные части есть)

Моя проблема заключается в том, что последнее выпадающее меню из меню "Убер Uns" вызывает пробелы в правой части сайта, если вы масштабируете браузер до меньшей ширины, чем .container Width +.subnav Width

Я пытаюсь исправить это в течение нескольких часов:/Единственные два решения, которые работают (но оба они не очень хорошие, и я не могу их использовать), используют display: none and inline но я потеряю переходы или используя right: 0 вместо left: 0 но мой макет испорчен, потому что это выглядит не совсем хорошо.

Я был бы так благодарен, если бы кто-то помог мне решить эту проблему.

заранее спасибо

  • 0
    Во-первых, нет такого значения, как display:hide (см. MDN для справки developer.mozilla.org/en-US/docs/Web/CSS/display ). Кроме того, скрипка, кажется, работает для меня. Вы имеете в виду пространство, которое занимает широкое меню в конце?
  • 0
    Sry Было слишком поздно, когда я задал этот вопрос, конечно же, «display: hide» я не редактировал. Да, я имею в виду пространство, которое последняя ширина контейнера .subnav создает с правой стороны, если область просмотра недостаточно велика.
Теги:

3 ответа

0

Хорошо, я думаю, что единственный способ решить это - это когда последний выпадающий список остается левым, а не правильным. Мне это не нравится, но все в порядке. Я использую mediaqueries, так что меню остается влево, если экран недостаточно большой.

сначала добавьте класс в последний пункт меню

$('.mainnav > li').last().addClass('last-menu-item');

и здесь css

@media only screen and (max-width:1412px) {

li.last-menu-item:hover ul.subnav {
    right: 0 !important;
    left: auto !important;
}

li.last-menu-item > ul.subnav {
    right: 10px !important;
    left: auto !important;
}
  • 0
    Используйте !important экономно. Вам не нужно использовать их, если ваш селектор более конкретен или появляется позже в CSS. Таким образом, если вы поместите объявление :hover последним, оно переопределит не- :hover . Кроме того, li.last-menu-item > ul.subnav будет переопределять li > ul.subnav . Я также нашел , через экспериментирование , что установка left на initial выполняется лучше , чем auto . Итак, ответ, который вы представили здесь, в значительной степени мой ответ. : PI потратил изрядное количество работы, чтобы помочь вам, пожалуйста, не принимайте ваш собственный ответ;)
  • 0
    Да, но это то, что у меня уже было, прежде чем задавать этот вопрос. Я просто не буду использовать это, потому что я надеялся, что есть лучшее решение. В чем преимущество «начального»
0

Это устраняет проблему с интервалом, хотя теперь вам нужно будет отрегулировать подменю, чтобы вылететь влево, а не вправо. Но неважно. Я сделал немного, чтобы исправить это для вас, так что вы на полпути.

Проблема в том, что браузер по-прежнему позволяет пространство для "скрытых" элементов. Если вы хотите удалить его из космических вычислений, вам нужно использовать display:none

li.last-menu-item > ul.subnav { display: none; }
li.last-menu-item:hover > ul.subnav { display: block; width: auto; }

Альтернативное решение, так как я видел, что вам не нравится display:none. Я думаю, что это решение немного более элегантно:

ul.mainnav > li.last-menu-item ul.subnav {
    left: initial;
    right: 0px;
}
  • 0
    Ах, я могу читать. Вы сказали, что вам не нравится display: none . Хорошо, тогда вам нужно установить его влево и переместить, когда вы будете к этому готовы. Дай мне посмотреть, что я могу быстро приготовить.
  • 0
    Хотя я не вижу никаких переходов в этой скрипке. Какие переходы вы говорите о проигрыше?
Показать ещё 3 комментария
0

Ответ отредактирован для соответствия ревизий OP:

ul.mainnav {
  + width: 100%;
}

//изменено для работы над jsfiddle

div#Logo {
    background: url(http://placehold.it/280x155) no-repeat left; 
}

Скрипт: http://jsfiddle.net/8ktYy/14/

  • 0
    Я думаю, что это не сработает. .container не может иметь ширину 100%, потому что он должен быть центрирован в середине заголовка и иметь ширину 1140 пикселей; Кроме того, ширина оставляя поплавок слева, логотип больше не отображается рядом с mainnav.
  • 0
    Таким образом, важные части не в вашей скрипке. Если у вас есть чрезвычайно специфические потребности. Тогда вам нужно разобрать их, прежде чем люди попытаются решить ваш вопрос.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню