CSS: горизонтальный UL, где LI содержит таблицу. Возможно?

Я пытаюсь исправить ужасный макет вложенной таблицы для сайта. Страница будет иметь переменное количество элементов, которые используют диаграммы Google. Вместо сложного кода спагетти, который пытается выложить вещи внутри ячеек таблицы, я хочу использовать горизонтальный UL, чтобы блоки содержимого были выложены чисто независимо от диаграмм. Проблема в том, что компоненты Google charts используют таблицы. Когда элемент таблицы существует в любом месте внутри LI, LI перемещается к следующему строка (предполагая, что элементы таблицы по умолчанию имеют новую строку до и после).

Я пробовал различные режимы отображения для таблицы не повезло. Это безнадежное дело?

пример HTML-кода для иллюстрации проблемы:

<html>
<body>
<style type='text/css'>
 #navlist li{
    display:inline;
    list-style-type:none;

    }
</style>
    <ul id='navlist'>
        <li>TEST</li>
        <li>TEST2</li>
        <li>
            <table style='border:1px solid black'><tr><td>TEST</td></tr></table>
        </li>
        <li>TEST3</li>
        <li>
            <table style='border:1px solid blue'><tr><td>TEST</td></tr></table>
        </li>
        <li>
            <table style='border:1px solid green'><tr><td>TEST</td></tr></table>
        </li>
    </ul>
</body>
</html>

4 ответов


Set display: inline-block; на ваших элементах LI; это должно сделать это красиво. Он действительно не работает в Firefox 2,но никто больше не использует Firefox 2. Вам нужно будет указать doctype, чтобы заставить его работать в IE.

<!DOCTYPE html>
<html>
  <head>
    <style type='text/css'>
      #navlist li {
        display: inline-block;
        zoom: 1;
        *display: inline;
        list-style-type: none;
        vertical-align: middle;
      }
    </style>
  </head>
  <body>
    <ul id='navlist'>
      <li>TEST</li>
      <li>TEST2</li>
      <li>
        <table style='border:1px solid black'><tr><td>TEST</td></tr></table>
      </li>
      <li>TEST3</li>
      <li>
        <table style='border:1px solid blue'><tr><td>TEST</td></tr></table>
      </li>
      <li>
        <table style='border:1px solid green'><tr><td>TEST</td></tr></table>
      </li>
    </ul>
  </body>
</html>

Ну, это кажется слишком простым, чтобы быть правдой, но я попробовал, и это сработало в FF. IE по-прежнему отображает половину тегов во второй строке, но это может быть простое исправление. Все, что я сделал, это добавил float: left к стилям для трех таблиц.

<html>
    <body>
    <style type='text/css'>
     #navlist li{
        display:inline;
        list-style-type:none;
        float: left;

        }
    </style>
        <ul id='navlist'>
            <li>TEST1</li>
            <li>TEST2</li>
            <li>
                <table style='border:1px solid black; float: left;'><tr><td>TEST</td></tr></table>
            </li>
            <li>TEST3</li>
            <li>
                <table style='border:1px solid blue; float: left;'><tr><td>TEST</td></tr></table>
            </li>
            <li>
                <table style='border:1px solid green; float: left;'><tr><td>TEST</td></tr></table>
            </li>
        </ul>
    </body>
    </html>

Да это потому, что таблицы по умолчанию являются элементами блока (ну, на самом деле display:table но он действует аналогичным образом). Если ваши таблицы очень просты, добавьте display:inline к ним может работать.

В противном случае ваш лучший выбор-плавать каждый элемент списка влево:

#navlist li {
  float: left;
  list-style-type:none;
}

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

Если вам нужно, чтобы они были видны все время, то этот подход неприменим. Несмотря на это, я опубликовал демо моего предложения наjsbin.com