Могу ли я центрировать <ul>по левому краю <li>с? - PullRequest
25 голосов
/ 28 июля 2010

Я бы хотел центрировать список выровненных по левому краю элементов.

Это то, что у меня в данный момент есть:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
  <head>
    <title>Shrinkwrapped List</title>
    <style type="text/css">
      #wrapper {
        margin: auto;
        width: 500px;
        border: solid 1px #CCCCCC;
      }
      #header {
        text-align: center;
       font-size: 200%;
      }
      #content {
        text-align: center;
      }
      #content ul {
        text-align: left;
        font-size: 150%;
        list-style-type: none;
        margin: 20px auto;
        padding: 0px;
        border: solid 1px #666666;
      }
    </style>
  </head>
  <body>
    <div id="wrapper">
      <div id="header">
        Shrinkwrapped List
      </div>
      <div id="content">
        <ul>
          <li>Lorem ipsum</li>
          <li>Dolor sit amet</li>
          <li>Consectetur</li>
          <li>Adipiscing elit</li>
          <li>Morbi odio</li>
          <li>Mi blandit vehicula</li>
        </ul>
      </div>
    </div>
  </body>
</html>

, которая создает страницу, которая выглядит следующим образом:

Not really what I want

То, что я действительно хочу, выглядит следующим образом:

This is the look I want

Я могу сделать это, добавив width: 200px; к #content ul, нопроблема в том, что у меня много таких списков, и все они имеют разную ширину.

Я бы хотел, чтобы <ul> сократился до содержимого, чтобы его можно было центрировать правильно.Или я поступаю неправильно?

Спасибо за любую помощь, которую вы можете предоставить.


Решение

Благодаря KennyTM и Magnar , вот решение:

Добавьте эти четыре строки в правила CSS #content ul:

display:-moz-inline-stack;
display:inline-block;
zoom:1;
*display:inline;

Я протестировал это в IE6, IE7, IE8 и Firefox 3.6.Результаты выглядят как второе изображение выше, и список всегда соответствует содержимому элементов.

Ответы [ 4 ]

25 голосов
/ 28 июля 2010

Установите <ul> для использования display: inline-block;.См. http://jsbin.com/atizi4.

Обратите внимание, что inline-block не поддерживается (полностью) для IE ≤7.

1 голос
/ 28 июля 2010

Вы, вероятно, можете принять мой предыдущий ответ .Inline-блок для IE, отображение: таблица для современных браузеров.Может потребоваться явно указать тип стиля списка.

Редактировать: поскольку это список, возможно, удастся сойти с inline-block на ul и не отображать таблицу. Вам нужно объявить в отдельном правиле display:inline; после inline-block для IE.

0 голосов
/ 28 июля 2010

Попробуй это.Это связано с несовместимостью, но я на самом деле не знаю, как старые браузеры обрабатывают поля и отступы и все такое, так как я работаю только с новыми.Это лишь незначительные изменения в вашем CSS.

/* I didn't style the other parts, so I'm taking them out to save space. */

#content {
    margin: 0 auto;
}

#content ul {
    border-top: solid 1px #666666;
    border-bottom: solid 1px #666666;
    text-align: left;
    font-size: 150%;
    list-style-type: none;
    margin: 20px auto;
    padding: 0px;
    width: 202px;
}

#content li {
    border-left: solid 1px #666666;
    border-right: solid 1px #666666;
    margin: 0 auto;
    padding: 0;
    width: 200px;
}

Редактировать: Я хочу уточнить, что я изменил.Я изменил способ выравнивания содержимого, но, честно говоря, вы можете изменить это обратно, я не думаю, что это даст эффект.

Первоначально я установил фиксированную ширину и отцентрировал элемент li, чтоу тебя не было стиля.Это просто центрированное содержание.Граница, которую вы поместили, была на ul, поэтому она была очень широкой, но если бы мы поместили ее в li, у нас было бы много коробок.Итак, я разделил границы стиля.Причина, по которой #content ul имеет ширину в 202 пикселя, заключается в том, что границы учитываются снаружи по ширине.

Я надеюсь, что объяснение прояснило, почему это работает.Удачи!Я проверил это в Google Chrome.

0 голосов
/ 28 июля 2010

Я бы посмотрел на использование CSS и наложение margin: 0 auto на <ul> с контейнером максимальной ширины.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...