Какой правильный путь для кросс-браузерного макета HTML? - PullRequest
0 голосов
/ 13 марта 2009

Я только что прочитал коды веб-продукта, который должен поддерживать несколько современных браузеров (включая FireFox 3.X, Safari 3.X и IE7 +, но не включая IE6-). HTML-код использует div вместо table для создания табличных эффектов. На самом деле, div организованы так:

   <div>
         <div>
              <div style="float:left" id="header1">...</div>
              <div style="float:left">...</div>
              <div style="float:left">...</div>
         </div>
         <div>
              <div style="float:left" id="header2">...</div>
              <div style="float:left">...</div>
              <div style="float:left">...</div>
         </div>

Существует фрагмент кода JavaScript для загрузки, чтобы прочитать все элементы headerX, вычислить их максимальное значение offsetWidth . Затем присвойте каждому из них максимальное значение offsetWidth . Таким образом, div хорошо выровнен, чтобы быть похожим на таблицу.

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

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

Ответы [ 11 ]

6 голосов
/ 13 марта 2009

Похоже, что почти все неправильно поняли ваш вопрос (или, может быть, я понял).

Похоже, что веб-продукт пытается отобразить табличные данные, используя div, и их причина в том, что это лучший способ сделать его кросс-браузерно-совместимым. Мало того, что это неверно, привнося JavaScript в уравнение, они мгновенно делают его менее совместимым для ваших пользователей. Если у пользователя отключен JavaScript, div будет беспорядком. Лучше всего использовать <table> для этой ситуации, поскольку на самом деле он довольно неплохо работает во всех браузерах, поэтому раньше он был настолько привлекательным для разработки макета.

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

3 голосов
/ 13 марта 2009

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

Пфф. Таблицы ведут себя не более по-разному в браузерах, чем любая другая функция.

Использование JavaScript для эмуляции макета таблицы, а не просто для использования таблицы, действительно порочно. Это будет медленнее и неуклюже, чем просто позволить браузеру сделать это, он развалится без включения JS и может плохо реагировать на масштабирование (которое в некоторых случаях нарушает offsetWidth) или ошибки округления в процентах по ширине.

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

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

Да, используйте стол. Семантическая проблема «действительно ли эта разметка представляет собой таблицу» является в значительной степени академическим вопросом. (И с вашей разметкой, говорящей о заголовках, кажется, что вы все равно можете использовать настоящую семантическую таблицу!)

Практического вреда от использования простых таблиц для разметки практически нет, если имеет смысл порядок чтения сверху вниз. Идея «таблицы по сути являются злыми» возникает как реакция на то время, когда большинство сайтов создавались с использованием ужасного беспорядка вложенных, составных и фиксированных таблиц, что приводило к нечитаемой и недоступной разметке.

Конечно, было бы идеально, если бы вы могли поместить каждый элемент страницы в элемент div и использовать CSS для позиционирования каждого элемента относительно друг друга, размера страницы и т. Д. Но реальность заключается в том, что CSS не такой мощный, и некоторые все может быть достигнуто гораздо проще с помощью небольшого консервативного использования таблицы.

2 голосов
/ 13 марта 2009

То, что вы делаете, называется див-суп. Читайте семантический HTML и свойство CSS display.

Кроме того, если данные являются табличными, нет ничего плохого в использовании таблицы. Чтобы получить одинаковые макеты в разных браузерах, вам может потребоваться установить свойство CSS border-collapse: collapse или атрибут HTML cellspacing="0"

2 голосов
/ 13 марта 2009

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

Посмотрите, что возможно с макетами CSS на csszengarden

0 голосов
/ 13 марта 2009

Такого просто нет.

У каждого брата есть свои причуды. Вам нужно многократно бороться с ними и научиться обходить их.

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

0 голосов
/ 13 марта 2009

Я считаю, что споры о div / table лучше оставить другим людям, чтобы они тратили время. При разработке кросс-браузерной компоновки философия, которая, как я обнаружил, работает лучше всего, заключается в том, чтобы обрабатывать и table, и div как уникальные элементы, каждый из которых имеет свое место на веб-странице. Если вы обнаружите, что можете эффективно использовать div, то это замечательно (и если вы сможете заставить их работать хорошо во всех браузерах, тем более мощным для вас.) Однако, с более сложными компоновками, я считаю, что таблицы также могут быть полезны , когда вы позаботитесь о том, чтобы указать cellpadding, cellspacing, border и тому подобное. Недавно я закончил работу над проектом, в котором наша окончательная стратегия проектирования использовала серию элементов div, каждый из которых инкапсулировал настройку таблицы, чтобы получить дизайн, который мы хотели. Страница была http://www.kafuka.org,, если вам интересно, что я имею в виду.

0 голосов
/ 13 марта 2009

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

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

Нет простого или «правильного» ответа на этот вопрос. Не зная специфики вашей ситуации, все, что я могу сделать, это выложить несколько основ:

  • Меньше кода почти всегда лучше.
  • Если вы пытаетесь повторить поведение таблицы с помощью css (или особенно javascript), вы можете просто использовать таблицы.
  • Меньше кода почти всегда лучше.
  • Если вы обнаружите, что вкладываете таблицы в другие таблицы, вероятно, есть лучший способ достичь своей цели.
  • Меньше кода почти всегда лучше.
  • Не бойтесь немного изменить свой дизайн, если это позволит вам значительно упростить ваш код.

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

Несколько мест для начала:

0 голосов
/ 13 марта 2009

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

http://developer.yahoo.com/yui/
http://code.google.com/p/blueprintcss/

Здесь у вас есть список CSS-фреймворков
http://speckyboy.com/2008/03/28/top-12-css-frameworks-and-how-to-understand-them/

0 голосов
/ 13 марта 2009

Не так много случаев, когда вам нужно использовать JavaScript для форматирования / дизайна. Единственное исключение, которое я могу вспомнить, это переформатирование страницы, когда пользователь изменяет размер окна.

Такого рода вещи можно сделать на 100% простым HTML + CSS. Может потребоваться условная таблица стилей для IE6 и мобильных платформ, но каждый созданный мной веб-сайт имел одну и ту же таблицу стилей для IE7 и FF3 и нормально работал с DIV вместо таблиц. Вам просто нужно думать, гуглить и импровизировать (в таком порядке;).

Однако я не думаю, что этот конкретный случай может быть достигнут без DIV для каждой таблицы, строки и ячейки, что означает, что вы будете делать почти то же самое, что и с <table>, <tr> and <td>. Отображение табличных данных в таблицах семантически хорошо, поэтому, если вам действительно нужно это как таблица, а не как веб-макет, просто избавьте себя от проблем и используйте разметку таблицы HTML.

0 голосов
/ 13 марта 2009

Я думаю, что это невозможно.

Обратите внимание, что если высота строки известна, вы можете определить стол через первый столбец - первый ряд, второй ряд, ... второй столбец - ....

...