Как выровнять по центру горизонтальное меню?
мне нужно выровнять по центру горизонтальное меню.
Я пробовал различные решения, в том числе сочетание inline-block
/block
/center-align
etc. но это не удалось.
вот мой код:
<div class="topmenu-design">
<!-- Top menu content: START -->
<ul id="topmenu firstlevel">
<li class="firstli" id="node_id_64"><div><a href="#"><span>Om kampanjen</span></a></div></li>
<li id="node_id_65"><div><a href="#"><span>Fakta om inneklima</span></a></div></li>
<li class="lastli" id="node_id_66"><div><a href="#"><span>Statistikk</span></a></div></li>
</ul>
<!-- Top menu content: END -->
</div>
обновление
Я знаю, как центрировать выравнивание ul
внутри div
. Это может быть достигнуто с помощью предложения Сарфраза.
Но элементы списка все еще плавали слева в пределах ul
.
нужен ли мне Javascript для добиться этого?
16 ответов:
от http://pmob.co.uk/pob/centred-float.htm:
предпосылка проста и в основном просто включает в себя обертку без ширины поплавка, которая плавает влево, а затем смещается с экрана в левое положение ширины:относительное; слева:-50%. Затем вложенный внутренний элемент реверсируется и применяется относительное положение +50%. Это имеет эффект размещения элемента мертвым в центре. Относительное позиционирование поддерживает поток и позволяет другому контенту течь под ним.
код
#buttons{ float:right; position:relative; left:-50%; text-align:left; } #buttons ul{ list-style:none; position:relative; left:50%; } #buttons li{float:left;position:relative;}/* ie needs position:relative here*/ #buttons a{ text-decoration:none; margin:10px; background:red; float:left; border:2px outset blue; color:#fff; padding:2px 5px; text-align:center; white-space:nowrap; } #buttons a:hover{ border:2px inset blue;color:red;background:#f2f2f2;} #content{overflow:hidden}/* hide horizontal scrollbar*/
<div id="buttons"> <ul> <li><a href="#">Button 1</a></li> <li><a href="#">Button 2's a bit longer</a></li> <li><a href="#">Butt 3</a></li> <li><a href="#">Button 4</a></li> </ul> </div>
это работает для меня. Если я правильно понял ваш вопрос, вы можете попробовать.
div#centerDiv { width: 100%; text-align: center; border: 1px solid red; } ul.centerUL { margin: 2px auto; line-height: 1.4; padding-left: 0; } .centerUL li { display: inline; text-align: center; }
<div id="centerDiv"> <ul class="centerUL"> <li><a href="http://www.amazon.com">Amazon 1</a> </li> <li><a href="http://www.amazon.com">Amazon 2</a> </li> <li><a href="http://www.amazon.com">Amazon 3</a></li> </ul> </div>
Это самый простой способ я нашел. Я использовал ваш html. Заполнение-это просто сброс настроек браузера по умолчанию.
ul { text-align: center; padding: 0; } li { display: inline-block; }
<div class="topmenu-design"> <!-- Top menu content: START --> <ul id="topmenu firstlevel"> <li class="firstli" id="node_id_64"> <div><a href="#"><span>Om kampanjen</span></a> </div> </li> <li id="node_id_65"> <div><a href="#"><span>Fakta om inneklima</span></a> </div> </li> <li class="lastli" id="node_id_66"> <div><a href="#"><span>Statistikk</span></a> </div> </li> </ul> <!-- Top menu content: END --> </div>
вот хорошая статья о том, как сделать это довольно прочным способом, без каких-либо хаков и полной кросс-браузерной поддержки. Работает для меня:
--> http://matthewjamestaylor.com/blog/beautiful-css-centered-menus-no-hacks-full-cross-browser-support
делай так :
<div id="footer"> <ul> <li><a href="/1.html">Link 1</a></li> <li><a href="/2.html">Link 2</a></li> <li><a href="/3.html">Link 3</a></li> <li><a href="/4.html">Link 4</a></li> <li><a href="/5.html">Link 5</a></li> </ul> </div>
и CSS:
#footer { background-color:#ccc; height:39px; line-height:36px; margin:0 auto; text-align:center; width:950px; } #footer ul li { display:inline; font-family:Arial,sans-serif; font-size:1em; padding:0 2px; text-decoration:none; }
Как и многие из вас, я боролся с этим на некоторое время. Решение в конечном счете было связано с div, содержащим UL. Все предложения по изменению заполнения, ширины и т. д. из UL не было никакого эффекта, но следующие сделали.
о
margin:0 auto;
по соответствующему блоку div. Я надеюсь, что это помогает некоторым людям, и спасибо всем, кто уже предложил это в сочетании с другими вещами..divNav { width: 99%; text-align:center; margin:0 auto; } .divNav ul { display:inline-block; list-style:none; zoom: 1; } .divNav ul li { float:left; margin-right: .8em; padding: 0; } .divNav a, #divNav a:visited { width: 7.5em; display: block; border: 1px solid #000; border-bottom:none; padding: 5px; background-color:#F90; text-decoration: none; color:#FFF; text-align: center; font-family:Verdana, Geneva, sans-serif; font-size:1em; }
попробуйте это:
div.topmenu-design ul { display:block; width:600px; /* or whatever width value */ margin:0px auto; }
вообще говоря, способ центрировать элемент уровня Черного (например,
<ul>
) С помощьюmargin:auto;
собственность.для выравнивания текстовых и встроенных элементов уровня внутри элемента уровня блока используйте
text-align:center;
. Так что все вместе что-то вроде...ul { margin:auto; } ul li { text-align:center; list-style-position:inside; /* so that the bullet points are also centered */ } ul li div { display:inline; /* so that the bullet points aren't above the content */ }
... должен работать.
крайний случай-Internet Explorer6... или даже другие IEs, когда не используется
<!DOCTYPE>
. IE6 неверно выравнивает элементы уровня блока с помощьюtext-align
. Так что если вы хотите поддержать IE6 (или не используя<!DOCTYPE>
) ваше полное решение...div.topmenu-design { text-align:center; } div.topmenu-design ul { margin:auto; } div.topmenu-design ul li { text-align:center; list-style-position:inside; /* so that the bullet points are also centered */ } div.topmenu-design ul li div { display:inline; /* so that the bullet points aren't above the content */ }
в качестве сноски, я думаю
id="topmenu firstlevel"
недопустимо как не может содержать пробелы... ? Действительно рекомендация w3c определяет the как " имя " типа...маркеры ID и NAME должны начинаться с a письмо ([A-Za-z]) и может следовать любым количеством букв, цифр ([0-9]), дефисов ("-"), символов подчеркивания ("_"), колоны (":"), и периоды (".").
я использовал свойство display: inline-block: решение состоит в использовании оболочки с фиксированной шириной. Внутри, блок ул с инлайн-блоком для дисплея. Используя это, ul просто принимает ширину для реального контента! и, наконец, margin: 0 auto, чтобы центрировать этот встроенный блок =)
/*ul wrapper*/ .gallery_wrapper{ width: 958px; margin: 0 auto; } /*ul list*/ ul.gallery_carrousel{ display: inline-block; margin: 0 auto; } .contenido_secundario li{ float: left; }
Demo -http://codepen.io/grantex/pen/InLmJ
<div class="navigation"> <ul> <li><a href="">Home</a></li> <li><a href="">About</a></li> <li><a href="">Contact</a></li> <li><a href="">Menu</a></li> <li><a href="">Others</a></li> </ul> </div> .navigation { max-width: 700px; margin: 0 auto; } .navigation ul { list-style: none; display: table; width: 100%; } .navigation ul li { display: table-cell; text-align: center; } .navigation ul li a { padding: 5px 10px; width: 100%; }
Omg намного чище.
Я использую код jQuery для этого. (Альтернативное решение)
$(document).ready(function() { var margin = $(".topmenu-design").width()-$("#topmenu").width(); $("#topmenu").css('margin-left',margin/2); });
div { text-align: center; } div ul { display: inline-table; }
ul как встроенная таблица исправляет проблему. Я использовал Родительский div для выравнивания текста по центру. таким образом, он хорошо выглядит даже на других языках (перевод, разной ширины)
решение @ Robusto было самым простым для того, что я пытался сделать, я предлагаю вам использовать его. Я пытался сделать то же самое для изображений в неупорядоченном списке, чтобы сделать галерею... Я сделал JS скрипку, чтобы пошалить с ним. Не стесняйтесь попробуйте здесь.
[Он был настроен с использованием примера кода Робусто]
HTML:<div id="centerDiv"> <ul class="centerUL"> <li><a href="http://www.amazon.com"><img src="http://placehold.it/200x150> </a> </li> <li><a href="http://www.amazon.com"><img src="http://placehold.it/200x150"></a> </li> <li><a href="http://www.amazon.com"><img src="http://placehold.it/200x150"></a></li> </ul> </div>
CSS:div#centerDiv { width: 700px; text-align: center; border: 1px solid red; } ul.centerUL { margin: 2px auto; line-height: 1.4; } .centerUL li { display: inline; text-align: center; }