HTML Diff
1 added 1 removed
Original 2026-01-01
Modified 2026-02-21
1 <p><a>#статьи</a></p>
1 <p><a>#статьи</a></p>
2 <ul><li>8 авг 2025</li>
2 <ul><li>8 авг 2025</li>
3 <li>0</li>
3 <li>0</li>
4 </ul><p>Простой проект для начинающих фронтендеров.</p>
4 </ul><p>Простой проект для начинающих фронтендеров.</p>
5 <p>Иллюстрация: Оля Ежак для Skillbox Media</p>
5 <p>Иллюстрация: Оля Ежак для Skillbox Media</p>
6 <p>Онлайн-журнал для тех, кто влюблён в код и информационные технологии. Пишем для айтишников и об айтишниках.</p>
6 <p>Онлайн-журнал для тех, кто влюблён в код и информационные технологии. Пишем для айтишников и об айтишниках.</p>
7 <p>Индекс массы тела (ИМТ) помогает оценить, соответствует ли вес росту. С его помощью легко понять, можно ли съесть ещё один пирожок или пора садиться на диету.</p>
7 <p>Индекс массы тела (ИМТ) помогает оценить, соответствует ли вес росту. С его помощью легко понять, можно ли съесть ещё один пирожок или пора садиться на диету.</p>
8 <p>В этой статье создадим с нуля простой калькулятор ИМТ: сверстаем HTML-форму, напишем скрипт на JS и подключим CSS-стили. Всё будет работать прямо в браузере - достаточно открыть HTML-файл.</p>
8 <p>В этой статье создадим с нуля простой калькулятор ИМТ: сверстаем HTML-форму, напишем скрипт на JS и подключим CSS-стили. Всё будет работать прямо в браузере - достаточно открыть HTML-файл.</p>
9 <p><strong>Содержание:</strong></p>
9 <p><strong>Содержание:</strong></p>
10 <ul><li><a>Что мы будем делать</a></li>
10 <ul><li><a>Что мы будем делать</a></li>
11 <li><a>Шаг первый. Подготавливаем среду разработки</a></li>
11 <li><a>Шаг первый. Подготавливаем среду разработки</a></li>
12 <li><a>Шаг второй. Создаём папку проекта</a></li>
12 <li><a>Шаг второй. Создаём папку проекта</a></li>
13 <li><a>Шаг третий. Делаем разметку интерфейса</a></li>
13 <li><a>Шаг третий. Делаем разметку интерфейса</a></li>
14 <li><a>Шаг четвёртый. Улучшаем внешний вид</a></li>
14 <li><a>Шаг четвёртый. Улучшаем внешний вид</a></li>
15 <li><a>Шаг пятый. Добавляем логику</a></li>
15 <li><a>Шаг пятый. Добавляем логику</a></li>
16 <li><a>Шаг шестой. Тестируем приложение</a></li>
16 <li><a>Шаг шестой. Тестируем приложение</a></li>
17 </ul><p>Рассчитать ИМТ достаточно просто: нужно вес в килограммах разделить на квадрат роста в метрах. Этот индекс ещё называется индексом Кетле - по фамилии известного бельгийского математика, астронома, метеоролога и социолога Адольфа Кетле, который как раз и ввёл в обиход понятие индекса массы тела.</p>
17 </ul><p>Рассчитать ИМТ достаточно просто: нужно вес в килограммах разделить на квадрат роста в метрах. Этот индекс ещё называется индексом Кетле - по фамилии известного бельгийского математика, астронома, метеоролога и социолога Адольфа Кетле, который как раз и ввёл в обиход понятие индекса массы тела.</p>
18 <p>Калькулятор мы будем писать с применением HTML, JavaScript и CSS. На HTML напишем разметку интерфейса, то есть разместим как надо все необходимые компоненты. На JavaScript опишем всю логику приложения. Именно этот код и будет заниматься вычислением индекса Кетле и не только. С помощью CSS мы раскрасим приложение, чтобы оно выглядело красиво. Вот так будет выглядеть результат:</p>
18 <p>Калькулятор мы будем писать с применением HTML, JavaScript и CSS. На HTML напишем разметку интерфейса, то есть разместим как надо все необходимые компоненты. На JavaScript опишем всю логику приложения. Именно этот код и будет заниматься вычислением индекса Кетле и не только. С помощью CSS мы раскрасим приложение, чтобы оно выглядело красиво. Вот так будет выглядеть результат:</p>
19 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Для работы с HTML, CSS и JavaScript подойдёт любой современный редактор кода, но мы будем использовать<strong>Visual Studio Code</strong> - один из самых популярных и удобных. Он бесплатный, работает на Windows, macOS и Linux и легко настраивается под разные задачи с помощью расширений.</p>
19 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Для работы с HTML, CSS и JavaScript подойдёт любой современный редактор кода, но мы будем использовать<strong>Visual Studio Code</strong> - один из самых популярных и удобных. Он бесплатный, работает на Windows, macOS и Linux и легко настраивается под разные задачи с помощью расширений.</p>
20 <p>Чтобы было удобнее работать с HTML-файлами, можно установить расширение<strong>Live Preview</strong>. Оно позволяет открывать вашу страницу в браузере прямо из редактора и автоматически обновлять её при каждом изменении в коде.</p>
20 <p>Чтобы было удобнее работать с HTML-файлами, можно установить расширение<strong>Live Preview</strong>. Оно позволяет открывать вашу страницу в браузере прямо из редактора и автоматически обновлять её при каждом изменении в коде.</p>
21 <p>После запуска редактора откройте вкладку Extensions (значок из четырёх квадратов на боковой панели).</p>
21 <p>После запуска редактора откройте вкладку Extensions (значок из четырёх квадратов на боковой панели).</p>
22 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Введите в строке поиска Live Preview.</p>
22 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Введите в строке поиска Live Preview.</p>
23 <p>Выберите расширение от Microsoft и нажмите Install.</p>
23 <p>Выберите расширение от Microsoft и нажмите Install.</p>
24 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>После установки вы увидите кнопку запуска сервера - она появится на нижней панели редактора. При запуске расширение откроет HTML-страницу в браузере и будет отслеживать все изменения.</p>
24 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>После установки вы увидите кнопку запуска сервера - она появится на нижней панели редактора. При запуске расширение откроет HTML-страницу в браузере и будет отслеживать все изменения.</p>
25 <p>Дополнительные расширения для HTML, CSS и JavaScript устанавливать не нужно - VS Code уже по умолчанию поддерживает:</p>
25 <p>Дополнительные расширения для HTML, CSS и JavaScript устанавливать не нужно - VS Code уже по умолчанию поддерживает:</p>
26 <ul><li>подсветку синтаксиса,</li>
26 <ul><li>подсветку синтаксиса,</li>
27 <li>автодополнение кода,</li>
27 <li>автодополнение кода,</li>
28 <li>навигацию по структуре документа,</li>
28 <li>навигацию по структуре документа,</li>
29 <li>встроенные подсказки и документацию.</li>
29 <li>встроенные подсказки и документацию.</li>
30 </ul><p>Сначала создадим необходимые файлы. Перед началом работы создайте папку с именем, например bmi-calculator, в любом удобном месте на компьютере.</p>
30 </ul><p>Сначала создадим необходимые файлы. Перед началом работы создайте папку с именем, например bmi-calculator, в любом удобном месте на компьютере.</p>
31 <p>Внутри неё разместите три пустых файла:</p>
31 <p>Внутри неё разместите три пустых файла:</p>
32 <ul><li>index.html - для разметки интерфейса приложения;</li>
32 <ul><li>index.html - для разметки интерфейса приложения;</li>
33 <li>style.css - стили приложения, задающие его внешний вид;</li>
33 <li>style.css - стили приложения, задающие его внешний вид;</li>
34 <li>script.js - для описания логики калькулятора на JavaScript.</li>
34 <li>script.js - для описания логики калькулятора на JavaScript.</li>
35 </ul><p>Теперь всё готово к началу разработки приложения.</p>
35 </ul><p>Теперь всё готово к началу разработки приложения.</p>
36 <p>Среда разработки настроена, проектная папка создана - пора переходить к вёрстке. Но прежде чем писать HTML, давайте разберёмся, какие элементы понадобятся нашему калькулятору и зачем.</p>
36 <p>Среда разработки настроена, проектная папка создана - пора переходить к вёрстке. Но прежде чем писать HTML, давайте разберёмся, какие элементы понадобятся нашему калькулятору и зачем.</p>
37 <p>Для вычисления индекса массы тела (ИМТ) нужно ввести два значения: вес и рост. Эти данные пользователь вводит вручную, поэтому используем два поля ввода - &lt;input&gt;: одно для веса, другое для роста.</p>
37 <p>Для вычисления индекса массы тела (ИМТ) нужно ввести два значения: вес и рост. Эти данные пользователь вводит вручную, поэтому используем два поля ввода - &lt;input&gt;: одно для веса, другое для роста.</p>
38 <p>Чтобы интерфейс был понятным, рядом с каждым полем добавим подписи - теги &lt;label&gt;. Они подскажут, что именно нужно ввести.</p>
38 <p>Чтобы интерфейс был понятным, рядом с каждым полем добавим подписи - теги &lt;label&gt;. Они подскажут, что именно нужно ввести.</p>
39 <p>Далее понадобится кнопка (&lt;button&gt;), которая запустит расчёт.</p>
39 <p>Далее понадобится кнопка (&lt;button&gt;), которая запустит расчёт.</p>
40 <p>Результат расчёта отобразим на странице с помощью двух тегов &lt;div&gt;:</p>
40 <p>Результат расчёта отобразим на странице с помощью двух тегов &lt;div&gt;:</p>
41 <ul><li>один выведет числовое значение ИМТ;</li>
41 <ul><li>один выведет числовое значение ИМТ;</li>
42 <li>другой - текстовую категорию: например, "нормальный вес" или "избыточный".</li>
42 <li>другой - текстовую категорию: например, "нормальный вес" или "избыточный".</li>
43 </ul><p>Все эти элементы мы поместим внутрь контейнера &lt;div class="calculator"&gt;. Он поможет организовать структуру, стилизовать блок и работать с ним через CSS и JavaScript.</p>
43 </ul><p>Все эти элементы мы поместим внутрь контейнера &lt;div class="calculator"&gt;. Он поможет организовать структуру, стилизовать блок и работать с ним через CSS и JavaScript.</p>
44 <p>Также добавим заголовок страницы - &lt;h1&gt;, чтобы сразу было понятно, что перед нами калькулятор ИМТ, и подзаголовок - &lt;h3&gt; - как краткий призыв к действию: например, "Следи за своим весом!". Оба тега разместим вне основного контейнера, чтобы сохранить логическую структуру документа.</p>
44 <p>Также добавим заголовок страницы - &lt;h1&gt;, чтобы сразу было понятно, что перед нами калькулятор ИМТ, и подзаголовок - &lt;h3&gt; - как краткий призыв к действию: например, "Следи за своим весом!". Оба тега разместим вне основного контейнера, чтобы сохранить логическую структуру документа.</p>
45 <p>Теперь можно открыть редактор и приступить к работе:</p>
45 <p>Теперь можно открыть редактор и приступить к работе:</p>
46 <ul><li>Запустите Visual Studio Code.</li>
46 <ul><li>Запустите Visual Studio Code.</li>
47 <li>В стартовом окне нажмите "Открыть папку..." и выберите созданную папку проекта.</li>
47 <li>В стартовом окне нажмите "Открыть папку..." и выберите созданную папку проекта.</li>
48 <li>В левой панели найдите файл index.html.</li>
48 <li>В левой панели найдите файл index.html.</li>
49 <li>Откройте его и вставьте следующий HTML-код:</li>
49 <li>Откройте его и вставьте следующий HTML-код:</li>
50 </ul>&lt;!DOCTYPE html&gt; &lt;!-- Объявление типа документа: HTML5 --&gt; &lt;html lang="ru"&gt; &lt;!-- Начало документа, язык -- русский --&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;!-- Устанавливает кодировку символов: UTF-8 --&gt; &lt;title&gt;BMI Calculator&lt;/title&gt; &lt;!-- Название страницы на вкладке браузера --&gt; &lt;link href="style.css" rel="stylesheet"&gt; &lt;!-- Подключение внешнего CSS-файла --&gt; &lt;/head&gt; &lt;body&gt; &lt;!-- Основное содержимое страницы --&gt; &lt;h1&gt;Калькулятор ИМТ&lt;/h1&gt; &lt;!-- Главный заголовок страницы --&gt; &lt;h3&gt;Следи за своим весом!&lt;/h3&gt; &lt;!-- Слоган --&gt; &lt;div class="calculator"&gt; &lt;!-- Контейнер для калькулятора ИМТ --&gt; &lt;label for="weight"&gt;Вес (кг):&lt;/label&gt; &lt;!-- Подпись к полю ввода веса --&gt; &lt;input type="number" class="weight" id="weight" placeholder="Введите ваш вес"&gt; &lt;!-- Поле ввода веса, принимает только числа --&gt; &lt;br&gt; &lt;!-- Перенос строки (используется для отступа между элементами) --&gt; &lt;label for="height"&gt;Рост (см):&lt;/label&gt; &lt;!-- Подпись к полю ввода роста --&gt; &lt;input type="number" class="height" id="height" placeholder="Введите ваш рост"&gt; &lt;!-- Поле ввода роста, принимает только числа --&gt; &lt;br&gt; &lt;!-- Перенос строки --&gt; &lt;button onclick="calculate()"&gt;Вычислить&lt;/button&gt; &lt;!-- Кнопка запуска расчёта ИМТ. Вызывает функцию calculate() из JS --&gt; &lt;div class="bmi"&gt;&lt;/div&gt; &lt;!-- Блок для вывода рассчитанного значения ИМТ --&gt; &lt;div class="category"&gt;&lt;/div&gt; &lt;!-- Блок для вывода текстовой категории ИМТ (например, "Норма") --&gt; &lt;/div&gt; &lt;!-- Конец блока .calculator --&gt; &lt;script src="script.js"&gt;&lt;/script&gt; &lt;!-- Подключение внешнего JavaScript-файла с логикой расчёта --&gt; &lt;/body&gt; &lt;/html&gt;<p>Откроем предварительный просмотр с помощью расширения Live Preview. Для этого найдём значок расширения в правом верхнем углу панели редактора. Нажмём на него - откроется новая вкладка браузера, где отобразится наше приложение.</p>
50 </ul>&lt;!DOCTYPE html&gt; &lt;!-- Объявление типа документа: HTML5 --&gt; &lt;html lang="ru"&gt; &lt;!-- Начало документа, язык -- русский --&gt; &lt;head&gt; &lt;meta charset="UTF-8"&gt; &lt;!-- Устанавливает кодировку символов: UTF-8 --&gt; &lt;title&gt;BMI Calculator&lt;/title&gt; &lt;!-- Название страницы на вкладке браузера --&gt; &lt;link href="style.css" rel="stylesheet"&gt; &lt;!-- Подключение внешнего CSS-файла --&gt; &lt;/head&gt; &lt;body&gt; &lt;!-- Основное содержимое страницы --&gt; &lt;h1&gt;Калькулятор ИМТ&lt;/h1&gt; &lt;!-- Главный заголовок страницы --&gt; &lt;h3&gt;Следи за своим весом!&lt;/h3&gt; &lt;!-- Слоган --&gt; &lt;div class="calculator"&gt; &lt;!-- Контейнер для калькулятора ИМТ --&gt; &lt;label for="weight"&gt;Вес (кг):&lt;/label&gt; &lt;!-- Подпись к полю ввода веса --&gt; &lt;input type="number" class="weight" id="weight" placeholder="Введите ваш вес"&gt; &lt;!-- Поле ввода веса, принимает только числа --&gt; &lt;br&gt; &lt;!-- Перенос строки (используется для отступа между элементами) --&gt; &lt;label for="height"&gt;Рост (см):&lt;/label&gt; &lt;!-- Подпись к полю ввода роста --&gt; &lt;input type="number" class="height" id="height" placeholder="Введите ваш рост"&gt; &lt;!-- Поле ввода роста, принимает только числа --&gt; &lt;br&gt; &lt;!-- Перенос строки --&gt; &lt;button onclick="calculate()"&gt;Вычислить&lt;/button&gt; &lt;!-- Кнопка запуска расчёта ИМТ. Вызывает функцию calculate() из JS --&gt; &lt;div class="bmi"&gt;&lt;/div&gt; &lt;!-- Блок для вывода рассчитанного значения ИМТ --&gt; &lt;div class="category"&gt;&lt;/div&gt; &lt;!-- Блок для вывода текстовой категории ИМТ (например, "Норма") --&gt; &lt;/div&gt; &lt;!-- Конец блока .calculator --&gt; &lt;script src="script.js"&gt;&lt;/script&gt; &lt;!-- Подключение внешнего JavaScript-файла с логикой расчёта --&gt; &lt;/body&gt; &lt;/html&gt;<p>Откроем предварительный просмотр с помощью расширения Live Preview. Для этого найдём значок расширения в правом верхнем углу панели редактора. Нажмём на него - откроется новая вкладка браузера, где отобразится наше приложение.</p>
51 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>На этом этапе приложение выглядит минималистично - просто текст и поля ввода. Это нормально: HTML уже готов, CSS-файл подключён, но пока в нём нет стилей. Следующий шаг - добавить оформление и сделать интерфейс симпатичнее.</p>
51 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>На этом этапе приложение выглядит минималистично - просто текст и поля ввода. Это нормально: HTML уже готов, CSS-файл подключён, но пока в нём нет стилей. Следующий шаг - добавить оформление и сделать интерфейс симпатичнее.</p>
52 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Каждое поле ввода содержит подсказку, заданную через атрибут placeholder. Атрибут type="number" указывает, что поле предназначено для ввода числовых значений, - это исключает ввод текста.</p>
52 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Каждое поле ввода содержит подсказку, заданную через атрибут placeholder. Атрибут type="number" указывает, что поле предназначено для ввода числовых значений, - это исключает ввод текста.</p>
53 <p>Если нажать на кнопку &lt;button&gt;, вызывается функция calculate(), которая выполняет расчёт.</p>
53 <p>Если нажать на кнопку &lt;button&gt;, вызывается функция calculate(), которая выполняет расчёт.</p>
54 <p>Результаты отображаются в двух блоках &lt;div&gt;, расположенных под кнопкой:</p>
54 <p>Результаты отображаются в двух блоках &lt;div&gt;, расположенных под кнопкой:</p>
55 <ul><li>в элемент с классом .bmi выводится числовое значение ИМТ;</li>
55 <ul><li>в элемент с классом .bmi выводится числовое значение ИМТ;</li>
56 <li>в элемент с классом .category - текстовая интерпретация (например, "Нормальный вес" или "Ожирение").</li>
56 <li>в элемент с классом .category - текстовая интерпретация (например, "Нормальный вес" или "Ожирение").</li>
57 </ul><p>Стили подключаются через тег &lt;link&gt;, а скрипт - с помощью тега &lt;script&gt;. В следующих шагах мы добавим CSS и JavaScript, чтобы калькулятор стал полноценным приложением.</p>
57 </ul><p>Стили подключаются через тег &lt;link&gt;, а скрипт - с помощью тега &lt;script&gt;. В следующих шагах мы добавим CSS и JavaScript, чтобы калькулятор стал полноценным приложением.</p>
58 <p>Откроем файл style.css и займёмся внешним видом приложения. Для начала зададим базовые стили для тега body: шрифт, выравнивание текста и цвет фона.</p>
58 <p>Откроем файл style.css и займёмся внешним видом приложения. Для начала зададим базовые стили для тега body: шрифт, выравнивание текста и цвет фона.</p>
59 <ul><li>font-family определяет используемое семейство шрифтов;</li>
59 <ul><li>font-family определяет используемое семейство шрифтов;</li>
60 <li>text-align выравнивает содержимое по центру страницы;</li>
60 <li>text-align выравнивает содержимое по центру страницы;</li>
61 <li>background-color задаёт цвет фона.</li>
61 <li>background-color задаёт цвет фона.</li>
62 </ul><p>Вот как это выглядит в коде:</p>
62 </ul><p>Вот как это выглядит в коде:</p>
63 body { font-family: Arial, Helvetica, sans-serif; text-align: center; background-color: #91bbbd; }<p>Зададим цвет для заголовка и подзаголовка с помощью свойства color:</p>
63 body { font-family: Arial, Helvetica, sans-serif; text-align: center; background-color: #91bbbd; }<p>Зададим цвет для заголовка и подзаголовка с помощью свойства color:</p>
64 h1 { color: #504a4a; } h3 { color: #534f49; }<p>Получим такой вид:</p>
64 h1 { color: #504a4a; } h3 { color: #534f49; }<p>Получим такой вид:</p>
65 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Теперь нам нужно оформить область, где будут располагаться все элементы калькулятора. Делается это так:</p>
65 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Теперь нам нужно оформить область, где будут располагаться все элементы калькулятора. Делается это так:</p>
66 .calculator { background-color: #c8c98f; padding: 40px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); display: inline-block; }<p>Здесь мы задаём фоновый цвет (background-color), внутренние отступы (padding), скругление углов (border-radius) и добавляем лёгкую тень (box-shadow). Свойство display: inline-block указывает, что элемент должен вести себя как блочный, но занимать только ту ширину, которая нужна для его содержимого.</p>
66 .calculator { background-color: #c8c98f; padding: 40px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); display: inline-block; }<p>Здесь мы задаём фоновый цвет (background-color), внутренние отступы (padding), скругление углов (border-radius) и добавляем лёгкую тень (box-shadow). Свойство display: inline-block указывает, что элемент должен вести себя как блочный, но занимать только ту ширину, которая нужна для его содержимого.</p>
67 <p>В результате получится аккуратный контейнер:</p>
67 <p>В результате получится аккуратный контейнер:</p>
68 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Дальше определим расположение текстовых меток, полей ввода и кнопки:</p>
68 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Дальше определим расположение текстовых меток, полей ввода и кнопки:</p>
69 label, input, button { display: table-cell; margin: 10px 0; }<p>Здесь снова используется свойство display, но с другим значением - table-cell. Оно заставляет элементы (label, input и button) выстраиваться по принципу таблицы: каждый занимает отдельную "ячейку" в строке. Дополнительно с помощью свойства margin задаются вертикальные отступы между элементами.</p>
69 label, input, button { display: table-cell; margin: 10px 0; }<p>Здесь снова используется свойство display, но с другим значением - table-cell. Оно заставляет элементы (label, input и button) выстраиваться по принципу таблицы: каждый занимает отдельную "ячейку" в строке. Дополнительно с помощью свойства margin задаются вертикальные отступы между элементами.</p>
70 <p>В результате элементы располагаются компактно и ровно:</p>
70 <p>В результате элементы располагаются компактно и ровно:</p>
71 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Осталось только стилизовать кнопку.</p>
71 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Осталось только стилизовать кнопку.</p>
72 button { background-color: #546154; color: white; border: none; padding: 10px 20px; border-radius: 5px; cursor: pointer; } button:hover { background-color: #6e806f; }<p>Мы задаём для неё фоновый цвет, цвет текста, убираем рамку (border: none), добавляем отступы, скругляем углы и меняем курсор на "указатель" при наведении. Дополнительно с помощью button:hover задаём стиль кнопки при наведении - она будет слегка менять цвет.</p>
72 button { background-color: #546154; color: white; border: none; padding: 10px 20px; border-radius: 5px; cursor: pointer; } button:hover { background-color: #6e806f; }<p>Мы задаём для неё фоновый цвет, цвет текста, убираем рамку (border: none), добавляем отступы, скругляем углы и меняем курсор на "указатель" при наведении. Дополнительно с помощью button:hover задаём стиль кнопки при наведении - она будет слегка менять цвет.</p>
73 <p>В результате получим:</p>
73 <p>В результате получим:</p>
74 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Теперь всё выглядит как задумано.</p>
74 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Теперь всё выглядит как задумано.</p>
75 <p>Вот итоговый CSS-код:</p>
75 <p>Вот итоговый CSS-код:</p>
76 body { font-family: Arial, Helvetica, sans-serif; text-align: center; background-color: #91bbbd; } h1 { color: #504a4a; } h3 { color: #534f49; } .calculator { background-color: #c8c98f; padding: 40px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); display: inline-block; } label, input, button { display: table-cell; margin: 10px 0; } button { background-color: #546154; color: white; border: none; padding: 10px 20px; border-radius: 5px; cursor: pointer; } button:hover { background-color: #6e806f; }<p>Дальше займёмся логикой калькулятора.</p>
76 body { font-family: Arial, Helvetica, sans-serif; text-align: center; background-color: #91bbbd; } h1 { color: #504a4a; } h3 { color: #534f49; } .calculator { background-color: #c8c98f; padding: 40px; border-radius: 10px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.2); display: inline-block; } label, input, button { display: table-cell; margin: 10px 0; } button { background-color: #546154; color: white; border: none; padding: 10px 20px; border-radius: 5px; cursor: pointer; } button:hover { background-color: #6e806f; }<p>Дальше займёмся логикой калькулятора.</p>
77 <p>Научим наше приложение вычислять ИМТ и интерпретировать результаты.</p>
77 <p>Научим наше приложение вычислять ИМТ и интерпретировать результаты.</p>
78 <p>Сначала напишем простую заготовку функции с именем calculate() - именно она будет запускаться, когда пользователь нажмёт кнопку "Вычислить".</p>
78 <p>Сначала напишем простую заготовку функции с именем calculate() - именно она будет запускаться, когда пользователь нажмёт кнопку "Вычислить".</p>
79 function calculate() { // Здесь будет код }<p>Чтобы JavaScript мог что-то изменить на странице - например, узнать, что ввёл пользователь, или показать результат, - ему нужно "дотянуться" до нужных элементов HTML. Например, до полей ввода, кнопки или блоков, куда мы хотим вывести результат.</p>
79 function calculate() { // Здесь будет код }<p>Чтобы JavaScript мог что-то изменить на странице - например, узнать, что ввёл пользователь, или показать результат, - ему нужно "дотянуться" до нужных элементов HTML. Например, до полей ввода, кнопки или блоков, куда мы хотим вывести результат.</p>
80 <p>Для этого используется специальная команда - document.querySelector.</p>
80 <p>Для этого используется специальная команда - document.querySelector.</p>
81 <ul><li>document - это вся HTML-страница.</li>
81 <ul><li>document - это вся HTML-страница.</li>
82 <li>querySelector() - это команда, которая ищет элемент на странице по его классу, тегу, ID или любому другому селектору.</li>
82 <li>querySelector() - это команда, которая ищет элемент на странице по его классу, тегу, ID или любому другому селектору.</li>
83 </ul><p>Допустим, у нас есть поле ввода с классом weight. Чтобы получить доступ к этому полю из JavaScript, пишем:</p>
83 </ul><p>Допустим, у нас есть поле ввода с классом weight. Чтобы получить доступ к этому полю из JavaScript, пишем:</p>
84 let weightInput = document.querySelector(".weight");<ul><li>".weight" - это CSS-селектор класса (точка означает, что ищем по классу).</li>
84 let weightInput = document.querySelector(".weight");<ul><li>".weight" - это CSS-селектор класса (точка означает, что ищем по классу).</li>
85 <li>weightInput - переменная, в которую сохраняем найденный элемент.</li>
85 <li>weightInput - переменная, в которую сохраняем найденный элемент.</li>
86 </ul><p>Аналогичным образом мы можем получить и другие элементы:</p>
86 </ul><p>Аналогичным образом мы можем получить и другие элементы:</p>
87 let heightInput = document.querySelector(".height"); // Поле ввода роста let bmiDiv = document.querySelector(".bmi"); // Блок, в котором появится результат ИМТ let categoryDiv = document.querySelector(".category"); // Блок с текстовым пояснением<p>Теперь давайте получим значения, которые пользователь ввёл в поля "Вес" и "Рост".</p>
87 let heightInput = document.querySelector(".height"); // Поле ввода роста let bmiDiv = document.querySelector(".bmi"); // Блок, в котором появится результат ИМТ let categoryDiv = document.querySelector(".category"); // Блок с текстовым пояснением<p>Теперь давайте получим значения, которые пользователь ввёл в поля "Вес" и "Рост".</p>
88 <p>Когда человек вводит данные в поле, они сохраняются как обычный текст. Чтобы с этими данными можно было производить математические расчёты (а нам потребуется делить и возводить в степень), нужно сначала превратить этот текст в число. Для этого используем специальную команду parseFloat():</p>
88 <p>Когда человек вводит данные в поле, они сохраняются как обычный текст. Чтобы с этими данными можно было производить математические расчёты (а нам потребуется делить и возводить в степень), нужно сначала превратить этот текст в число. Для этого используем специальную команду parseFloat():</p>
89 let weight = parseFloat(weightInput.value); let height = parseFloat(heightInput.value);<ul><li>weightInput.value - это то, что пользователь ввёл в поле "Вес".</li>
89 let weight = parseFloat(weightInput.value); let height = parseFloat(heightInput.value);<ul><li>weightInput.value - это то, что пользователь ввёл в поле "Вес".</li>
90 <li>heightInput.value - то, что он ввёл в поле "Рост".</li>
90 <li>heightInput.value - то, что он ввёл в поле "Рост".</li>
91 <li>parseFloat() - превращает текст в число, включая десятичные дроби.</li>
91 <li>parseFloat() - превращает текст в число, включая десятичные дроби.</li>
92 </ul><p>Дальше мы проверим, ввёл ли пользователь вообще какие-то данные. Может быть, он случайно нажал кнопку "Вычислить", ничего не написав в поля. В этом случае показываем сообщение с просьбой ввести данные, а курсор ставим в нужное поле, чтобы человеку было удобнее его сразу заполнить:</p>
92 </ul><p>Дальше мы проверим, ввёл ли пользователь вообще какие-то данные. Может быть, он случайно нажал кнопку "Вычислить", ничего не написав в поля. В этом случае показываем сообщение с просьбой ввести данные, а курсор ставим в нужное поле, чтобы человеку было удобнее его сразу заполнить:</p>
93 if (isNaN(weight)) { bmiDiv.innerHTML = "Введите ваш вес!"; categoryDiv.innerHTML = ""; weightInput.focus(); // Ставим курсор в поле "Вес" return; // Останавливаем выполнение функции }<p>isNaN() - это команда, которая проверяет, получилось ли число. Если нет - значит, пользователь ничего не ввёл или допустил ошибку.</p>
93 if (isNaN(weight)) { bmiDiv.innerHTML = "Введите ваш вес!"; categoryDiv.innerHTML = ""; weightInput.focus(); // Ставим курсор в поле "Вес" return; // Останавливаем выполнение функции }<p>isNaN() - это команда, которая проверяет, получилось ли число. Если нет - значит, пользователь ничего не ввёл или допустил ошибку.</p>
94 <p>Такая же проверка для роста:</p>
94 <p>Такая же проверка для роста:</p>
95 if (isNaN(height)) { bmiDiv.innerHTML = "Введите ваш рост!"; categoryDiv.innerHTML = ""; heightInput.focus(); // Ставим курсор в поле "Рост" return; }<p>Если данные введены правильно, рассчитываем индекс массы тела:</p>
95 if (isNaN(height)) { bmiDiv.innerHTML = "Введите ваш рост!"; categoryDiv.innerHTML = ""; heightInput.focus(); // Ставим курсор в поле "Рост" return; }<p>Если данные введены правильно, рассчитываем индекс массы тела:</p>
96 let bmi = weight / ((height / 100) ** 2);<p>Здесь:</p>
96 let bmi = weight / ((height / 100) ** 2);<p>Здесь:</p>
97 <ul><li>делим вес в килограммах на квадрат роста в метрах;</li>
97 <ul><li>делим вес в килограммах на квадрат роста в метрах;</li>
98 <li>height / 100 - превращаем сантиметры в метры;</li>
98 <li>height / 100 - превращаем сантиметры в метры;</li>
99 <li>** 2 - возводим рост в квадрат.</li>
99 <li>** 2 - возводим рост в квадрат.</li>
100 </ul><p>Также создаём переменную category, в которую чуть позже запишем текст с расшифровкой результата:</p>
100 </ul><p>Также создаём переменную category, в которую чуть позже запишем текст с расшифровкой результата:</p>
101 let category = "";<p>Теперь задаём соответствующее значение для переменной category в зависимости от значения переменной bmi. Когда пользователь ввёл данные и мы рассчитали его ИМТ, нужно понять, в какую категорию он попадает: это может быть недостаточный вес, норма, избыточный вес или ожирение. Чтобы определить это, мы используем условную конструкцию if...else if...else - она помогает выполнять разные действия в зависимости от значения переменной bmi.</p>
101 let category = "";<p>Теперь задаём соответствующее значение для переменной category в зависимости от значения переменной bmi. Когда пользователь ввёл данные и мы рассчитали его ИМТ, нужно понять, в какую категорию он попадает: это может быть недостаточный вес, норма, избыточный вес или ожирение. Чтобы определить это, мы используем условную конструкцию if...else if...else - она помогает выполнять разные действия в зависимости от значения переменной bmi.</p>
102 <p>Вот как это работает:</p>
102 <p>Вот как это работает:</p>
103 if (bmi &lt; 18.5) { category = "Недостаточный вес"; calculator.style.backgroundColor = "#dd7979"; // Светло-красный -- недостаточный вес } else if (bmi &lt; 25) { category = "Нормальный вес"; calculator.style.backgroundColor = "#6ecf66"; // Зелёный -- всё в порядке } else if (bmi &lt; 30) { category = "Избыточный вес"; calculator.style.backgroundColor = "#da5050"; // Ярко-красный -- есть лишний вес } else { category = "Ожирение"; calculator.style.backgroundColor = "#d31c1c"; // Тёмно-красный -- ожирение, серьёзное превышение }<p>Каждое условие сравнивает значение bmi с заданными порогами. Если оно подходит, присваивается текстовая интерпретация в переменную category, а фон калькулятора (.calculator) окрашивается в определённый цвет:</p>
103 if (bmi &lt; 18.5) { category = "Недостаточный вес"; calculator.style.backgroundColor = "#dd7979"; // Светло-красный -- недостаточный вес } else if (bmi &lt; 25) { category = "Нормальный вес"; calculator.style.backgroundColor = "#6ecf66"; // Зелёный -- всё в порядке } else if (bmi &lt; 30) { category = "Избыточный вес"; calculator.style.backgroundColor = "#da5050"; // Ярко-красный -- есть лишний вес } else { category = "Ожирение"; calculator.style.backgroundColor = "#d31c1c"; // Тёмно-красный -- ожирение, серьёзное превышение }<p>Каждое условие сравнивает значение bmi с заданными порогами. Если оно подходит, присваивается текстовая интерпретация в переменную category, а фон калькулятора (.calculator) окрашивается в определённый цвет:</p>
104 <ul><li>светло-красный - если вес недостаточный;</li>
104 <ul><li>светло-красный - если вес недостаточный;</li>
105 <li>зелёный - если вес в норме;</li>
105 <li>зелёный - если вес в норме;</li>
106 <li>ярко-красный - при избыточном весе;</li>
106 <li>ярко-красный - при избыточном весе;</li>
107 <li>тёмно-красный - при ожирении.</li>
107 <li>тёмно-красный - при ожирении.</li>
108 </ul><p>Вот итоговая функция:</p>
108 </ul><p>Вот итоговая функция:</p>
109 - function calculate() { let calculator = document.querySelector(".calculator"); let weightInput = document.querySelector(".weight"); let heightInput = document.querySelector(".height"); let bmiDiv = document.querySelector(".bmi"); let categoryDiv = document.querySelector(".category"); let weight = parseFloat(weightInput.value); let height = parseFloat(heightInput.value); if (isNaN(weight)) { bmiDiv.innerHTML = "Введите ваш вес!"; categoryDiv.innerHTML = ""; weightInput.focus(); return; } if (isNaN(height)) { bmiDiv.innerHTML = "Введите ваш рост!" categoryDiv.innerHTML = ""; heightInput.focus(); return; } let bmi = weight / ((height / 100) ** 2); let category = ""; if (bmi &lt; 18.5) { category = "Недостаточный вес"; calculator.style.backgroundColor = "#dd7979" } else if (bmi &lt; 25) { category = "Нормальный вес"; calculator.style.backgroundColor = "#6ecf66" } else if (bmi &lt; 30) { category = "Избыточный вес"; calculator.style.backgroundColor = "#da5050" } else { category = "Ожирение"; calculator.style.backgroundColor = "#d31c1c" } bmiDiv.innerHTML = "Ваш ИМТ: " + bmi.toFixed(2); categoryDiv.innerHTML = category; }<p>Функция calculate() работает корректно, но получилась довольно объёмной - она и получает данные, и проверяет их, и вычисляет ИМТ, и оформляет результат. Это не ошибка, но такой код сложнее читать и поддерживать. Поэтому мы разобьём его на отдельные небольшие функции - так будет проще ориентироваться и вносить изменения при необходимости.</p>
109 + function calculate() { let calculator = document.querySelector(".calculator"); let weightInput = document.querySelector(".weight"); let heightInput = document.querySelector(".height"); let bmiDiv = document.querySelector(".bmi"); let categoryDiv = document.querySelector(".category"); let weight = parseFloat(weightInput.value); let height = parseFloat(heightInput.value); if (isNaN(weight)) { bmiDiv.innerHTML = "Введите ваш вес!"; categoryDiv.innerHTML = ""; weightInput.focus(); return; } if (isNaN(height)) { bmiDiv.innerHTML = "Введите ваш рост!" categoryDiv.innerHTML = ""; heightInput.focus(); return; } let bmi = weight / ((height / 100) ** 2); let category = ""; if (bmi &lt; 18.5) { category = "Недостаточный вес"; calculator.style.backgroundColor = "#dd7979" } else if (bmi &lt; 25) { category = "Нормальный вес"; calculator.style.backgroundColor = "#6ecf66" } else if (bmi &lt; 30) { category = "Избыточный вес"; calculator.style.backgroundColor = "#da5050" } else { category = "Ожиреие"; calculator.style.backgroundColor = "#d31c1c" } bmiDiv.innerHTML = "Ваш ИМТ: " + bmi.toFixed(2); categoryDiv.innerHTML = category; }<p>Функция calculate() работает корректно, но получилась довольно объёмной - она и получает данные, и проверяет их, и вычисляет ИМТ, и оформляет результат. Это не ошибка, но такой код сложнее читать и поддерживать. Поэтому мы разобьём его на отдельные небольшие функции - так будет проще ориентироваться и вносить изменения при необходимости.</p>
110 <p>Эта функция находит поля ввода веса и роста, получает введённые значения и проверяет, что они корректны. Если что-то не так, показываем сообщение об ошибке и возвращаем null.</p>
110 <p>Эта функция находит поля ввода веса и роста, получает введённые значения и проверяет, что они корректны. Если что-то не так, показываем сообщение об ошибке и возвращаем null.</p>
111 function getUserData() { let weightInput = document.querySelector(".weight"); let heightInput = document.querySelector(".height"); let bmiDiv = document.querySelector(".bmi"); let categoryDiv = document.querySelector(".category"); let weight = parseFloat(weightInput.value); let height = parseFloat(heightInput.value); if (isNaN(weight)) { bmiDiv.innerHTML = "Введите ваш вес!"; categoryDiv.innerHTML = ""; weightInput.focus(); return null; } if (isNaN(height)) { bmiDiv.innerHTML = "Введите ваш рост!"; categoryDiv.innerHTML = ""; heightInput.focus(); return null; } return { weight, height }; }<p>Функция принимает вес и рост и возвращает результат по формуле расчёта ИМТ.</p>
111 function getUserData() { let weightInput = document.querySelector(".weight"); let heightInput = document.querySelector(".height"); let bmiDiv = document.querySelector(".bmi"); let categoryDiv = document.querySelector(".category"); let weight = parseFloat(weightInput.value); let height = parseFloat(heightInput.value); if (isNaN(weight)) { bmiDiv.innerHTML = "Введите ваш вес!"; categoryDiv.innerHTML = ""; weightInput.focus(); return null; } if (isNaN(height)) { bmiDiv.innerHTML = "Введите ваш рост!"; categoryDiv.innerHTML = ""; heightInput.focus(); return null; } return { weight, height }; }<p>Функция принимает вес и рост и возвращает результат по формуле расчёта ИМТ.</p>
112 function calculateBMI(weight, height) { return weight / ((height / 100) ** 2); }<p>В зависимости от значения ИМТ функция возвращает объект с категорией и цветом фона.</p>
112 function calculateBMI(weight, height) { return weight / ((height / 100) ** 2); }<p>В зависимости от значения ИМТ функция возвращает объект с категорией и цветом фона.</p>
113 function getCategory(bmi) { if (bmi &lt; 18.5) { return { category: "Недостаточный вес", color: "#dd7979" }; } else if (bmi &lt; 25) { return { category: "Нормальный вес", color: "#6ecf66" }; } else if (bmi &lt; 30) { return { category: "Избыточный вес", color: "#da5050" }; } else { return { category: "Ожирение", color: "#d31c1c" }; } }<p>Теперь основная функция стала проще и понятнее. Она просто вызывает вспомогательные функции, собирает результат и отображает его на странице.</p>
113 function getCategory(bmi) { if (bmi &lt; 18.5) { return { category: "Недостаточный вес", color: "#dd7979" }; } else if (bmi &lt; 25) { return { category: "Нормальный вес", color: "#6ecf66" }; } else if (bmi &lt; 30) { return { category: "Избыточный вес", color: "#da5050" }; } else { return { category: "Ожирение", color: "#d31c1c" }; } }<p>Теперь основная функция стала проще и понятнее. Она просто вызывает вспомогательные функции, собирает результат и отображает его на странице.</p>
114 function calculate() { const calculator = document.querySelector(".calculator"); const bmiDiv = document.querySelector(".bmi"); const categoryDiv = document.querySelector(".category"); const userData = getUserData(); if (!userData) return; const bmi = calculateBMI(userData.weight, userData.height); const result = getCategory(bmi); calculator.style.backgroundColor = result.color; bmiDiv.innerHTML = "Ваш ИМТ: " + bmi.toFixed(2); categoryDiv.innerHTML = result.category; }<p>Полный код будет выглядеть вот так:</p>
114 function calculate() { const calculator = document.querySelector(".calculator"); const bmiDiv = document.querySelector(".bmi"); const categoryDiv = document.querySelector(".category"); const userData = getUserData(); if (!userData) return; const bmi = calculateBMI(userData.weight, userData.height); const result = getCategory(bmi); calculator.style.backgroundColor = result.color; bmiDiv.innerHTML = "Ваш ИМТ: " + bmi.toFixed(2); categoryDiv.innerHTML = result.category; }<p>Полный код будет выглядеть вот так:</p>
115 // Получаем данные от пользователя и проверяем, что они корректны function getUserData() { let weightInput = document.querySelector(".weight"); let heightInput = document.querySelector(".height"); let bmiDiv = document.querySelector(".bmi"); let categoryDiv = document.querySelector(".category"); let weight = parseFloat(weightInput.value); let height = parseFloat(heightInput.value); if (isNaN(weight)) { bmiDiv.innerHTML = "Введите ваш вес!"; categoryDiv.innerHTML = ""; weightInput.focus(); return null; } if (isNaN(height)) { bmiDiv.innerHTML = "Введите ваш рост!"; categoryDiv.innerHTML = ""; heightInput.focus(); return null; } return { weight, height }; } // Вычисляем ИМТ по формуле: вес / (рост в метрах)^2 function calculateBMI(weight, height) { return weight / ((height / 100) ** 2); } // Определяем категорию по значению ИМТ и цвет фона function getCategory(bmi) { if (bmi &lt; 18.5) { return { category: "Недостаточный вес", color: "#dd7979" }; } else if (bmi &lt; 25) { return { category: "Нормальный вес", color: "#6ecf66" }; } else if (bmi &lt; 30) { return { category: "Избыточный вес", color: "#da5050" }; } else { return { category: "Ожирение", color: "#d31c1c" }; } } // Основная функция: запускает расчёт и выводит результат function calculate() { const calculator = document.querySelector(".calculator"); const bmiDiv = document.querySelector(".bmi"); const categoryDiv = document.querySelector(".category"); const userData = getUserData(); if (!userData) return; const bmi = calculateBMI(userData.weight, userData.height); const result = getCategory(bmi); calculator.style.backgroundColor = result.color; bmiDiv.innerHTML = "Ваш ИМТ: " + bmi.toFixed(2); categoryDiv.innerHTML = result.category; }<p>Теперь, когда код готов, можно протестировать калькулятор прямо во встроенном браузере через расширение<strong>Live Preview</strong>.</p>
115 // Получаем данные от пользователя и проверяем, что они корректны function getUserData() { let weightInput = document.querySelector(".weight"); let heightInput = document.querySelector(".height"); let bmiDiv = document.querySelector(".bmi"); let categoryDiv = document.querySelector(".category"); let weight = parseFloat(weightInput.value); let height = parseFloat(heightInput.value); if (isNaN(weight)) { bmiDiv.innerHTML = "Введите ваш вес!"; categoryDiv.innerHTML = ""; weightInput.focus(); return null; } if (isNaN(height)) { bmiDiv.innerHTML = "Введите ваш рост!"; categoryDiv.innerHTML = ""; heightInput.focus(); return null; } return { weight, height }; } // Вычисляем ИМТ по формуле: вес / (рост в метрах)^2 function calculateBMI(weight, height) { return weight / ((height / 100) ** 2); } // Определяем категорию по значению ИМТ и цвет фона function getCategory(bmi) { if (bmi &lt; 18.5) { return { category: "Недостаточный вес", color: "#dd7979" }; } else if (bmi &lt; 25) { return { category: "Нормальный вес", color: "#6ecf66" }; } else if (bmi &lt; 30) { return { category: "Избыточный вес", color: "#da5050" }; } else { return { category: "Ожирение", color: "#d31c1c" }; } } // Основная функция: запускает расчёт и выводит результат function calculate() { const calculator = document.querySelector(".calculator"); const bmiDiv = document.querySelector(".bmi"); const categoryDiv = document.querySelector(".category"); const userData = getUserData(); if (!userData) return; const bmi = calculateBMI(userData.weight, userData.height); const result = getCategory(bmi); calculator.style.backgroundColor = result.color; bmiDiv.innerHTML = "Ваш ИМТ: " + bmi.toFixed(2); categoryDiv.innerHTML = result.category; }<p>Теперь, когда код готов, можно протестировать калькулятор прямо во встроенном браузере через расширение<strong>Live Preview</strong>.</p>
116 <p>Начнём с самого простого случая:<strong>оставим оба поля пустыми</strong>и нажмём кнопку. Приложение сразу подскажет, что нужно ввести вес. Курсор автоматически переместится в поле ввода веса.</p>
116 <p>Начнём с самого простого случая:<strong>оставим оба поля пустыми</strong>и нажмём кнопку. Приложение сразу подскажет, что нужно ввести вес. Курсор автоматически переместится в поле ввода веса.</p>
117 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Сценарий второй:<strong>вводим вес</strong>,<strong>но поле с ростом оставляем пустым</strong>.<strong></strong></p>
117 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Сценарий второй:<strong>вводим вес</strong>,<strong>но поле с ростом оставляем пустым</strong>.<strong></strong></p>
118 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>После нажатия кнопки появится сообщение: "Введите ваш рост!". Курсор снова окажется в нужном поле.<strong>Вводим рост</strong>и жмём на кнопку:</p>
118 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>После нажатия кнопки появится сообщение: "Введите ваш рост!". Курсор снова окажется в нужном поле.<strong>Вводим рост</strong>и жмём на кнопку:</p>
119 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Теперь введём оба значения - вес и рост - и снова нажмём кнопку. Приложение рассчитает индекс массы тела и отобразит результат. Если значение ИМТ попадает в норму, фон калькулятора станет зелёным, а надпись сообщит, что вес нормальный.</p>
119 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>Теперь введём оба значения - вес и рост - и снова нажмём кнопку. Приложение рассчитает индекс массы тела и отобразит результат. Если значение ИМТ попадает в норму, фон калькулятора станет зелёным, а надпись сообщит, что вес нормальный.</p>
120 <p>Попробуем изменить данные, например<strong>уменьшим рост</strong>.</p>
120 <p>Попробуем изменить данные, например<strong>уменьшим рост</strong>.</p>
121 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>ИМТ станет выше, и фон сменится на красный. Текст подскажет, что у пользователя ожирение.</p>
121 <em>Скриншот: Visual Studio Code / Skillbox Media</em><p>ИМТ станет выше, и фон сменится на красный. Текст подскажет, что у пользователя ожирение.</p>
122 <p>Это значит, что калькулятор работает правильно: проверяет данные, рассчитывает ИМТ и корректно реагирует на результаты.</p>
122 <p>Это значит, что калькулятор работает правильно: проверяет данные, рассчитывает ИМТ и корректно реагирует на результаты.</p>
123 <p>Калькулятор можно запускать не только через Live Preview, но и напрямую в браузере. Для этого:</p>
123 <p>Калькулятор можно запускать не только через Live Preview, но и напрямую в браузере. Для этого:</p>
124 <ul><li>Найдите файл index.html в папке проекта.</li>
124 <ul><li>Найдите файл index.html в папке проекта.</li>
125 <li>Дважды кликните по нему - по умолчанию он откроется в браузере.</li>
125 <li>Дважды кликните по нему - по умолчанию он откроется в браузере.</li>
126 <li>Если открылся не браузер, а, например, текстовый редактор, кликните правой кнопкой по файлу и выберите "Открыть с помощью", затем укажите нужный браузер (например, Google Chrome или Firefox).</li>
126 <li>Если открылся не браузер, а, например, текстовый редактор, кликните правой кнопкой по файлу и выберите "Открыть с помощью", затем укажите нужный браузер (например, Google Chrome или Firefox).</li>
127 </ul><p>Вот так, например, выглядит работающий калькулятор в браузере Firefox:</p>
127 </ul><p>Вот так, например, выглядит работающий калькулятор в браузере Firefox:</p>
128 <em>Скриншот: Firefox / Skillbox Media</em><a>Курс с трудоустройством: "Профессия Фронтенд-разработчик + ИИ" Узнать о курсе</a>
128 <em>Скриншот: Firefox / Skillbox Media</em><a>Курс с трудоустройством: "Профессия Фронтенд-разработчик + ИИ" Узнать о курсе</a>