Безопасно ли пропускать теги </TD> и </TR>? - PullRequest
39 голосов
/ 26 октября 2010

В соответствии с тегами w3c </TD> и </TR> являются необязательными, поэтому приведенная ниже таблица является вполне допустимой.

<table>
  <tr>
    <td>google
    <td>chrome
</table>

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

Уменьшает размер hzml gzip на странице со многими таблицами на несколько процентов.

Ответы [ 10 ]

20 голосов
/ 26 октября 2010

Это действительный HTML, но недействительный XHTML.
В этом нет ничего плохого.

Если вы посмотрите на источник Политики конфиденциальности Google (или любой другой их страницы), вы найдете гораздо более краткий HTML.

Это означает, что ваша страница не будет использоваться анализатором XML.

19 голосов
/ 26 октября 2010

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

Сказав это, я считаю, что пропуск таких тегов затрудняет чтение, что может иметь или не иметь значения для вас, если целью является оптимизация размера.

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

10 голосов
/ 26 октября 2010

Я настоятельно рекомендую не делать этого, хотя является действительным в HTML4 (и 5). Экономия полосы пропускания незначительна по сравнению с техническим долгом, который вы несете. Также имейте в виду, что он недопустим в XHTML, поэтому убедитесь, что ваш тип документа установлен правильно.

8 голосов
/ 26 октября 2010

С самого начала в HTML существовали необязательные теги - это функция, унаследованная от SGML, и поэтому ранние браузеры должны были иметь с ними дело.Хотя XHTML отошел от этого и потребовал гораздо более унифицированного синтаксиса, это не повлияет на вас, если вы явно не скажете браузеру анализировать в режиме XML.Я никогда не сталкивался с проблемой при использовании стандартных анализаторов HTML 4 / 5.

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

И хотя экономия места незначительна, я обнаружил, что опуская закрывающие теги <p>, <li>,<td> и <tr> просто облегчают мою жизнь, когда я работаю в разметке, и снижают вероятность появления ошибки.

2 голосов
/ 26 октября 2010

Лично я не считаю это хорошей практикой. Глядя на спецификацию, он не дал много информации. Я знаю, что это требуется для XHTML, поэтому я посмотрел спецификацию HTML 5. HTML 5, похоже, принимает то же самое, что и HTML 4, на который вы ссылаетесь, но дает немного больше информации :

Конечный тег элемента td может быть опущен, если за элементом td сразу следует элемент td или th, или если в родительском элементе больше нет содержимого.

1 голос
/ 26 октября 2010

Советую всегда закрывать теги. Там на самом деле не слишком хорошая причина, чтобы не делать этого. Браузеры могут обрабатывать некоторые неправильно закрытые теги, но чтобы быть в безопасности (и это хорошая практика программирования!), Закройте свои теги!

0 голосов
/ 02 октября 2014

Вы должны закрыть свои теги <TR> и <TD>, если это возможно, но НЕ ВСЕГДА, потому что в некоторых случаях это может вас беспокоить.Это связано с тем, что теги <TR> и <TD> могут иметь стиль display:none, а тег </TR> - нет.Это означает, что сценарий, в котором вы хотите расширить / ограничить отображение с помощью медиа-запросов, не будет выполнен, если вы используете </TR>.Рассмотрим следующий код:

<style>
@media (max-width : 480px) {
.hidden-class {display:none;}
}
</style>

<table>
   <tr>
      <td>cell 1</td>
   </tr class="hidden-class">  <!-- this will fail! -->
   <tr class="hidden-class">
      <td>cell 2</td>
   </tr>                       <!-- this could stay -->
</table>

Это означает, что вы бы написали его следующим образом:

 <table>
   <tr>
      <td>cell 1</td>
   </tr>  <!-- this will now close the TR for every screen width, which will destroy your extenstion -->
   <tr class="hidden-class">
      <td>cell 2</td>
   </tr>                       <!-- this could stay -->
</table>

Что означает, что единственный способ сделать это - ПУСКАТЬ в первую очередь

     <table>
   <tr>
      <td>cell 1</td>
   <tr class="hidden-class">
      <td>cell 2</td>
   </tr>                       <!-- this could stay -->
</table>
0 голосов
/ 26 октября 2010

Все в порядке со статическими страницами, а не для динамических страниц ... для отладки

0 голосов
/ 26 октября 2010

Конечно, если вы используете только HTML, нет абсолютно никаких проблем, что не имеет места с XHTML, тем не менее, я не думаю, что вы можете получить так много, также я предлагаю не злоупотреблять таблицами, помните, что div лучше таблиц

0 голосов
/ 26 октября 2010

Закрыть все теги в HTML по нескольким причинам:

  1. Не закрывать теги допускается, но это не правильно в современном XHTML.Это устарело во многом так же, как атрибуты стиля HTML в пользу CSS
  2. Это будет более читабельным для следующего парня, если вы закроете теги
  3. Браузерам на самом деле будет проще анализировать ваш источникесли он более строго придерживается правил, даже если это делает источник длиннее
...