Пустое теги абзаца - следует ли разрешать в редакторе HTML или нет?

Я использую CKEditor 4, который, по-видимому, имеет настройку по умолчанию, используя <p></p>, чтобы указать пустую строку. До сих пор я всегда видел пустые строки в HTML, представленные <p>&nbsp;</p> - т.е. а не пустой тег.

Таким образом, вывод CKEditor по умолчанию, представляющий пустую строку, например:

<p>paragraph before blank line</p>
<p></p>
<p>paragraph after blank line</p>

Проблема заключается в том, что для изменения IE7,8,9 кажется, что это "правильно" как пустая строка, тогда как Firefox и Chrome - нет - они, похоже, игнорируют пустые теги <p> и <div>, в условия макета.

Итак, на данный момент я должен сказать CKEditor о включении &nbsp; в пустые строки (по умолчанию не по умолчанию), а в фокусе заменить любые вхождения пустых тегов <p>, которые могут проскользнуть.

Мой вопрос: какой золотой стандарт для представления пустых строк в HTML? Доброе-старое <p>&nbsp;</p>, или что-то еще?

Кроме того, учитывая, что параметр CKEditor по умолчанию является пустым тегом <p> для пустых строк, неправильно ли Chrome и Firefox игнорировать их? Или IE ошибочно отображает их как пустые строки, и по умолчанию CKEditor должен использовать <p>&nbsp;</p>?

Ответ 1

По HTML 4.01 в элементе p, <p></p> действителен, но не должен использоваться, и браузеры должны его игнорировать. Поведение браузера противоречиво и обычно не соответствует спецификации. Вы проверяете это с помощью <hr><hr><p></p><hr>, например - в Chrome, это показывает, что хотя элемент p имеет нулевую высоту, он имеет верхнее и нижнее поля, поэтому он влияет на рендеринг, т.е. Не игнорируется. - HTML5 CR, похоже, не знает об этой проблеме, то есть не говорит ничего конкретного об элементе p с пустым контентом. Обновление: HTML5 содержит общую инструкцию об элементах с фразовым контентом в режиме содержимого (например, p): такой элемент должен содержать "должен иметь либо по крайней мере один потомок Text node, который не является межэлементным пробелом, либо, по крайней мере, одним элементом-потомком node, который является встроенным контентом". Это означает, что <p></p> не следует использовать; но это рекомендация, а не требование соответствия ( "должно", а не "должно" ).

Эффект <p>&nbsp;</p> равен undefined спецификацией (рендеринг символа пробела без пробела не определен), но браузеры обычно рассматривают пространство без прерывания как еще один графический символ, который просто происходит с визуализироваться с помощью пустого глифа. Поэтому на практике он генерирует строку с высотой, определяемой вычисленным значением line-height.

По умолчанию существуют поля между элементами p, соответствующими одной пустой строке. Поэтому любая потребность в пустой строке между элементами p, по-видимому, вызвана переопределением стиля по умолчанию, чем-то вроде p { margin: 0 } в CSS. Чтобы переопределить это, следует использовать дополнительный CSS, а не искусственный элемент p. То есть некоторые элементы p должны иметь подходящий ненулевой нижний или верхний край.

HTML 4.01 определяет символы пробела как относящиеся к пространству Ascii, вкладке Ascii, фиду формы Ascii и пространству нулевой ширины (таким образом, не к no -break space), определяет их рендеринг и добавляет: "В этой спецификации не указывается поведение, визуализация или иное, пробелов, отличных от тех, которые явно указаны здесь как символы пробела. По этой причине авторы должны использовать соответствующие элементы и стили для достижения визуальных эффектов форматирования, которые включают пробел, а не символы пространства."

Ответ 2

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

Из w3.org:

Мы отговариваем авторов от использования пустых элементов P. Пользовательские агенты должны игнорировать пустые элементы P.

Я бы предположил, что когда вы создаете пустые строки, вы переносите их текст в параграфы.

Итак, вместо:

before line break<p>&nbsp;</p>after line break

Вы должны сгенерировать

<p>before line break</p><p>after line break</p>

Имеет смысл?

Ответ 3

При кодировании с использованием стандартного кодирования HTML и CSS ключевой фактор текстового содержимого веб-сайта будет помещен в обычный тег абзаца. Это указано как <p>. Чтобы сделать текст дружественного текста в SEO при написании текста абзаца, он платит, чтобы посмотреть предыдущий заголовок подзаголовка, а затем создать содержимое веб-страницы, которое объясняет и расширяет текст этого заголовка. Да, вы должны использовать теги Empty paragraph в редакторе HTML.

Ответ 4

Я думаю, что для SEO нехорошо, что навигаторы отображают пустой <p>. Я заменяю его на js или php, прежде чем сохранять его на ddbb:)