Как выравнивать по центру горизонтальное меню <UL>?
Мне нужно центрировать выравнивание горизонтального меню.
Я пробовал различные решения, включая сочетание inline-block
/block
/center-align
и т.д., Но не удалось.
Вот мой код:
<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>
UPDATE
Я знаю, как центрировать выравнивание ul
в пределах div
. Это может быть достигнуто с помощью предложения Сарфраза.
Но элементы списка по-прежнему размещены слева в ul
.
Мне нужен Javascript для этого?
Ответы
Ответ 1
Из 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 a bit longer</a></li>
<li><a href="#">Butt 3</a></li>
<li><a href="#">Button 4</a></li>
</ul>
</div>
Ответ 2
Это работает для меня. Если я не неверно истолковал ваш вопрос, вы можете попробовать.
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>
Ответ 3
С CSS3 flexbox. Простой.
ul {
display: flex;
justify-content: center;
}
ul li {
padding: 0 8px;
}
Ответ 4
Это самый простой способ найти. Я использовал ваш html. Отступ по умолчанию равен reset по умолчанию.
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>
Ответ 5
Вот хорошая статья о том, как сделать это довольно красиво, без каких-либо взломов и полной поддержки кросс-браузера. Работает для меня:
- > http://matthewjamestaylor.com/blog/beautiful-css-centered-menus-no-hacks-full-cross-browser-support
Ответ 6
Сделайте это так:
<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;
}
Ответ 7
Как и многие из вас, я некоторое время боролся с этим. Решение в конечном счете имело отношение к 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;
}
Ответ 8
Попробуйте следующее:
div.topmenu-design ul
{
display:block;
width:600px; /* or whatever width value */
margin:0px auto;
}
Ответ 9
В общем случае способ центрировать элемент уровня черного (например, <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... или даже другие IE, если не используется <!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"
недействителен, поскольку атрибут id
не может содержать пробелы...? Действительно, рекомендация w3c определяет атрибут id
как 'name 'type...
Идентификаторы идентификатора и NAME должны начинаться с письмо ([A-Za-z]) и может быть выполнено любым количеством букв, цифр ([0-9]), дефис ( "-" ), подчеркивание ( "_" ), двоеточия ( ":" ) и периоды ( "").
Ответ 10
Я использовал свойство display: inline-block: решение состоит в использовании обертки с фиксированной шириной. Внутри, ul-блок с встроенным блоком для отображения. Используя это, 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;
}
Ответ 11
Демо - 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 настолько чище.
Ответ 12
Решение @Robusto было самым простым для того, что я пытался сделать, я предлагаю вам использовать его. Я пытался сделать то же самое для изображений в неупорядоченном списке, чтобы сделать галерею... Я сделал скрипт js, чтобы обманывать его. Не стесняйтесь попробуйте здесь.
[он был настроен с использованием кода примера robusto]
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;
}
Ответ 13
Я использую код jquery для этого. (Альтернативное решение)
$(document).ready(function() {
var margin = $(".topmenu-design").width()-$("#topmenu").width();
$("#topmenu").css('margin-left',margin/2);
});
Ответ 14
div {
text-align: center;
}
div ul {
display: inline-table;
}
ul, поскольку встроенная таблица исправляет проблему с. Я использовал родительский div для выравнивания текста до центра.
таким образом он хорошо выглядит даже на других языках (перевод, разная ширина)
Ответ 15
ul{margin-left:33%}
Это приличное приближение на больших экранах. Это нехорошо, но хорошее грязное исправление.
Ответ 16
.topmenu-design
{
display: inline-table;
}
Что все!