- PVSM.RU - https://www.pvsm.ru -
[1]Недавно на Хабре публиковался перевод статьи «Вам не нужен для этого JavaScript» [3] с примерами, где код JS легко заменить на HTML.
На самом деле возврат к основам HTML, простым сайтам и читаемому коду без сложных фреймворков — довольно популярная идея. Сейчас всё больше сайтов создаётся по принципу HTML First [4].
В разных областях информатики применим принцип минимальных привилегий [5]. Среди прочего он означает, что для решения любой задачи следует выбирать самый простой подходящий инструмент. Другими словами, не нужно усложнять решение без необходимости. А самый лучший код — это его отсутствие [6].
В применении на веб-разработку это означает, что если нам для задачи достаточно базового HTML, то не нужно усложнять решение.
В вышеупомянутой статье «Вам не нужен для этого JavaScript» [3] приводится несколько примеров использования базового HTML/CSS вместо JS:
<dialog>).И это только самые простые примеры.
Интересно вспомнить, что пару десятилетий разработчикам приходилось применять HTML очень экзотическими способами [7]. Это 90-е годы, когда самыми популярными браузерами были Netscape Navigator и Internet Explorer, а первую версию CSS только недавно изобрели (17 декабря 1996 года, если верить Википедии [8]).

Мало кто помнит, но компания Netscape отчаянно сопротивлялась CSS, продвигая альтернативный стандарт JSSS [9] и не поддерживая все правила CSS в браузере. А если поддерживала, то некорректно. Поэтому в Netscape Navigator 4.0 разработчики браузера добавили команду @import, чтобы блокировать некоторые оригинальные правила CSS (которые коряво поддерживались), а вместо них загружать альтернативный файл .css. Выглядело это следующим образом [10]:
<link rel="stylesheet" type="text/css" media="all" title="Basic CSS" href="/basic.css" />
<style type="text/css" media="all">
@import "/css/advanced.css";
</style
Это именно то, что сейчас принято называть словом «костыль». Разработчики Netscape не осилили поддержку CSS, поэтому им нужно было быстро что-то придумать, и вот они придумали такое. Версия Netscape Navigator 4.0 вышла в 1997 году, и с неё начался закат популярности этого браузера.
Как особый кошмар вспоминается вёрстка веб-страниц с помощью таблиц [11]. До появления CSS это был единственный способ красиво расположить блоки текста на странице (рамки нулевой ширины, прозрачные GIF и ещё несколько грязных хаков). Наверное, такой HTML-терроризм [12] стал главным драйвером для изобретения CSS. Но ещё раньше в HTML появилась поддержка фреймов. Кроме функции оформления, они ещё стали своеобразным прообразом CMS, потому что здесь можно было создать общий файл navigation.html и использовать его в отдельном фрейме на каждой веб-странице. В этом случае для обновления навигации на сайте больше не нужно было вручную обновлять все статичные странички:

Важным костылём были подчёркивания перед свойством. Дело в том, что спецсимволы перед классами парсил только IE6, а для него нужно было применять особые правила вёрстки из-за неправильной реализации стандартов:
.class {
width: 300px;
_width: 320px;
padding: 10px;
}
В таком коде все браузеры видели width: 300px;, и только IE6 видел width: 320px;.
Спустя несколько лет количество костылей для Internet Explorer достигло таких масштабов, что Microsoft реализовала в браузере поддержку «условных комментариев» (conditional comments [13]), чтобы выделить код для конкретных версий IE:
<!--[(if expression) (IE version)]>
<p>Can’t believe you still use Internet Explorer!</p>
<![endif]-->
Это уже второй уровень костылестроения, когда официальный хак от разработчика (использование комментариев не по назначению — для исполнения кода) помогал использовать костыли предыдущего уровня.
Условные комментарии удалили после IE9, а вместо них появилась функция Conditional Compilation в JScript/ JavaScript [14].
Изучение этих древних приёмов из 90-х и 2000-х вызывает удивление, какими кривыми дорожками развивалась веб-разработка в те годы. Это было не столько творчество, сколько поиск нестандартных способов решить ту или иную проблему, которую нельзя решить стандартными методами. Во многих отношениях HTML использовался совсем не так, как задумывалось его создателями. Например, никто не думал, что таблицы будут использоваться для вёрстки. В общем, креативность веб-разработчиков и пользователей превзошла фантазию создателей стандартов.
HTML First [4] — это набор рекомендаций, чтобы упростить и ускорить веб-разработку, а также улучшить сопровождение проектов. Три основных принципа:
Основная цель HTML First — существенно расширить круг людей в веб-разработке. Снижение барьеров позволит большему числу людей стать программистами. Это снижает стоимость создания ПО и улучшает ситуацию на рынке веб-разработки.
Вторая цель — сделать создание веб-программ более приятным и лёгким процессом. Настоящее удовольствие, когда код из редактора практически мгновенно запускается в браузере с минимальным количеством промежуточных этапов сборки и переключения контекста. Сегодня для этого требуется несколько лет освоения инструментов и фреймворков. Принципы HTML First позволяют людям гораздо раньше ощутить это чувство удовлетворения от написания работающей программы (пусть это сайт или веб-приложение).
Перечисленные принципы реализуются через конкретные практики:
Желательно:
<button onclick="this.classList.add('bg-green')">
Click Me
</button>
Нежелательно:
var resultsPane = document.getElementById("results-pane");
resultsPane.addEventListener("click", function() {
this.classList.add("active");
});
Положительный пример:
<script src="https://unpkg.com/hyperscript@0.0.7/dist/hyperscript.min.js"></script>
<div>
<input type="text" _="on input put me into #output">
<div id="output"></div>
</div>
Отрицательный пример:
<script src="https://cdn.jsdelivr.net/npm/stimulus@2.0.0/dist/stimulus.umd.js"></script>
<div data-controller="echo">
<input type="text" data-echo-target="source" data-action="input->echo#update">
<div data-echo-target="output"></div>
</div>
<script>
const application = Stimulus.Application.start();
application.register("echo", class extends Stimulus.Controller {
static targets = ["source", "output"]
update() {
this.outputTarget.textContent = this.sourceTarget.value;
}
});
</script>
Для сравнения, код Google в 2000 году:

Код Google в 2023 году:

В 90-е годы просмотр кода страницы был настоящим подарком для начинающих разработчиков. Они могли посмотреть, как конкретно реализована та или иная функция, а зачастую скопипастить нужный фрагмент HTML или CSS. С тех пор в индустрии реализовано несколько «улучшений», которые сделали эту практику гораздо более редкой. Например, самый популярный фронтенд-фреймворк React инициирует этап сборки, то есть код в браузере отличается от кода, который написал разработчик.
Принципы HTML First рекомендуют вернуться к старой практике — писать читаемый код, который можно копипастить. В будущем планируется составить библиотеку фрагментов кода HTML First.
В целом, практики и принципы HTML First всё ещё считаются экзотикой в современной индустрии в целом.
У идеологии HTML First есть даже противники, которые доводят концепцию до абсурда: якобы сам HTML не нужен [22] для создания валидных страничек. В самом деле, браузеры вышли на такой уровень, что способны обработать и ошибки, и невалидные теги.
Конечно, призыв отказаться от HTML — это шутка, но если посмотреть на современные технологии веб-разработки, то обычный HTML вообще кажется устаревшим артефактом. Например, вот демонстрация возможностей PWA [23], прогрессивных веб-приложений. Они уже могут делать практически всё, что и нативные программы под Windows или Linux. Это совершенно новый уровень веб-разработки.

Или посмотреть на библиотеку GSAP [24] (и Svija Vibe [25]) для анимации средствами JavaScript и SVG. Одной строчкой кода можно генерировать красивые спецэффекты [26]. В 90-е годы такое сложно было представить.
А вот необычный способ применения современных технологий — HTML-страница, которая одновременно валидный PDF-файл и JPEG-картинка [27]. Её можно сохранить на диске, переименовать в .jpg или .pdf, и это будут валидные файлы с некоторым контентом.
Из других интересных штучек, которые появились в последнее время:
В общем, развитие технологий идёт бурными темпами, но и ванильный HTML тоже не теряет актуальность, как бумажные ежедневники и виниловые пластинки.
Предыдущие статьи из серии «Интересные трюки HTML»:
Автор: Анатолий Ализар
Источник [34]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/html/390233
Ссылки в тексте:
[1] Image: https://habr.com/ru/companies/ruvds/articles/793680/
[2] Frontmania 2022: Kilian Valkhof — Stop using JavaScript for that: https://www.youtube.com/watch?v=ZTMUJu26b7Q
[3] «Вам не нужен для этого JavaScript»: https://habr.com/ru/companies/ruvds/articles/779814/
[4] HTML First: https://html-first.com/
[5] принцип минимальных привилегий: https://en.wikipedia.org/wiki/Principle_of_least_privilege
[6] самый лучший код — это его отсутствие: https://blog.codinghorror.com/the-best-code-is-no-code-at-all/
[7] очень экзотическими способами: https://tedium.co/2023/11/24/weird-html-hacks-history/
[8] если верить Википедии: https://en.wikipedia.org/wiki/CSS
[9] JSSS: https://www.w3.org/submissions/1996/1/WD-jsss-960822
[10] следующим образом: https://litux.nl/mirror/csscookbook/0596005768/cssckbk-CHP-9-SECT-1.html
[11] вёрстка веб-страниц с помощью таблиц: https://thehistoryoftheweb.com/tables-layout-absurd/
[12] HTML-терроризм: https://www.xml.com/pub/a/w3j/s1.people.html
[13] conditional comments: https://meiert.com/en/blog/why-conditional-comments-are-bad-repeat-bad/
[14] Conditional Compilation в JScript/ JavaScript: http://www.javascriptkit.com/javatutors/conditionalcompile.shtml
[15] сравнение структуры HTML и JavaScript: https://tonyennis.com/blog/M3WoiPA5P-comparing-the-readability-and-learning-curve-of-html
[16] «33 концепции, которые должен знать каждый разработчик JavaScript»: https://github.com/leonardomso/33-js-concepts
[17] Tailwind: https://github.com/tonyennis145/dumb-tailwind
[18] Tachyons: https://tachyons.io/
[19] hyperscript: https://hyperscript.org/
[20] Alpine: https://alpinejs.dev/
[21] ViewSource Affordance: https://htmx.org/essays/right-click-view-source/
[22] сам HTML не нужен: https://web.archive.org/web/20230719135333/http://no-ht.ml/
[23] демонстрация возможностей PWA: https://whatpwacando.today/
[24] библиотеку GSAP: https://gsap.com/
[25] Svija Vibe: https://tech.svija.love/how/animation
[26] красивые спецэффекты: https://cydstumpel.nl/
[27] HTML-страница, которая одновременно валидный PDF-файл и JPEG-картинка: https://donno2048.github.io/HTML-PDF-JPEG/
[28] Spin 2.0: https://www.fermyon.com/blog/introducing-spin-v2
[29] openapi-devtools: https://github.com/AndrewWalsh/openapi-devtools
[30] URL.canParse: https://www.stefanjudis.com/blog/validate-urls-in-javascript/
[31] «Интересные трюки HTML, CSS и JS»: https://habr.com/ru/companies/ruvds/articles/731960/
[32] «Интересные трюки JS, HTML и CSS, #2»: https://habr.com/ru/companies/ruvds/articles/748950/
[33] «Экстремальный минимализм»: https://habr.com/ru/companies/ruvds/articles/771388/
[34] Источник: https://habr.com/ru/companies/ruvds/articles/793680/?utm_source=habrahabr&utm_medium=rss&utm_campaign=793680
Нажмите здесь для печати.