🔍 Начните печатать, чтобы искать по книге или перейти к нужной странице по номеру
Удобно листать не только прокруткой, но и клавишами‑стрелками:
Эта книга — пошаговая инструкция по вёрстке сайтов на языках ХТМЛ и ЦСС. Вы узнаете не только как сверстать сайт, но и как опубликовать его в интернете, настроить красивый шаринг в соцсети и подключить системы аналитики.
Отдельный раздел книги посвящён работе с верстальщиком: как ставить задачи, получать предсказуемый результат и правильно принимать и внедрять вёрстку.
Знакомство с ХТМЛ и ЦСС
Модули
Расстановка
Страницы
Спецэффекты
Контроль качества
Публикация
Как работать с верстальщиком
Эта книга — пошаговая инструкция по вёрстке сайтов на языках ХТМЛ и ЦСС. Вы узнаете не только как сверстать сайт, но и как опубликовать его в интернете, настроить красивый шаринг в соцсети и подключить системы аналитики.
Отдельный раздел книги посвящён работе с верстальщиком: как ставить задачи, получать предсказуемый результат и правильно принимать и внедрять вёрстку.
Знакомство с ХТМЛ и ЦСС
Модули
Расстановка
Страницы
Спецэффекты
Контроль качества
Публикация
Как работать с верстальщиком
В многострочных контейнерах за выравнивание строк на поперечной оси отвечает свойство align-content
По умолчанию строки растягиваются на всю поперечную ось
Строки равномерно распределены
Первая и последняя строки отжаты к краям, оставшееся место делится поровну
Строки прижаты к началу поперечной оси
Строки прижаты к центру поперечной оси
Строки прижаты к концу поперечной оси
В многострочных контейнерах за выравнивание строк на поперечной оси отвечает свойство align-content
По умолчанию строки растягиваются на всю поперечную ось
Строки равномерно распределены
Первая и последняя строки отжаты к краям, оставшееся место делится поровну
Строки прижаты к началу поперечной оси
Строки прижаты к центру поперечной оси
Строки прижаты к концу поперечной оси
Есть два способа задать просветы между элементами. Первый — задать margin
у флекс‑элементов:
.columns > * {
margin: 20px 10px;
}
Второй способ — задать просветы между элементами с помощью gap
у контейнера:
.columns {
gap: 40px 20px;
}
Маржин даёт дополнительные отступы до и после всех элементов. Чтобы не обнулять и не компенсировать их соседними элементами, лучше использовать gap
Есть два способа задать просветы между элементами. Первый — задать margin
у флекс‑элементов:
.columns > * {
margin: 20px 10px;
}
Второй способ — задать просветы между элементами с помощью gap
у контейнера:
.columns {
gap: 40px 20px;
}
Маржин даёт дополнительные отступы до и после всех элементов. Чтобы не обнулять и не компенсировать их соседними элементами, лучше использовать gap
Чтобы лучше понять флексбоксы, проведём аналогию с авто‑лейаутом из Фигмы
Стрелки в левой колонке отвечают за направление главной оси:
flex‑wrap: wrap
flex‑direction: row
flex‑direction: column
Расстояние между элементами задаётся с помощью gap
Отступы снаружи элементов задаются с помощью свойств контейнера:
padding‑left и padding‑right
padding‑top и padding‑bottom
Выравнивание задаётся комбинацией свойств:
flex‑wrap: wrap
flex‑direction: row
flex‑direction: column
gap
padding‑left и padding‑right
padding‑top и padding‑bottom
justify‑content: flex‑start;
justify‑content: center;
justify‑content: flex‑end;
justify‑content: flex‑start;
justify‑content: center;
justify‑content: flex‑end;
justify‑content: flex‑start;
justify‑content: center;
justify‑content: flex‑end;
Чтобы лучше понять флексбоксы, проведём аналогию с авто лейаутом из Фигмы.
Стрелки в левой колонке отвечают за направление главной оси:
Расстояние между элементами задаётся с помощью gap
Отступы снаружи элементов задаются с помощью свойств контейнера:
Выравнивание задаётся комбинацией свойств:
Перенос во флексбоксе обычно используют для адаптивных колонок или набора элементов, которым не важна фиксированная сетка. Например, для вёрстки облака тегов или вариантов ответа в чате.
Начнём с разметки вариантов ответов:
<ul class="replies">
<li>Иди лесом</li>
<li>Иди опушкой</li>
<li>Нет!</li>
<li>Позови человека</li>
<li>Не хотелось бы хвастаться. Давайте лучше обсудим вашу задачу</li>
<li>Нет, благодарю. Я готов начинать</li>
</ul>
Превратим список во флекс‑контейнер, спрячем маркеры и обнулим отступы. Теперь элементы списка, которые шли один под другим, выстроились в строчку, но сами продолжают вести себя, как абзацы текста.
.replies {
display: flex;
list-style: none;
margin: 0;
padding: 0;
}
Укажем выравнивание и включим перенос. Теперь элементы списка не пытаются вместиться в одну строчку и выравниваются по правому краю. Перенос произойдёт только в тех элементах, которым не хватит всей ширины контейнера.
.replies {
display: flex;
list-style: none;
margin: 0;
padding: 0;
justify-content: flex-end; /* Прижимаем к правому краю */
align-content: flex-start; /* И вверх по поперечной оси */
flex-wrap: wrap;
}
Зададим отступ между элементами:
.replies {
display: flex;
list-style: none;
margin: 0;
padding: 0;
flex-direction: row;
justify-content: flex-end;
align-content: flex-start;
flex-wrap: wrap;
gap: 10px;
}
И настроим оформление вариантов ответов:
.replies li {
padding: 10px 20px;
border-radius: 9px;
border: 1px solid #0b93f6;
font: 18px/24px Helvetica Neue, Helvetica, Arial, sans-serif;
}
.replies li:hover {
background: #0b93f6;
color: #fff;
cursor: pointer; /* Меняем курсор со стрелочки на курсор, который обычно появляется над нажимаемыми элементами */
}
Перенос во флексбоксе обычно используют для адаптивных колонок или набора элементов, которым не важна фиксированная сетка. Например, для вёрстки облака тегов или вариантов ответа в чате.
Начнём с разметки вариантов ответов:
<ul class="replies">
<li>Иди лесом</li>
<li>Иди опушкой</li>
<li>Нет!</li>
<li>Позови человека</li>
<li>Не хотелось бы хвастаться. Давайте лучше обсудим вашу задачу</li>
<li>Нет, благодарю. Я готов начинать</li>
</ul>
Превратим список во флекс‑контейнер, спрячем маркеры и обнулим отступы. Теперь элементы списка, которые шли один под другим, выстроились в строчку, но сами продолжают вести себя, как абзацы текста.
.replies {
display: flex;
list-style: none;
margin: 0;
padding: 0;
}
Укажем выравнивание и включим перенос. Теперь элементы списка не пытаются вместиться в одну строчку и выравниваются по правому краю. Перенос произойдёт только в тех элементах, которым не хватит всей ширины контейнера.
.replies {
display: flex;
list-style: none;
margin: 0;
padding: 0;
justify-content: flex-end; /* Прижимаем к правому краю */
align-content: flex-start; /* И вверх по поперечной оси */
flex-wrap: wrap;
}
Зададим отступ между элементами:
.replies {
display: flex;
list-style: none;
margin: 0;
padding: 0;
flex-direction: row;
justify-content: flex-end;
align-content: flex-start;
flex-wrap: wrap;
gap: 10px;
}
И настроим оформление вариантов ответов:
.replies li {
padding: 10px 20px;
border-radius: 9px;
border: 1px solid #0b93f6;
font: 18px/24px Helvetica Neue, Helvetica, Arial, sans-serif;
}
.replies li:hover {
background: #0b93f6;
color: #fff;
cursor: pointer; /* Меняем курсор со стрелочки на курсор, который обычно появляется над нажимаемыми элементами */
}
Занимает ровно половину контейнера, потому что ему не разрешено увеличиваться
С flex‑grow: 1 вытягивается, чтобы занять всё доступное пространство
Переполняют контейнер, потому что им не разрешено уменьшаться
C flex‑shrink: 1 вписываются в контейнер, равномерно уменьшаясь в размерах
По умолчанию флекс‑элементы занимают ровно столько места, сколько нужно их содержимому. Чтобы управлять их размерами, растягивая, уменьшая или занимая определённую долю, есть три ЦСС‑свойства: flex-basis
, flex-grow
и flex-shrink
flex-basis
определяет начальный размер элемента перед применением остальных свойств. Считайте, что flex-basis
задаёт идеальный или предположительный размер элемента.
flex-grow
и flex-shrink
применяются после flex-basis
. Браузер сверяется с ними, чтобы понять, как упаковать элементы, если осталось свободное место или его не хватило.
flex-basis
задаётся в единицах измерения размеров: пикселях, процентах, емах и прочих. flex-grow
и flex-shrink
определяют собственные относительные размеры элементов, поэтому задаются безразмерными положительными числами.
По умолчанию флекс‑элементы занимают ровно столько места, сколько нужно их содержимому. Чтобы управлять их размерами, растягивая, уменьшая или занимая определённую долю, есть три ЦСС‑свойства: flex-basis
, flex-grow
и flex-shrink
flex-basis
определяет начальный размер элемента перед применением остальных свойств. Считайте, что flex-basis
задаёт идеальный или предположительный размер элемента.
flex-grow
и flex-shrink
применяются после flex-basis
. Браузер сверяется с ними, чтобы понять, как упаковать элементы, если осталось свободное место или его не хватило.
flex-basis
задаётся в единицах измерения размеров: пикселях, процентах, емах и прочих. flex-grow
и flex-shrink
определяют собственные относительные размеры элементов, поэтому задаются безразмерными положительными числами.
Занимает ровно половину контейнера, потому что ему не разрешено увеличиваться
С flex‑grow: 1 вытягивается, чтобы занять всё доступное пространство
Переполняют контейнер, потому что им не разрешено уменьшаться
C flex‑shrink: 1 вписываются в контейнер, равномерно уменьшаясь в размерах