🔍 Начните печатать, чтобы искать по книге или перейти к нужной странице по номеру
Удобно листать не только прокруткой, но и клавишами‑стрелками:
Эта книга — пошаговая инструкция по вёрстке сайтов на языках ХТМЛ и ЦСС. Вы узнаете не только как сверстать сайт, но и как опубликовать его в интернете, настроить красивый шаринг в соцсети и подключить системы аналитики.
Отдельный раздел книги посвящён работе с верстальщиком: как ставить задачи, получать предсказуемый результат и правильно принимать и внедрять вёрстку.
Знакомство с ХТМЛ и ЦСС
Модули
Расстановка
Страницы
Спецэффекты
Контроль качества
Публикация
Как работать с верстальщиком
Эта книга — пошаговая инструкция по вёрстке сайтов на языках ХТМЛ и ЦСС. Вы узнаете не только как сверстать сайт, но и как опубликовать его в интернете, настроить красивый шаринг в соцсети и подключить системы аналитики.
Отдельный раздел книги посвящён работе с верстальщиком: как ставить задачи, получать предсказуемый результат и правильно принимать и внедрять вёрстку.
Знакомство с ХТМЛ и ЦСС
Модули
Расстановка
Страницы
Спецэффекты
Контроль качества
Публикация
Как работать с верстальщиком
Самая распространённая структура интерактивной статьи — «бутерброд», в котором модули расположены слоями, или этажами, друг под другом.
Обычно для статьи достаточно двух видов слоёв: с ограниченной шириной для текста и на всю ширину для обложки, графики и других перебивок. Слои — универсальные контейнеры для чего угодно: картинок, текста и даже других слоёв.
.layer {
max-width: 768px;
margin: 0 auto;
}
.layer.fullWidth {
max-width: none;
}
.layer + .layer {
margin-top: 72px;
}
<div class="layer fullWidth">
<img src="cover.jpg" alt="…">
</div>
<div class="layer">
<p>…</p>
<p>…</p>
</div>
<div class="layer">
<figure class="image">
<img src="…" alt="…">
<figcaption>…</figcaption>
</figure>
</div>
<div class="layer">
<p>…</p>
</div>
Иллюстрация с подписью
Самая распространённая структура интерактивной статьи — «бутерброд», в котором модули расположены слоями, или этажами, друг под другом.
Обычно для статьи достаточно двух видов слоёв: с ограниченной шириной для текста и на всю ширину для обложки, графики и других перебивок. Слои — универсальные контейнеры для чего угодно: картинок, текста и даже других слоёв.
.layer {
max-width: 768px;
margin: 0 auto;
}
.layer.fullWidth {
max-width: none;
}
.layer + .layer {
margin-top: 72px;
}
<div class="layer fullWidth">
<img src="cover.jpg" alt="…">
</div>
<div class="layer">
<p>…</p>
<p>…</p>
</div>
<div class="layer">
<figure class="image">
<img src="…" alt="…">
<figcaption>…</figcaption>
</figure>
</div>
<div class="layer">
<p>…</p>
</div>
Иллюстрация с подписью
Фоторама — это галерея фотографий с одной крупной фотографией и возможностью пролистывания и выбора других фотографий по превьюшкам.
В ХТМЛ нет специальных тегов для вёрстки фоторамы, для этого используют Яваскрипт‑библиотеки.
Советуем библиотеку «Фоторама» Артёма Поликарпова. Она подключается в одно движение, аккуратно выглядит, умеет открывать фото на весь экран и поддерживает видео.
Скачайте архив с сайта «Фоторамы», распакуйте файлы рядом с вашей вёрсткой и добавьте код в head:
<!-- Вспомогательные библиотеки, подключаем из интернета, но можно скачать и тоже держать рядом с вёрсткой -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link href="./fotorama.css" rel="stylesheet">
<script src="./fotorama.js">
</script>
Затем в нужном месте страницы оберните картинки в элемент с классом fotorama. Атрибутами по желанию включите информативные превьюшки и возможность разворачивать фото на весь экран. Инструкции на сайте помогут настроить дизайн и поведение «Фоторамы».
<div class="fotorama"
data-allowfullscreen="true"
data-nav="thumbs"
data-thumbwidth="160px"
data-thumbheight="90px">
<img src="./house-1.jpg">
<img src="./house-2.jpg">
<img src="./house-3.jpg">
<img src="./house-4.jpg">
<img src="./house-5.jpg">
</div>
Фоторама — это галерея фотографий с одной крупной фотографией и возможностью пролистывания и выбора других фотографий по превьюшкам.
В ХТМЛ нет специальных тегов для вёрстки фоторамы, для этого используют Яваскрипт‑библиотеки.
Советуем библиотеку «Фоторама» Артёма Поликарпова. Она подключается в одно движение, аккуратно выглядит, умеет открывать фото на весь экран и поддерживает видео.
Скачайте архив с сайта «Фоторамы», распакуйте файлы рядом с вашей вёрсткой и добавьте код в head:
<!-- Вспомогательные библиотеки, подключаем из интернета, но можно скачать и тоже держать рядом с вёрсткой -->
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<link href="./fotorama.css" rel="stylesheet">
<script src="./fotorama.js">
</script>
Затем в нужном месте страницы оберните картинки в элемент с классом fotorama. Атрибутами по желанию включите информативные превьюшки и возможность разворачивать фото на весь экран. Инструкции на сайте помогут настроить дизайн и поведение «Фоторамы».
<div class="fotorama"
data-allowfullscreen="true"
data-nav="thumbs"
data-thumbwidth="160px"
data-thumbheight="90px">
<img src="./house-1.jpg">
<img src="./house-2.jpg">
<img src="./house-3.jpg">
<img src="./house-4.jpg">
<img src="./house-5.jpg">
</div>
Плееры видеохостингов умеют запоминать позицию, настраивать субтитры и скорость просмотра
Самый простой способ добавить видео на страницу — загрузить на видеохостинг (Ютуб, ВК, Вимео) и встроить оттуда.
Так вы не заморачиваетесь с хранением видео, получаете продвинутый плеер, а главное — потоковое воспроизведение: видео можно начать смотреть с любого места, не дожидаясь полной загрузки. Это особенно полезно для длинных лекций или новостей.
Минус видеохостингов — видео хранится не у вас. Хостинг может вдруг закрыться или удалить ваши видео, храните резервные копии на чёрный день.
Принцип встраивания похож у разных хостингов: нажмите «Поделиться» на странице видео и найдите код встраивания, обычно это тег iframe. Тег iframe встраивает на страницу кусочек другого сайта, в нашем случае — видеоплеер:
<!-- Уберите из кода встраивания атрибуты width и height, если хотите задать размеры в ЦСС -->
<iframe class="vkVideo" src="https://vk.com/video_ext.php?oid=-113157690&id=456239826&hd=2" width="853" height="480" allow="autoplay; encrypted-media; fullscreen; picture-in-picture; screen-wake-lock;" frameborder="0" allowfullscreen></iframe>
.vkVideo {
aspect-ratio: 16/9;
}
Плееры видеохостингов умеют запоминать позицию, настраивать субтитры и скорость просмотра
Самый простой способ добавить видео на страницу — загрузить на видеохостинг (Ютуб, ВК, Вимео) и встроить оттуда.
Так вы не заморачиваетесь с хранением видео, получаете продвинутый плеер, а главное — потоковое воспроизведение: видео можно начать смотреть с любого места, не дожидаясь полной загрузки. Это особенно полезно для длинных лекций или новостей.
Минус видеохостингов — видео хранится не у вас. Хостинг может вдруг закрыться или удалить ваши видео, храните резервные копии на чёрный день.
Принцип встраивания похож у разных хостингов: нажмите «Поделиться» на странице видео и найдите код встраивания, обычно это тег iframe. Тег iframe встраивает на страницу кусочек другого сайта, в нашем случае — видеоплеер:
<!-- Уберите из кода встраивания атрибуты width и height, если хотите задать размеры в ЦСС -->
<iframe class="vkVideo" src="https://vk.com/video_ext.php?oid=-113157690&id=456239826&hd=2" width="853" height="480" allow="autoplay; encrypted-media; fullscreen; picture-in-picture; screen-wake-lock;" frameborder="0" allowfullscreen></iframe>
.vkVideo {
aspect-ratio: 16/9;
}
Видеофайл можно разместить в файлах вашего сайта и подключать вручную тегом video:
<!-- poster — путь до обложки, которая будет видна, пока видео не включат, controls — включает элементы управления плеером -->
<video
class="video"
src="./videos/rickroll.mp4"
poster="./videos/rickroll-preview.jpg"
controls
></video>
.video {
width: 100%;
aspect-ratio: 4/3.15;
/* Заклинание для масштабирования видео под любые размеры тега */
object-fit: cover;
object-position: center;
}
С ручным подключением много заморочек.
Хотя базовый пример кода выглядит просто, он плохо подойдёт для сайтов с большой посещаемостью. По‑хорошему, видеофайлы надо особым образом оптимизировать и готовить в нескольких форматах, писать много дополнительного кода, чтобы видео не тормозило и стабильно работало на разных устройствах и браузерах.
При проигрывании из файла не обеспечить потоковое воспроизведение без программирования или подключения сервисов стриминга — не получится быстро начать просмотр с любого места. В стандартном плеере минимум функций. В таком «сыром» виде, это не слишком удобно зрителю.
Ещё видеофайлы придётся хранить в файлах сайта на сервере. Место на сервере платное, хранение тяжёлых файлов влетит в копеечку.
Ручное подключение подойдёт для крошечных видео, вроде несложного анимированного фона. Или когда критически важно хранить видео у себя и всегда иметь к нему доступ, и вы готовы ради этого заморочиться или закрыть глаза на перечисленные недостатки.
Видеофайл можно разместить в файлах вашего сайта и подключать вручную тегом video:
<!-- poster — путь до обложки, которая будет видна, пока видео не включат, controls — включает элементы управления плеером -->
<video
class="video"
src="./videos/rickroll.mp4"
poster="./videos/rickroll-preview.jpg"
controls
></video>
.video {
width: 100%;
aspect-ratio: 4/3.15;
/* Заклинание для масштабирования видео под любые размеры тега */
object-fit: cover;
object-position: center;
}
С ручным подключением много заморочек.
Хотя базовый пример кода выглядит просто, он плохо подойдёт для сайтов с большой посещаемостью. По‑хорошему, видеофайлы надо особым образом оптимизировать и готовить в нескольких форматах, писать много дополнительного кода, чтобы видео не тормозило и стабильно работало на разных устройствах и браузерах.
При проигрывании из файла не обеспечить потоковое воспроизведение без программирования или подключения сервисов стриминга — не получится быстро начать просмотр с любого места. В стандартном плеере минимум функций. В таком «сыром» виде, это не слишком удобно зрителю.
Ещё видеофайлы придётся хранить в файлах сайта на сервере. Место на сервере платное, хранение тяжёлых файлов влетит в копеечку.
Ручное подключение подойдёт для крошечных видео, вроде несложного анимированного фона. Или когда критически важно хранить видео у себя и всегда иметь к нему доступ, и вы готовы ради этого заморочиться или закрыть глаза на перечисленные недостатки.
Небольшие зацикленные видео часто используют как декорацию или интересное превью.
Включите автовоспроизведение атрибутом autoplay. Он работает только в связке с muted, убирающим звук — так браузеры защищают читателей от назойливых видео. Атрибут loop зациклит видео. Затем позиционирйте, в зависимости от задачи.
Настроить подобное поведение можно и для айфрейма видеохостинга, актуальные инструкции по атрибутам лучше поискать в интернете, они иногда меняются.
<div class="hero">
<!-- Видео должно весить до пары мегабайт, чтобы не тормозить загрузку страницы -->
<video class="hero__bg" src="./nggyu.mp4" autoplay muted loop></video>
<div class="heroText">
<h1>Рикрол</h1>
<p>…</p>
</div>
</div>
.hero {
position: relative;
aspect-ratio: 16/8;
}
.heroBg {
position: absolute;
z-index: 0;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
/* Видео лучше отключить кликабельность */
pointer-events: none;
}
.heroText {
position: absolute;
z-index: 2;
left: 50%;
bottom: 10%;
translate: -50% 0;
}
Позиционирование
Небольшие зацикленные видео часто используют как декорацию или интересное превью.
Включите автовоспроизведение атрибутом autoplay. Он работает только в связке с muted, убирающим звук — так браузеры защищают читателей от назойливых видео. Атрибут loop зациклит видео. Затем позиционирйте, в зависимости от задачи.
Настроить подобное поведение можно и для айфрейма видеохостинга, актуальные инструкции по атрибутам лучше поискать в интернете, они иногда меняются.
<div class="hero">
<!-- Видео должно весить до пары мегабайт, чтобы не тормозить загрузку страницы -->
<video class="hero__bg" src="./nggyu.mp4" autoplay muted loop></video>
<div class="heroText">
<h1>Рикрол</h1>
<p>…</p>
</div>
</div>
.hero {
position: relative;
aspect-ratio: 16/8;
}
.heroBg {
position: absolute;
z-index: 0;
inset: 0;
width: 100%;
height: 100%;
object-fit: cover;
/* Видео лучше отключить кликабельность */
pointer-events: none;
}
.heroText {
position: absolute;
z-index: 2;
left: 50%;
bottom: 10%;
translate: -50% 0;
}
Позиционирование