Кажется, общее мнение, что таблицы не должны использоваться для макета в HTML.
Почему?
Я никогда (или, честно говоря, редко) видел веские аргументы в пользу этого. Обычные ответы:
Это хорошо для отделить контент от макета
, но это ошибочный аргумент; Клише Мышление. Я думаю, это правда, что использование элемента таблицы для макета имеет мало общего с табличными данными. Ну и что? Моему боссу не все равно? Заботятся ли мои пользователи?
Может быть, я или мои коллеги-разработчики, которым необходимо поддерживать веб-страницу ... Неужели таблица менее удобна в обслуживании? Я думаю, что использование таблицы - это Полегче, чем использование div и CSS.
Между прочим ... почему использование div или диапазона обеспечивает хорошее разделение содержимого от макета, а таблица - нет? Чтобы получить хороший макет только с div, часто требуется много вложенных div.
Читаемость кода
Думаю, все наоборот. Большинство людей понимают HTML, немногие понимают CSS.
Для SEO лучше не использовать таблицы
Почему? Кто-нибудь может показать доказательства того, что это так? Или заявление от Google о том, что таблицы не приветствуются с точки зрения SEO?
Таблицы работают медленнее.
Необходимо вставить дополнительный элемент tbody. Это мелочь для современных веб-браузеров. Покажите мне несколько тестов, в которых использование таблицы значительно замедляет страницу.
Переработка макета проще без таблиц, см. css Zen Garden.
. Большинство веб-сайтов, нуждающихся в обновлении, также нуждаются в новом содержании (HTML). Сценарии, в которых для новой версии веб-сайта нужен только новый файл CSS, маловероятны. Zen Garden - хороший веб-сайт, но немного теоретический. Не говоря уже о его злоупотребление CSS.
Меня действительно интересуют веские аргументы в пользу использования div + CSS вместо таблиц.
Есть дубликаты Q и A в stackoverflow.com/questions/30251/tables-instead-of-divs
Я не могу оправдать эти аргументы, я могу только сказать вам, что некоторым моим друзьям, которые создавали веб-сайты с использованием почти таблицы для всего, потребовалось много времени, и даже больше, когда им нужно было что-то изменить. С другой стороны, тем, кто использовал теги div и CSS, потребовалось гораздо меньше времени для этого, у них было меньше трудностей с внесением любых необходимых изменений, и большинство из них делали веб-сайты более привлекательными, чем те, которые использовали таблицы.
Ответ прост: это зависит от обстоятельств. Если таблицы используются для решения конкретной проблемы, которую не могут решить текущие версии CSS, они хорошо используются. Если вы начинаете размещать таблицы внутри таблиц, внутри миллионов таблиц, то вы делаете это неправильно. Если это случайная таблица, просто для размещения каких-то двух столбцов или чего-то подобного, я не запрещаю это в своей команде: это быстрее и проще сделать. (Лично я всегда стараюсь использовать CSS, но, в конце концов, доставка важнее правильного семантического HTML)
@Camilo SO все еще живет в 20 веке. Джефф явно не знает, как использовать тег ul. Просмотрите все списки на этом сайте (значки, связанные вопросы, недавние теги). Все они представляют собой отдельные столбцы или длинные абзацы, разделенные знаком br.
@Brad: В зависимости от некоторых конкретных деталей (это мой выход для любых умных возвращений ;-), использование DIV ВСЕГДА лучше, чем злоупотребление таблицами. Две части документа, расположенные рядом друг с другом, могут законно содержаться в элементах DIV, но это определенно НЕ табличные данные. Неважно, какой именно стиль получился; содержание либо табличное, либо нет. Примечание: я тоже НЕ защищаю DIVitis :)
Я полный сторонник кодирования таблиц. Для меня намного проще заставить все работать, кроссбраузерно и проще в обслуживании.
Мне кажется интересным, что новые инструменты пользовательского интерфейса, похоже, отдают предпочтение макету, управляемому таблицей (или его кузену StackPanel). Например XAML и Android.






Таблицы хороши для HTML, который вы собираете вместе для чего-то простого или временного. Если вы создаете крупномасштабный веб-сайт, вам следует использовать блоки div и CSS, поскольку их будет легче поддерживать с течением времени, когда ваш веб-сайт будет меняться.
В соответствии с требованиями стандарта 508 (для программ чтения с экрана для слабовидящих) таблицы следует использовать только для хранения данных, а не для разметки, так как это вызывает у программ чтения с экрана волнение. По крайней мере, мне так сказали.
Если вы назначаете имена каждому из div, вы также можете скинуть их все вместе с помощью CSS. С ними немного сложнее сидеть так, как вам нужно.
Это ни в коем случае не окончательный аргумент, но с помощью CSS вы можете использовать ту же разметку и изменять макет в зависимости от носителя, что является хорошим преимуществом. Например, для страницы печати вы можете тихо подавить навигацию, не создавая удобную для печати страницу.
Хороший момент, хотя вы можете использовать css, чтобы скрыть ячейки в макете на основе таблицы, например, чтобы подавить навигацию в версии для печати, макет CSS дает вам гораздо больше гибкости за простое скрытие данных.
Я ударил это одним из своих приложений; Мальчик, я был счастлив, когда понял, насколько легко было создать «удобную для печати» версию с помощью всего лишь небольшого количества CSS для печати для тех же страниц, которые были на экране.
I guess it's true that using the table element for layout has little to do with tabular data. So what? Does my boss care? Do my users care?
Google и другие автоматизированные системы делать заботятся, и они не менее важны во многих ситуациях. Семантический код легче анализировать и обрабатывать неразумным системам.
Да, например, для блогов движок отделяет комментарии от сообщения в блоге. Представьте, что макет был стилизован под таблицы ...
-1: Google абсолютно все равно, если вы используете таблицы для макета.
@Tom Anderson Не потому, что у них есть проблемы с использованием таблиц для макета, а просто потому, что не табличный HTML имеет тенденцию быть более семантическим.
См. Этот повторяющийся вопрос.
Одна вещь, о которой вы забываете, - это доступность. Табличные макеты также не переводятся, если вам, например, нужно использовать программу чтения с экрана. А если вы работаете на правительство, поддержка доступных браузеров, таких как программы чтения с экрана, может быть требуется.
Я также думаю, что вы недооцениваете влияние некоторых вещей, которые вы упомянули в вопросе. Например, если вы и дизайнер, и программист, возможно, вы не в полной мере понимаете, насколько хорошо он отделяет презентацию от контента. Но как только вы попадаете в магазин, где они выполняют две разные роли, преимущества начинают становиться более очевидными.
Если вы знаете, что делаете, и имеете хорошие инструменты, CSS действительно имеет значительные преимущества перед таблицами для макета. И хотя каждый предмет сам по себе может не оправдывать отказ от столов, вместе взятые, как правило, оно того стоит.
Да, в самом деле. Я вижу это дубликат. Я скучаю по этому. Требуются какие-либо действия, кроме обещания, что в следующий раз я буду более осторожен :-)?
Не волнуйся. Это будет происходить все чаще и чаще по мере увеличения количества вопросов. Я даже не голосовал против. Мы просто хотим быть уверены, что все они, по возможности, в конечном итоге указывают на общий источник.
Мне очень нравится этот ответ. Использование семантически значимых тегов - это не просто вопрос традиции, это позволяет тем непонятным не-браузерам (программам чтения с экрана, средствам очистки экрана, различным анализаторам) правильно классифицировать различные объекты на вашей странице.
Я надеялся, что кто-нибудь об этом упомянет. Доступность должна быть главным приоритетом!
Я не могу сказать, что согласен с мнением о том, что доступность должна быть главным приоритетом в коммерческой деятельности. Соотношение затрат и выгод невозможно. Это как поставить пандус для инвалидных колясок в магазине для альпинистов - нелепая трата ресурсов, которую можно было бы потратить на предметы с лучшей CBR. Если вы говорили о медицинском учреждении, то пандус для инвалидных колясок был бы приоритетом. Точно так же я бы беспокоился только о доступности веб-страниц для сайтов, предназначенных для людей с ослабленным зрением.
Поскольку приходилось работать с веб-сайтом, который включал 6 уровней вложенных таблиц, созданных каким-либо приложением, и создавая недопустимый HTML, на самом деле потребовалось 3 часа, чтобы исправить это нарушение за незначительное изменение.
Это, конечно, крайний случай, но настольный дизайн недостижим. Если вы используете css, вы отделяете стиль, поэтому при исправлении HTML вам не нужно беспокоиться о поломке.
Также попробуйте это с помощью JavaScript. Переместите одну ячейку таблицы из одного места в другое в другой таблице. Сложно выполнить там, где div / span будет работать только с копированием и вставкой.
"Не все ли равно моему боссу"
Если бы я был твоим боссом. Тебе было бы все равно. ;) Если дорожишь своей жизнью.
Пришлось работать с веб-сайтом, на котором было огромное количество тегов span и div, и будучи свидетелем его хрупкости, когда изменение одного элемента приводило к поломке всей страницы (и вместо тегов заголовков использовались div) ...
Очевидно, что использование Div не делает ваш код волшебным образом лучше. Многое нужно сказать о надлежащем семантическом использовании тегов.
Я хотел бы добавить, что макеты на основе div проще в обслуживании, развитии и рефакторинге. Просто внесите некоторые изменения в CSS, чтобы изменить порядок элементов, и готово. По моему опыту, переделывать макет, использующий таблицы, - это кошмар (больше, если есть вложенные таблицы).
Ваш код также имеет значение с точки зрения семантический.
Моя мечта - иметь графического дизайнера, который берет объекты / данные, которые я предоставляю, и помещает их на страницу, не заботясь о CSS, DIV, TABLE ... :)
Во-вторых, Манрико - визуальный дизайнер, который позволил бы вам создать макет и определить фиксированные и процентные размеры, а затем сгенерировать минимальный HTML и CSS, был бы чрезвычайно полезен!
Проблема, с которой я столкнулся с концепцией семантической сети, заключается в том, что в HTML 4 словарь очень ограничен и предназначен в основном для технических документов. Многие сайты с коммерческими / маркетинговыми целями могут содержать элементы, которые не вписываются в этот словарь. HTML 5 исправляет некоторые из них с помощью тегов, таких как nav, header, footer, но пока мы застряли в использовании тегов, таких как span, которые на самом деле очень мало говорят о том, как следует интерпретировать контент.
Разделение между содержимым и макетом также упрощает создание удобных для печати макетов или просто разных скинов (стилей) для вашего сайта без необходимости создавать разные html-файлы. Некоторые браузеры (например, Firefox) даже поддерживают выбор таблицы стилей из меню просмотра.
И я действительно думаю, что проще поддерживать макет без таблиц. Вам не нужно беспокоиться о rowspans, colspans и т. д. Вы просто создаете несколько контейнеров-div и размещаете контент там, где вам нужно. И это говорит о том, что я думаю, что он также более читабелен (<div id = "sidebar"> против <tr><td>...</td><td>...<td>sidebar</td></tr>).
Это просто небольшая уловка, которую вам нужно усвоить (и когда вы овладеете этим трюком, я думаю, что это будет проще и имеет больше смысла).
Кроме того, не забывайте, что таблицы не очень хорошо отображаются в мобильных браузерах. Конечно, на iPhone есть классный браузер, но не у всех есть iPhone. Рендеринг таблиц может быть пустяком для современных браузеров, но для мобильных браузеров это просто мелочь.
Я лично обнаружил, что многие люди используют слишком много тегов <div>, но в умеренных количествах они могут быть очень чистыми и легко читаемыми. Вы упомянули, что людям труднее читать CSS, чем таблицы; с точки зрения «кода» это может быть правдой; но с точки зрения чтения контента (представление> исходный код) намного проще понять структуру с помощью таблиц стилей, чем с помощью таблиц.
Хорошая мысль, которая у вас есть; но ИМХО UI для мобильных устройств должен быть совершенно другим с учетом ограничений ввода.
Истинный; поэтому временами я начинал использовать другой подход. В модели MVC мой вид всплывает только с необработанными данными XML, то есть контентом. Затем начните с другой модели MVC, где xml raw data = model; view = html / css; контроллер = xsl. Таблица стилей XSL удаляет ненужные данные для мобильных устройств.
Чтобы ответить на аргумент «таблицы работают медленнее» - вы думаете о времени рендеринга, которое является неправильной метрикой. Очень часто разработчики пишут огромную таблицу, чтобы создать весь макет страницы, что значительно увеличивает размер загружаемой страницы. Нравится вам это или нет, но существует еще масса пользователей коммутируемого доступа.
См. Также: чрезмерное использование ViewState
Похоже, вы просто привыкли к таблицам и все. Размещение макета в таблице ограничивает вас только этим макетом. С помощью CSS вы можете перемещать биты, взгляните на http://csszengarden.com/ И нет, макет обычно не требует большого количества вложенных div.
Без таблиц для макета и правильной семантики HTML намного чище, а значит, его легче читать. Зачем тому, кто не понимает CSS, пытаться его прочитать? И если кто-то считает себя веб-разработчиком, то хорошее владение CSS просто необходимо.
Преимущества SEO заключаются в возможности размещать наиболее важный контент наверху страницы и лучшее соотношение содержания и разметки.
Очевидный ответ: см. CSS Zen Garden. Если вы скажете мне, что вы можете легко сделать то же самое с макетом на основе таблиц (помните - HTML не меняется), тогда обязательно используйте таблицы для макета.
Две другие важные вещи - это доступность и SEO.
Оба заботятся о том, в каком порядке будет представлена информация. Вы не сможете легко представить свою навигацию вверху страницы, если ваш табличный макет помещает ее в 3-ю ячейку 2-й строки 2-й вложенной таблицы на странице.
Итак, ваши ответы - ремонтопригодность, доступность и SEO.
Не ленитесь. Делайте вещи правильно и правильно, даже если им немного сложнее научиться.
Часто используемый трюк в Zen Garden - это замена текста изображениями и определение этого в CSS, что делает его невидимым для HTML. Очень-очень неправильно.
Мне очень жаль, но это не так. Текст по-прежнему находится в HTML - это одно из требований дизайна CSSZG. HTML должен оставаться неизменным.
Если вы внимательно посмотрите на некоторые из дизайнов, текст в некоторых заголовках отличается от текста в HTML. Это потому, что HTML становится невидимым, а вместо него вставляется изображение. (Пример: csszengarden.com/?cssfile=/212/212.css&page=0, "Путь?" К? Достижению?)
К сожалению, нет абсолютно никаких доказательств того, что макеты div лучше для SEO. Кроме того, сами Google заявили, что проверка HTML не имеет для них значения - это немного другая проблема, но она направлена на таблицы, потому что они редко проверяются.
«Большинство из вас знакомы с достоинствами программиста. Конечно, их три: лень, нетерпение и высокомерие ». - Ларри Уолл
Вы говорите, что использовать таблицы - это лениво, но я не могу сказать, сколько часов я потратил на борьбу с плохо написанными и слишком широкими стилями CSS, чтобы заставить что-то работать правильно. Как правило, лучше всего использовать CSS, но если вы можете решить что-то за 30 секунд с помощью таблицы, которая может занять у вас часы со стилизованными div, тогда непременно используйте таблицу и переходите к чему-то более важному.
Собственно, ваш ответ не совсем правильный. Вы может изменяете стиль элементов <table> как хотите, используя CSS. Я могу легко сделать то же самое с макетом на основе таблицы, как это сделано в CSS Zen Garden. Вот пример: x.iaesr.com/~/experiments/table_test
Макеты CSS обычно намного лучше для доступности, при условии, что контент идет в естественном порядке и имеет смысл без таблицы стилей. И не только программы чтения с экрана борются с макетами на основе таблиц: они также значительно усложняют правильную визуализацию страницы для мобильных браузеров.
Кроме того, с макетом на основе div вы можете очень легко делать интересные вещи с таблицей стилей печати, такие как исключение заголовков, нижних колонтитулов и навигации с печатных страниц - я думаю, что было бы невозможно или, по крайней мере, намного сложнее сделать это с помощью табличная верстка.
Если вы сомневаетесь, что разделение содержимого от макета проще с помощью div, чем с таблицами, взгляните на основанный на div HTML в CSS Zen Garden, посмотрите, как изменение таблиц стилей может кардинально изменить макет, и подумайте, сможете ли вы добиться нужного результата. такое же разнообразие макетов, если HTML был основан на таблице ... Если вы делаете макет на основе таблицы, вы вряд ли будете использовать CSS для управления всем интервалом и заполнением в ячейках (если бы вы были, вы бы почти наверняка легче использовать плавающие div и т. д.). Без использования CSS для управления всем этим и из-за того, что таблицы определяют порядок вещей в HTML слева направо и сверху вниз, таблицы имеют тенденцию означать, что ваш макет становится очень фиксированным в HTML.
На самом деле я думаю, что очень сложно полностью изменить макет дизайна на основе div и CSS, не изменив немного div. Однако с макетом на основе div и CSS намного проще настроить такие вещи, как расстояние между различными блоками и их относительные размеры.
It's good to separate content from layout
But this is a fallacious argument; Cliche Thinking
Это ошибочный аргумент, потому что таблицы HTML - это макет! Содержимое - это данные в таблице, представление - это сама таблица. Вот почему иногда бывает очень сложно отделить CSS от HTML. Вы не отделяете контент от презентации, вы отделяете презентацию от презентации! Куча вложенных div не отличается от таблицы - это просто другой набор тегов.
Другая проблема с отделением HTML от CSS заключается в том, что им необходимо досконально знать друг друга - вы действительно не можете полностью разделить их. Макет тега в HTML тесно связан с файлом CSS, что бы вы ни делали.
Я думаю, что таблицы против div сводятся к потребностям вашего приложения.
В приложении, которое мы разрабатываем на работе, нам нужен был макет страницы, в котором части будут динамически изменяться в соответствии с их содержимым. Я потратил дни, пытаясь заставить это работать кроссбраузерно с CSS и DIV, и это был полный кошмар. Мы перешли на столы, и все это просто работал.
Однако у нас очень закрытая аудитория для нашего продукта (мы продаем оборудование с веб-интерфейсом), и вопросы доступности нас не беспокоят. Я не знаю, почему программы чтения с экрана не могут хорошо работать с таблицами, но я полагаю, что если это так, разработчики должны с этим справиться.
программы чтения с экрана работают с таблицами нормально ... Проблема в том, что таблицы не работают с программами чтения с экрана. Табличный макет может представлять информацию в недоступной форме. Подумайте, как будет выглядеть правая навигация. Это было бы довольно далеко вниз по странице.
Хорошо, тогда это имеет смысл - спасибо!
Отделение содержимого от представления происходит только тогда, когда разметка является семантической. Большинство людей не знают, как написать действительно семантическую разметку, и они также не могут правильно представить эту разметку с помощью css. Это ошибка разработчика, а не технологии. Я могу это сделать, это не так уж сложно.
Тот факт, что <table> или <div> имеют представление дефолт в большинстве экранных агентов, не приравнивает их к элементам представления, а не к семантическим элементам.
Я не говорю конкретно о HTML, я говорю о концептуальном плане в основном дизайне пользовательского интерфейса. Таблица определяет, как вещи располагаются на экране, то есть как они представляются пользователю. Это презентация.
@erlando: правда, но тогда в большинстве дизайнов, использующих div, столбцы будут перемещаться влево, и поэтому навигация будет позже в HTML. Я еще не видел дизайна, в котором навигация была бы самое первое в HTML.
«Я потратил дни, пытаясь заставить это работать» - если что-то, что я пытаюсь выяснить, когда-либо занимает больше пары часов, я сообщаю об этом сообществу StackOverflow. Незнание того, как что-то делать правильно, не освобождает от ответственности. Особенно, когда все ответы у нас под рукой.
+1 за «Куча вложенных div не отличается от таблицы - это просто другой набор тегов». Я должен добавить, что в большинстве случаев мне требуется одинаковое количество тегов для достижения того же результата.
Таблицы должны использоваться ТОЛЬКО для данных, а не для макета. Да, вы можете использовать их для верстки, если ваш босс не знает лучшего, или если вас не волнует SEO, или если вам все равно, пишете ли вы дерьмовый код. @Nightwolf, это самая нелепая вещь, которую я когда-либо слышал, требуется в три раза больше тегов, чтобы делать то же самое, что и ОДИН тег div.
@ bmarti44: Да, ты прав. Бывают случаи, когда один «тег div» делает свое дело, а «теги таблицы» по-прежнему требуют своего большого количества. Но в качестве примера, если вы создаете экран входа в систему с макетом div, вы не можете использовать меньше тегов, чем «теги таблицы» для создания того же макета. Если вы все еще не согласны со мной, я хотел бы, чтобы вы показали мне, как улучшить мой код экрана входа в систему. Не поймите меня неправильно, я считаю, что вам следует использовать div, где вы не отображаете данные, даже если это больше тегов, чем таблиц.
@Nightwolf, да, это старый, но я бы люблю увидел код экрана входа в систему и переписал его более эффективными тегами. Поделись, пожалуйста! : D
@MetalFrog: вы можете найти мой код экрана входа здесь: chat.stackoverflow.com/rooms/6887/layout-in-html.
@ Ночной волк, милая! Должно быть весело!
Никаких аргументов в пользу DIVs с моей стороны.
Я бы сказал: если обувь подходит, наденьте ее.
Стоит отметить, что трудно, если не невозможно, найти хороший метод DIV + CSS для рендеринга содержимого в два или три столбца, который согласован во всех браузерах и по-прежнему выглядит так, как я задумал.
Это немного склоняет баланс к таблицам в большинстве моих макетов, и хотя я чувствую себя виноватым за их использование (не знаю, почему, люди просто говорят, что это плохо, поэтому я стараюсь их слушать), в конце концов, прагматичный взгляд таков, что это просто мне проще и быстрее использовать ТАБЛИЦЫ. Мне не почасовая оплата, поэтому столы для меня дешевле.
Если вы хотите создать веб-сайт с двумя или тремя столбцами с divs + css, который работает во всех браузерах, вам ни в коем случае не следует начинать с нуля. В Интернете доступно множество базовых шаблонов, которые вы можете использовать в качестве основы. Обычно они оптимизированы для корректного отображения во всех браузерах ie6 +
Вот мой ответ программиста от подобная нить
Семантика 101
Сначала взгляните на этот код и подумайте, что здесь не так ...
class car {
int wheels = 4;
string engine;
}
car mybike = new car();
mybike.wheels = 2;
mybike.engine = null;
Проблема, конечно, в том, что байк - это не машина. Класс автомобиля не подходит для экземпляра велосипеда. Код не содержит ошибок, но семантически неверен. Это плохо отражается на программисте.
Семантика 102
Теперь примените это к разметке документа. Если в вашем документе должны быть представлены табличные данные, то подходящим тегом будет <table>. Однако, если вы поместите навигацию в таблицу, вы неправильно используете предназначение элемента <table>. Во втором случае вы не представляете табличные данные - вы (неправильно) используете элемент <table> для достижения презентационной цели.
Вывод
Заметят ли посетители? Нет. Тебе не все равно? Может быть. Срезаем ли мы углы, как программисты? Конечно. Но должны ли мы? Нет. Кому выгодно использовать семантическую разметку? Вы - и ваша профессиональная репутация. А теперь иди и поступай правильно.
Извините, это не выдерживает критики. Вы не используете car для mybike, потому что вместо этого вы определили бы класс «велосипед». Вы не можете определить что-то еще для «<table>», потому что это больше, чем простой семантический тег - он также сообщает браузеру, как отображать его содержимое.
Точно. Вместо этого вы бы использовали класс велосипеда. В том-то и дело. Вы должны использовать то, что вам подходит. Вы не стали бы использовать класс car для mybike только потому, что его метод Render () хорошо отформатировал вещи. Вы бы сделали рендеринг класса велосипеда так, как хотите.
Я думаю, дело также в том, что в системе желательна слабая связь. Использование таблиц вместо DIV + CSS для определения макета эквивалентно сильно связанной системе. Подробнее о слабом сцеплении здесь: en.wikipedia.org/wiki/Loose_coupling
Хорошая аналогия и отличный вывод. Почему начальник и / или пользователи должны заставлять кого-то поступать правильно? Разве никто больше не гордится своей работой?
Я думаю, что это довольно высокомерный пост, который ничего не объясняет, а просто повторяет те же утверждения снова, не отвечая на вопрос. Я не понимаю, почему он получил столько голосов ????
Я согласен с таркумом. Этот ответ довольно субъективен и фактически не отвечает на поставленный вопрос. Хотя я согласен с тем, что DIV следует использовать для макета страницы, я не могу себе представить, чтобы какой-либо веб-дизайнер был сбит с толку макетом на основе таблиц.
«Я не могу представить, чтобы какой-либо веб-дизайнер был сбит с толку макетом на основе таблиц» Без Firebug я бы никогда не понял вложенный макет таблицы.
К этому моменту я так много раз проходил через ад вложенных таблиц, что комментарий Ричарда Э. заставляет мой мозг болеть.
@tharkun & Richard: Почему «семантически некорректно» субъективно и ничего не объясняет?
Я также удивлен, что этот ответ получил такую высокую оценку, поскольку он даже не отвечает на вопрос.
Боюсь, я надеялся избежать такого рода ошибочных рассуждений. «Ты - и твоя профессиональная репутация. А теперь иди и поступай правильно». Возникает вопрос. (Предполагается, что использование CSS - это профессиональное отношение, а это еще предстоит доказать.)
Я не думаю, что справедливо называть мой вывод ошибочным рассуждением, когда это вовсе не причина - это вывод. Моя причина в предыдущем абзаце: «Вы неправильно используете элемент таблицы для достижения презентационной цели» - использование элемента таблицы для чего-то, для чего он никогда не предназначался.
@Carl Camera: Это предложение не показывает, каковы негативные последствия использования элемента table для презентационных целей. Утверждать, что это «плохо отражается на программисте» и ставить под сомнение «профессиональное» отношение, - это «попрошайничество» в этом ответе.
@bno Да, вы должны принять мою предпосылку о том, что неправильное использование инструмента плохо влияет на мастера, чтобы принять мой вывод о том, что правильное использование инструмента положительно влияет на мастера. Если нет, то использование ul для отступа или цитаты для боковых полей также вас не побеспокоит.
Последний комментарий @Carl Camera: вы не можете использовать ul для отступа или цитату для боковых полей после того, как вы использовали сброс CSS ... хе-хе.
Я полностью согласен с этой аналогией, и люди, пишущие спецификации HTML5, тоже должны согласиться. Подумайте об этом, они предоставляют нам такие элементы, как section, article, aside, hgroup, header, footer, nav, figure, figcaption, поэтому нам не нужно использовать div для всего.
Я понимаю что-то похожее на ваш пост: если это данные, вы можете использовать таблицы, но если это что-то еще, вам следует использовать CSS
К сожалению, CSS Zen Garden больше нельзя использовать в качестве примера хорошего дизайна HTML / CSS. Практически во всех их последних разработках для заголовков разделов используется графика. Эти графические файлы указаны в CSS.
Таким образом, веб-сайт, цель которого - продемонстрировать преимущество сохранения дизайна вне контента, теперь регулярно совершает НЕГЛАВНЫЙ ГРЕХ, заключающийся в добавлении контента в дизайн. (Если заголовок раздела в файле HTML изменится, отображаемый заголовок раздела не изменится).
Что только говорит о том, что даже те, кто отстаивает строгую религию DIV & CSS, не могут следовать своим собственным правилам. Вы можете использовать это как ориентир, насколько внимательно вы им будете следовать.
Но он все же может продемонстрировать ключевые аргументы в пользу дизайна на основе CSS, а именно: возможность перепроектирования, SEO и доступность. Конечно, нельзя вставлять заголовки в графику, указанную в CSS.
Кстати, заголовки все еще там. HTML должен оставаться неизменным.
Кроме того, решение для заголовка изображения - лишь одно из нескольких - также есть такие параметры, как sifr (mikeindustries.com/blog/sifr).
Вы имеете в виду, что они делают <h1>Some Text</h1>, а затем в своем css: h1 { background-image('foo.jpg'); text-indent:-3000px }? Это способ правильный, потому что вы сохраняете максимум семантической информации в HTML без стилей. А может я вас неправильно понял.
@Karen, если в вашем примере foo.jpg показывает "Some Text" стилизованным шрифтом, да, это то, что я имею в виду. Это невыразимый грех, потому что, если вы измените HTML на «<h1> Some other Text </h1>», браузер все равно будет отображать «Some Text»
На практике многие сайты являются динамическими, поэтому вы можете программно обеспечить совместное изменение вещей. Например, в системе CMS заголовок / заголовок статьи будет храниться в базе данных вместе с графическим представлением (сгенерированным / загруженным). Задача CSS-ZG - доказать концепцию.
Карен права, ты ошибаешься, Джеймс. Ваш пример - соломенный человек. Было бы глупо забыть изменить изображение при изменении семантического HTML. Так что оставляет свой ноутбук в автобусе. Что ты думаешь?
@Ambrose: Потому что вся суть этого долбанного сайта - продемонстрировать разделение содержания и стиля. Контент и стиль должны правильно обрабатываться разными людьми, ни один из которых не должен «помнить», что изменил другой.
Мистер S&N: это только усугубит ситуацию. Вам нужно будет динамически создавать новые изображения - в правильном стиле. Итак, теперь вы переместили стили из CSS в код бизнес-уровня.
@James: Контентом и стилем не всегда могут заниматься разные люди. Когда контент стилизован, должно происходить сотрудничество. Чем <h1><img src = "something.png"></h1> более удобен в обслуживании, чем <h1 class = "something image">Something</h1>? В любом случае необходимо обновить something.png. Но второй пример гораздо доступнее.
@ Джош: Я не согласен. Вся суть CSS состоит в том, чтобы четко разделить их.
И в моем примере есть чистый разрыв: CSS просто заявляет, что стиль контента заключается в использовании изображения. Однако содержание изображения должен быть изменен графическим профессионалом независимо от того, используется ли CSS. В этом примере аргументы против использования графики для заголовков, а не аргументы за / против CSS.
@Josh: HTML img (с alt, конечно) более доступен, чем фоновое изображение CSS, отправленное за пределы экрана: он будет отображать sth, даже если изображения отключены, но CSS все еще активен, а также будет работать в режиме высокой контрастности на Windows. Только простой текст (без трюка с CSS) более доступен, чем изображение HTML с правильным alt.
</table>.Я помню, как создавал огромные таблицы много лет назад, еще во времена более медленных компьютеров, и я помню, когда появился код, который заставлял их отрисовывать по ходу. IE6? IE4? Не могу вспомнить, но это определенно изменилось. Конечно, это полезно для табличных данных, но макеты таблиц имеют стиль с точностью до дюйма, поэтому, возможно, прогрессивный рендеринг будет менее полезен, поскольку таблица перескакивает, чтобы вместить недавно загруженный контент.
Позиционирование div и CSS обеспечивает более гибкий дизайн, что упрощает модификацию и создание шаблонов ваших веб-страниц.
Тем не менее, если вас не интересует гибкость, то использование таблицы, а не некоторых div, преобразованных в таблицу с помощью CSS, определенно намного проще и быстрее. Я обычно использую таблицы при создании дизайна, чтобы он выглядел как следует быстрее.
Вся идея семантической разметки заключается в разделении разметки и представления, включая макет.
Div не заменяет таблицы, они используются по-своему для разделения содержимого на блоки связанного содержимого (,). Когда у вас нет навыков и вы полагаетесь на таблицы, вам часто придется разделять свой контент на ячейки, чтобы получить желаемый макет, но вам не нужно прикасаться к разметке для достижения представления при использовании семантической разметки. Это действительно важно, когда создается разметка, а не статические страницы.
Разработчикам необходимо прекратить предоставлять разметку, которая подразумевает макет, чтобы те из нас, у кого есть навыки для представления контента, могли продолжить нашу работу, а разработчикам не приходилось возвращаться к своему коду, чтобы вносить изменения, когда требуется изменить представление.
Инструменты, использующие макеты таблиц, могут стать чрезвычайно тяжелыми из-за количества кода, необходимого для создания макета. Портал SAP Netweaver по умолчанию использует ТАБЛИЦУ для компоновки своих страниц.
У производственного портала SAP на моем текущем концерте есть домашняя страница, HTML-код которой весит более 60 КБ и занимает семь таблиц в глубину, трижды внутри страницы. Добавьте в Javascript неправильное использование 16 фреймов с похожими проблемами с таблицами внутри них, чрезмерно тяжелый CSS и т. д., И страница весит более 5 МБ.
Потратьте время на то, чтобы снизить вес страницы, чтобы вы могли использовать свою пропускную способность для взаимодействия с пользователями, стоит затраченных усилий.
Гибкость макета
Представьте, что вы создаете страницу с большим количеством эскизов.
DIV:
Если вы поместите каждую миниатюру в DIV, смещенную влево, может быть, 10 из них поместятся в строке. Сделайте окно уже, и БАМ - это 6 в ряду, или 2, или сколько влезет.
СТОЛ:
Вы должны явно указать, сколько ячеек подряд. Если окно слишком узкое, пользователь должен прокручивать его по горизонтали.
Ремонтопригодность
Та же ситуация, что и выше. Теперь вы хотите добавить три миниатюры в третью строку.
DIV:
Добавьте их. Макет изменится автоматически.
СТОЛ:
Вставьте новые ячейки в третью строку. Ой! Сейчас там слишком много предметов. Вырежьте несколько штук из этого ряда и поместите их в четвертый ряд. Сейчас там слишком много предметов. Вырежьте немного из этого ряда ... (и т.д.)
(Конечно, если вы создаете строки и ячейки с помощью сценариев на стороне сервера, это, вероятно, не будет проблемой.)
Однажды я узнал, что таблица загружается сразу, другими словами, когда соединение медленное, пространство, где появляется таблица, остается пустым, пока не будет загружена вся таблица, с другой стороны, div загружается сверху вниз так же быстро, как приходят данные и независимо от того, полностью он готов или нет.
Это было бы лет 15 назад?
@Tom Hawtin - tackline: В моей стране все еще есть проблема. Так что +1.
Если вы поддерживаете здесь угол наклона стола, найдите сайт со столами, а затем получите программу для чтения с экрана - выключите программу чтения с экрана и выключите монитор.
Затем попробуйте с хорошим семантически правильным макетом сайта div.
Вы увидите разницу.
Таблицы не являются злом, если данные в них табличные, а не компоновка страницы.
Стоит разобраться в CSS и div, чтобы центральный столбец содержимого загружался и отображался перед боковой панелью в макете страницы. Но если вы изо всех сил пытаетесь использовать плавающие блоки div для вертикального выравнивания логотипа с некоторым спонсорским текстом, просто используйте таблицу и продолжайте жить. Религия дзенского сада просто не дает много денег.
Идея отделения содержимого от представления состоит в том, чтобы разделить приложение таким образом, чтобы разные виды работы влияли на разные блоки кода. На самом деле речь идет об управлении изменениями. Но стандарты кодирования могут только поверхностно исследовать текущее состояние кода.
Журнал изменений для приложения, которое зависит от стандартов кодирования для «отделения содержимого от представления», будет отображать образец параллельных изменений в вертикальных разрозненных хранилищах. Если изменение «содержания» всегда сопровождается изменением «представления», насколько успешным будет разбиение?
Если вы действительно хотите продуктивно разбить код, используйте Subversion и просмотрите журналы изменений. Затем используйте простейшие методы кодирования - блоки div, таблицы, JavaScript, включения, функции, объекты, продолжения и т. д. - чтобы структурировать приложение так, чтобы изменения соответствовали простым и удобным образом.
+1 за первые два предложения.
Один стол для разметки не так уж и плох. Но в большинстве случаев вы не можете получить нужный макет с помощью всего лишь одной таблицы. Довольно скоро у вас будет 2 или 3 вложенных таблицы. Это становится очень громоздким.
Это НАМНОГО труднее читать. Это не зависит от мнения. Просто больше вложенных тегов без каких-либо опознавательных знаков.
Отделение контента от презентации - это хорошо, потому что это позволяет вам сосредоточиться на том, что вы делаете. Смешение этих двух приводит к раздутым страницам, которые трудно читать.
CSS для стилей позволяет вашему браузеру кэшировать файлы, и последующие запросы выполняются намного быстрее. Это ОГРОМНО.
Таблицы закрепляют вас в дизайне. Конечно, не всем нужна гибкость CSS Zen Garden, но я никогда не работал над сайтом, где мне не нужно было немного менять дизайн здесь и там. С CSS это намного проще.
Таблицы сложно стилизовать. У вас нет особой гибкости с ними (т.е. вам все равно нужно добавлять атрибуты HTML, чтобы полностью контролировать стили таблицы)
Я не использовал таблицы для нетабличных данных, наверное, 4 года. Я не оглядывался.
Я действительно хотел бы предложить прочитать Мастерство CSS Энди Бадда. Это фантастика.
Я очень рекомендую эту книгу
Содержит хорошие примеры блочной модели, селекторов и позиционирования.
Для меня огромная проблема заключается в том, что отрисовка таблиц, особенно вложенных, занимает гораздо больше времени, чем правильно оформленная реализация css. (Вы может делаете css столь же медленным).
Все браузеры отображают CSS быстрее, потому что каждый div является отдельным элементом, поэтому экран может загружаться по мере чтения пользователем. (Для огромных наборов данных и т. д.). В этом случае я использовал css вместо таблиц, даже не имея дело с макетом.
Вложенная таблица (таблицы внутри ячеек и т. д.) Не будет отображаться в окне браузера до тех пор, пока не будет найдена последняя «/ таблица». Хуже того - плохо определенная таблица иногда даже не отображается! Или когда это происходит, все плохо. (не совмещается должным образом с "TD" и т. д.)
Я использую таблицы для большинства вещей, но когда дело доходит до больших данных и желания быстро отрисовать экран для конечного пользователя - я изо всех сил стараюсь использовать то, что может предложить CSS.
Я думаю, эта лодка отплыла. Если вы посмотрите на направление, в котором пошла отрасль, вы заметите, что CSS и открытые стандарты являются победителями в этом обсуждении. Что, в свою очередь, означает, что для большей части работы с HTML, за исключением форм, дизайнеры будут использовать блоки div вместо таблиц. Мне это сложно, потому что я не гуру CSS, но так оно и есть.
Я действительно считаю, что это проблема, связанная с общей проблемой. Когда родился HTML, никто не мог предвидеть его широкого распространения. Еще одна технология, которая чуть не рухнула под тяжестью собственного успеха. Когда HTML-страницы были написаны в vi на зеленом текстовом терминале, ТАБЛИЦА была всем, что было необходимо для представления данных посетителям страницы, и в основном это были данные, которые имели смысл в табличной форме.
Все мы знаем, как развивались вещи. ТАБЛИЦЫ вышли из моды сравнительно недавно, но есть много причин предпочесть DIV и макеты на основе CSS (доступность не последняя из них). Конечно, я не могу написать CSS, чтобы спасти свою жизнь :-), и я думаю, что эксперт по графическому дизайну всегда должен быть под рукой.
Тем не менее ... есть много данных, которые должны быть представлены в таблице даже на современном веб-сайте.
Используйте таблицы, когда вам нужно убедиться, что элементы должны оставаться в определенных физических отношениях в макете. Для данных таблица, как правило, является лучшим элементом макета для использования, потому что вы не хотите, чтобы ваши столбцы обернулись ожидаемым образом и запутали ассоциации.
Можно также возразить, что элементы, не являющиеся данными, которые должны оставаться в определенных отношениях, также должны отображаться в таблице.
Гибкие макеты css отлично подходят для контента, который подходит для мобильных устройств и больших экранов, а также для печати и других типов отображения, но иногда контент просто нужно отображать очень специфическим образом, и если для этого требуется, чтобы программы чтения с экрана не могли легко получить к нему доступ, это вполне могло быть оправдано.
«Можно также возразить, что элементы, не являющиеся данными, которые должны оставаться в определенных отношениях, также должны отображаться в таблице». Таким данным просто нет места в HTML. Вы должны понимать свою среду.
Я обнаружил, что даже самые лучшие отделы планирования не справляются с несколькими аспектами. Например. В div нет возможности иметь нижнюю панель, которая всегда находится в нижней части браузера, даже если остальная часть содержимого не уходит в нижнюю часть браузера. Кроме того, вы не можете элегантно сделать что-либо лучше, чем три столбца, и у вас не может быть столбцов, которые увеличиваются и уменьшаются в соответствии с шириной их содержимого. В конце концов, мы сначала пытаемся использовать div. Однако мы не будем ограничивать наш html-дизайн, основываясь на религиозном содержании и идеальном макете.
Найдите время, чтобы правильно изучить CSS, и вы не ограничите свой HTML-дизайн этими вещами, называемыми таблицами.
У вас может быть нижняя панель, которая всегда находится внизу. Google 'нижний колонтитул'
Все это сложно, и иногда делать приходится идти на компромиссы, чтобы все это работало вместе; особенно в конструкциях с жидкой шириной
Я собираюсь перебрать ваши аргументы один за другим и постараюсь показать в них ошибки.
It's good to separate content from layout But this is a fallacious argument; Cliché Thinking.
Это вовсе не ошибочно, потому что HTML был разработан намеренно. Неправильное использование элемента не может быть полностью исключено (в конце концов, новые идиомы были разработаны и в других языках), но возможные негативные последствия должны быть уравновешены. Кроме того, даже если бы не было аргументов против неправильного использования элемента <table> сегодня, это могло бы быть завтра из-за того, как производители браузеров применяют к этому элементу особую обработку. В конце концов, они знают, что «элементы <table> предназначены только для табличных данных», и могут использовать этот факт для улучшения механизма рендеринга, в процессе тонко изменяя поведение <table> и, таким образом, устраняя случаи, в которых они ранее использовались не по назначению.
So what? Does my boss care? Do my users care?
Зависит от. У вашего босса остроконечные волосы? Тогда ему все равно. Если она грамотная, то ей будет все равно, потому что пользователи буду.
Perhaps me or my fellow developers who have to maintain a web page care... Is a table less maintainable? I think using a table is easier than using divs and css.
Кажется, что большинство профессиональных веб-разработчиков противятся вам.[citation needed]. Очевидно, что таблицы находятся менее удобны в обслуживании. Использование таблиц для макета означает, что изменение корпоративного макета фактически означает изменение каждой отдельной страницы. Это может стоить очень дорого. С другой стороны, разумное использование семантически значимого HTML в сочетании с CSS мог бы ограничивает такие изменения CSS и используемыми изображениями.
By the way... why is using a div or a span good separation of content from layout and a table not? Getting a good layout with only divs often requires a lot of nested divs.
Глубоко вложенные <div> являются анти-шаблоном, как и макеты таблиц. Хорошим веб-дизайнерам их не нужно много. С другой стороны, даже такие глубоко вложенные div не имеют многих проблем с компоновкой таблиц. Фактически, они могут даже вносить вклад в семантическую структуру, логически разделяя контент на части.
Readability of the code I think it's the other way around. Most people understand html, little understand css. It's simpler.
«Большинство людей» не имеет значения. Профессионалы имеют значение. Для профессионалов макеты таблиц создают гораздо больше проблем, чем HTML + CSS. Это все равно что сказать, что я не должен использовать GVim или Emacs, потому что Блокнот проще для большинства людей. Или что мне не следует использовать LaTeX, потому что MS Word проще для большинства людей.
It's better for SEO not to use tables
Я не знаю, правда ли это, и не стал бы использовать это в качестве аргумента, но это было бы логично. Поисковые системы ищут данные соответствующий. Табличные данные, конечно, могут быть актуальными, но пользователи редко их ищут. Пользователи ищут термины, используемые в заголовке страницы или на аналогичных заметных позициях. Поэтому было бы логично исключить табличные данные из фильтрации и тем самым сократить время обработки (и затраты!) В большой раз.
Tables are slower. An extra tbody element has to be inserted. This is peanuts for modern web browsers.
Дополнительный элемент не имеет ничего общего с медленностью таблиц. С другой стороны, алгоритм компоновки таблиц намного сложнее, браузеру часто приходится ждать загрузки всей таблицы, прежде чем он сможет начать компоновку содержимого. Кроме того, кеширование макета не будет работать (CSS можно легко кэшировать). Обо всем этом уже говорилось.
Show me some benchmarks where the use of a table significantly slows down a page.
К сожалению, у меня нет контрольных данных. Я сам был бы заинтересован в этом, потому что это правильно, что этому аргументу недостает определенной научной строгости.
Most web sites that need an upgrade need new content (html) as well. Scenarios where a new version of a web site only needs a new css file are not very likely.
Нисколько. Я работал над несколькими случаями, когда изменение дизайна упрощалось за счет разделения контента и дизайна. Часто все же необходимо изменить некоторый HTML-код, но изменения всегда будут гораздо более ограниченными. Кроме того, изменения в конструкции иногда необходимо вносить динамически. Рассмотрим механизмы шаблонов, такие как тот, который используется в системе ведения блогов WordPress. Макеты таблиц буквально убили бы эту систему. Я работал над аналогичным случаем для коммерческого программного обеспечения. Возможность изменять дизайн без изменения HTML-кода была одним из бизнес-требований.
Еще одна вещь. Макет таблицы значительно усложняет автоматический синтаксический анализ веб-сайтов (очистку экрана). Это может показаться тривиальным, потому что, в конце концов, кто это делает? Я сам был удивлен. Очистка экрана может очень помочь, если рассматриваемая служба не предлагает альтернативу WebService для доступа к своим данным. Я работаю в области биоинформатики, где это печальная реальность. Современные веб-технологии и веб-сервисы не доступны большинству разработчиков, и зачастую очистка экрана - единственный способ автоматизировать процесс получения данных. Неудивительно, что многие биологи до сих пор выполняют подобные задачи вручную. Для тысяч наборов данных.
«изменение корпоративного макета на самом деле будет означать изменение каждой отдельной страницы» - действительно ли люди действительно дублируют корпоративный макет на каждой странице? Это так легко решить с помощью мастер-страниц или пользовательских элементов управления в .net, включаемых файлов на php или классического asp и т. д. Любой, кто копирует макет компании таким образом, заслуживает ** пинка! ;-)
@John MacIntyre: Полностью согласен. Шаблон как можно больше и изменяйте только там, где это необходимо. Это простые законы управления.
Джон: Верно, этот аргумент не применим к хорошо структурированному сайту. Однако даже с эталонными страницами я вижу, что по крайней мере элементы стиля немного будут дублироваться просто потому, что не будет только эталонной страницы один. Избыточность будет существовать всегда, даже при использовании и шаблонов, и правильного CSS. Однако оба метода помогают их уменьшить.
Извините, но это действительно выдавать желаемое за действительное. Пользователи заботятся? Нет. Никого не волнует, кроме небольшого числа заблудших ревизионистов. HTML (включая таблицы) намного старше относительно нового понятия «семантика против макета». Да, и источник, пожалуйста, потому что «большинство профессиональных веб-разработчиков выступают против вас».
cletus: если подумать, то «большинство», скорее всего, неверно. В остальном я с вами категорически не согласен. Вначале подразумевалась семантика, хотя их реальное преимущество со временем стало более очевидным и важным. В этом смысле да, стандарт был пересмотрен. Ну и что? Почему это неправильно? Заботятся ли пользователи? Может быть, не сегодня, но они, безусловно, работали во времена коммутируемого доступа, когда чертов сайт просто не загружался, потому что браузер ждал всю таблицу, прежде чем начать отображение. Неужели дебаты устарели? Нет, потому что разделение между содержимым и макетом стало более четким…
… С каждым пересмотром стандартов. Преимущества разделения накапливаются. Моя самая большая проблема с использованием таблиц для макета на больших сайтах заключается в том, что это напрямую мешает разработчикам стандартов и разработчикам вносить важные изменения из-за опасений нарушить совместимость. Дурацкое использование таблиц для разметки прямо мешает прогрессу. Извините за ненормативную лексику, но так оно и есть.
Опечатка выше: подразумевалась семантика из в начале. <table> в HTML всегда предназначался только для табличных данных, а не для макета (в первые годы вы все равно не могли изменить внешний вид таблицы, что не позволяло использовать ее в качестве привязки макета). Фактически, в ранних черновиках HTML вообще не было понятия макета, а HTML предназначался не для макета, а для структурирования текста. Более того: самое первое предложение HTML неоднократно предостерегает от злоупотребления тегами, чтобы повлиять на макет, и предостерегает от использования логической разметки, а не физической.
Получите программу чтения с экрана и пусть она прочитает страницу с макетом таблицы. это все.
«Поисковые системы ищут релевантные данные. Табличные данные, конечно, могут быть релевантными, но пользователи редко их ищут». За исключением того, что если все и их собаки используют таблицы для построения макетов, поисковые системы должны (и действительно так) обрабатывать содержимое таблиц соответственно, иначе они не будут актуальны. Однако я согласен с остальной частью вашего сообщения.
@Sergio: пожалуйста, не удаляйте соответствующую информацию. Это является - неподтвержденное сомнительное заявление, которое я использую там, и я хочу прояснить его. Ваше правка поставила мне в рот заявление, которое я не могу подтвердить, фактически сделав меня лжецом, если оно окажется ложным.
Почему в электронных письмах html используются таблицы вместо div?
Таблицы @Kaizoku используются в электронных письмах, потому что (к сожалению / к лучшему или худшему) большинство почтовых клиентов не поддерживают полную спецификацию css, и поэтому считается, что «проще» создавать электронные письма в виде таблиц. (Это зло, я знаю)
Таблицы, используемые как чистый макет, действительно создают некоторые проблемы для доступа (о которых я слышал). Но я понимаю, о чем здесь спрашивают, что вы каким-то образом наносите вред сети, используя таблицу для обеспечения правильного выравнивания чего-либо на своей странице.
Я слышал, как раньше люди утверждали, что метки и входные данные FORM на самом деле являются данными и что их следует разрешить в таблицах.
Аргумент о том, что использование таблицы для обеспечения правильного выравнивания нескольких элементов вызывает такое значительное увеличение кода, как правило, включает примеры того, как один DIV может удовлетворить все их потребности. Они не всегда включают 10 строк CSS и специальные хаки для браузера, которые им приходилось писать для IE5, IE5.5, IE6, IE7 ...
Я думаю, что остается использовать баланс в вашем дизайне. Таблицы есть в наборе инструментов, просто запомните, для чего они нужны ...
Я стараюсь по возможности избегать ТАБЛИЦ, но когда мы разрабатываем сложные формы, которые сочетают несколько типов элементов управления и разные позиции заголовков с довольно строгими элементами управления группировкой, использование DIV ненадежно или часто почти невозможно.
Я не буду спорить, что эти формы нельзя было переработать, чтобы лучше приспособить макет на основе DIV, но для некоторых из них наш заказчик категорически возражает против изменения существующих макетов по сравнению с предыдущей версией (написанной на классическом ASP), потому что она аналогична бумажная форма, с которой знакомы их пользователи.
Поскольку представление форм является динамическим (где отображение некоторых разделов основано на состоянии дела или разрешениях пользователя), мы используем наборы составных DIV, каждый из которых содержит ТАБЛИЦУ логически сгруппированных элементов формы. Каждый столбец ТАБЛИЦЫ классифицируется, чтобы им можно было управлять с помощью CSS. Таким образом, мы можем отключить различные разделы формы, не создавая проблем с таблицей для переноса строк в DIV.
Исходя из прошлого опыта, мне пришлось бы пойти на DIV. Даже в ООП основная цель - уменьшить связь между объектами, поэтому эту концепцию можно применить к DIVS и таблицам. Таблицы используются для хранения данных, а не для их размещения на странице. DIV специально разработан для размещения элементов на странице, поэтому дизайн должен использовать DIV, таблицы должны использоваться для хранения данных.
Кроме того, редактировать веб-сайты, созданные с помощью таблиц, просто сложно (на мой взгляд).
Дело не в том, что «div лучше, чем таблицы для макета». Тот, кто разбирается в CSS, может легко скопировать любой дизайн, используя «макетные таблицы». Настоящая победа заключается в использовании HTML-элементов по назначению. Причина, по которой вы не будете использовать таблицы для не табличных данных, - это та же самая причина, по которой вы не храните целые числа в виде символьных строк - технология работает намного легче, когда вы используете ее для той цели, для которой она предназначена. Если когда-либо было необходимо использовать таблицы для разметки (из-за недостатков браузера в начале 1990-х годов), то, конечно, не сейчас.
Несомненно, OP был немного заводным, аргументы кажутся такими слабыми, и их легко опровергнуть.
Веб-страницы - это сфера деятельности веб-разработчиков, и если они говорят, что div и CSS лучше таблиц, этого для меня достаточно.
Если макет достигается с помощью таблиц, сгенерированных серверным приложением, то новый макет означает изменения в приложении, перестройку и переделку приложения, а не просто изменения в файле CSS.
Плюс доступность. Таблицы, используемые для верстки, делают сайт недоступным, поэтому не используйте их. Это понятно, не говоря уже о незаконном.
Я думаю, никого не волнует, как веб-сайт был разработан / реализован, когда он отлично себя ведет и работает быстро.
Я использую теги table и div / span в разметке HTML.
Позвольте мне привести несколько аргументов, почему я выбираю div:
для таблицы вам нужно написать как минимум 3 тега (table, tr, td, thead, tbody), для красивого дизайна иногда у вас много вложенных таблиц
Мне нравится, когда на странице есть компоненты. Не знаю, как точно объяснить, но попробую. Предположим, вам нужен логотип, и его нужно разместить, всего лишь небольшой кусок, поверх содержимого следующей страницы. Используя таблицы, вы должны вырезать 2 изображения и поместить их в 2 разных TD. Используя DIV, вы можете упорядочить его по своему усмотрению с помощью простого CSS. Какое решение вам больше нравится?
когда более 3 вложенных таблиц для чего-то, я думаю перепроектировать его с помощью DIV
НО я все еще использую таблицы для:
табличные данные
контент, который расширяется самостоятельно
быстрые решения (прототипы), потому что модель блока DIV отличается в каждом браузере, потому что многие генераторы используют таблицы и т. д.
Используя DIV, вы можете легко переключаться. Например, вы можете сделать это:
Menu | Content
Content | Menu
Menu
----
Content
Его легко изменить в CSS, а не в HTML. Вы также можете предоставить несколько стилей (правша, левша, специально для маленького экрана).
В CSS вы также можете скрыть меню в специальной таблице стилей, используемой для печати.
Еще одна хорошая вещь заключается в том, что ваш контент всегда находится в одном и том же порядке в коде (сначала меню, затем контент), даже если визуально он представлен иначе.
Таблицы не являются в целом проще и удобнее, чем CSS. Однако есть несколько проблем компоновки специфический, когда таблицы действительно являются самым простым и гибким решением.
CSS явно предпочтительнее в тех случаях, когда презентационная разметка и CSS поддерживают один и тот же вид дизайна, никто в здравом уме не станет утверждать, что теги font лучше, чем определение типографики в CSS, поскольку CSS дает вам ту же мощность, что и теги font, но гораздо чище.
Однако проблема с таблицами в основном заключается в том, что модель компоновки таблиц в CSS не поддерживается в Microsoft Internet Explorer. Таблицы и CSS поэтому эквивалентны нет по мощности. Недостающая часть - это сетчатое поведение таблиц, где края ячеек выравниваются как по вертикали, так и по горизонтали, в то время как ячейки по-прежнему расширяются, чтобы содержать свое содержимое. Такого поведения нелегко добиться в чистом CSS без жесткого кодирования некоторых измерений, что делает дизайн жестким и хрупким (пока мы должны поддерживать Internet Explorer - в других браузерах это легко достигается с помощью display:table-cell).
Так что вопрос не в том, предпочтительнее ли таблицы или CSS, а в том, чтобы распознать конкретные случаи, когда использование таблиц может сделать макет более гибким.
Наиболее важной причиной использования таблиц нет является доступность. Рекомендации http://www.w3.org/TR/WCAG10/ по обеспечению доступности веб-контента советуют снова не использовать таблицы для разметки. Если вас беспокоит доступность (а в некоторых случаях это может быть юридическое обязательство), вам следует использовать CSS, даже если таблицы проще. Обратите внимание, что вы можете всегда создать тот же макет с помощью CSS, что и с таблицами, это может потребовать дополнительной работы.
Вот раздел html из недавнего проекта:
<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "en" lang = "en">
<head>
<title>{DYNAMIC(TITLE)}</title>
<meta http-equiv = "content-type" content = "text/html;charset=utf-8" />
<meta http-equiv = "Content-Style-Type" content = "text/css" />
<link rel = "stylesheet" type = "text/css" href = "./styles/base.css" />
</head>
<body>
<div id = "header">
<h1><!-- Page title --></h1>
<ol id = "navigation">
<!-- Navigation items -->
</ol>
<div class = "clearfix"></div>
</div>
<div id = "sidebar">
<!-- Sidebar content -->
</div>
<!-- Page content -->
<p id = "footer"><!-- Footer content --></p>
</body>
</html>
А вот тот же код, что и макет на основе таблицы.
<?xml version = "1.0" encoding = "utf-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns = "http://www.w3.org/1999/xhtml" xml:lang = "en" lang = "en">
<head>
<title>{DYNAMIC(TITLE)}</title>
<meta http-equiv = "content-type" content = "text/html;charset=utf-8" />
<meta http-equiv = "Content-Style-Type" content = "text/css" />
<link rel = "stylesheet" type = "text/css" href = "./styles/base.css" />
</head>
<body>
<table cellspacing = "0">
<tr>
<td><!-- Page Title --></td>
<td>
<table>
<tr>
<td>Navitem</td>
<td>Navitem</td>
</tr>
</table>
</td>
</tr>
</table>
<table>
<tr>
<td><!-- Page content --></td>
<td><!-- Sidebar content --></td>
</tr>
<tr>
<td colspan = "2">Footer</td>
</tr>
</table>
</body>
</html>
Единственная чистота, которую я вижу в этой табличной компоновке, - это то, что я переусердствовал с отступом. Я уверен, что в разделе содержимого будут еще две встроенные таблицы.
Еще о чем задуматься: файлы. Я обнаружил, что макеты на основе таблиц обычно в два раза больше, чем их аналоги в CSS. Для нашего высокоскоростного широкополосного доступа это не большая проблема, но она есть для тех, у кого есть модемы удаленного доступа.
большие файлы страдают не только скорости: многие компании платят за пропускную способность. Если вы можете вдвое сократить счета за пропускную способность вашего клиента, просто хорошо написав код, это будет большим преимуществом.
Да, но не забывайте, что, хотя HTML может быть вдвое больше в макете без CSS, использование макета DIV + CSS приведет к (как минимум) дополнительному HTTP-запросу для файла CSS, а также к использованию полосы пропускания для сам файл.
Но файл css нужно загружать только один раз, поскольку вся структура таблицы повторяется при каждом запросе страницы.
Вы выбрали дизайн, хорошо подходящий для div + css, и показали, что он более подробный в табличном дизайне? Итак, что: было бы так же легко создать дизайн, который хорошо подходил бы для макета на основе таблиц, и показать обручи, через которые вам придется перепрыгнуть, чтобы воспроизвести его в CSS.
@Draemon: Может быть, вы хотите привести пример?
WYSIWYG !!! Я не могу заставить наших дизайнеров прекратить использовать вложенные DIVS и стилизованные elementID css в шаблонах, которые должны использоваться клиентами в проектах CMS. В этом весь смысл онлайн-редактора WYSIWYG. Вы одновременно контролируете и контент, и макет! В этом сценарии вообще нет разделения. Позиционированные и стилизованные блоки Div в некоторых внешних таблицах стилей являются анафемой всей идее редактирования WYSIWYG. Видны таблицы, вставленные строки, объединенные ячейки и т. д. Удачи вам попробовать это с div, чтобы не расстраивать пользователей.
Супер короткий ответ: создавать обслуживаемые веб-сайты сложно с помощью таблиц и просто со стандартным способом.
Веб-сайт - это не таблица, это набор компонентов, которые взаимодействуют друг с другом. Не имеет смысла описывать это как таблицу.
One example: you want to center the main content area of a page, but in order to contain the floats inside it, it needs to be floated. There is no "float: center" in CSS.
Это не единственный способ «удерживать поплавки» внутри центрированного элемента. Так что вообще нехороший аргумент!
В каком-то смысле это ложная посылка, идея «дивы против таблиц».
Быстрое и грязное разделение страницы на три колонки? Таблицы находятся проще, если честно. Но ни один профессионал больше не использует их для макета, потому что они фиксируют расположение элементов страницы на странице.
Настоящий аргумент - «позиционирование выполняется с помощью CSS (надеюсь, в удаленном файле)», а не «позиционирование выполняется с помощью HTML на странице». Разве каждый может увидеть преимущества первого по сравнению со вторым?
Учти это:
[ picture ] [ picture ] [ picture ]
[ caption ] [ caption ] [ caption ]
который представляет собой две строки таблицы с 6 ячейками. Тот, кто может видеть двухмерный макет таблицы, увидит подпись под каждым изображением. Но с помощью синтеза речи или КПК и для паука поисковой системы это
picture picture picture caption caption caption
и связь, которая очевидна с установленной таблицей, исчезает.
DIV и CSS лучше подходят для задачи просто размещать прямоугольники на HTML-странице для достижения заданного дизайна в кратчайшие сроки?? Нет, вероятно, нет. Но я не занимаюсь быстрой компоновкой прямоугольников для достижения заданного дизайна. Я думаю о более широкой картине.
Когда я разрабатываю свой макет с помощью CSS, я обычно даю каждому основному разделу собственный корневой (уровень тела) div и использую относительное / абсолютное позиционирование, чтобы поместить его в нужное место. Это немного более гибко, чем таблицы, поскольку я не ограничен компоновкой, которую могу представить с помощью строк и столбцов.
Кроме того, если я решу, что хочу изменить макет (скажем, я хочу, чтобы панель навигации была прямо сейчас), я могу просто пойти и изменить положение элементов в одном месте (файл CSS), а HTML-код этого не сделает. не нужно менять. Если бы я делал это с таблицами, мне пришлось бы пойти и найти информацию, а также выполнить множество модификаций атрибутов, копирования и вставки, чтобы получить тот же эффект.
Фактически, используя CSS, я даже могу сделать так, чтобы мой пользователи выбирал, как они хотят, чтобы их макет работал. До тех пор, пока общий размер областей содержимого не меняется, я вполне согласен с использованием небольшого количества сценариев PHP для вывода моего CSS на основе пользовательских предпочтений и разрешения им перестраивать сайт по своему усмотрению. Опять же, это возможно с таблицами, но намного сложнее поддерживать.
Наконец, CSS дает одно ГЛАВНОЕ преимущество, которое таблицы никогда не предоставят: возможность переформатировать контент в зависимости от устройства отображения. CSS позволяет мне использовать для принтера совершенно другой набор стилей (включая положение, форматирование и т. д.), Чем тот, который я использую для монитора. Это также может быть распространено на другие носители, отличным примером является Opera Show, которая позволяет просматривать продуманно разработанную (и очень стандартную) страницу с расширенным CSS как слайд-шоу.
Так что, в конце концов, настоящими победителями являются гибкость и управление. Как правило, CSS позволяет делать больше с макетом. Нет ничего нестандартного технически в макете на основе таблиц, но зачем вам ограничивать себя?
Раньше программы чтения с экрана и другое программное обеспечение для специальных возможностей испытывали трудности с эффективной обработкой таблиц. В некоторой степени это стало возможным в программах чтения с экрана, когда программа чтения переключалась между режимом «таблицы» и режимом «разметки» в зависимости от того, что она видела внутри таблицы. Часто это было неправильно, поэтому пользователям приходилось вручную переключать режим при навигации по таблицам. В любом случае, большие, часто сильно вложенные таблицы были и в значительной степени все еще очень трудны для навигации с помощью программы чтения с экрана.
То же самое верно, когда блоки div или другие элементы уровня блока используются для воссоздания таблиц и имеют высокую степень вложенности. Разделы div предназначены для использования в качестве элемента создания и макета и, как таковые, предназначены для хранения аналогичной информации и размещения ее на экране для визуальных пользователей. Когда программа чтения с экрана встречает страницу, она часто игнорирует любую информацию о макете, как на основе CSS, так и на основе атрибутов html (это верно не для всех программ чтения с экрана, но для самых популярных, таких как JAWS, Windows Eyes и Orca для Linux это так).
С этой целью табличные данные, то есть данные, которые имеет логический смысл упорядочить в двух или более измерениях, с какими-то заголовками, лучше всего размещать в таблицах и использовать блоки div для управления макетом содержимого на странице. (другой способ понять, что такое «табличные данные», - это попытаться изобразить их в виде графика ... если вы не можете, вероятно, это не лучше всего представлено в таблице)
Наконец, с макетом на основе таблиц, чтобы добиться точного управления положением элементов на странице, часто используются сильно вложенные таблицы. Это имеет два эффекта: 1.) Увеличенный размер кода для каждой страницы - поскольку навигация и общая структура часто выполняются с помощью таблиц, один и тот же код отправляется по сети для каждого запроса, тогда как макет на основе div / css извлекает файл css. более одного раза, а затем использует менее многословные div. 2.) Сильно вложенные таблицы требуют гораздо больше времени для отображения клиентским браузером, что приводит к несколько более медленному времени загрузки.
В обоих случаях увеличение пропускной способности «последней мили», а также более быстрые персональные компьютеры смягчают эти факторы, но, тем не менее, они по-прежнему остаются проблемой для многих сайтов.
С учетом всего этого, как говорили другие, таблицы проще, потому что они более ориентированы на сетку, что позволяет меньше думать. Если предполагается, что рассматриваемый сайт не просуществует долго или не будет поддерживаться, возможно, имеет смысл сделать то, что проще, потому что это может быть наиболее рентабельным. Однако, если ожидаемая база пользователей может включать значительную часть людей с ограниченными возможностями или если сайт будет обслуживаться другими в течение длительного времени, потратить время на то, чтобы делать что-то кратким и доступным способом, в конечном итоге может принести больше пользы.
Мне приходилось создавать сайты обоими этими способами, плюс третий, ужасный «гибридный» макет с таблицами, div и стилями: Divs / CSS легко выигрывает.
Вам нужно было бы сразу вложить divs в три глубины, чтобы соответствовать весу кода только одной ячейки таблицы. Этот эффект масштабируется с вложенными таблицами.
Я бы также предпочел сделать одно изменение макета, а не одно изменение для каждой страницы моего сайта.
У меня есть полный контроль над каждым аспектом презентации с помощью divs / css. Таблицы ужасно это портят, особенно в IE, браузере, который у меня еще никогда не было возможности не поддерживать.
Мое время на обслуживание или перепроектирование веб-сайта divs / css составляет лишь часть того, что было бы в таблицах.
Наконец, я могу создавать несколько переключаемых макетов с помощью CSS и практически любого языка сценариев. Для меня это было бы невозможно со столами.
Удачи с рентабельностью инвестиций, когда вы примете это решение.
Что касается обслуживания сайта и изменения дизайна при сохранении контента (что происходит постоянно, особенно в электронной коммерции):
Контент и дизайн объединены с помощью таблиц = обновление и контента, и дизайна.
Контент отдельно от дизайна = обновление дизайна и, возможно, немного контента.
Если бы у меня все было по-своему, я бы сохранил свой контент в PHP, генерирующий XML, преобразованный в разметку в XSLT и разработанный с помощью CSS и Javascript для взаимодействия. Для Java - от JSP до JSTL для создания разметки.
Это не обязательно должна быть война. Гармония возможна.
Используйте одну таблицу для общего макета и разделов внутри нее.
<table>
<tr><td colspan = "3"><div>Top content</div></td></tr>
<tr>
<td><div>Left navigation</div></td>
<td><div>Main content</div></td>
<td><div>Right navigation</div></td>
</tr>
<tr><td colspan = "3"><div>Bottom content</div></td></tr>
</table>
Смотри - нет вложенных таблиц.
Я прочитал так много статей о том, как добиться этого с помощью div, но никогда не находил ничего, что работало бы каждый раз без проблем.
Дивы хороши, если у вас есть общая структура, но, честно говоря, гибкий верхний / нижний колонтитул и три гибких столбца - это полная боль в div. Дивы не были предназначены для плавности, так зачем их использовать?
Обратите внимание, что этот подход даст вам 100% -ное соответствие CSS при текст ссылки.
Вы говорите, что не смотрите вложенные таблицы, но помните, что вы также не добавили сложность вашей левой навигации или основного контента, как только вы добавите сложность, вам придется начать вложение таблиц, но кого это волнует, ничего нет неправильно с вложенными таблицами.
Когда у меня есть общая структура таблицы, которая работает без усилий - в отличие от до смешного сложных div, которые вам нужны для работы во всех браузерах (см. matthewjamestaylor.com/blog/perfect-3-column.htm), я использую div внутри ячеек. Таблиц больше нет.
Вам не нужны таблицы для работы во всех браузерах?
1: Да, вашим пользователям не все равно. Если они воспользуются программой чтения с экрана, она будет потеряна. Если я использую какой-либо другой инструмент, который пытается извлечь информацию со страницы, обнаружение таблиц, которые не используются для представления табличных данных, вводит в заблуждение.
Div или span приемлемы для разделения содержимого, потому что именно в этом смысл этих элементов. Когда я, поисковая система, программа чтения с экрана или что-то еще, сталкиваюсь с элементом таблицы, мы ожидаем, что это означает «следующие данные - табличные данные, представленные в таблице». Когда мы сталкиваемся с div, мы ожидаем, что «это элемент, используемый для divide моего контента на отдельные части или области.
2: Читаемость: Неправильно. Если весь код презентации находится в CSS, я могу прочитать html и понять содержимое страницы. Или я могу прочитать CSS и понять презентацию. Если в html все перемешано, я должен мысленно вычеркнуть все биты, связанные с презентацией, прежде чем я смогу даже увидеть, что является содержанием, а что нет. Более того, мне было бы страшно встретить веб-разработчика, который не понимает css, поэтому я действительно не думаю, что это проблема.
3: Таблицы медленнее: Да, есть. Причина проста: таблицы должны быть полностью проанализированы, включая их содержимое, прежде чем они могут быть отображены. Div может быть отображен, когда он встречается, даже перед его содержимое было проанализировано. Это означает, что блоки div появятся до того, как страница завершит загрузку.
Кроме того, есть бонус в том, что таблицы намного более хрупкие и не всегда будут отображаться одинаково в разных браузерах, с разными шрифтами и размерами шрифтов, а также со всеми другими факторами, которые могут привести к изменению макета. Таблицы - отличный способ убедиться, что ваш сайт будет отключен на один-два пикселя в определенных браузерах, не будет хорошо масштабироваться, когда пользователь изменяет размер шрифта или изменяет свои настройки каким-либо иным образом.
Конечно, №1 большой. Многие инструменты и приложения зависят от семантического значения веб-страницы. Обычный пример - программы чтения с экрана для слабовидящих пользователей. Если вы веб-разработчик, вы обнаружите, что многие крупные компании могут нанять вас для работы над сайтом, требовать, что сайт доступен даже в этом случае. Это означает, что вам нужно подумать о семантическом значении вашего HTML. Благодаря семантической сети или, что более важно, микроформатам, RSS-ридерам и другим инструментам содержимое вашей страницы больше не просматривается исключительно через браузер.
Прошу прощения за свой английский, но вот еще одна причина:
Я работал в какой-то правительственной организации, и причина номер один не использовать ТАБЛИЦУ - это люди с ограниченными возможностями. Они используют машины для «перевода» веб-страниц.
Проблема в том, что эта «переводческая машина» не может читать веб-сайт, если это делает TABLE. Почему ? Потому что ТАБЛИЦА для ДАННЫХ.
Фактически, если вы используете ТАБЛИЦЫ, для каждой ЯЧЕЙКИ вы должны указать некоторую информацию, чтобы люди с ограниченными возможностями знали, где они находятся в ТАБЛИЦЕ. Представьте, что у вас есть большая таблица и вам нужно увеличить масштаб, чтобы увидеть только одну ячейку на экране: вы должны знать, в какой строке / столбце вы находитесь.
Итак, используются DIV, и инвалиды могут просто читать текст и не получать странную информацию о строках / столбцах, когда их там не должно быть.
Я также предпочитаю TABLE создавать быстрые и простые шаблоны, но теперь я привык к CSS ... он мощный, но вам действительно нужно знать, что вы делаете ... :)
Несколько лет назад я исследовал проблему программ чтения с экрана и таблиц и получил информацию, которая противоречит мнению большинства разработчиков:
http://www.webaim.org/techniques/tables/
«Вы, вероятно, услышите, как некоторые защитники доступности говорят, что макеты таблиц - плохая идея и что вместо них следует использовать методы макета CSS. В том, что они говорят, есть правда, но, честно говоря, использование таблиц для макета - не самое худшее. то, что вы могли бы сделать с точки зрения доступности. Люди со всеми видами инвалидности могут легко получить доступ к таблицам, если таблицы разработаны с учетом специальных возможностей ".
Тот факт, что это горячо обсуждаемый вопрос, свидетельствует о неспособности W3C предвидеть разнообразие макетов, которые могут быть предприняты. Использование divs + css для семантически понятного макета - отличная идея, но детали реализации настолько ошибочны, что фактически ограничивают свободу творчества.
Я попытался переключить один из сайтов нашей компании с таблиц на div, и это была такая головная боль, что я полностью выбросил часы работы, которые я потратил на это, и вернулся к таблицам. Попытки бороться с моими divs, чтобы получить контроль над вертикальным выравниванием, обрушили на меня серьезные психологические проблемы, от которых я никогда не избавлюсь, пока продолжаются эти дебаты.
Тот факт, что людям часто приходится придумывать сложные и уродливые обходные пути для достижения простых целей проектирования (таких как вертикальное выравнивание), убедительно свидетельствует о том, что правила недостаточно гибкие. Если спецификаций ДЕЙСТВИТЕЛЬНО, то почему высокопоставленные сайты (например, SO) считают необходимым изменять правила, используя таблицы и другие обходные пути?
Google дает очень низкий приоритет текстовому контенту, содержащемуся в таблице. Я давал несколько советов по поисковой оптимизации местной благотворительной организации. При изучении своего веб-сайта он использовал таблицы для макета сайта. Глядя на каждую страницу, независимо от того, какие слова - или комбинации слов - с их страниц, которые я использовал в окне поиска Google, страницы не появлялись ни на одной из лучших страниц поиска. (Однако, указав сайт в поиске, страница была возвращена.) Одна страница была хорошо написана по обычным стандартам, чтобы обеспечить хороший результат при поиске, но все же она не появлялась ни на одной из первых страниц результатов поиска. (Обратите внимание, что этот текст был в таблице.) Затем я заметил на страницах фрагмент текста, который находился в div, а не в таблице. Мы поместили несколько слов из этого div в поисковую систему. Результат? Он занял второе место в результатах поиска.
CSS / DIV - это просто работа для мальчиков-дизайнеров, не так ли. Сотни часов, которые я потратил на отладку проблем с DIV / CSS, поиск в Интернете, чтобы какая-то часть разметки работала в малоизвестном браузере, - это сводит меня с ума. Вы вносите одно маленькое изменение, и весь макет становится ужасно неправильным - где же логика в этом. Тратить часы, перемещая что-то на 3 пикселя в одну сторону, а затем на что-то еще на 2 пикселя в другую, чтобы все выровнять. Мне это кажется просто неправильным. Просто потому, что вы пурист и что-то «делать неправильно», не означает, что вы должны использовать это в энной степени и при любых обстоятельствах, особенно если это делает вашу жизнь в 1000 раз легче.
Итак, я наконец решил, чисто из коммерческих соображений, хотя я использую минимум, если я ожидаю 20 часов работы, чтобы правильно разместить DIV, я буду придерживаться таблицы. Это неправильно, это расстраивает пуристов, но в большинстве случаев это требует меньше времени и дешевле в управлении. Затем я могу сосредоточиться на том, чтобы приложение работало так, как хочет заказчик, а не на том, чтобы угодить пуристам. В конце концов, они оплачивают счета, и мой аргумент менеджеру, требующему использования CSS / DIV, - я бы просто указал, что клиенты также платят ему зарплату!
Единственная причина, по которой возникают все эти аргументы CSS / DIV, - это, в первую очередь, недостаток CSS и то, что браузеры несовместимы друг с другом, а если бы они были, половина веб-дизайнеров в мире не имела бы работы. .
Когда вы разрабатываете форму окна, вы не пытаетесь перемещать элементы управления после того, как вы их выложили, поэтому мне кажется странным, почему вы хотите делать это с помощью веб-формы. Я просто не могу понять эту логику. Правильно составьте макет и в чем проблема. Я думаю, это потому, что дизайнеры любят заигрывать с творчеством, в то время как разработчики приложений больше озабочены тем, чтобы приложение работало, создавая бизнес-объекты, внедряя бизнес-правила, выясняя, как части данных о клиентах соотносятся друг с другом, обеспечивая соответствие продукта потребностям требования - вы знаете - как вещи из реального мира.
Не поймите меня неправильно, оба аргумента верны, но, пожалуйста, не критикуйте разработчиков за выбор более простого и логичного подхода к разработке форм. У нас часто есть более важные вещи, о которых нужно беспокоиться, чем правильная семантика использования таблицы над div.
Показательный пример - на основе этого обсуждения я преобразовал несколько существующих tds и trs в div. 45 минут возиться с этим, пытаясь заставить все выровняться рядом друг с другом, и я сдался. ТД обратно через 10 секунд - работает - сразу - во всех браузерах, больше нечего делать. Пожалуйста, постарайтесь заставить меня понять - какое у вас есть возможное оправдание того, что вы хотите, чтобы я поступил иначе!
Я не мог полностью согласиться с этим сообщением. За те 10 лет, что я занимаюсь дизайном, я не могу вспомнить ни одного случая, когда аргумент «мы используем CSS, потому что он упрощает управление изменениями на сайте», проявился как точный.
знаете, что упрощает управление изменениями на сайте? MVC и системы шаблонов
Не поймите меня неправильно - я все еще использую CSS, но использую его для применения стиля (цвета, фоновых изображений и т. д.), А не макета. CSS кажется в значительной степени согласованным во всех браузерах, если используется только для управления стилем. Где он ошибочен и сильно падает, так это то, как макет задается и реализуется в браузерах. Кто-нибудь когда-нибудь пытался заставить ASP.NET MasterPages надежно работать с DIV? Это практически невозможно!
Потому что ЗАПРЕЩАЕТСЯ поддерживать сайт, который использует таблицы, а кодирование занимает НАМНОГО больше времени. Если вы боитесь плавающих div, пройдите курс по ним. Их нетрудно понять, они примерно в 100 раз эффективнее и в миллион раз меньше зануды в заднице (если вы их не понимаете - но, привет, добро пожаловать в мир компьютеров).
Тем, кто рассматривает возможность создания макета со столом, лучше не ожидать, что я буду его поддерживать. Это наиболее неудачный способ визуализации веб-сайта. Слава богу, теперь у нас есть гораздо лучшая альтернатива. Я НИКОГДА не вернусь.
Страшно, что некоторые люди могут не осознавать выгоды времени и энергии от создания сайта с использованием современных инструментов.
Макет должен быть простым. Тот факт, что есть статьи, написанные о том, как добиться динамического макета из трех столбцов с верхним и нижним колонтитулами в CSS, показывает, что это плохая система макета. Конечно, вы можете заставить его работать, но в Интернете есть буквально сотни статей о том, как это сделать. Для подобного макета с таблицами таких статей практически нет, потому что это очевидно. Что бы вы ни говорили против таблиц и в пользу CSS, один факт отменяет все: базовый трехколоночный макет в CSS часто называют «Святым Граалем».
Если это не заставляет вас сказать "WTF", тогда вам действительно нужно отложить kool-aid прямо сейчас.
Я люблю CSS. Он предлагает удивительные варианты стилей и несколько классных инструментов позиционирования, но как механизм компоновки ему не хватает. Должна быть какая-то система динамического позиционирования сетки. Простой способ выровнять прямоугольники по нескольким осям, не зная предварительно их размеров. Мне наплевать, назовете ли вы это <table> или <gridlayout> или как-то еще, но это базовая функция макета, которая отсутствует в CSS.
Более серьезная проблема заключается в том, что, не признавая отсутствия функций, фанатики CSS удерживают CSS от всего, что могло бы быть. Я был бы счастлив прекратить использование таблиц, если бы CSS обеспечивал приличное позиционирование многоосной сетки, как и любой другой механизм компоновки в мире. (Вы ведь понимаете, что эта проблема уже решалась много раз на многих языках всеми, кроме W3C, верно? И никто другой не отрицал, что такая функция была полезной.)
Вздох. Достаточно вентиляции. Идите вперед и засуньте голову обратно в песок.
«Фанаты CSS» (как вы выразились) не игнорируют этот факт. Следующая спецификация CSS содержит не одно решение, а решение два для устранения проблем с макетами в CSS. Макеты шаблонов: w3.org/TR/css3-layout и позиционирование в сетке: w3.org/TR/css3-grid Это не представляет конкурирующих спецификаций. Две спецификации фактически дополняют друг друга. Однако на момент написания этого комментария ни один браузер еще не реализовал его.
+1: Полностью согласен. Вам не нужно «заставлять это работать» (хотя я тоже не люблю таблицы).
Это на 100% то, что я чувствую. Хотел бы я проголосовать за лучший ответ.
Я до сих пор не совсем понимаю, как div / CSS упрощают изменение дизайна страницы, если учесть объем тестирования, чтобы убедиться, что изменения работают во всех браузерах, особенно со всеми взломами и так далее. Это очень утомительный и утомительный процесс, который тратит много времени и денег.
К счастью, закон 508 применим только к США (страна свободных - да, верно), и, поскольку я живу в Великобритании, я могу разрабатывать веб-сайты в любом стиле, который я выберу. Вопреки распространенному в США мнению, законодательство, принятое в Вашингтоне, не распространяется на весь остальной мир - слава богу, за это. День, когда закон вступил в силу, должно быть, был удачным днем в мире веб-дизайна.
Я думаю, что становлюсь все более циничным по мере того, как становлюсь старше, 25 лет проработав в ИТ-индустрии, но я уверен, что такое законодательство предназначено только для защиты рабочих мест. На самом деле любой может собрать разумную веб-страницу с парой таблиц. Чтобы сделать это с помощью DIV / CSS, требуется гораздо больше усилий и знаний. По моему опыту, поиск в Google решений довольно простых проблем и чтение непонятных статей на форумах, заполненных фанатиками-идеалистами, спорят о «правильном» способе решения задач, могут занимать часы и часы. Вы не можете просто окунуть палец ноги в воду и заставить все работать должным образом в каждом случае. Мне также кажется, что отсутствие исчерпывающего руководства по использованию DIVS / CSS "из коробки", которое применимо ко всем ситуациям, при работе с браузерами и написано с использованием "нормального" языка, без речи компьютерных фанатов, также пахнет немного протекционизма.
Я разработчик приложений, и я бы сказал, что на выяснение проблем макета и тестирование во всех браузерах уходит почти в два раза больше времени, чем на создание базового приложения, разработку и реализацию бизнес-объектов и создание серверной части базы данных. Мое время = деньги, как для меня, так и для моих клиентов, поэтому мне очень жаль, если я не отвергаю все аргументы про DIV / CSS в пользу сокращения затрат и обеспечения соотношения цены и качества для моих клиентов. Может быть, так устроены разработчики, но мне кажется, что гораздо проще изменить сложную структуру таблицы, чем изменять DIV / CSS.
К счастью, теперь кажется, что решение этих проблем теперь доступно - оно называется WPF.
У Flex есть тег для размещения вещей вертикальными столбцами. Честно говоря, я не думаю, что у них все правильно было с макетом / контентом, но, по крайней мере, они решили эту проблему.
Как и многие люди, разочарованные в CSS, я также искал легкого ответа во все стороны, был обманут, чувствуя себя счастливым, когда подумал, что нашел его, а затем мои надежды разбились вдребезги, когда я открыл страницу в Chrome. Я определенно недостаточно опытен, чтобы сказать, что это невозможно, но я не видел, чтобы кто-нибудь предлагал образец кода для экспертной оценки, недвусмысленно доказывающий, что это можно сделать надежно.
Так может ли кто-нибудь со стороны CSS этого острова порекомендовать образ мышления / методологию размещения вертикальных столбцов? Я пробовал абсолютное позиционирование во второй и третьей строках, но в итоге я получаю перекрытие повсюду, а float имеет аналогичные проблемы, если страница сжата.
Если бы на это был ответ, я был бы в восторге от -делать правильные вещи-. Просто скажите мне что-нибудь вроде: «Эй, ты пробовал ** поток: вертикальный | горизонтальный», и я совершенно не в твоих волосах.
В табличной компоновке манипуляции с DOM затруднены.
С семантическими div:
$('#myawesomediv').click(function(){
// Do awesome stuff
});
Со столами:
$('table tr td table tr td table tr td.......').click(function(){
// Cry self to sleep at night
});
Разумеется, второй пример выглядит глупо, и вы всегда можете применить идентификаторы или классы к таблице или элементу td, но это добавит семантическое значение, против чего так категорически возражают сторонники таблиц.
Кто сказал, что сторонники этой таблицы выступают против семантической ценности? Единственное, что сторонникам таблиц нравится в использовании таблиц для разметки, так это то, что их легко и быстро писать, легко генерировать и они никогда не ломаются. Независимо от браузера или размера окна, вы знаете, что у вас никогда не будет ячейки, расположенной ниже или выше чего-то другого.
Я был удивлен, увидев, что некоторые проблемы еще не были рассмотрены, поэтому вот мои 2 цента в дополнение ко всем очень важным замечаниям, сделанным ранее:
.1. CSS и SEO:
а) CSS раньше оказывал очень значительное влияние на SEO, позволяя размещать контент на странице в любом месте. Несколько лет назад поисковые системы уделяли большое внимание факторам «на странице». Что-то в верхней части страницы считалось более релевантным для страницы, чем что-то, расположенное внизу. «Верх страницы» для паука означает «в начале кода». Используя CSS, вы можете организовать свой контент, богатый ключевыми словами, в начале кода и по-прежнему размещать его в любом месте страницы. Это все еще в некоторой степени актуально, но факторы страницы все менее и менее важны для ранжирования страницы.
б) Когда макет переносится на CSS, HTML-страница становится легче и, следовательно, загружается быстрее для паука поисковой системы. (пауки не загружают внешние файлы css). Быстрая загрузка страниц является важным фактором ранжирования для нескольких поисковых систем, включая Google.
c) SEO-работа часто требует тестирования и изменения вещей, что намного удобнее с макетом на основе CSS.
.2. Сгенерированный контент:
Таблицу значительно проще создать программно, чем эквивалентный макет CSS.
foreach ($comment as $key=>$value)
{
echo "<tr><td>$key</td><td>$value</td></tr>";
}
Создать таблицу просто и безопасно. Он самодостаточен и хорошо интегрируется в любой шаблон. Сделать то же самое с CSS значительно сложнее и может вообще не принести никакой пользы: сложно редактировать таблицу стилей CSS на лету, а добавление встроенного стиля ничем не отличается от использования таблицы (содержимое не отделено от макета).
Кроме того, при создании таблицы содержимое (в переменных) уже отделено от макета (в коде), что упрощает его изменение.
Это одна из причин, почему некоторые очень хорошо разработанные веб-сайты (например, SO) все еще используют макеты таблиц.
Конечно, если нужно обработать результаты с помощью JavaScript, с div'ами стоит потрудиться.
.3. Быстрое тестирование конвертации
При определении того, что работает для конкретной аудитории, полезно иметь возможность изменять макет различными способами, чтобы выяснить, что дает наилучшие результаты. Макет на основе CSS значительно упрощает работу
.4. Разные решения для разных проблем
Таблицы макета обычно не одобряются, потому что «все знают, что div и CSS» - лучший способ.
Однако факт остается фактом: таблицы быстрее создаются, их легче понять и они более надежны, чем большинство макетов CSS. (Да, CSS может быть таким же надежным, но беглый просмотр сети в разных браузерах и разрешениях экрана показывает, что это не всегда так)
У столов много недостатков, в том числе уход за ними, отсутствие гибкости ... но давайте не будем выливать ребенка вместе с водой из ванны. Существует множество профессиональных применений для решения, которое является быстрым и надежным.
Некоторое время назад мне пришлось переписать чистый и простой макет CSS с использованием таблиц, потому что значительная часть пользователей будет использовать старую версию IE с очень плохой поддержкой CSS.
Я, например, устал от рефлекторной реакции "Ой, нет! Таблицы для макета!"
Что касается толпы «это не было предназначено для этой цели и поэтому не следует так использовать», разве это не лицемерие? Что вы думаете обо всех приемах CSS, которые нужно использовать, чтобы эта чертова штука работала в большинстве браузеров? Были ли они предназначены для этой цели?
Насколько мне известно о таблицах, если слишком много таблиц вложено, браузер создает большие накладные расходы при рендеринге страницы.
1 - Браузеру нужно подождать, чтобы отобразить окончательное представление, подождите, пока не загрузится вся таблица.
2 - Алгоритм для рендеринга таблицы дорог и не прост. Браузер, когда и когда получит содержимое, попытается выполнить рендеринг, вычисляя ширину и высоту содержимого. Итак, если у вас есть вложенные таблицы, скажем, браузер получил первую строку, а первая ячейка имеет большой объем содержимого, а ширина и высота не определены, он вычислит ширину и отобразит первую строку, Между тем, пока он получит 2-ю строку, в ячейке № 2 будет много контента! Теперь он рассчитает ширину ячеек 2-го ряда .. А как насчет первого? Он будет вычислять ширину рекурсивно. На стороне клиента это плохо. (Чтобы разместить пример) Как программист, вы оптимизируете такие вещи, как время для выборки данных, оптимизированные структуры данных и т. д. Вы оптимизируете вещи для завершения на стороне сервера, скажем, через 2 секунды, но конечный пользователь получает окончательное представление в 8 сек. Что здесь не так? 1. Возможно, сеть медленная! Что делать, если с сетью все в порядке? Какая сеть доставляет контент в следующую 1 секунду? Где тратятся эти лишние 5 секунд? О чем стоит беспокоиться - браузеру может потребоваться много времени на оценку и отображение таблиц!
Как оптимизировать таблицы? Если вы используете таблицы, я бы посоветовал всегда определять ширину ячеек. Это не гарантирует, что браузер слепо будет принимать только эту ширину, но будет большим подспорьем для браузера при выборе начальной ширины.
Но, в конце концов, div - отличный способ, поскольку браузер может кэшировать CSS; пока таблица не кешируется!
Поскольку мы по-прежнему используем таблицу для макетов, нам не хватает нововведений на стороне div.
Многие придумали решения, которые упрощают создание макета для div. Самым популярным из них является сеточная архитектура. На этой архитектуре существуют генераторы динамической компоновки. Проверить: 1) 960.gs и (http://grids.heroku.com/) 2) blueprint (план) и так много в последнее время.
Я не видел особых инноваций с точки зрения архитектуры и инструментов с макетом таблиц.
Я бы сказал, что, если не считать всех теорий, практически верстка с помощью CSS и div выполняется быстрее. Скорее инновации в этом направлении сделали это проще всего.
Вопрос о строгом разделении представления и содержимого кажется мне примерно аналогичным разделению файлов заголовков от файлов реализации в C++. В этом есть смысл, но это также может быть болезненно. Посмотрите на Java и C#, где классы определены в одном исходном файле. Авторы новых языков заметили то, что доставляло программистам головную боль, и избавились от этого. Похоже, в этом суть нашего обсуждения. Одна сторона говорит, что CSS слишком сложна, другая сторона говорит, что нужно стать мастером CSS.
Почему бы в случае простых проблем с макетом не нарушить правило, согласно которому презентация должна быть полностью отдельной? А как насчет нового тега (или некоторого расширения тега div), который позволяет нам управлять представлением непосредственно в HTML? В конце концов, разве мы уже не пропускаем презентацию в HTML? Посмотрите на h1, h2 ... h6. Все мы знаем эти контрольные представления.
Умение читать код (а HTML - это код) очень важно. Гуру склонны упускать из виду, насколько важно сделать среду программирования максимально доступной для масс. Очень недальновидно думать, что имеют значение только профессиональные программисты.
Согласны, таблицы подходят для представления табличных данных. Их следует избегать при использовании исключительно для верстки. С другой стороны, иногда вам нужно выбрать легкий путь сейчас и улучшить его позже. Просто просмотрите исходный код, и вы поймете, что я имею в виду.