Как центрировать элементы списка внутри элемента UL? - PullRequest
56 голосов
/ 27 декабря 2011

Как мне центрировать элементы списка внутри ul без использования дополнительных элементов div или элементов.У меня есть следующее.Я думал, что text-align:center поможет.Я не могу понять это.

<style>
ul {
    width:100%;
    background:red;
    height:20px;
    text-align:center;
}
li {
    display:block;
    float:left;
    background:blue;
    color:white;
    margin-right:10px;
}
</style>

<ul>
  <li>test</li>
  <li>test</li>
  <li>test</li>
  <li>test</li>
  <li>test</li>
</ul>

Проверьте jsfiddle http://jsfiddle.net/3Ezx2/1/

Ответы [ 10 ]

121 голосов
/ 27 декабря 2011

запись display:inline-block вместо float:left.

li {
        display:inline-block;
        *display:inline; /*IE7*/
        *zoom:1; /*IE7*/
        background:blue;
        color:white;
        margin-right:10px;
}

http://jsfiddle.net/3Ezx2/3/

18 голосов
/ 27 декабря 2011
li{
    display:table;
    margin:0px auto 0px auto;
}

Это должно работать.

14 голосов
/ 27 сентября 2016

Более современный способ - использовать flexbox:

ul{
  list-style-type:none;
  display:flex;
  justify-content: center;

}
ul li{
  display: list-item;
  background: black;
  padding: 5px 10px;
  color:white;
  margin: 0 3px;
}
div{
  background: wheat;
}
<div>
<ul>
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
</ul>  

</div>
8 голосов
/ 20 июля 2015

Похоже, все, что вам нужно, это text-align: center; в ul

2 голосов
/ 01 июня 2016

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

При удалении отступа из ul любой li, установленный в inline-block, будет красиво отцентрирован:

* {
	box-sizing: border-box;
}

ul {
	width: 120px;
	margin: auto;
	text-align: center;
	border: 1px solid black;
}

li {
	display: inline-block;
}

ul.no_pad {
	padding: 0;
}

p {
	margin: auto;
	text-align: center;
}

.break {
	margin: 50px 10px;
}
<div>  
		<p>With Padding (Default Style)</p>
            <ul class="with_pad">
                <li>x</li>
                <li>x</li>
                <li>x</li>
                <li>x</li>
            </ul>
		<div class="break"></div>
		<p>No Padding (Padding: 0)</p>
			<ul class="no_pad">
                <li>x</li>
                <li>x</li>
                <li>x</li>
                <li>x</li>
            </ul>
	<div>

Надеюсь, что это поможет любому, кто столкнется с этой проблемой :)

Ура,

Джейк

1 голос
/ 12 декабря 2017

Еще один способ сделать это:

<ul>
  <li>One</li>
  <li>Two</li>
  <li>Three</li>
</ul>

ul {
  width: auto;
  display: table;
  margin-left: auto;
  margin-right: auto;
}

ul li {
  float: left;
  list-style: none;
  margin-right: 1rem;
}

http://jsfiddle.net/f6qgf24m/

1 голос
/ 26 декабря 2016

Я добавил строку div, и она сделала свое дело:

<div style="text-align:center">
<ul>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
<li>test</li>
</ul>
</div>
0 голосов
/ 10 августа 2018
ul {
    width: 100%;
    background: red;
    height: 20px;
    display: flex;
    justify-content: center;
    align-items: center;
}

li {
    background: blue;
    color: white;
    margin-right: 10px;
}
0 голосов
/ 01 июня 2017

У меня была проблема меньше, чем у вас. Я так быстро и это лучшее решение, которое я нашел до сих пор.

Как выглядит вывод

Показывает, что выводкод выглядит как Границы просто показывают интервал и не нужны.


HTML:

    <div class="center">
      <ul class="dots">
        <span>
          <li></li>
          <li></li>
          <li></li>
        </span>
      </ul>
    </div>

CSS:

    ul {list-style-type: none;}
    ul li{
        display: inline-block;
        padding: 2px;
        border: 2px solid black;
        border-radius: 5px;}
    .center{
        width: 100%;
        border: 3px solid black;}
    .dots{
        padding: 0px;
        border: 5px solid red;
        text-align: center;}
    span{
        width: 100%;
        border: 5px solid blue;}

Не все здесь необходимо для центрирования элементов списка.

Вы можете сократить css до этого, чтобы получить тот же эффект:

    ul {list-style-type: none;}
    ul li{display: inline-block;}
    .center{width: 100%;}
    .dots{
        text-align: center;
        padding: 0px;}
    span{width: 100%;}

0 голосов
/ 06 апреля 2017

Ни text-align:center, ни display:inline-block не работали для меня самостоятельно, но объединение обоих сделало:

ul {
  text-align: center;
}
li {
  display: inline-block;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...