Лекция 1. Web и HTML

Веб-программирование

Лекция 1 Web и HTML

Веб-программирование · 16 лекций

Карен Баратянц

ОК · ТамТам
ВК · MAX

Всё, что разберём сегодня, работает в этих продуктах прямо сейчас

Сегодня за 90 минут

Куда мы идём весь семестр

🧱HTMLструктура
🎨CSSвнешний вид
⚙️JavaScriptповедение
⚛️Reactприложения

16 лекций · 7 лабораторных · свой проект в конце

Сегодня — фундамент

Правило курса

Первые лабораторные пишем руками, без конструкторов и генераторов.

Не из вредности: когда через месяц что-то сломается внутри React, чинить придётся именно на этом уровне.

Кто уже
писал HTML?

Поднимите руку

Часть 1 · 12 минут Откуда всё
началось

Memex → Server Components

В каком году
появился
первый сайт?

Считаем до трёх и все называем вслух

1945

Memex: веб придумали до компьютеров

Инженер Ванневар Буш описывает машину, где документы связаны перекрёстными ссылками, а читатель ходит по ним произвольными тропами.

До первого сайта оставалось 44 года.

Vannevar Bush, «As We May Think»

1965

Появляется слово «гипертекст»

Тед Нельсон придумывает термин и начинает проект Xanadu — всемирную библиотеку связанных документов.

Xanadu разрабатывали 54 года и выпустили в 2014-м. К тому времени веб уже победил.

1969

ARPANET: первое сообщение в сети

Два компьютера, 600 километров между ними. Оператор набирает слово LOGIN, чтобы войти на удалённую машину.

Система рухнула после второй буквы.

LO

Первое, что одна машина сказала другой

1983

Рождение интернета

ARPANET переходит на протоколы TCP/IP — правила, по которым разные сети научились понимать друг друга.

Интернет — это провода, адреса и правила доставки пакетов. Веб появится только через шесть лет и будет всего лишь одним из сервисов поверх него.

1989

Служебная записка, изменившая мир

Тим Бернерс-Ли, программист ЦЕРН, подаёт начальнику документ «Information Management: A Proposal» — как связать разрозненные документы лаборатории.

Начальник пишет на полях резолюцию.

Оригинал предложения на сайте W3C

«Vague but
exciting» Расплывчато, но интересно

1990

Первый браузер

Бернерс-Ли пишет WorldWideWeb на компьютере NeXT. Он умел не только показывать страницы, но и редактировать их.

Эту способность браузеры потеряли на тридцать лет.

Компьютер NeXT — первый в мире веб-сервер. На корпусе рукописная наклейка: «This machine is a server. DO NOT POWER IT DOWN!!»

1991

Первый сайт в истории

info.cern.ch — страница о том, что такое World Wide Web.

Ни картинок, ни стилей. Только заголовки, абзацы и ссылки — всё то, что мы разберём во второй половине пары.

Он до сих пор открывается. Сейчас проверим.

1993

Решение, определившее всё

ЦЕРН объявляет веб общественным достоянием: без патентов, без лицензий, бесплатно для всех и навсегда.

Конкурирующие сети — Gopher, AOL, Minitel — брали деньги за использование. Их больше нет.

1993

Mosaic: в вебе появились картинки

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

За два года число сайтов выросло с 130 до 23 500.

1995

Год, когда сложился современный фронтенд

JavaScriptБрендан Айк пишет язык за 10 дней. Мы живём с этим решением до сих пор.
CSSХокон Виум Ли предлагает вынести оформление из разметки.
Internet ExplorerMicrosoft выходит на рынок. Начинаются войны.

Браузерные войны, 1995–2001

Netscape изобретает

<blink>
  Мигающий текст
</blink>

Microsoft отвечает

<marquee>
  Бегущая строка
</marquee>

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

QR-код со ссылкой на видео «Хром победил: почему это плохо?» Чем всё кончилось 20 минут про то, как победил Chrome

«Лучше всего
смотреть в IE
при 800×600»

Тёмные века вёрстки

Таблицы вместо сеткиЛюбой макет собирали из <table>, вложенных друг в друга по пять уровней.
Flash вместо вебаЦелые сайты — один чёрный ящик с анимацией. Ни текста, ни ссылок, ни поиска.

Плюс счётчики посещений, гостевые книги и фоновая музыка.

2004

Бунт: появляется WHATWG

W3C ведёт веб в сторону строгого XHTML 2.0, несовместимого со всем написанным раньше. Apple, Mozilla и Opera с этим не согласны и создают свою группу.

Их принцип победил: не ломать существующие сайты. Сегодня HTML развивает именно WHATWG.

2005

AJAX и Web 2.0

Google Maps показывает: страница может подгружать данные без перезагрузки. Карту можно таскать мышкой.

Веб перестаёт быть библиотекой документов и становится платформой для приложений.

2008

Chrome и гонка скорости

Google выпускает браузер с движком V8, который компилирует JavaScript в машинный код. Скорость выполнения растёт в разы.

Позже тот же V8 вынесут из браузера и назовут Node.js — так JavaScript попадёт на сервер.

2010

Открытое письмо, убившее Flash

Стив Джобс публикует «Thoughts on Flash» и объявляет: на iPhone Flash не будет никогда. Причины — батарея, безопасность и закрытость технологии.

Adobe окончательно похоронила Flash 31 декабря 2020 года.

Steve Jobs, «Thoughts on Flash»

2014

HTML5 и конец версий

Выходит HTML5: видео, аудио, графика и семантические теги — без плагинов, силами самого браузера.

С 2019 года у HTML больше нет номеров версий. Это living standard — живой стандарт, который правят непрерывно.

И параллельно случилось это

📱2016Мобильный трафик впервые обгоняет десктопный. Верстать начинают с телефона.
⚛️2013+React, Vue, Svelte. Интерфейс собирают из компонентов, а не из страниц.
🚀СейчасWebAssembly, PWA, Server Components. Браузер — полноценная ОС.

Круг
замкнулся

Куда пришли за 35 лет

Начинали с

Сервер отдаёт готовый HTML, браузер показывает.

Ушли в

Сервер отдаёт пустую страницу, всё рисует JavaScript.

А сейчас Server Components возвращают отрисовку на сервер. Вернёмся к этому на лекции 15.

Веб победил, потому что
его отдали бесплатно
и не стали ломать
обратную совместимость

Часть 2 · 20 минут Что происходит
после Enter

DNS · HTTP · рендеринг

Сначала разведём два слова

Интернет

Физическая сеть: провода, спутники, маршрутизаторы, IP-адреса. Способ доставить пакет данных из точки А в точку Б.

Веб

Один из сервисов поверх интернета: страницы, ссылки, протокол HTTP. Рядом живут почта, торренты, игры, мессенджеры.

Интернету 1983 год, вебу — 1989. Это не синонимы.

Клиент
и сервер

Вся модель на одном слайде

💻КлиентВаш браузер. Просит ресурс и показывает результат.
🌐СетьДоставляет запрос туда и ответ обратно.
🖥️СерверПрограмма на чужом компьютере. Слушает и отвечает.

Разговор всегда начинает клиент. Сервер сам к вам не постучится.

Браузер — это не окно, это машина

Сетевой слойХодит по адресам, качает файлы, хранит кэш и куки.
ПарсерЧитает HTML и CSS, строит из них деревья объектов.
Движок отрисовкиСчитает геометрию и рисует пиксели.
Движок JavaScriptВыполняет код и меняет страницу на лету.

Сервер — это
просто программа,
которая слушает
порт

Шаг первый: найти адрес

Люди помнят слова, компьютеры работают с числами. За перевод отвечает DNS — телефонная книга интернета.

example.com  →  93.184.216.34

Ответ кэшируется на всех уровнях — от вашей операционной системы до провайдера. Поэтому второй раз сайт открывается быстрее.

URLUniform Resource Locator

Что стоит запомнить про URL

HTTPязык, на котором клиент говорит с сервером

HTTP — это просто текст

GET /catalog/books HTTP/1.1
Host: example.com
Accept: text/html
Accept-Language: ru-RU

Никакой магии: строка запроса, набор заголовков, пустая строка, иногда тело. Это можно набрать руками в консоли.

Методы: что мы хотим сделать

GETДай почитать. Ничего не меняет, можно повторять сколько угодно.
POSTНа, обработай. Создаёт или отправляет данные.
PUT / PATCHЗамени целиком или поправь кусочек.
DELETEУдали. Название говорит само за себя.

Коды ответа: первая цифра — главная

2xx — получилось200 OK, 201 Created
3xx — иди в другое место301 навсегда, 302 временно
4xx — виноват клиент404 нет страницы, 403 нельзя, 401 представьтесь
5xx — виноват сервер500 упал код, 503 перегружен

418I'm a teapot

Настоящий код из настоящего стандарта

RFC 2324 — первоапрельская шутка 1998 года про протокол управления кофейником. Код 418 означает: «я чайник, кофе сварить не могу».

В 2017-м его попытались убрать из стандарта. Поднялась такая волна возмущения, что код вернули.

RFC 2324, Hyper Text Coffee Pot Control Protocol

А что добавляет буква s?

HTTPS — тот же HTTP, но внутри шифрованного канала. Провайдер, сосед по Wi-Fi и админ сети видят только, с каким сайтом вы общаетесь, но не о чём.

Сегодня это не опция: без HTTPS браузер поставит в адресной строке предупреждение, а половина возможностей веба просто не включится.

Сколько всего
шагов делает
браузер после
Enter?

Ваши версии

Всё это — за пару сотен миллисекунд

И на каждом шаге что-то может пойти не так. Половина работы фронтендера — понимать, на каком именно шаге сломалось.

Инструмент для этого встроен в браузер: вкладка Network в DevTools. Откроем её прямо сейчас на любом сайте.

Три кита

Разделение ответственности

🧱HTMLЧто это такое.
Структура и смысл.
🎨CSSКак это выглядит.
Оформление.
⚙️JavaScriptЧто происходит.
Поведение.

Смешивать их в кучу можно — так делали в девяностых. Мы уже видели, чем это закончилось.

Без CSS сайт
некрасивый.
Без HTML сайта
просто нет

Часть 3 · 35 минут HTML

Из чего собрана любая страница

HTML —
это язык
программирования?

Кто считает, что да — поднимите руку

Нет.
И это не делает его проще

HTML — язык разметки

В нём нет переменных, условий и циклов. Он ничего не вычисляет. Он размечает текст: вот это заголовок, вот это список, а вот это ссылка.

HyperText Markup Language — язык разметки гипертекста

Разметка — это про смысл

Просто текст

Привет
Это абзац
Ссылка на MDN

Размеченный текст

<h1>Привет</h1>
<p>Это абзац</p>
<a href="...">Ссылка</a>

Слева машина видит буквы. Справа — понимает, что перед ней.

Минимальный документ

<!DOCTYPE html>
<html lang="ru">
  <head>
    <meta charset="utf-8">
    <title>Моя страница</title>
  </head>
  <body>
    <h1>Привет!</h1>
  </body>
</html>

Скелет, с которого начинается каждый файл.

Разберём по строчкам

<!DOCTYPE html>Говорит браузеру: работай по современным правилам. Без него включится режим совместимости с девяностыми.
lang="ru"На каком языке текст. Влияет на переносы, проверку орфографии и на то, каким голосом прочтёт скринридер.
<head>Служебная информация о странице. На экран не попадает.
<body>Всё, что человек увидит.

Что кладут в <head>

<meta charset="utf-8">
<meta name="viewport"
      content="width=device-width, initial-scale=1">
<title>Лекция 1 — Веб-программирование</title>
<meta name="description" content="Как устроен веб">
<link rel="stylesheet" href="style.css">

Ïðèâåò,
ìèð!

Вот так выглядит страница без <meta charset="utf-8">

Три обязательных мета-тега

charsetКодировка. Первой строкой в head — иначе браузер успеет прочитать заголовок неправильно.
viewportБез него телефон отрисует страницу шириной 980px. Адаптив умрёт, не начавшись.
titleВкладка, закладки и первая строка в выдаче поисковика.

Синтаксис

Анатомия элемента

<a href="page.html" title="Подсказка">Текст</a>
Открывающий тег<a> — начало элемента
Атрибутыhref, title — настройки, всегда в открывающем теге
Содержимоето, что между тегами
Закрывающий тег</a> — конец, со слэшем

Не всем нужна пара

Парные

<p>Абзац</p>
<h1>Заголовок</h1>
<div>Блок</div>

Одиночные

<img src="cat.jpg" alt="Кот">
<br>
<hr>
<input type="text">

Одиночным закрывать нечего — внутри них не бывает содержимого.

Вложенность: как матрёшки

Правильно

<p>
  Текст со
  <strong>
    <em>вложением</em>
  </strong>
</p>

Нельзя

<p>
  Текст со
  <strong>
    <em>вложением
  </strong>
  </em>
</p>

Кто открылся последним — закрывается первым.

Найдите три ошибки

<div class=card>
  <h2>Заголовок</h3>
  <p>Текст карточки</p>
  <img src="pic.jpg">
</div>

Полминуты, обсуждаем вслух

Проверяем

<div class=card>            ← 1. значение без кавычек
  <h2>Заголовок</h3>        ← 2. открыли h2, закрыли h3
  <p>Текст карточки</p>
  <img src="pic.jpg">        ← 3. нет alt
</div>
Коварство в том, что браузер это проглотит и что-то покажет. HTML не падает с ошибкой — он молча чинит разметку как умеет. Поэтому ошибки живут в проектах годами.

Комментарии

<!-- Это комментарий, на странице его не видно -->

<!-- <p>Временно отключённый блок</p> -->

Но помните: «не видно» ≠ «нет». Любой посетитель откроет исходный код страницы и прочитает всё, что вы там написали.

DOM

Почему это важно прямо сейчас

DOM — Document Object Model — то самое дерево. Именно с ним будет работать весь ваш JavaScript и вся библиотека React.

Кривая разметка → кривое дерево → боль на всех следующих пятнадцати лекциях.

Текст

Заголовки: шесть уровней

<h1>Название страницы</h1>
  <h2>Крупный раздел</h2>
    <h3>Подраздел</h3>
      <h4>Совсем мелкий</h4>

h1 — один на страницу. Уровни идут по порядку, без перепрыгивания через ступеньку.

Заголовок — это структура, а не размер

По внешнему виду

<h4>Главный заголовок</h4>
<h1>Мелкая подпись</h1>

По смыслу

<h1>Главный заголовок</h1>
<p class="note">Мелкая подпись</p>
Размер задаёт CSS. Заголовки строят оглавление документа — по нему навигируется скринридер и по нему индексирует поисковик.

Абзацы и переносы

Так не надо

Первая мысль<br><br>
Вторая мысль<br><br>
Третья мысль

Так надо

<p>Первая мысль</p>
<p>Вторая мысль</p>
<p>Третья мысль</p>

<br> уместен там, где перенос — часть содержимого: в стихах, адресе, телефоне. Расстояние между абзацами — работа CSS.

Списки

Порядок не важен

<ul>
  <li>HTML</li>
  <li>CSS</li>
  <li>JavaScript</li>
</ul>

Порядок важен

<ol>
  <li>Скачать</li>
  <li>Установить</li>
  <li>Запустить</li>
</ol>

Прямо внутри списка может лежать только <li>. А вот внутри <li> — что угодно, включая другой список.

Цитаты, код и прочий текст

<blockquote>
  <p>Vague but exciting</p>
</blockquote>

<p>Функция <code>fetch()</code> делает запрос.</p>

<p>Нажмите <kbd>Ctrl</kbd> + <kbd>S</kbd></p>

<pre>текст, где важны
   пробелы и переносы</pre>

Выглядят одинаково.
Значат разное

Жирный жирному рознь

🙅
<b> — просто нарисуй жирнее, смысла никакого
👉
<strong> — это важно, обрати внимание

То же самое с <i> и <em>: первое — просто наклон, второе — смысловое ударение.

Почему это не придирка

Скринридер выделяет strong и em голосом — меняет интонацию, как это сделал бы человек. b и i он произносит ровно.

Правило простое: сначала спросите «что это значит», и только потом — «как это должно выглядеть».

Ссылки

Тег, на котором держится весь веб

<a href="https://developer.mozilla.org">
  Документация MDN
</a>

Без href это не ссылка, а просто текст. Именно связи между документами превратили набор файлов во всемирную паутину.

Куда может вести href

<a href="https://example.com/page">абсолютный адрес</a>

<a href="/catalog/books">от корня сайта</a>

<a href="about.html">рядом с этим файлом</a>

<a href="../index.html">на папку выше</a>

<a href="#contacts">к якорю на этой же странице</a>

<a href="mailto:kaf@univer.by">написать письмо</a>

Открыть в новой вкладке

<a href="https://example.com"
   target="_blank"
   rel="noopener">Внешний сайт</a>

rel="noopener" закрывает старую дыру в безопасности, когда открытая страница получала доступ к вашей. Современные браузеры это чинят сами, но в чужом коде вы увидите атрибут часто.

Картинки

Два обязательных атрибута

<img src="cat.jpg" alt="Рыжий кот спит на клавиатуре">
srcОткуда взять файл
altЧто на картинке — словами

Зачем alt, если картинка видна

Картинка не загрузиласьПлохая связь, битая ссылка — пользователь увидит текст вместо пустого прямоугольника.
Человек не видит экранаСкринридер прочитает alt вслух. Это единственный способ узнать, что там было.
ПоисковикРобот не смотрит картинки — он читает alt.
Это требование законаВо многих странах доступность сайтов обязательна.

«изображение
подчёркивание
2 8 4 7 точка
джей пи гэ»

Что слышит человек, когда вы забыли alt

Как писать alt

Бесполезно

alt="картинка"
alt="фото"
alt="IMG_2847.jpg"

Полезно

alt="График роста
     посещаемости
     за 2026 год"
А если картинка декоративная — узор, разделитель, фон — пишите alt="". Пустой alt говорит скринридеру: «пропусти, здесь нет информации». Это правильно, а вот отсутствие атрибута — ошибка.

Картинка с подписью

<figure>
  <img src="scheme.png" alt="Схема клиент-сервер">
  <figcaption>
    Рис. 1. Как браузер общается с сервером
  </figcaption>
</figure>

figure связывает изображение и подпись в одно целое. Работает не только с картинками — ещё с кодом, схемами и таблицами.

Таблицы — для данных

<table>
  <caption>Расписание лабораторных</caption>
  <thead>
    <tr><th>Номер</th><th>Тема</th></tr>
  </thead>
  <tbody>
    <tr><td>ЛР 1</td><td>HTML</td></tr>
  </tbody>
</table>

th — заголовок ячейки, td — обычная.

Семантика

Тег должен называть то, что внутри

У браузера есть <div> — универсальная безымянная коробка. В неё можно положить что угодно, и всё будет работать.

А есть теги, которые сообщают смысл: это шапка, это навигация, это главное содержимое.

Карта обычной страницы

<header>шапка: логотип, название
<nav>блок навигации
<main>главное содержимое, один на страницу
<article>самостоятельный кусок: статья, товар, пост
<aside>сбоку и по касательству к теме
<footer>подвал: копирайт, контакты

Одна и та же страница, два способа

div-суп

<div class="header">
  <div class="nav">…</div>
</div>
<div class="main">
  <div class="article">…</div>
</div>
<div class="footer">…</div>

Семантика

<header>
  <nav>…</nav>
</header>
<main>
  <article>…</article>
</main>
<footer>…</footer>

На экране — ровно одно и то же. Разница только внутри.

Классы читает
только CSS.
Теги читают все

Что даёт семантика

ДоступностьСкринридер умеет прыгать сразу к main, минуя меню. С div-супом такой навигации нет.
ПоискРобот понимает, где содержимое статьи, а где боковое меню. Это влияет на выдачу.
Читаемость кодаЧерез полгода вы откроете свой проект. <footer> понятнее, чем <div class="f2">.
Режим чтенияКнопка «читать без рекламы» в браузере работает именно на семантике.

Когда <div>
всё-таки
уместен?

Ваши варианты

<div> — не враг

Он нужен, когда элементы надо сгруппировать только ради вёрстки, и никакого смысла в этой группе нет.

Правило: сначала ищем подходящий смысловой тег. Не нашли — берём div и спокойно живём дальше.

А теперь
машина времени

Что здесь по-настоящему работает

<marquee>Бегущая строка Microsoft. Устарела, но браузеры её держат до сих пор.
<center>, <font>Вид прямо в разметке. Работают, но использовать нельзя — есть CSS.
<blink>Единственный, который пришлось подделать: его убрали окончательно.
Вёрстка таблицейРаботает. Ломает доступность и мобильную вёрстку.

Веб не ломает
обратную совместимость.
Поэтому сайт 1998 года
откроется и сегодня

Как проверить свою разметку

validator.w3.org — официальный валидатор. Загружаете файл или адрес, получаете список ошибок.

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

Перед сдачей ЛР 1 прогоните страницу через валидатор.

Часть 4 · 13 минут Формы

Как страница разговаривает с сервером

Всё, что вы когда-либо отправляли в интернет

Логин, поисковый запрос, комментарий, заказ пиццы, заявление в деканат — всё это ушло через <form>.

Формы — единственный способ отправить данные на сервер, не написав ни строчки JavaScript.

Каркас формы

<form action="/apply" method="post">
  <label for="name">Имя</label>
  <input type="text" id="name" name="name">

  <button type="submit">Отправить</button>
</form>
actionКуда отправлять
methodКаким способом

GET или POST

GET

Данные в адресе после ?. Видно в строке браузера, попадает в историю, длина ограничена.

Поиск, фильтры, сортировка — то, чем можно поделиться ссылкой.

POST

Данные в теле запроса. В адресе не видно, размер не ограничен.

Пароли, файлы, всё, что меняет данные на сервере.

Если пароль виден
в адресной строке —
кто-то выбрал GET

Зоопарк input type

textобычная строка
passwordточки вместо букв
emailклавиатура с @ на телефоне
numberтолько цифры, со стрелочками
dateкалендарь от браузера
rangeползунок
colorпалитра
checkboxвыбор нескольких
radioвыбор одного

Правильный type — это бесплатно

Поставили type="email" — на телефоне появилась клавиатура с собачкой, а браузер сам проверит формат.

Поставили type="date" — получили календарь, который кто-то уже написал и отладил за вас.

Одно слово в атрибуте экономит сотню строк JavaScript.

Про <label>

Подпись, а не текст рядом

Просто текст

<p>Имя</p>
<input type="text">

Связанная подпись

<label for="name">Имя</label>
<input type="text" id="name">
Что даёт связка: клик по слову «Имя» ставит курсор в поле — особенно важно для мелких галочек на телефоне. И скринридер произносит подпись, когда пользователь доходит до поля. Без неё он скажет только «поле ввода».

Остальные элементы

<textarea name="about">Многострочный текст</textarea>

<select name="year">
  <option value="3" selected>3 курс</option>
</select>

<fieldset>
  <legend>Что уже знаете</legend>
  <label>
    <input type="checkbox" name="skills" value="html">
    HTML
  </label>
</fieldset>

Классика:
«почему страница
перезагрузилась?»

Коварный type у кнопки

Внутри формы

<button>Показать</button>

По умолчанию это type="submit". Форма отправится, страница перезагрузится.

Если это не отправка

<button type="button">Показать</button>

Теперь кнопка просто кнопка.

На этом спотыкаются все. Считайте, что вас предупредили.

Нет name
нет данных

Атрибут, без которого поле бесполезно

id нужен, чтобы связать поле с label и найти его из CSS и JavaScript.

name — это имя, под которым значение приедет на сервер. Поле без name форма просто не отправит.

name="email"  →  сервер получит email=ivan@univer.by

Валидация без единой строчки кода

<input type="email" required>

<input type="text" minlength="2" maxlength="30">

<input type="number" min="1" max="4">

<input type="text" pattern="[А-Яа-я]{2}-\d{2}"
       title="Например: ПО-31">

Браузер сам покажет подсказку. Но на сервере проверяйте ещё раз: эту проверку обходят за десять секунд через DevTools.

Осталось 5 минут Что дальше

Чем работать

VS CodeРедактор. Бесплатный, ставится за минуту.
Live ServerРасширение: страница сама обновляется при сохранении файла.
PrettierФорматирует код за вас. Больше не будет споров про отступы.
DevToolsУже встроены в браузер. Клавиша F12.

Emmet: экономия половины нажатий

Печатаете

ul>li*3

Получаете

<ul>
  <li></li>
  <li></li>
  <li></li>
</ul>

Уже встроен в VS Code. Наберите ! и нажмите Tab — получите весь скелет документа.

Лабораторная 1

Никакого CSS — он будет на следующей паре.

Что почитать

developer.mozilla.orgMDN — главный справочник. Открывайте по любому непонятному тегу.
web.devСтатьи от команды Chrome про то, как делать хорошо.
doka.guideДока — справочник по фронтенду на русском, живым языком и с примерами.
validator.w3.orgПроверка разметки перед сдачей.

Что мы сегодня узнали

Лекция 2:
наконец-то
сделаем красиво

Основы CSS: каскад, наследование, специфичность, селекторы

Вопросы?

Слайды и все демо — в репозитории курса