Пробіл перед закритою косою рисою?


93

Я часто бачив пробіл перед заключною косою рисою в тегах XML та HTML. Розрив рядка XHTML - це, мабуть, канонічний приклад:

<br />

замість:

<br/>

Простір здається зайвим. Насправді, я вважаю, що це зайве.

У чому причина написання цього простору?

Я читав, що пробіл вирішує деякі "проблеми зі зворотною сумісністю". Які проблеми зі зворотною сумісністю? Чи все ще ці проблеми актуальні, чи ми все ще додаємо додаткові пробіли заради, скажімо, сумісності з IE3? Чи існує якась специфікація з остаточною відповіддю на це?

Якщо не зворотна сумісність, то чи це проблема читабельності? Подібно до Великої відкритої дискусії про фігурні дужки?

void it_goes_up_here() {

int no_you_fool_it_goes_down_there()
{

Я, безумовно, можу поважати різні стилістичні думки, тому я із задоволенням дізнаюся, що написання простору - це просто справа смаку.


5
Я так звик, що <br /> просто виглядає набагато краще, ніж <br/>
mk12

Відповіді:


64

Відповідь полягає в тому, що люди хочуть дотримуватися Додатка C специфікації XHTML1.0 . Що вам потрібно зробити, лише якщо ви обслуговуєте XHTML як текст / html . Що робить більшість людей, оскільки реальний тип MIME XHTML (application / html + xml) не працює в Internet Explorer.

Жоден поточний браузер не піклується про простір. Браузери дуже терпимі до цих речей.

Раніше потрібно було простір, щоб забезпечити, щоб синтаксичні аналізатори HTML обробляли кінцеву скісну риску як нерозпізнаний атрибут.


2
Чи можете ви конкретніше сказати про "колись?" Рік та / або версія браузера підійдуть, дякую!
Грег Маттес,

5
Я думаю, що w3.org/TR/xhtml1/#C_2 є більш точним посиланням для цієї відповіді. Отже, здається, що XHTML 1.0 Додаток C2 фактично застарів і що написання простору - це суто матеріальний смак.
Greg Mattes

1
Вибачте, колишній термін означає "є" - щодо того, щоб переконатись, що синтаксичний аналізатор HTML трактує кінцеву скісну риску як нерозпізнаний атрибут, не всі парсери HTML є браузерами. Я не хотів би ризикувати, яка версія браузера задушилася, якщо така є, але я не пам’ятаю, як скаржилися IE4 або Netscape 4.
Lee Kowalkowski

3
насправді справжнім типом mime є application / xhtml + xml.
mk12

3
@JanAagaard: Не знаю, я б це пам'ятав, якщо так - я почав розробку веб-сайтів на IE4 та Netscape 4. Ця відповідь, на яку ви посилаєтесь, також має коментар щодо цього, там сказано, що це насправді Netscape 3.
Лі Ковалковскі,

31

Netscape 4.80 показує різну поведінку <br/> та <br /> у HTML

Підтримка відповіді bobince скріншотом Netscape 4.80, що відображає документи

data:text/html,<title>space</title>foo<br />bar

(вгорі ліворуч, надано розрив рядка) та

data:text/html,<title>no space</title>foo<br/>bar

(внизу ліворуч, розрив рядка ігнорується).


Проводка як відповідь, щоб показати малюнок

Тангенціально пов’язане: насправді я мав довгу відповідь, визначаючи причину такої неналежної поведінки старовинних браузерів (і отриману в результаті рекомендацію включати простір) у неправильно зрозумілих специфікаціях SGML, а саме SGML Null End Tag ( NET ) (де 1<tag/2/3рівне, 1<tag>2</tag>3це 1<tag/>2насправді означало б 1<tag>>2), але я не тільки не зміг знайти хороший доказ і конкретну версію стандарту, я навіть не зміг зрозуміти належної поведінки, що відповідає стандартам. Так мало необроблених посилань для довідки:

(Не вдається відтворити там зараз, але підтримує твердження Лі Ковалковського про декілька браузерів, на які це впливає.)

  • XML W3C Working Draft 07-Aug-97 - останній проект специфікацій, що включає посилання на нульовий кінцевий тег у фрагменті DTD:NET "/>"

25

Чи все ще ці проблеми актуальні, чи ми все ще додаємо додаткові пробіли задля, скажімо, сумісності з IE3?

Ви були близько - це для Netscape 4.

Цікаво спостерігати за іншими раціоналізаціями, але це все, для чого воно було призначене.


2
Дякую! Чи можете ви надати посилання на це?
Greg Mattes

1
Хм, важко знайти першоджерела, ці старі ... офіційні матеріали W3 уникають згадування жодної UA, і обговорення у списках, схоже, сприймає ситуацію як прочитану. Можливо, були й інші UA, яким також потрібен був простір, але N4 був останнім, який роками створював проблеми веб-майстрам.
bobince

Це було так, щоб ваш документ XHTML також відображався на Netscape. Зокрема, це стосувалося тегів розриву та тегів зображень. Первинне джерело: Я кодував сумісність з IE4 та NS3 10 років тому.
Філіхп Басбі

4

Ні, простір не потрібен, але деяким старим браузерам необхідно правильно відображати ці теги. Правильний спосіб зробити це без зайвого місця, оскільки це те, що XHTML успадковано від XML.


1
Які старіші браузери конкретно? Мені цікаво дізнатись, чи ми говоримо про браузери зі значною часткою ринку.
Greg Mattes

НЕ були. IE5 і старші переважно.
jmucchiello


3

Простір просто робить теги більш читабельними. Я є великим прихильником форматування для більш читабельного коду. Такі дрібниці роблять довгий шлях. Без простору закриваючий тег поєднується з відкриваючим тегом. Мені потрібно лише мить довше, щоб обробити його, оскільки я швидко читаю код.


0

Що, якби там був дуже ледачий HTML-автор або, можливо, він боявся лапок. Розгляньте наступне, якщо ви були його роботом-сканером сторінки ...

<img src=http://myunquotedurl.com/image.jpg />

проти

<img src=http://myunquotedurl.com/image.jpg/>

Це може здатися невеликим, але подивіться, що він може зробити, якщо місця немає. Робот не знатиме, чи коса риса є частиною URL-адреси або частиною закриваючого тегу.


12
Ну, але навколо URL-адреси все одно мають бути лапки.
Флоріан Вендельборн,

-1

Я думаю, що пробіли - це спосіб підкріпити уявлення про те, що цей тег порожній і він закривається сам.

Сьогодні я більше не використовую пробіли, тому що ніколи не мав проблем з відсутністю пробілів.


1
"підсилити" - це влучне слово для "сильного"
Хао,

дякую за повідомлення. приємно бачити, що тут у нас є люди, які забезпечують якість написання.
nicruo
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.