TGViewer
zede code zede code @zede_code · 2.63K subscribers
Post #102 4.26K
To close or not to close

Забавная дискуссия(на самом деле самый настоящий холливар) выдалась в одном ишьюсе в репозитории Svelte.

Кратко: Рич Харрис(создатель Svelte) только сейчас обнаружил, что
<div /> Hello

Это не
<div></div> Hello

А
<div> Hello</div>


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

Вначале разберемся с ситуацией в HTML:
HTML - не имеет понятия self-closing element. Вместо этого есть void elements: br / hr / input и тп. Так же есть допущение для внешних элементов: svg/mathml, которые реализованы на основе XML. В стандарте XML self-closing tags называются empty-element tags(элементы у которых нет контента). В остальных случаях HTML просто... игнорирует завершающий /, но с 1 исключением
<a href=login/>  

<a href="login/"> тоже самое
<a href="login" /> не верно (Svelte и этот тест провалил)


Самое забавное, что все фреймворки ведут себя по разному относительно этого вопроса:

JSX(React. Solid etc...) - поддерживает self-closing tags
Angular - только с 16-ой версии начал их поддерживать для своих компонентов, в остальном все как HTML. Кстати, там тоже была бойня, хоть и поменьше
Lit - все согласно HTML. Кстати, согласно спеке даже custom elements не могут быть самозакрывающимися. Один человек недовольный отказом, даже сделал расширение добавлющее этот функционал
Ember - официально поддерживает self-closing tags, как часть расширения HTML
Vue - тут все сложнее.
1) Если используется рантайм компиляция шаблонов из HTML, то работают правила HTML и все работает согласно спеке
2) Если происходит этап билда шаблонов, например со сборщиком, то self-closing tags доступны.
При этом в vue eslint можно четко разграничить желаемое поведение. Но и это было не всегда и сам Эван был против self-closing tags, но с появлением vue-loader все-таки поддержали данный функционал.

Как мы видим единого мнения в сообществе вообще нет. На одной чаше удобство, на другой плашка "соответствует HTML5"и куча различных трейдоффов.

А что считаете вы, как должны поступать фреймворки?
GitHub Svelte parses HTML all wrong · Issue #11052 · sveltejs/svelte Describe the bug I'm a little shaken up. For as long as I've been programming, I thought that this... <div /> ...was shorthand for this: <div></div> It turns out it's ...
  • 🤔 15
  • 🔥 7
  • 👍 4
More from @zede_code
  1. Aug 6, 2026Agent Plugins: единый формат расширений для ИИ-агентов OpenAI совместно с Amazon, Cursor,…
  2. Aug 6, 2026Стоило поныть только: (хотя это решает лишь часть моих претензий) И то что там нет Антропи…
  3. Aug 6, 2026Я крайне разочарован текущим состоянием AI-туллинга. Ощущение, будто всё делалось по принц…
  4. Jun 7, 2026Разгоняем подробно за реактивность во фронтенде twitch — youtube — vk
  5. Mar 26, 2026Ситуация в найме ахтунг. Все и так все понимают. Но я хочу сделать очередное напоминание.…
  6. Mar 24, 2026Пообсуждали Vue vs React В целом.. обсуждение прошло достаточно травоядно, но возможно вы…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →