Это плохо использовать "display: table"; организовать макет в 2 столбца?

Я пытаюсь сделать раскладку из двух столбцов, по-видимому, бичем CSS. Я знаю, что вы не должны использовать таблицы для макета, но я решил использовать этот CSS. Обратите внимание на использование экрана: таблица и т.д.

div.container {
  width: 600px; height: 300px; margin: auto;
  display: table; table-layout: fixed;
  }

ul {
  white-space: nowrap; overflow: hidden;
  display: table-cell;
  width: 40%;
  }

div.inner {
  display: table-cell;
  width: auto;
  }

С этим расположением:

<div class="container">

  <ul>
    <li>First</li>
    <li>Second</li>
    <li>Third</li>
    </ul>

  <div class="inner">
    <p>Hello world</p>
    </div>

  </div>

Это, кажется, работает превосходно. Однако я не могу не задаваться вопросом - подчиняюсь ли я правилу "не использовать таблицы", но не духу? Я думаю, что все в порядке, поскольку в HTML-коде нет позиционирующей разметки, но я просто не уверен в правильном способе ее выполнения.

Я не могу использовать css float, потому что хочу, чтобы столбцы расширялись и сжимались с доступным пространством.

Пожалуйста, переполнение стека, помогите мне решить мое экзистенциальное чувство страха в этих псевдо-таблицах.

Ответы

Ответ 1

Есть два основных аргумента в пользу использования таблиц:

  • Семантическая разметка.
  • Избегайте суп-тег. (слишком много тегов)

Итак, ваш метод не нарушает ни одну из этих целей. Однако вы должны проверить этот код в IE7 и IE6 - вы, вероятно, увидите некоторые несоответствия.

Как уже упоминалось - не беспокойтесь о том, чтобы придерживаться этих правил слишком сильно. Они являются рекомендациями, и вы должны использовать правильный инструмент для своей работы. Здесь важно знать, для чего лучше всего подходят различные методы и когда их использовать. Иногда использование таблицы - лучший инструмент для того, что вы пытаетесь сделать, иногда это не так.

Ответ 2

Это тип примера, для которого был разработан display: table-cell;. Вы, в конце концов, помещаете форматирование в таблицу стилей, а не разметку. Так что расслабьтесь! Это нормально.

Ответ 3

Было бы набухать, если бы все возможные макеты можно было сделать с помощью css, без таблиц или псевдо таблиц в поле зрения. Но есть исключения, и до тех пор, пока html и css (и поддержка браузера) не сделаем этого, будьте довольны вашими таблицами. В конце концов, дело в том, чтобы удовлетворить ваших пользователей, а не придерживаться другой философии.

Ответ 4

Проблема с использованием табличных тегов для нестандартных данных в HTML заключается в том, что они накладывают форматирование на то, что должно быть только данными.

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

На стороне примечания, я уверен, что IE 6 не поддерживает отображение: table-cell, поэтому в зависимости от вашей цели вам может потребоваться альтернативные варианты.

Ответ 5

Использование дисплея: таблица прекрасно, когда вы говорите о семантике. Причина "таблицы плохая" в первую очередь заключается в том, что разметка (HTML) должна описывать содержимое внутри нее. Итак, если это не данные, он не принадлежит к таблице.

Поскольку вы просто устанавливаете, как отображается разметка (в структуре таблицы), это прекрасно.

Однако это не будет работать для всех браузеров. В частности, IE6 и IE7 (и IE8 в "режиме совместимости" ) не будут отображаться правильно.

Для получения дополнительной информации о типах отображения и поддержке браузера вы можете обратиться к этому: http://www.quirksmode.org/css/display.html

Ответ 7

display: table-cell

- это стиль, а не такая структура таблицы, как это:

<table>
   <tbody>
       <tr>
          <td>
          </td>
       </tr>
   </tbody>
</table>

Так что я думаю, что это хорошо, чтобы использовать его.

Кстати, я не думаю, что таблица действительно зла.

Лично я бы предпочел таблицу для отображения табличных данных (только для данных), чем структура "div". Моя основная причина заключается в том, что пользователь может легко скопировать данные для распространения листа из своего браузера. Fullfiling my lazyness: " > и уменьшение загрузки страницы (не показывая" скачать как excel, или csv или другое ")... hehehe...: D. О, еще один, в разных браузерах он тоже отображался.

Ответ 8

Вы сказали, используя display:table для больших столбцов с автоматической шириной?

Я не могу использовать css float, потому что я хочу, чтобы столбцы расширялись и заключить договор с доступным пространством.

Затем вы также можете использовать свойства flex! Пусть получится:

В CSS3 было добавлено много свойств, одна группа называется flex, которая используется для гибких div без использования таблиц или display: table; также используется, когда пользователь использует небольшой экран (может быть, мини-ноутбук, планшет, большой смартфон, такой как серия Galaxy или маленький...?). Это следующие свойства:

  • Родитель.
    • Это основной контейнер. Например, скажем, у вас есть сеть с очень простой структурой HTML и с тремя div (одна с основной информацией, другая используется как боковая панель и, наконец, одна, чтобы обернуть те первые два).
    • display: flex. Это используется, чтобы сообщить браузеру о гибких элементах. Используйте -webkit- до того, как значение (inline-flex также применимо) для поддержки Google и Safari. Вам не нужно использовать -moz- или -o-, а не -ms-.
    • flex-direction: это ориентация дочерних элементов внутри этого родителя. Для этого есть четыре доступных значения: row, column, row-reverse или column-reverse. Из-за того, что вам нужен главный div и боковая панель, ya должен использовать столбец. Используйте -moz- и -webkit- для большей поддержки браузеров.
    • justify-content: выравнивание по оси X. Значения: flex-start, flex-end, space-between, space-around, flex-center. Я рекомендую использовать четвертый или пятый.
  • Ребенок.
    • В этом случае я имею в виду с дочерним элементом main (не рекомендуется) или div class="main" и aside или div class="sidebar".
    • order: используется для заказа divs, независимо от того, что было помещено первым в коде. Здесь CSS выигрывает от используемого HTML-кода. Значения... номера... используют -moz- n -webkit- plz.
    • flex-grow: используется для того, чтобы ребенок был больше, чем остальные, все зависит от его значения и если есть другие дочерние элементы с другими значениями для этого свойства. -webkit- и -moz- r Rcomment ed.

Moar info at: http://css-tricks.com/snippets/css/a-guide-to-flexbox/ и http://www.w3schools.com/cssref/default.asp#flexible.

О, и вот ответ: да, вы можете его использовать. Читайте по адресу: http:/www.w3.org/TR/css3- flexbox/# intro. В нем говорится:

таблица, предназначенная для выкладки 2D-данных в табличном формате

Они не говорят о плохой идее, она просто устанавливает свой формат в ACT (и, возможно, не похожа), как на таблицу.

Ответ 9

Позвольте мне разобраться с вами.  Элемент имел очарование, из-за которого все использовали его. Но затем семантика развивалась. Мы были выше и выше с синтаксисом. Были приняты решения, от имени которых XHTML 2.0 был отброшен и принят HTML5. Прочтите историю WHATWG (Рабочая группа по технологиям веб-гипертекстовой технологии), чтобы понять ваши концепции.

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

HTML предназначен для структурирования веб-страницы. CSS предназначен для стилизации этой структуры.

Итак, элемент HTML и многие другие были удалены из спецификаций. Они были специально использованы для стиля вместо структурирования.

Чтобы решить судьбу элемента, было решено сохранить его в спецификациях, так как в реальных таблицах предполагается, что они будут структурированы с ним, но для того, чтобы переместить фокус обычного веб-дизайнера, необходимо добавить аналогичные способности/спецификации в CSS,

Теперь элемент HTML предназначен для структуры таблицы и ничего другого. Если вы хотите использовать таблицу стилей, продолжайте использовать таблицу display: table; который является свойством CSS и CSS предназначен для стилирования элементов структуры в HTML. Выше этого он может быть изменен и управляться, например. в RWD вы можете указать любой элемент, чтобы изменить его отображение из таблицы в блок или что угодно.