🔍 Начните печатать, чтобы искать по книге или перейти к нужной странице по номеру
Удобно листать не только прокруткой, но и клавишами‑стрелками:
Эта книга — пошаговая инструкция по вёрстке сайтов на языках ХТМЛ и ЦСС. Вы узнаете не только как сверстать сайт, но и как опубликовать его в интернете, настроить красивый шаринг в соцсети и подключить системы аналитики.
Отдельный раздел книги посвящён работе с верстальщиком: как ставить задачи, получать предсказуемый результат и правильно принимать и внедрять вёрстку.
Знакомство с ХТМЛ и ЦСС
Модули
Расстановка
Страницы
Спецэффекты
Контроль качества
Публикация
Как работать с верстальщиком
Эта книга — пошаговая инструкция по вёрстке сайтов на языках ХТМЛ и ЦСС. Вы узнаете не только как сверстать сайт, но и как опубликовать его в интернете, настроить красивый шаринг в соцсети и подключить системы аналитики.
Отдельный раздел книги посвящён работе с верстальщиком: как ставить задачи, получать предсказуемый результат и правильно принимать и внедрять вёрстку.
Знакомство с ХТМЛ и ЦСС
Модули
Расстановка
Страницы
Спецэффекты
Контроль качества
Публикация
Как работать с верстальщиком
Переключатель — вариант группы радиокнопок. В ХТМЛ нет отдельного тега для переключателя, мы советуем верстать его с помощью трюка с input type="radio".
Трюк основан на строгой структуре вёрстки. Используем тег label, внутри инпут‑радио и див — кнопка переключателя. Тег label по клику активирует находящийся внутри инпут, подробнее мы разберём это дальше в книге. А пока в ЦСС спрячем сами инпуты и будем подкрашивать ближайшего соседа активного инпута.
Спрятанные инпуты не перестают работать, клик по обёртке label будет их активировать и применять стили для дива‑соседа.
<div class="switch">
<label>
<input type="radio" name="transport" checked>
<div class="switch__item">Самолётом</div>
</label>
<label>
<input type="radio" name="transport">
<div class="switch__item">Поездом</div>
</label>
<label>
<input type="radio" name="transport">
<div class="switch__item">Машиной</div>
</label>
</div>
.switch {
display: flex; /* Ставим элементы в ряд */
}
.switch__item {
padding: 5px 10px;
}
.switch input {
display: none; /* Спрятанный инпут не перестаёт работать */
}
/* Применяем стили для соседа «чекнутого» инпута */
.switch input:checked + .switch__item {
background: #00aff0;
color: white;
}
Флексбоксы
Переключатель — вариант группы радиокнопок. В ХТМЛ нет отдельного тега для переключателя, мы советуем верстать его с помощью трюка с input type="radio".
Трюк основан на строгой структуре вёрстки. Используем тег label, внутри инпут‑радио и див — кнопка переключателя. Тег label по клику активирует находящийся внутри инпут, подробнее мы разберём это дальше в книге. А пока в ЦСС спрячем сами инпуты и будем подкрашивать ближайшего соседа активного инпута.
Спрятанные инпуты не перестают работать, клик по обёртке label будет их активировать и применять стили для дива‑соседа.
<div class="switch">
<label>
<input type="radio" name="transport" checked>
<div class="switch__item">Самолётом</div>
</label>
<label>
<input type="radio" name="transport">
<div class="switch__item">Поездом</div>
</label>
<label>
<input type="radio" name="transport">
<div class="switch__item">Машиной</div>
</label>
</div>
.switch {
display: flex; /* Ставим элементы в ряд */
}
.switch__item {
padding: 5px 10px;
}
.switch input {
display: none; /* Спрятанный инпут не перестаёт работать */
}
/* Применяем стили для соседа «чекнутого» инпута */
.switch input:checked + .switch__item {
background: #00aff0;
color: white;
}
Флексбоксы
Как и группа радиокнопок, выпадющий список используют для выбора объекта или уточнения действия.
Разработчики называют выпадающий список селектом, потому что его верстают тегом select. Внутрь тега помещают варианты — option, атрибут selected выбирает вариант по умолчанию. Варианты можно объединять в группы — optgroup.
Внешний вид селекта можно менять через ЦСС, но на внешний вид вариантов повлиять нельзя — он будет зависеть от операционной системы посетителя страницы.
Радиокнопки
<p>Доставка</p>
<select>
<option selected>Курьером магазина</option>
<optgroup label="Почтой России">
<option>В отделение почты</option>
<option>В постамат</option>
<option>Курьером почты</option>
</optgroup>
<optgroup label="СДЭКом">
<option>В пункт выдачи СДЭК</option>
<option>Курьером СДЭК</option>
</optgroup>
<select>
Доставка
Как и группа радиокнопок, выпадющий список используют для выбора объекта или уточнения действия.
Разработчики называют выпадающий список селектом, потому что его верстают тегом select. Внутрь тега помещают варианты — option, атрибут selected выбирает вариант по умолчанию. Варианты можно объединять в группы — optgroup.
Внешний вид селекта можно менять через ЦСС, но на внешний вид вариантов повлиять нельзя — он будет зависеть от операционной системы посетителя страницы.
Радиокнопки
<p>Доставка</p>
<select>
<option selected>Курьером магазина</option>
<optgroup label="Почтой России">
<option>В отделение почты</option>
<option>В постамат</option>
<option>Курьером почты</option>
</optgroup>
<optgroup label="СДЭКом">
<option>В пункт выдачи СДЭК</option>
<option>Курьером СДЭК</option>
</optgroup>
<select>
Доставка
Кнопки можно встретить в разных частях страницы, необязательно в формах. В шапке сайта может быть кнопка переключения темы оформления, а в карточке товара кнопка добавления в корзину или вызова всплывашки с таблицей размеров.
Кнопку верстают тегом button, стандартные стили тега зависят от браузера и операционной системы.
<button>Оплатить<button>
При стилизации не забудьте отключить или изменить стандартные цвета и обводку, чтобы они не конфликтовали с вашими стилями.
<button>Оплатить<button>
button {
border: none; /* Убираем стандартную обводку */
font-size: 20px;
line-height: 36px;
font-family: Bureausans, Arial, sans-serif;
background: #2aad05;
color: #fff;
padding: 0 18px;
border-radius: 3px;
}
Внутрь кнопки можно поместить другие теги. Например, иконку:
<button>
Подарить
<img src="gift.svg">
<button>button {
border: none;
/* Убираем стандартную обводку */
font-size: 20px;
line-height: 36px;
font-family: Bureausans, Arial, sans-serif;
background: #2aad05;
color: #fff;
padding: 0 18px;
border-radius: 3px;
}
button img {
width: 16px;
margin-left: 5px;
}
Чтобы привязать действие к нажатию кнопки, нужно писать код на Яваскрипте. Это выходит за рамки книги. Базовые рецепты управления страницей с помощью кнопки можно изучить в видео «Яваскрипт для не‑разработчиков».
«Яваскрипт для не‑разработчиков». Запись прямого эфира Игоря Петрова
Можно заставить кнопку работать как ссылка, добавив в в атрибут onclick маленькое заклинание на Яваскрипте. Внимательнее с кавычками:
<button onclick="location.href='https://ya.ru'">
Яндекс
</button>
Этот трюк применяют для быстрого прототипирования. Делать так на публичной странице опасно: такую «ссылку» не поймут устройства чтения с экрана и не распознают поисковые роботы. Если на страницу нет ссылок через тег‑ссылку a, поисковики могут вовсе не увидеть её и не добавить в поисковую выдачу.
Кнопки можно встретить в разных частях страницы, необязательно в формах. В шапке сайта может быть кнопка переключения темы оформления, а в карточке товара кнопка добавления в корзину или вызова всплывашки с таблицей размеров.
Кнопку верстают тегом button, стандартные стили тега зависят от браузера и операционной системы.
<button>Оплатить<button>
При стилизации не забудьте отключить или изменить стандартные цвета и обводку, чтобы они не конфликтовали с вашими стилями.
<button>Оплатить<button>
button {
border: none; /* Убираем стандартную обводку */
font-size: 20px;
line-height: 36px;
font-family: Bureausans, Arial, sans-serif;
background: #2aad05;
color: #fff;
padding: 0 18px;
border-radius: 3px;
}
Внутрь кнопки можно поместить другие теги. Например, иконку:
<button>
Подарить
<img src="gift.svg">
<button>button {
border: none;
/* Убираем стандартную обводку */
font-size: 20px;
line-height: 36px;
font-family: Bureausans, Arial, sans-serif;
background: #2aad05;
color: #fff;
padding: 0 18px;
border-radius: 3px;
}
button img {
width: 16px;
margin-left: 5px;
}
Чтобы привязать действие к нажатию кнопки, нужно писать код на Яваскрипте. Это выходит за рамки книги. Базовые рецепты управления страницей с помощью кнопки можно изучить в видео «Яваскрипт для не‑разработчиков».
«Яваскрипт для не‑разработчиков». Запись прямого эфира Игоря Петрова
Можно заставить кнопку работать как ссылка, добавив в в атрибут onclick маленькое заклинание на Яваскрипте. Внимательнее с кавычками:
<button onclick="location.href='https://ya.ru'">
Яндекс
</button>
Этот трюк применяют для быстрого прототипирования. Делать так на публичной странице опасно: такую «ссылку» не поймут устройства чтения с экрана и не распознают поисковые роботы. Если на страницу нет ссылок через тег‑ссылку a, поисковики могут вовсе не увидеть её и не добавить в поисковую выдачу.
Используйте нестандартные инпуты, когда можете чётко сформулировать пользу, понимаете возможный вред и уверены, что результата не добиться стандартными инпутами.
И обязательно проверьте нестандартный инпут в разных сценариях и устройствах.
Нестандартные элементы интерфейса. Лекция Ильи Бирмана
Когда стандартных способов оформления инпута недостаточно, к сайту подключают сторонние библиотеки стилей и скриптов, создающие нестандартные инпуты. Например, диапазоны выбора дат или поля ввода по шаблону и с подсвечиванием ошибок. Нестандартные инпуты выглядят заманчиво, но имеют важные нюансы.
Нестандартные инпуты лишний раз усложняют разработку, заставляют пользователей переучиваться и осваивать непривычный интерфейс, а ещё частенько не поддерживают базовые функции стандартных инпутов: предсказуемое управление с клавиатуры и доступность для устройств чтения с экрана.
Когда стандартных способов оформления инпута недостаточно, к сайту подключают сторонние библиотеки стилей и скриптов, создающие нестандартные инпуты. Например, диапазоны выбора дат или поля ввода по шаблону и с подсвечиванием ошибок. Нестандартные инпуты выглядят заманчиво, но имеют важные нюансы.
Нестандартные инпуты лишний раз усложняют разработку, заставляют пользователей переучиваться и осваивать непривычный интерфейс, а ещё частенько не поддерживают базовые функции стандартных инпутов: предсказуемое управление с клавиатуры и доступность для устройств чтения с экрана.
Используйте нестандартные инпуты, когда можете чётко сформулировать пользу, понимаете возможный вред и уверены, что результата не добиться стандартными инпутами.
И обязательно проверьте нестандартный инпут в разных сценариях и устройствах.
Нестандартные элементы интерфейса. Лекция Ильи Бирмана
Подписи к полям формы верстают тегом label. Лейбл умеет связывать себя с полем, чтобы при клике по лейблу курсор ставился в поле. Такое поведение подписей облегчает работу с формой и считается признаком хорошего интерфейса.
Есть два способа вёрстки лейблов.
Отдельный лейбл привязывают к полю по айди через атрибут for. Минус этого способа — нужно придумывать уникальные айди, повторять их в коде и внимательно следить, чтобы не опечататься, иначе связь не будет работать.
<label for="email">Эл. почта</label>
<input id="email" type="email">
Есть трюк: лейбл автоматически связывается с полем внутри себя, клик по любому элементу внутри лейбла поставит курсор в поле. В этом случае не придётся придумывать уникальные айди. Минус этого способа — некоторые устройства чтения с экрана могут не понять связь лейбла с полем ввода и неточно озвучить вёрстку пользователю.
<label>
<span>Эл. почта</span>
<input type="email">
</label>
Приятный бонус лейбла как обёртки — внутри можно заверстать не только подпись, но и пояснения к полям или сообщения об ошибках. Клик по ним тоже будет ставить курсор в поле.
<label class="input">
<span class="input__label">Эл. почта</span>
<div class="input__input">
<input type="email">
<!-- Так же можно сверстать сообщение об ошибке. Видимостью сообщений об ошибках управляют через Яваскрипт -->
<span class="input__caption">
Для связи, документов и чеков
</span>
</div>
</label>
.input {
display: flex;
align-items: baseline;
}
.input__label {
width: 25%;
}
.input__input {
width: 75%;
}
.input__caption {
display: block;
margin-top: 8px;
font-size: 12px;
}
Флексбоксы
Подписи к полям формы верстают тегом label. Лейбл умеет связывать себя с полем, чтобы при клике по лейблу курсор ставился в поле. Такое поведение подписей облегчает работу с формой и считается признаком хорошего интерфейса.
Есть два способа вёрстки лейблов.
Отдельный лейбл привязывают к полю по айди через атрибут for. Минус этого способа — нужно придумывать уникальные айди, повторять их в коде и внимательно следить, чтобы не опечататься, иначе связь не будет работать.
<label for="email">Эл. почта</label>
<input id="email" type="email">
Для связи, документов и чеков
Есть трюк: лейбл автоматически связывается с полем внутри себя, клик по любому элементу внутри лейбла поставит курсор в поле. В этом случае не придётся придумывать уникальные айди. Минус этого способа — некоторые устройства чтения с экрана могут не понять связь лейбла с полем ввода и неточно озвучить вёрстку пользователю.
<label>
<span>Эл. почта</span>
<input type="email">
</label>
Приятный бонус лейбла как обёртки — внутри можно заверстать не только подпись, но и пояснения к полям или сообщения об ошибках. Клик по ним тоже будет ставить курсор в поле.
<label class="input">
<span class="input__label">Эл. почта</span>
<div class="input__input">
<input type="email">
<!-- Так же можно сверстать сообщение об ошибке. Видимостью сообщений об ошибках управляют через Яваскрипт -->
<span class="input__caption">
Для связи, документов и чеков
</span>
</div>
</label>
.input {
display: flex;
align-items: baseline;
}
.input__label {
width: 25%;
}
.input__input {
width: 75%;
}
.input__caption {
display: block;
margin-top: 8px;
font-size: 12px;
}
Флексбоксы