🔍 Начните печатать, чтобы искать по книге или перейти к нужной странице по номеру
Удобно листать не только прокруткой, но и клавишами‑стрелками:
Эта книга — пошаговая инструкция по вёрстке сайтов на языках ХТМЛ и ЦСС. Вы узнаете не только как сверстать сайт, но и как опубликовать его в интернете, настроить красивый шаринг в соцсети и подключить системы аналитики.
Отдельный раздел книги посвящён работе с верстальщиком: как ставить задачи, получать предсказуемый результат и правильно принимать и внедрять вёрстку.
Знакомство с ХТМЛ и ЦСС
Модули
Расстановка
Страницы
Спецэффекты
Контроль качества
Публикация
Как работать с верстальщиком
Эта книга — пошаговая инструкция по вёрстке сайтов на языках ХТМЛ и ЦСС. Вы узнаете не только как сверстать сайт, но и как опубликовать его в интернете, настроить красивый шаринг в соцсети и подключить системы аналитики.
Отдельный раздел книги посвящён работе с верстальщиком: как ставить задачи, получать предсказуемый результат и правильно принимать и внедрять вёрстку.
Знакомство с ХТМЛ и ЦСС
Модули
Расстановка
Страницы
Спецэффекты
Контроль качества
Публикация
Как работать с верстальщиком
Есть несколько способов разложить элементы по странице: позиционирование, флоаты, таблицы, флексбоксы и гриды. Мы постепенно разберём их все, а начнём с самого простого — позиционирования свойством position.
По умолчанию блоки выстраиваются друг под другом. С помощью position можно изменить это поведение и разместить элемент в любом месте страницы, задав ему координаты свойствами top, right, left и bottom. Есть пять значений свойства:
Это значение по умолчанию, отсутствие какого‑либо позиционирования. Элементы просто выстраиваются друг под другом.
Элемент с относительным позиционированием сдвигается со своего места, не влияя на положение соседних элементов.
position: relative;
left: 50px;
top: 80px;
Элемент с абсолютным позиционированием располагается по заданным координатам, а из того места, где он был, удаляется.
position: absolute;
left: 50px;
top: 80px;По умолчанию эти координаты отсчитываются от окна. Но если у элемента есть родитель с position: relative или absolute, то координаты будут отсчитываться уже от него.
Элемент с фиксированным позиционированием ведёт себя так же, как с абсолютным, но при этом не прокручивается вместе со страницей, зависая над ней. Закреплённое позиционирование — гибрид между обычным и фиксированным: элемент остаётся на месте, а когда область просмотра достигнет заданных координат — залипает.
position: sticky;
top: 18px;
Чаще всего используется для «залипающих» элементов. Например, с помощью position: sticky залипают иконки закладки и поиска в нашей книге. Аналогично работает и этот разворот: страница с примером залипает с position: sticky, а другая прокручивается.
Есть несколько способов разложить элементы по странице: позиционирование, флоаты, таблицы, флексбоксы и гриды. Мы постепенно разберём их все, а начнём с самого простого — позиционирования свойством position.
По умолчанию блоки выстраиваются друг под другом. С помощью position можно изменить это поведение и разместить элемент в любом месте страницы, задав ему координаты свойствами top, right, left и bottom. Есть пять значений свойства:
Это значение по умолчанию, отсутствие какого‑либо позиционирования. Элементы просто выстраиваются друг под другом.
Элемент с относительным позиционированием сдвигается со своего места, не влияя на положение соседних элементов.
position: relative;
left: 50px;
top: 80px;
Элемент с абсолютным позиционированием располагается по заданным координатам, а из того места, где он был, удаляется.
position: absolute;
left: 50px;
top: 80px;По умолчанию эти координаты отсчитываются от окна. Но если у элемента есть родитель с position: relative или absolute, то координаты будут отсчитываться уже от него.
Элемент с фиксированным позиционированием ведёт себя так же, как с абсолютным, но при этом не прокручивается вместе со страницей, зависая над ней. Закреплённое позиционирование — гибрид между обычным и фиксированным: элемент остаётся на месте, а когда область просмотра достигнет заданных координат — залипает.
position: sticky;
top: 18px;
Чаще всего используется для «залипающих» элементов. Например, с помощью position: sticky залипают иконки закладки и поиска в нашей книге. Аналогично работает и этот разворот: страница с примером залипает с position: sticky, а другая прокручивается.
Относительное позиционирование чаще всего используют для создания контекста, в котором будут абсолютно позиционироваться другие вложенные элементы:
.dots { position: relative }
.dot { position: absolute }
.top.left { top: 7px; left: 7px }
.top.right { top: 7px; right: 7px }
.bottom.left { bottom: 7px; left: 7px }
.bottom.right { bottom: 7px; right: 7px }
Важный момент: абсолютно спозиционированный элемент будет отсчитывать свои координаты от ближайшего родителя с position: relative
.dots { position: relative }
.dot {
position: absolute;
top: 0;
right: 0;
}
Относительное позиционирование чаще всего используют для создания контекста, в котором будут абсолютно позиционироваться другие вложенные элементы:
.dots { position: relative }
.dot { position: absolute }
.top.left { top: 7px; left: 7px }
.top.right { top: 7px; right: 7px }
.bottom.left { bottom: 7px; left: 7px }
.bottom.right { bottom: 7px; right: 7px }
Важный момент: абсолютно спозиционированный элемент будет отсчитывать свои координаты от ближайшего родителя с position: relative
.dots { position: relative }
.dot {
position: absolute;
top: 0;
right: 0;
}
Абсолютное позиционирование используют, когда нужно что‑то вытащить из потока и переставить в другое место: поставить в угол, на поля или по центру. Кроме того, абсолютное позиционирование часто используют в паре с псевдо‑элементами: например, для добавления линеек, маркеров или подписей.
Так в примере выше мы используем псевдо‑элемент ::before, чтобы добавить верхнюю линейку к меню, и ::after, чтобы добавить нижнюю линейку и звёздочку к пункту меню.
Также обратите внимание на отрицательные координаты: с помощью абсолютного позиционирования элементы можно растягивать и выносить за пределы контейнера.
nav {
/* Абсолютно спозиционированные линейки
будут отсчитывать свои координаты от меню */
position: relative;
/* Добавляем поля сверху-снизу */
padding: 0 8px;
}
nav::before,
nav::after {
/* Используем псевдо-элементы в качестве линеек:
даём им высоту и фон */
content: '';
height: 1px;
background: rgba(0, 0, 0, .07);
/* Растягиваем линейки от края до края без полей */
position: absolute;
left: -8px;
right: -8px;
}
nav::before {
/* Первую линейку ставим над меню */
top: 0;
}
nav::after {
/* Вторую линейку ставим под меню */
bottom: -4px;
}
nav li:nth-child(3) {
/* У «Домов» будет свой особенный значок */
position: relative;
}
nav li:nth-child(3)::after {
/* Добавляем звёздочку перед «Домами» */
content: '★';
color: red;
/* Ставим её перед текстом */
position: absolute;
right: 100%;
margin-right: 1px;
}
Абсолютное позиционирование используют, когда нужно что‑то вытащить из потока и переставить в другое место: поставить в угол, на поля или по центру. Кроме того, абсолютное позиционирование часто используют в паре с псевдо‑элементами: например, для добавления линеек, маркеров или подписей.
Так в примере выше мы используем псевдо‑элемент ::before, чтобы добавить верхнюю линейку к меню, и ::after, чтобы добавить нижнюю линейку и звёздочку к пункту меню.
Также обратите внимание на отрицательные координаты: с помощью абсолютного позиционирования элементы можно растягивать и выносить за пределы контейнера.
nav {
/* Абсолютно спозиционированные линейки
будут отсчитывать свои координаты от меню */
position: relative;
/* Добавляем поля сверху-снизу */
padding: 0 8px;
}
nav::before,
nav::after {
/* Используем псевдо-элементы в качестве линеек:
даём им высоту и фон */
content: '';
height: 1px;
background: rgba(0, 0, 0, .07);
/* Растягиваем линейки от края до края без полей */
position: absolute;
left: -8px;
right: -8px;
}
nav::before {
/* Первую линейку ставим над меню */
top: 0;
}
nav::after {
/* Вторую линейку ставим под меню */
bottom: -4px;
}
nav li:nth-child(3) {
/* У «Домов» будет свой особенный значок */
position: relative;
}
nav li:nth-child(3)::after {
/* Добавляем звёздочку перед «Домами» */
content: '★';
color: red;
/* Ставим её перед текстом */
position: absolute;
right: 100%;
margin-right: 1px;
}
Фиксированное позиционирование используют для штук, которые всегда должны быть в области видимости: кнопка «Заказать дизайн», диалог в Чатре или сообщение об использовании кук на сайте.
.fixed {
position: fixed;
left: 20px;
bottom: 20px;
}Залипающее позиционирование используют, когда нужно, чтобы элемент стоял на месте, пока до него не докрутят, затем залип, а при обратной прокрутке — отлип.
.sticky {
position: sticky;
top: 20px;
}
Фиксированное позиционирование используют для штук, которые всегда должны быть в области видимости: кнопка «Заказать дизайн», диалог в Чатре или сообщение об использовании кук на сайте.
.fixed {
position: fixed;
left: 20px;
bottom: 20px;
}Залипающее позиционирование используют, когда нужно, чтобы элемент стоял на месте, пока до него не докрутят, затем залип, а при обратной прокрутке — отлип.
.sticky {
position: sticky;
top: 20px;
}
С помощью флоатов элемент можно прижать либо к левому, либо к правому краю родителя. Следующие за ним элементы подтягиваются вверх, пытаясь занять его место, или обтекают его.
Флоаты используют редко, чаще всего, чтобы задать картинке обтекание текстом:
<section>
<img src="ostap.jpg">
<h3>Кто такой? Чем знаменит?</h3>
<p>
Я великий комбинатор,
идейный борец за денежные знаки.
</p>
<p>
Кроме того, я знаю четыреста сравнительно честных
способа отъёма денег.
</p>
</section>img {
/* Прижимаем картинку вправо */
float: right;
/* Фиксируем высоту картинки */
height: 8em;
width: auto;
/* Добавляем отступ слева,
чтобы текст не влипал в иллюстрацию */
margin-left: 1em;
}Давным‑давно разработчики «хакали» ЦСС, создавая колоночную вёрстку на флоатах и маржинах:
С помощью флоатов элемент можно прижать либо к левому, либо к правому краю родителя. Следующие за ним элементы подтягиваются вверх, пытаясь занять его место, или обтекают его.
Флоаты используют редко, чаще всего, чтобы задать картинке обтекание текстом:
<section>
<img src="ostap.jpg">
<h3>Кто такой? Чем знаменит?</h3>
<p>
Я великий комбинатор,
идейный борец за денежные знаки.
</p>
<p>
Кроме того, я знаю четыреста сравнительно честных
способа отъёма денег.
</p>
</section>img {
/* Прижимаем картинку вправо */
float: right;
/* Фиксируем высоту картинки */
height: 8em;
width: auto;
/* Добавляем отступ слева,
чтобы текст не влипал в иллюстрацию */
margin-left: 1em;
}Давным‑давно разработчики «хакали» ЦСС, создавая колоночную вёрстку на флоатах и маржинах: