如何将<ul> <li>居中div


88

如何将无序列表居中<li>放置为固定宽度div

<table width="100%">
  <tbody>
  <tr>
    <td width="41%"><img src="/web/20100104192317im_/http://www.studioteknik.com/html2/html/images/hors-service.jpg" width="400" height="424"></td>
    <td width="59%"><p align="left">&nbsp;</p>
      <h1 align="left">StudioTeknik.com</h1>
      <p><br align="left">
        <strong>Marc-André Ménard</strong></p>
      <ul>
        <li>Photographie digitale</li>
        <li>Infographie </li>
        <li>Débug et IT (MAC et PC)</li>
        <li> Retouche </li>
        <li>Site internet</li>
        <li>Graphisme</li>
      </ul>
      <p align="left"><span class="style1"><strong>Cellulaire en suisse : </strong></span><a href="#">+41 079 573 48 99</a></p>
      <p align="left"><strong class="style1">Skype : </strong> <a href="#">menardmam</a></p>
    <p align="left"><strong class="style1">Courriel :</strong><a href="https://web.archive.org/web/20100104192317/mailto:menardmam@hotmail.com">    info@studioteknik.com</a></p></td>
  </tr>
  </tbody>
</table>

Answers:


139

由于ulli元素是display: block默认设置-为它们提供自动边距,并且宽度小于其container

ul {
    width: 70%;
    margin: auto;
}

如果您更改了它们的显示属性,或做了一些覆盖常规对齐规则的操作(例如浮动它们),则此操作将无效。


4
如果这不能使您满意,这可能会:stackoverflow.com/questions/2865380/…–
Bruiser

10
设定宽度:自动;并显示:inline-block; 会让您的ul表现得像一行文字。然后,您可以使用text-align:center; 在父元素上。这也将使您的ul随着内部内容的变化而增长和收缩,而不是具有固定的宽度。
2014年

@Chetabahana —您正在查看的是文本,而不是元素:jsfiddle.net/qwbexxog/3
Quentin

在所有分辨率下均无法正常工作,Flex Center正在运行
Srinivas08

163

要使ul 居中并使li元素也居中,并使ul的宽度动态变化,请使用display:inline-block; 并将其包裹在居中的div中。

<style type="text/css">
    .wrapper {
        text-align: center;
    }
    .wrapper ul {
        display: inline-block;
        margin: 0;
        padding: 0;
        /* For IE, the outcast */
        zoom:1;
        *display: inline;
    }
    .wrapper li {
        float: left;
        padding: 2px 5px;
        border: 1px solid black;
    }
</style>

<div class="wrapper">
    <ul>
        <li>Three</li>
        <li>Blind</li>
        <li>Mice</li>
    </ul>
</div>

更新资料

这是上面代码的jsFiddle链接


那是我使用其他解决方案时遇到的麻烦,如果我更改了li元素,它将无法使用。
Aram Kocharyan

我将其用于Bootstrap 3导航,需要添加float: none;到中ul
Dylan Valade 2014年


22

脚步 :

  1. style="text-align:center;"于母公司divul
  2. 写信style="display:inline-table;"ul
  3. 写信style="display:inline;"li

或使用

<div class="menu">
 <ul>
   <li>item 1 </li>
   <li>item 2 </li>
   <li>item 3 </li>
 </ul>
</div>

<style>
 .menu { text-align: center; }
 .menu ul { display:inline-table; }
 .menu li { display:inline; }
</style>

我们必须添加边距,否则彼此嵌套请在此处进行
Chetabahana,

9

这是将UL内部置于任何DIV容器内部的更好方法。

此CSS解决方案不使用Width和Float属性。浮动:左侧和右侧的宽度:70%,当您需要在具有不同菜单项的不同页面上复制菜单时,将使您头痛。

而不是使用宽度,我们使用填充和边距来确定文本/菜单项周围的空间。另外,不要在LI元素中使用Float:Left,而应使用display:inline-block。

通过将LI浮动到左侧,您实际上会将内容浮动到左侧,然后必须使用上面提到的一种Hack来使UL居中。Display:inline-block为您创建Float属性(之类)。它使用您的LI元素,并将其变成彼此并排放置(不是浮动)的块元素。

使用响应式设计并使用诸如Bootstrap或Foundation之类的框架时,尝试浮动和居中放置内容时会出现问题。他们有一些内置的类,但是从头开始做总是更好。对于动态菜单(例如Adobe Business Catalyst菜单系统),此解决方案要好得多。

可以在以下位置找到本教程的参考:http : //html-tuts.com/center-div-image-table-ul-inside-div/

的HTML

<div class="container">
        <ul>
            <li><a href="#">Button</a></li>
            <li><a href="#">Button</a></li>
            <li><a href="#">Button</a></li>
            <li><a href="#">Button</a></li>
            <li><a href="#">Button</a></li>
        </ul>
    </div>

的CSS

.container {
    text-align: center;
    border: 1px solid green;
}
.container ul {
    border: 2px solid red;
    display: inline-block;
    margin: 10px 0;
    padding: 2px;
}
.container li {
    display: inline-block;
}
.container li a {
    display: inline-block;
    background: #444;
    color: #FFF;
    padding: 5px;
    text-decoration: none;
}

6

可能是

div ul
{
 width: [INSERT FIXED WIDTH]
 margin: 0 auto;
}

要么

div li
{
text-align: center;
}

取决于它的外观(或结合使用)


2
后一种选项不会将列表项居中,而只会将其内联内容居中。
昆汀2009年

但是,如果<li>未设置样式,则外观相同。
FP

4

要居中ul放置一个块对象(例如),您需要在其上设置一个宽度,然后可以将对象的左右边距设置为自动。

要居中li放置块对象的内联内容(例如的内联内容),可以设置css属性text-align: center;




1

有趣,但尝试在ul中使用浮动li元素进行尝试: 此处为示例

现在的问题是:ul需要固定宽度才能实际位于中间。但是,我们要相对于容器宽度(或动态宽度)设置它,边距:ul上的0 auto不起作用。

更好的方法是放弃UL / Li列表,并在此处使用其他方法示例


0

如果您知道的宽度,ul则只需将的边距设置ul0 auto;

这将ul在包含div的中间对齐

例:

HTML:

<div id="container">
 <ul>
  <li>Item1</li>
  <li>Item2</li>
 </ul>
<div>

CSS:

  #container ul{
    width:300px;
    margin:0 auto;
  }

0

这是我可以找到的解决方案:

#wrapper {
  float:right;
  position:relative;
  left:-50%;
  text-align:left;
}
#wrapper ul {
  list-style:none;
  position:relative;
  left:50%;
}

#wrapper li{
  float:left;
  position:relative;
}

0

另一个选择是:

的HTML

<nav>
  <ul class = "main-nav"> 
   <li> Productos </li>
   <li> Catalogo </li>
   <li> Contact </li>  
   <li> Us </li>
  </ul>
</nav>    

CSS:

nav {
  text-align: center;
}

nav .main-nav li {
  float: left;
  width: 20%;
  margin-right: 5%;
  font-size: 36px;
  text-align: center;
}

0

我一直在寻找相同的情况,并通过更改的宽度尝试了所有答案<li>
不幸的是,所有人都未能在<ul>盒子的左侧和右侧获得相同的距离。

最接近的匹配是此答案,但需要通过填充调整宽度的变化

.container ul {
    ...
    padding: 10px 25px;
}

.container li {
  ...
  width: 100px;
}

参见下面的结果,<li><ul>盒子之间的所有距离都相同。在此处输入图片说明

您可以在以下jsFiddle上进行检查:http :
//jsfiddle.net/qwbexxog/14/


-1
<div id="container">
  <table width="100%" height="100%">
    <tr>
      <td align="center" valign="middle">
        <ul>
          <li>item 1</li>
          <li>item 2</li>
          <li>item 3</li>
        </ul>
      </td>
    </tr>
  </table>
</div>

-4

使用老式的中心标签

<div> <center> <ul> <li>...</li> </ul></center> </div>

:-)


您应该避免在标记代码中使用样式类型的表达式。这就是CSS的目的!
FP 2009年

1
可行,但请注意:w3schools.com/TAGS/tag_center.asp中的center “ HTML 4.01中已弃用该元素,XHTML 1.0 Strict DTD中不支持该元素”
okw

4
感叹 W3School像往常一样提供不完整,错误的信息。它在4.0中而不是在4.01中被弃用,并且没有出现在任何Strict变体中(仅选择XHTML 1.0是一个奇怪的选择)。
昆汀2009年

如前所述,HTML 4.01中已弃用了这些……这也是一个坏习惯……
Jonny Haynes,2009年

2
是的,他不应该使用这种标签,但这不是值得否定回答的原因。有时,我们需要最肥的解决方案。对我来说,这个答案是肯定的。
workdreamer's
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.