Хакнуть HTML: как разработчики обходили ограничения разметки

История веб-разработки полна креативных находок — технологии не всегда успевали за фантазией пользователей. На заре девяностых, чтобы выделиться на фоне конкурентов, веб-разработчики искали творческие решения. Собрали хаки и подходы, которые использовали веб-программисты, чтобы выйти за пределы ограничений HTML.

Возможности для создания первых сайтов были предельно ограничены: стандартные шрифты, минимум графики и полотна текста. Недостаток инструментов компенсировали изобретательностью. Она позволяла решать, казалось бы, невозможные задачи.

Создать макет страницы в табличной верстке

Зачем: раньше не существовало гибких инструментов для создания сложных и адаптивных макетов.

До появления инструментов, таких как Flexbox и CSS Grid, разработчики использовали HTML-таблицы (<table>), чтобы создавать структуру веб-страницы:

<body>   <table>     <!-- Шапка сайта -->     <tr>       <td colspan="3" class="header">         Шапка сайта       </td>     </tr>     <!-- Основная структура: меню, контент, боковая панель -->     <tr>       <!-- Боковое меню -->       <td class="menu">         <strong>Меню:</strong>         <ul>           <li><a href="#">Главная</a></li>           <li><a href="#">О нас</a></li>           <li><a href="#">Услуги</a></li>           <li><a href="#">Контакты</a></li>         </ul>       </td>       <!-- Основной контент -->       <td class="content">         <h2>Основной контент</h2>         <p>Это пример основного контента страницы. В эпоху до CSS Grid и Flexbox веб-разработчики использовали таблицы для создания макетов сайтов.</p>         <p>Таблицы позволяли расположить элементы на странице в виде ячеек, но это нарушало семантическую структуру HTML и затрудняло адаптацию под разные экраны.</p>       </td>       <!-- Боковая панель -->       <td class="sidebar">         <strong>Боковая панель:</strong>         <p>Здесь можно разместить дополнительную информацию, новости или рекламу.</p>       </td>     </tr>     <!-- Подвал сайта -->     <tr>       <td colspan="3" class="footer">         © 2024 Пример сайта на табличной верстке. Все права защищены.       </td>     </tr>   </table> </body>

Как это выглядело на сайте:

Хакнуть HTML: как разработчики обходили ограничения разметки

Решение было далеко от идеала: оно нарушало семантическую структуру HTML, ограничивало гибкость верстки и делало сайты менее доступными для пользователей с особыми потребностями. Впрочем, об этом тогда не думали.

Сайты создавали с фиксированными размерами. Они не адаптировались под разные устройства и выглядели некрасиво на экранах с очень маленьким или большим разрешением. С развитием CSS-технологий таблицы уступили место универсальным методам, которые изменили принципы веб-дизайна.

Сделать отступы с помощью картинок

Зачем: чтобы разделять смысловые блоки, отображать контент на странице более структурированно.

Разработчики вставляли крошечные прозрачные GIF-изображения для имитации отступов — невидимых пробелов и разделителей между элементами.

<body> <p>Текст до отступа</p> <img src="https://via.placeholder.com/10x1/FFFFFF/FFFFFF" width="10" height="1" alt="Отступ"> <p>Текст после отступа</p> </body>

Как это выглядело на сайте:

Хакнуть HTML: как разработчики обходили ограничения разметки

Хак был распространен в 1990-х гг. Настраивая размер и ориентацию «картинки», можно было разделять элементы разными промежутками.

Выглядит странно, но тогда наряду с табличной структурой это было едва ли не единственным способом регулировать расположение элементов на странице. Минус решения — об адаптивности верстки речь не шла. Сейчас CSS-свойства margin, padding и gap делают такие манипуляции ненужными.

Добавить анимированный текст

Зачем: привлечь внимание пользователя к определенному тексту в эпоху до сложных CSS-анимаций.

Разработчики добавляли тег <blink>, который заставлял текст непрерывно мигать.

<body> <blink>Важное объявление!</blink> </body>

Или тег <marquee> для создания бегущей строки.

<body> <marquee behavior="scroll" direction="left" scrollamount="5">Текст движется по экрану!</marquee> </body>

Как это выглядело на сайте:

Анимация была популярна поначалу, но быстро стала восприниматься как некачественный раздражающий элемент. Тег <blink> окончательно ушел в прошлое: его удалили из стандарта HTML5 и отключили в современных версиях браузеров Chrome, Firefox и Edge. Но бегущая строка всё еще поддерживается браузерами из-за обратной совместимости.

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

Создать уникальный дизайн текста

Зачем: чтобы уйти от ограниченного количества стандартных шрифтов и создать свой визуальный стиль сайта.

На заре веб-разработки браузеры отображали в основном только стандартные шрифты, например Arial, Times New Roman и Verdana. Они были предустановлены на устройствах пользователей.

Разработчики использовали костыли, чтобы добавить разнообразия. Например, заменяли текст графическими изображениями или использовали sIFR (Scalable Inman Flash Replacement) — с помощью Flash вместо текстовых элементов показывали векторные шрифты.

<body> <!-- Замена текста картинкой --> <h1><img src="https://via.placeholder.com/300x50?text=Custom+Font" alt="Заголовок"></h1> <!-- Использование sIFR для замены текста на векторные шрифты через Flash:--> <script type="text/javascript"> replaceSWF("h1", "customfont.swf"); </script> </body>

Как это выглядело на сайте:

Хакнуть HTML: как разработчики обходили ограничения разметки

Решения вызывали множество проблем. Одна из них — ухудшение SEO из-за медленной загрузки страниц и невозможности индексировать текст с картинок. Метод sIFR работал только при установке Flash на компьютере пользователя. Проблему решило добавление технологии @font-face в CSS.

Адаптировать сайт для разных браузеров

Зачем: чтобы сайт правильно отображался в разных браузерах.

В эпоху «войн браузеров» в 1997–1999 годы Internet Explorer (IE) от Microsoft и его конкурент Netscape Navigator от компании Netscape Communications Corporation по-разному интерпретировали CSS. Разные версии IE тоже обрабатывали HTML и CSS каждая по-своему. Всё это создавало хаос для разработчиков.

Приходилось использовать специфическое написание селекторов CSS для разных браузеров: например, <_width> понимал Internet Explorer, но игнорировал Netscape.

<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>CSS-хак для IE</title> <style> p { color: blue; _color: red; /* Только для Internet Explorer 6 */ } </style> </head> <body> <p>Этот текст должен быть красным в IE6 и синим в других браузерах.</p> </body> </html>

Позже применяли условные комментарии, которые работали только в определенной версии Internet Explorer.

<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Условные комментарии для IE</title> <style> body { font-family: Arial, sans-serif; text-align: center; margin: 50px; } h1 { color: blue; /* Стандартный стиль для всех браузеров */ } </style> <!-- Условный комментарий для IE6 --> <!--[if IE 6]> <style> h1 { color: red; /* Стиль для IE6: заголовок становится красным */ } body::before { content: "Вы используете Internet Explorer 6!"; color: white; background-color: red; padding: 10px; display: block; text-align: center; } </style> <![endif]--> </head> <body> <h1>Заголовок с условными стилями</h1> <p>Этот текст выглядит одинаково во всех браузерах, а заголовок изменится в IE6.</p> </body> </html>

Отсутствие единых правил вынуждало разработчиков изобретать хаки для корректного отображения сайтов. Современные стандарты и унификация рендеринга сделали такие решения неактуальными.

Открывать сайт быстрее

Зачем: оптимизировать скорость загрузки сайта, чтобы улучшить пользовательский опыт и рейтинг сайта в поисковых системах.

Разработчики используют атрибут loading="lazy" для отложенной загрузки изображений: картинки загружаются не при переходе на сайт, а только когда пользователь доходит до нужного места на странице.

<body> <img src="https://via.placeholder.com/600x400?text=Lazy+Loaded" loading="lazy" alt="Ленивая загрузка"> </body>

Разработчики используют <link rel="preload"> для предварительной загрузки шрифтов и скриптов.

<head> <meta charset="UTF-8"> <title>Предзагрузка шрифтов</title> <link rel="preload" href="https://fonts.gstatic.com/s/roboto/v30/KFOmCnqEu92Fr1Me5Q.ttf" as="font" type="font/woff2" crossorigin="anonymous"> <style> body { font-family: 'Roboto', Arial, sans-serif; } </style> </head>

Эти методы значительно ускорили работу сайтов. Ленивая загрузка уменьшала первичное время загрузки страниц с большим количеством контента, экономя трафик пользователей. Предварительная загрузка позволяла браузеру заранее подготовить важные файлы, улучшая скорость отображения. Если раньше подобные задачи решались сложными JavaScript-скриптами, то теперь это стандартные функции HTML.

Упростить автозаполнение форм

Зачем: создать подсказки для заполнения форм без лишних скриптов и тяжелого кода.

Вместо скриптов и библиотек разработчики используют тег <datalist> для создания списков автозаполнения. для создания списков автозаполнения.

<!DOCTYPE html> <html lang="ru"> <head> <meta charset="UTF-8"> <title>Автозаполнение форм</title> </head> <body> <h1>Введите название браузера</h1> <input list="browsers" name="browser"> <datalist id="browsers"> <option value="Chrome"> <option value="Firefox"> <option value="Edge"> <option value="Safari"> <option value="Opera"> </datalist> </body> </html>

Как это выглядело на сайте:

Хакнуть HTML: как разработчики обходили ограничения разметки

До появления <datalist> разработчики создавали сложные JavaScript-решения для автозаполнения. Нативный HTML5-элемент простой, легковесный и не требует подключения дополнительных библиотек. Тег позволяет создавать интерактивные подсказки на основе введенной информации прямо в HTML.

Описанные хаки — не просто технические курьезы, а важный этап развития интернета. Каждое нестандартное решение было шагом к удобным сайтам. Сейчас можно посмеяться над странными решениями, но такой подход двигал технологии вперед.

А какие необычные методы разработки запомнились вам? Делитесь в комментариях своим первым опытом создания сайтов и рассказывайте про хаки, которые используете до сих пор.

19
2
3 комментария
","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как это выглядело на сайте:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"209796d6-83dd-51fb-aa5e-f5ada3f0fbeb","width":1920,"height":1080,"size":80831,"type":"png","color":"f4fbfb","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAgMECf/EACQQAAIBAgMJAAAAAAAAAAAAAAECAAMEERIhBhQWMUFVlKPT/8QAGAEAAwEBAAAAAAAAAAAAAAAAAAEEAgP/xAAfEQACAAYDAQAAAAAAAAAAAAAAAQIDERKR4SJRUnH/2gAMAwEAAhEDEQA/ANJqfETUwXu7ZWPTczp7YUm9rGyWyZ6WNh5NoO4WvhH6wpN7WNjsmeljZdVZhc0FDEA5sRjz0lMKVkT+DifJDpzNn//Z"}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Решение было далеко от идеала: оно нарушало семантическую структуру HTML, ограничивало гибкость верстки и делало сайты менее доступными для пользователей с особыми потребностями. Впрочем, об этом тогда не думали.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Сайты создавали с фиксированными размерами. Они не адаптировались под разные устройства и выглядели некрасиво на экранах с очень маленьким или большим разрешением. С развитием CSS-технологий таблицы уступили место универсальным методам, которые изменили принципы веб-дизайна.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Сделать отступы с помощью картинок"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Зачем: чтобы разделять смысловые блоки, отображать контент на странице более структурированно.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Разработчики вставляли крошечные прозрачные GIF-изображения для имитации отступов — невидимых пробелов и разделителей между элементами.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\n

Текст до отступа

\n \"Отступ\"\n

Текст после отступа

\n","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как это выглядело на сайте:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"80ff42d1-e75f-5d9e-bf85-bcc040a5cca8","width":1920,"height":1080,"size":75103,"type":"png","color":"f4fbfb","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAAAwQJ/8QAJBAAAgECAwkAAAAAAAAAAAAAAQIEABEDBRITISIxUVWUo9P/xAAXAQADAQAAAAAAAAAAAAAAAAABAgQD/8QAIBEAAgAGAgMAAAAAAAAAAAAAAAECAxESkeEiUlFhcf/aAAwDAQACEQMRAD8A0oQZ+V45kYN0EMm3so0m+sbJrJnZY2Jss77pE8FvpQpN8rGwWTOyxsrxWYScBQxAOq4vz3VTClZE/g0T5Iasxz//2Q=="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Хак был распространен в 1990-х гг. Настраивая размер и ориентацию «картинки», можно было разделять элементы разными промежутками.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Выглядит странно, но тогда наряду с табличной структурой это было едва ли не единственным способом регулировать расположение элементов на странице. Минус решения — об адаптивности верстки речь не шла. Сейчас CSS-свойства margin, padding и gap делают такие манипуляции ненужными.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Добавить анимированный текст"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Зачем: привлечь внимание пользователя к определенному тексту в эпоху до сложных CSS-анимаций.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Разработчики добавляли тег <blink>, который заставлял текст непрерывно мигать.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\n Важное объявление!\n","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Или тег <marquee> для создания бегущей строки.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\n Текст движется по экрану!\n","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как это выглядело на сайте:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"4b1b0326-ea58-59a7-a3b8-317588e6fd3f","width":1920,"height":1080,"size":748757,"type":"gif","color":"f2f9f9","hash":"","external_service":[],"duration":13.3,"isVideo":false,"has_audio":false}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Анимация была популярна поначалу, но быстро стала восприниматься как некачественный раздражающий элемент. Тег <blink> окончательно ушел в прошлое: его удалили из стандарта HTML5 и отключили в современных версиях браузеров Chrome, Firefox и Edge. Но бегущая строка всё еще поддерживается браузерами из-за обратной совместимости.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

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

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Создать уникальный дизайн текста"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Зачем: чтобы уйти от ограниченного количества стандартных шрифтов и создать свой визуальный стиль сайта.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

На заре веб-разработки браузеры отображали в основном только стандартные шрифты, например Arial, Times New Roman и Verdana. Они были предустановлены на устройствах пользователей.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Разработчики использовали костыли, чтобы добавить разнообразия. Например, заменяли текст графическими изображениями или использовали sIFR (Scalable Inman Flash Replacement) — с помощью Flash вместо текстовых элементов показывали векторные шрифты.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\n \n

\"Заголовок\"

\n \n \n","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как это выглядело на сайте:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"d8bb3b54-4041-5c33-b01e-b0c75fd7bd83","width":1920,"height":1080,"size":56843,"type":"png","color":"f4fbfb","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAwQFCf/EACQQAAEDAgQHAAAAAAAAAAAAAAECAwQABRESEyExMkJVgpTT/8QAGAEAAwEBAAAAAAAAAAAAAAAAAQIEAAP/xAAgEQACAQMEAwAAAAAAAAAAAAAAAQIDkeEREiJSUWFx/9oADAMBAAIRAxEAPwDRuTdbxBnRbbIcW49L5XI9necYRv1uBeVHkRW0q+rZJnCp3VslLRvfdIfpK+lHSr5Vsg2VOytkadUoSWEhRAObEY8dqoilsk/g0nyQauY5/9k="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Решения вызывали множество проблем. Одна из них — ухудшение SEO из-за медленной загрузки страниц и невозможности индексировать текст с картинок. Метод sIFR работал только при установке Flash на компьютере пользователя. Проблему решило добавление технологии @font-face в CSS.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Адаптировать сайт для разных браузеров"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Зачем: чтобы сайт правильно отображался в разных браузерах.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

В эпоху «войн браузеров» в 1997–1999 годы Internet Explorer (IE) от Microsoft и его конкурент Netscape Navigator от компании Netscape Communications Corporation по-разному интерпретировали CSS. Разные версии IE тоже обрабатывали HTML и CSS каждая по-своему. Всё это создавало хаос для разработчиков.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Приходилось использовать специфическое написание селекторов CSS для разных браузеров: например, <_width> понимал Internet Explorer, но игнорировал Netscape.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\n\n\n \n CSS-хак для IE\n \n\n\n

Этот текст должен быть красным в IE6 и синим в других браузерах.

\n\n","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Позже применяли условные комментарии, которые работали только в определенной версии Internet Explorer.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\n\n\n \n \n Условные комментарии для IE\n \n\n \n \n\n\n

Заголовок с условными стилями

\n

Этот текст выглядит одинаково во всех браузерах, а заголовок изменится в IE6.

\n\n","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Отсутствие единых правил вынуждало разработчиков изобретать хаки для корректного отображения сайтов. Современные стандарты и унификация рендеринга сделали такие решения неактуальными.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Открывать сайт быстрее"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Зачем: оптимизировать скорость загрузки сайта, чтобы улучшить пользовательский опыт и рейтинг сайта в поисковых системах.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Разработчики используют атрибут loading=\"lazy\" для отложенной загрузки изображений: картинки загружаются не при переходе на сайт, а только когда пользователь доходит до нужного места на странице.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\n \"Ленивая\n","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Разработчики используют <link rel=\"preload\"> для предварительной загрузки шрифтов и скриптов.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\n \n Предзагрузка шрифтов\n \n \n","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Эти методы значительно ускорили работу сайтов. Ленивая загрузка уменьшала первичное время загрузки страниц с большим количеством контента, экономя трафик пользователей. Предварительная загрузка позволяла браузеру заранее подготовить важные файлы, улучшая скорость отображения. Если раньше подобные задачи решались сложными JavaScript-скриптами, то теперь это стандартные функции HTML.

"}},{"type":"header","cover":false,"hidden":false,"anchor":"","data":{"style":"h2","text":"Упростить автозаполнение форм"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Зачем: создать подсказки для заполнения форм без лишних скриптов и тяжелого кода.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Вместо скриптов и библиотек разработчики используют тег <datalist> для создания списков автозаполнения. для создания списков автозаполнения.

"}},{"type":"code","cover":false,"hidden":false,"anchor":"","data":{"text":"\n\n\n \n Автозаполнение форм\n\n\n

Введите название браузера

\n \n \n \n\n","lang":""}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Как это выглядело на сайте:

"}},{"type":"media","cover":false,"hidden":false,"anchor":"","data":{"items":[{"title":"","image":{"type":"image","data":{"uuid":"e7470637-5e01-516b-a9de-9386d37b4c0f","width":1920,"height":1080,"size":57391,"type":"png","color":"f4fbfb","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQIAHAAcAAD/2wBDAAMCAgICAgMCAgIDAwMDBAYEBAQEBAgGBgUGCQgKCgkICQkKDA8MCgsOCwkJDRENDg8QEBEQCgwSExIQEw8QEBD/2wBDAQMDAwQDBAgEBAgQCwkLEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBD/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAwQFCf/EACIQAAIABQMFAAAAAAAAAAAAAAECAAMEERIFMUEhIjJhov/EABYBAQEBAAAAAAAAAAAAAAAAAAIDAf/EABwRAAMAAQUAAAAAAAAAAAAAAAABAhEhIjEycf/aAAwDAQACEQMRAD8A07o9PcnKfqk9sW8SEAYA89vPqEqpvgCSHjT019/qFlmaE2azCpkKGIByuL79ItPSn4Tp7kGiYz//2Q=="}}}]}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

До появления <datalist> разработчики создавали сложные JavaScript-решения для автозаполнения. Нативный HTML5-элемент простой, легковесный и не требует подключения дополнительных библиотек. Тег позволяет создавать интерактивные подсказки на основе введенной информации прямо в HTML.

"}},{"type":"delimiter","cover":false,"hidden":false,"anchor":"","data":{"type":"default"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

Описанные хаки — не просто технические курьезы, а важный этап развития интернета. Каждое нестандартное решение было шагом к удобным сайтам. Сейчас можно посмеяться над странными решениями, но такой подход двигал технологии вперед.

"}},{"type":"text","cover":false,"hidden":false,"anchor":"","data":{"text":"

А какие необычные методы разработки запомнились вам? Делитесь в комментариях своим первым опытом создания сайтов и рассказывайте про хаки, которые используете до сих пор.

"}},{"type":"quote","cover":false,"hidden":false,"anchor":"","data":{"text":"

Читайте еще:

6 проверенных техник веб-анимации для сайта

Что можно узнать из логов сервера: разбираем на 3 примерах

5 способов ускорить сайт: от простого к сложному

","subline1":""}}],"summaryContent":null,"isExistSummaryContent":false,"warningFromEditor":null,"warningFromEditorTitle":null,"counters":{"comments":3,"favorites":3,"reposts":0,"views":13989,"hits":674,"reads":null,"online":0},"dateFavorite":0,"hitsCount":674,"isCommentsEnabled":true,"isLikesEnabled":true,"isRemovedByUserRequest":false,"isFavorited":false,"isPinned":false,"repostId":null,"repostData":null,"subscribedToTreads":false,"isEditorial":false,"isAudioAvailable":true,"audioUrl":null,"isAudioAvailableToGenerate":false,"commentEditor":{"enabled":true,"who":null,"text":"","until":null,"reason":null,"type":"everybody"},"isBlur":false,"isPublished":true,"isDisabledAd":false,"withheld":[],"ogTitle":null,"ogDescription":null,"url":"https://vc.ru/services/1726465-haknut-html-kak-razrabotchiki-obhodili-ogranicheniya-razmetki","author":{"id":836156,"name":"SpaceWeb","nickname":null,"description":"Здесь мы пишем про хостинг, серверы и веб-разработку 𖥶 sweb.ru","uri":"","avatar":{"type":"image","data":{"uuid":"5dff5da5-9e85-5659-a61c-e2fb6abbf3d4","width":300,"height":300,"size":28076,"type":"jpg","color":"d2e7fc","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQICAQECAQEBAgICAgICAgICAQICAgICAgICAgL/2wBDAQEBAQEBAQEBAQECAQEBAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgL/wAARCAAKAAoDAREAAhEBAxEB/8QAFwAAAwEAAAAAAAAAAAAAAAAAAAcICv/EAB4QAAIDAQADAQEAAAAAAAAAAAIDAQQFBgAHCBET/8QAFgEBAQEAAAAAAAAAAAAAAAAABgcA/8QAIhEAAgIBBAIDAQAAAAAAAAAAAQIDBBEABQYhBxITFCMx/9oADAMBAAIRAxEAPwDY70fu36fydjosrG+emb9EtJiud6Fdm3VRn0CtDXg9HNmTncYqrM2JJVikLvwkrGCgZK97XwLxNcpbZcveSxt1gRA2apRHaWT0LYilGPrh3/LDxTmPp2OM4jW48y8k1be4VafAjfgMhFewGZVjT2C5kj7+Yov6ZWSEP2qgHBNAY/Z98/Jy3anr60vSdnUW6IJs/wAFBeZWUdsFIcBmlcWJZAgZEQxEQRTMTMzi7sXG47luOryVWqpLIIyy+xMYchCWXAYlcZIABPYAHWnVXeN8erWezsTLYeNDIA4UByoLAKckANnAJJH8JJ02/Belejza2v/Z"}},"cover":{"cover":{"type":"image","data":{"uuid":"4fc69b22-ed43-57f4-9496-41a38d1827a6","width":1280,"height":426,"size":34107,"type":"jpg","color":"05254b","hash":"","external_service":[],"base64preview":"/9j/4AAQSkZJRgABAQEASABIAAD/2wBDAAQDAwQDAwQEAwQFBAQFBgoHBgYGBg0JCggKDw0QEA8NDw4RExgUERIXEg4PFRwVFxkZGxsbEBQdHx0aHxgaGxr/2wBDAQQFBQYFBgwHBwwaEQ8RGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhoaGhr/wAARCAAKAAoDASIAAhEBAxEB/8QAFgABAQEAAAAAAAAAAAAAAAAACAYH/8QAIxAAAQMDAwUBAAAAAAAAAAAAAQIDBAUGEQASExQhIjFBUf/EABQBAQAAAAAAAAAAAAAAAAAAAAb/xAAaEQACAgMAAAAAAAAAAAAAAAAAAQIDERMx/9oADAMBAAIRAxEAPwA9WjQY9Booui5bbbuakyXFw2IypTjBQ8nareSjvjGRg/DqanrhyZ0p6LROjYddWtthLqlBpJJIQCe5wMDJ/NIywqhL6dDfVP8AHzDx5Dj4PWdaapatyvI+/wB0ld2HwMbJH//Z"}},"cover_y":0},"achievements":[{"title":"Год на vc.ru","code":"registration_1_year","description":"Первый год с vc.ru. Получена 24 июля 2025.","previewUuid":"0d11c244-49de-50e7-894e-b9b27945d42b","formats":{"glb":"https://static.vc.ru/achievements/fish.glb","usdz":"https://static.vc.ru/achievements/fish.usdz"},"viewData":{"contentColor":"#C67AA3","textMaxWidth":0.634765625,"textX":0.5888671875,"textY":0.54296875,"logoX":0.5859375,"logoY":0.6669921875,"logoXNoText":0.6044921875,"logoYNoText":0.5439453125},"id":4602199,"userId":836156,"count":0,"shareImage":"https://api.vc.ru/achievements/share/4602199"},{"title":"3 года на vc.ru","code":"registration_3_years","description":"Провёл 3 года вместе с vc.ru. Получена 23 июля 2025.","previewUuid":"d9d72ac5-bcb5-55e0-8c72-b99251e5cdd9","formats":{"glb":"https://static.vc.ru/achievements/shark.glb","usdz":"https://static.vc.ru/achievements/shark.usdz"},"viewData":{"contentColor":"#8E6F09","textMaxWidth":0.66796875,"textX":0.5205078125,"textY":0.341796875,"logoX":0.5205078125,"logoY":0.4609375,"logoXNoText":0.5,"logoYNoText":0.3662109375},"id":978112,"userId":836156,"count":0,"shareImage":"https://api.vc.ru/achievements/share/978112"}],"lastModificationDate":1764942758,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":true,"badgeId":null,"isDonationsEnabled":false,"isPlusGiftEnabled":true,"isUnverifiedBlogForCompanyWithoutPro":true,"isRemovedByUserRequest":false,"isFrozen":false,"isDisabledAd":false,"isPlus":false,"isVerified":false,"isPro":false,"yandexMetricaId":null,"badge":null,"isOnline":false,"tgChannelShortname":null,"isUnsubscribable":true,"type":1,"subtype":"personal_blog"},"subsite":{"id":200396,"name":"Сервисы","description":"Новые сервисы, обновления инструментов, опыт использования и полезные приёмы.","uri":"/services","avatar":{"type":"image","data":{"uuid":"158fab2d-76c1-5ed8-898a-76ee48d4c795","width":1200,"height":1200,"size":99571,"type":"png","color":"7cdaea","hash":"08183848d81000","external_service":[]}},"cover":{"type":"image","data":{"uuid":"c3fe3abb-6808-527e-9eb1-2b6bb92ea400","width":3840,"height":1120,"size":19502,"type":"png","color":"7cdcec","hash":"","external_service":[]}},"lastModificationDate":1688995401,"isSubscribed":false,"isSubscribedToNewPosts":false,"isMuted":false,"isAvailableForMessenger":false,"isDisabledAd":false,"nickname":"services","isUnsubscribable":true,"badge":null,"badgeId":null,"isDonationsEnabled":false,"isOnline":false,"isPlus":false,"isUnverifiedBlogForCompanyWithoutPro":false,"isVerified":false,"isRemovedByUserRequest":false,"isFrozen":false,"isPro":false,"type":2,"subtype":"community"},"reactions":{"counters":[{"id":1,"count":19},{"id":2,"count":2}],"reactionId":0},"isNews":false,"source":null,"clusters":[],"donations":{"amount":0,"isDonated":false},"commentsSeenCount":null,"keywords":[],"media":{"type":"image","data":{"uuid":"4dcc10e9-db7c-59a3-b50f-ba0e2ae90a8d","width":1050,"height":592,"size":339323,"type":"gif","color":"161e2d","hash":"","external_service":[],"duration":7.5,"isVideo":false,"has_audio":false}},"customCover":null,"robotsTag":"noindex","categories":[10],"isAnonymized":true}};