подход к разработке сайтов, при котором веб-страницы автоматически подстраиваются под размер экрана пользователя
позволяет элементам интерфейса изменять свои размеры в зависимости от ширины экрана
Гибкие макеты используют относительные единицы измерения (%, vw, vh, em, rem), позволяя контейнерам изменять размеры пропорционально экрану.
.container {
width: 80%;
max-width: 1200px;
}
Мы должны стараться избегать горизонтальной прокрутки, так как у десктопного пользователя колесо мышки работает по вертикали
точки на экране, в которых макет сайта должен изменяться
зависят от устройства, на котором сайт просматривается, и от ширины экрана
| Брейкпоинт | Устройство |
320px |
для мобильных телефонов в портретной ориентации |
480px |
для мобильных телефонов в ландшафтной ориентации |
768px |
для планшетов |
1024px |
для десктопов с малым экраном |
1200px+ |
для десктопов с большим экраном |
позволяют изменять стиль страницы в зависимости от различных характеристик устройства
@media условие {
/* CSS-правила */
}
max-widthширина экрана меньше или равна заданному значению
min-widthширина экрана больше или равна заданному значению
max-heightдля изменения стилей на основе высоты экрана
min-height:для изменения стилей на основе минимальной высоты экрана
portrait
) или ландшафт (
landscape
)
orientationдля определения ориентации устройства
dpi
)
resolutionдля определения плотности пикселей
@media (max-width: 320px) {
/* Стили для экранов менее 320px */
.container {
font-size: 12px;
}
}
@media (min-width: 321px) and (max-width: 768px) {
/* Стили для экранов от 321px до 768px */
.container {
font-size: 14px;
}
}
@media (min-width: 769px) {
/* Стили для экранов больше 768px */
.container {
font-size: 16px;
}
}
стили, которые идут после медиазапроса, могут перекрывать ранее применённые
То есть общие или основные стили пишутся до медиа запроса
.container {
font-size: 18px;
}
@media (max-width: 768px) {
.container {
font-size: 14px;
}
}
Картинки, видео и другие медиафайлы должны адаптироваться к размеру экрана
img {
max-width: 100%;
width: 30vw;
height: auto;
}
Для ускорения времени загрузки можно использовать определенные размеры изображений, в зависимости от размера экрана
<picture>
<source media="(max-width: 800px)" srcset="elva-480w-close-portrait.jpg" />
<source media="(max-width: 1000px)" srcset="elva-1000w.jpg" />
<img src="elva-1400w.jpg" alt="Chris standing up holding his daughter Elva" />
</picture>
picture
обрабатывает несколько источников изображений, выбираемых на основе условий, указанных в атрибуте media
source
задает альтернативные изображения для разных условий
img
служит как "резервный" вариант изображения, если ни
одно из условий в элементах
<picture>
<source media="(max-width: 800px)" srcset="elva-480w-close-portrait.jpg" />
<img src="elva-800w.jpg" alt="Chris standing up holding his daughter Elva" />
</picture>
<video>
<source src="video-small.mp4" media="(max-width: 600px)">
<source src="video-medium.mp4" media="(max-width: 1200px)">
<source src="video-large.mp4">
</video>
Благодаря свойству
flex-wrap
элементы могут перемещаться согласно тому, влезают
ли они в контейнер
.container {
display: flex;
flex-wrap: wrap;
justify-content: space-between;
}
fr
единица измерения в CSS Grid, которая позволяет распределить доступное пространство между элементами сетки
.container {
display: grid;
grid-template-columns: 1fr 2fr 1fr;
gap: 20px;
}
auto-fit
и
auto-fill
функции, которые можно использовать с
grid-template-columns
или
grid-template-rows
для создания динамических макетов, которые
адаптируются к доступному пространству
auto-fillЗаполняет доступное пространство как можно большим количеством колонок (или строк), используя заданные размеры
auto-fitОтличается тем, что пустое пространство будет занимать автоматические (например, пустые) элементы
auto-fill
.container {
display: grid;
grid-template-columns: repeat(auto-fill, minmax(200px, 1fr));
grid-gap: 20px;
}
Когда достигаем верхней границы (всем элементам
хватает места в один ряд), то появляются "пустые"
строки
auto-fit
.container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(200px, 1fr));
grid-gap: 20px;
}
Растягивает элементы на всю ширину контейнера
minmax()можно задавать минимальную и максимальную ширину или высоту для колонок или строк в сетке
Применимо для всех элементов, не только для grid системы
.container {
display: grid;
grid-template-columns: repeat(auto-fit, minmax(100px, 1fr));
grid-gap: 20px;
}
img {
width: minmax(100%, 800px)
}
gapgrid-gap
устанавливает отступы между элементами сетки
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
gap: 20px;
}
grid-auto-flowпозволяет управлять порядком, в котором элементы будут размещаться в сетке
.container {
display: grid;
grid-template-columns: repeat(3, 1fr);
grid-auto-flow: row dense;
}
clamp()позволяет ограничивать значение, определяя минимальный, предпочтительный и максимальный пределы
clamp(min, value, max)
min
— минимальное значение, которое будет
применяться, если вычисленное значение меньше
этого
value
— предпочтительное значение, которое обычно
используется, если оно находится между
минимальным и максимальным значениями
max
— максимальное значение, которое будет
применяться, если вычисленное значение больше
этого
clamp()
.container {
width: clamp(300px, 50%, 800px);
margin: 0 auto;
}
.element {
padding: clamp(10px, 2vw, 20px);
}
набор инструментов, встроенных в большинство современных браузеров, который позволяет разработчикам взаимодействовать с веб-страницами, отлаживать их, анализировать производительность и изменять стили и структуру в реальном времени
Применение:
Применение:
Применение:
Применение:
Применение:
Применение:
Применение: