обертывание навигационной панели на меньших разрешениях

Я пробую свои силы в HTML5/CSS3 в качестве учебного процесса, но я изо всех сил пытаюсь создать панель навигации для ссылок на другие разделы на моих страницах. Я адаптировал код из найденного учебника, и он работает, но только при просмотре с разрешением 1080p, если ширина меньше, полоса переносится на другие строки.

Как сделать так, чтобы панель навигации занимала только одну строку (сжималась до нужного размера) независимо от того, какое разрешение использует пользователь?

img

Вот мой код CSS для панели навигации. Обратите внимание, что в разделе навигации я установил ширину на 33,3% и отступы на то же самое, чтобы центрировать кнопки. Я не знаю, является ли это причиной.

nav {
    display:block;
    position: absolute;
    left:0; 
    white-space:nowrap; 
    margin: 0 auto; 
    width: 33.3%; 
    background-color:#ff6600;
    padding-left: 33.3%; 
    padding-right: 33.3%; 
} 

nav ul { 
    margin: 0 auto; 
    width: 100%; 
    list-style: none;
    display: inline;
    white-space:nowrap; 
} 

nav ul li { 
    float: left;
    position: relative;
    white-space:nowrap; 
} 

nav ul li a { 
    display: block; 
    margin: 0 auto; 
    width: 150px; 
    font-size: 16px;
    font-family: century gothic; 
    line-height: 44px; 
    text-align: center; 
    text-decoration: none; 
    color:#575757;
    white-space:nowrap; 
} 

nav ul ul { 
    width: 200px;
    position:absolute; 
    top:-99999px; 
    left:0; 
    opacity: 0; 
    -webkit-transition: opacity .4s ease-in-out; 
    -moz-transition: opacity .4s ease-in-out; 
    -o-transition: opacity .4s ease-in-out; 
    transition: opacity .4s ease-in-out; 
    z-index:497; 
    background:#333; 
    padding: 2px; 
    border:1px solid #444; 
    border-top:none; 
    box-shadow:#111 0 3px 4px; 
}


nav ul ul li a { 
    display: block;
    width: 200px;
    text-align: left;
    padding-left: 3px;
    font-size: 14px;    
}   



nav ul li:hover>ul{
    opacity: 1; 
    position:absolute; 
    top:98%; 
    left:0;

}


nav ul li a:hover { 
    color: #fff;
    background-color: #cc3300 
} 

nav ul li.selected a { 
    color: #fff; 
    background-color: #cc3300; 
}

person user1563865    schedule 30.07.2012    source источник


Ответы (3)


Вы почти правильно сделали. Проблема с вашим css заключается в том, что white-space: nowrap; работает только для inline элементов, но вы используете float. Плавающие элементы становятся блочными, даже если вы установите свойство display: inline; для такого элемента (оно не будет применено). Итак, если вы замените свои поплавки на display: inline-block;, ваше свойство white-space будет работать :)

Живой пример inline-blocks и white-space можно увидеть здесь: http://jsfiddle.net/skip405/wzgcH/

Что касается вашего метода центрирования - есть лучшее решение. (Вы можете удалить padding и установить правильную ширину) Особенно, если вы используете встроенные блоки. Просто установите text-align: center; для их родителя — и он будет отцентрирован.

person skip405    schedule 30.07.2012
comment
Это работает, если меню имеет только один уровень. С вложенным 'ul' это не так. - person Moesio; 01.09.2014

Проблема в том, что вы устанавливаете ширину nav всего на 33,3%, а остальное — заполнение. Небольшое допустимое пространство затем подталкивает все элементы друг под друга при изменении размера за определенную точку. Чтобы этого не произошло, вы можете сделать две вещи: вместо этого установить ширину навигации равной 100%, а во-вторых, если вы вообще не хотите, чтобы она изменялась, вы должны дать ей min-width суммы всех a ширины элементов вместе взятые. Вам также, скорее всего, следует поставить ему max-width, если только вы не используете адаптивный дизайн. Вот демонстрация, которую я собрал вместе с вашим модифицированным css: http://jsfiddle.net/c3HE6/

person Paul Graffam    schedule 30.07.2012

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

person James Hubert    schedule 02.01.2020