2013-05-18 1 views
2

У меня есть меню (jsfiddle), которое отображается, как показано ниже, оно построено из <ul> и <li> элементов.Предотвращение блокировки элемента из-за переполнения родительского элемента.

enter image description here

Элементы меню ребенка появляются ниже родительского элемента, а контейнер является фиксированной ширины <ul>. У меня есть проблема в том, что для элемента меню далее вправо, это второй уровень <ul> перетекает ширину родительского элемента, например, так:

Current state

Как я могу убедиться, что подменю показывает, как в первом изображении, но для элементов меню далее справа только перемещается не дальше, чем на правую границу, сохраняя размер неповрежденным, а не переполняя?

enter image description here

+0

Я думаю, что его легче написать, чем отредактировать. Я ответил на этот вопрос. [** this **] (http://stackoverflow.com/questions/15938038/trying-to-add-a -css-sub-sub-menu/15959920 # 15959920), а также [_this_] (http://jsfiddle.net/D9X6b/) – ncm

ответ

1

Вы можете добавить родительский DIV, чтобы все ваши элементы с overflow: hidden;.

Как this

+0

Могу ли я каким-то образом убедиться, что элемент сохраняет его размер? – likeitlikeit

1

Добавьте следующие строки в контейнере:

overflow-x: hidden; 

Кроме того, необходимо добавить высоту к нему, что будет так, что он будет отображать подменю.

двигаться дальше влево определенный суб-меню, вы должны добавить класс к их <ul> элементу, а затем добавить CSS, чтобы нацелить их и переместить их в крайнем левом положении, как вы хотите:

Ex: если вы добавляете класс push_left к элементу подменю <ul>, вы можете настроить таргетинг его следующим образом:

#navigation>ul li .push_left { 

    position: absolute; 
    top: 42px; 
    left: 0px; /* set this value to however far left you want the sub-menu */ 

} 
+0

Это не так просто. Можете ли вы убедиться, что элемент фактически перемещен влево, вместо того, чтобы просто отключить переполненную часть? – likeitlikeit

+1

Я бы также предложил использовать overflow-x (а не его часть). –

+0

'overflow-x' как-то отрезает остальную часть подменю. Он не перемещает подменю влево, чтобы сохранить его в размере. – likeitlikeit

3

добавить в свой контейнер перелива-х (вы хотите сохранить у, возможно ...) скрытый ..

#navigation{ 
    width:900px; 
    margin:0px 0 13px; 
    padding:0px; 
    float:left; 
    background:#3b6daa; 
    overflow-x:hidden; <------------------------------- note the X.. 
} 

или просто убедитесь, что ваше меню не фиксированной ширины:

#navigation>ul li ul { 
    float: left; 
    padding: 8px 0; 
    position: absolute; 
    left:auto; 
    top:42px; 
    display: none; 
    width:auto; <------------------- will make it adjust to the contain and the content 
    background: #81abdd; 
    color: #1c508e; 
    list-style: none; 
} 

или если вы хотите, чтобы привести его в разные (например, подсказка, которая совпадет справа или слева от parent..then я предлагаю вам идти вниз по яваскрипту пути ..)

Вот некоторые примеры:

примеры выравнивания jquery vertical align 2 divs

JQuery позиция (также проверить ширину и т.д.) http://api.jquery.com/position/

большая подсказка, которая выравнивает все вокруг http://craigsworks.com/projects/qtip/

Нет из примера коробки, но это должно дать вам правильный direciton я считаю ..

+0

Спасибо за обновление. Это решит переполняющую часть, но не сохранит ее первоначальный размер. – likeitlikeit

+0

первая часть будет .. Я понимаю, что вы хотите переместить все меню влево вправо, так что оно будет выровняться по-разному с родителем? –

+0

Извините, я хотел сказать, что подменю должно сохранить свой размер. Можете ли вы как-то это сделать? – likeitlikeit