Максимальная Адаптивность При Минимальном Количестве Медиазапросов Или Метод Обратной Адаптивности.

" У каждой проблемы всегда есть решение – простое, удобное и конечно же неправильное.

«.

— Генри Луис Менкен.



Суть проблемы

На первый взгляд реализация адаптивной верстки может показаться «линейным квестом» с довольно небольшим полем для маневра.

Назначаем нужные классы, меняем размеры, положение или порядок элементов по мере необходимости — и вроде бы дело сделано.

Но время от времени, анализируя планировку полностью реализованных проектов, невольно ловишь себя на мысли, что в теории все выглядит гораздо лучше, чем на практике.

На старте css выглядит максимально аккуратно и логично, но чем их больше, тем более запущенным он становится, особенно после нескольких правок в течение длительных промежутков времени.

При столкновении с необычными дизайнерскими решениями медиазапросы становятся «толще», появляются нестандартные точки останова, а при изменении деталей дизайна внесение изменений в макет становится достаточно тяжелой работой.

Любая поправка со стороны клиента или дизайнера, а css-код нужно редактировать во всех медиа-запросах (особенно если это чужой css и они разбросаны по всему коду в разных местах с нелогичной последовательностью).

Что часто приводит к ситуации, когда вы уже не полностью контролируете ситуацию и возникает соблазн прибегнуть к «жестким» методам, таким как директива !important или вложенность.

Код становится еще менее настраиваемым и где-то среди тысяч строк появляются строки, которые уже не нужны и лишь (пусть и незначительно) замедляют работу браузера.



Решение



Часть 1. Абсолютная теория относительности

Основная и самая важная идея этой статьи заключается в том, что чем меньше CSS-кода мы пишем, тем легче им управлять.

Суть метода обратной адаптивности заключается в том, чтобы сделать каждый элемент максимально адаптивным, а затем постепенно снижать его способность адаптироваться к размерам экрана.

Так что главный шаг к этому — использовать абсолютные единицы измерения: px, em, rem только внутри медиа-запросов (за редким исключением).

Вне медиа-запросов нам лучше использовать только относительные единицы области просмотра: vw, vh, vmax и проценты.

Теги и текст корневого блока мы будем измерять в единицах области просмотра, а вот для дочерних удобнее рассчитывать размер в процентах от родительского.

Звучит логично позволить элементам самостоятельно адаптироваться к размерам экрана, не переписывая настройки для каждой точки останова.

Каждый раз работу следует начинать с подготовки, независимо от размера проекта.

Первое, что мы сделаем, это измерим наш пример макета и запишем все необходимые нам размеры.



Максимальная адаптивность при минимальном количестве медиазапросов или метод обратной адаптивности.
</p><p>

1920 — основная ширина нашего макета; от этого будут зависеть все остальные горизонтальные размеры.

930 — основная высота нашего макета (предполагаемая высота области страницы, одновременно видимой на экране); от этого будут зависеть все вертикальные размеры.

1400 — ширина контейнера, в который будет упаковано все содержимое страницы.

Далее давайте создадим основные классы для контейнера и текста следующим образом: (Расчетная ширина/ширина макета) * 100 т.е.

в нашем случае (1400 / 1920) * 100 = 72.9 Как и планировалось выше, результат запишем в единицах области просмотра, а именно в ширине вида:

  
  
  
  
   

.

container { width: 72.91vw; }

С текстом мы сделаем то же самое, за исключением того, что вместо vw будем использовать vmax — чтобы использовать максимальный размер экрана, а не ширину.

(55 / 1920) * 100 = 2.86

.

page__title { font-size: 2.86vmax; }

Кроме того, для элементов, имеющих одинаковую высоту и ширину (квадратные и круглые элементы), вам также необходимо использовать единицы измерения vmax для сохранения пропорций.

Далее вы можете приступить к макету и набросать сетку.

Для блоков, которым необходимо задать высоту, мы используем ту же формулу пересчета во вьюпорте, но теперь вместо ширины будем начинать с высоты экрана и к результату прибавлять vh(высота просмотра).

Мы также применим vh к верхнему и нижнему полям.

(300 / 1920) * 100 = 15.62; (60 / 1920) * 100 = 3.12;

.

main__block { width: 15.62vmax; height: 15.62vmax; margin-top: 3.12vh; margin-right: 3.12vw; }

И как я уже говорил ранее, мы будем рассчитывать ширину вложенных блоков в процентах с помощью flex-basis.

Максимальная адаптивность при минимальном количестве медиазапросов или метод обратной адаптивности.
</p><p>

(970 / 1920) * 100 = 50.52; (16 / 1920) * 100 = 0.83;

.

main-menu { width: 50.52vw; } .

main-menu__item { flex-basis: calc(100% / 4 - 0.83vw); }



Часть 2: Обратная адаптивность

Блоки ведут себя максимально адаптивно, но они чрезмерно адаптивны: текст становится нечитаемым на маленьких экранах, а блоки готовы бесконечно сжиматься на любом экране.

Сейчас настало время обратной адаптации.

С помощью медиа-запросов мы заменяем относительные единицы на абсолютные.

Em для размера шрифта; Px для высоты блока; Для ширины контейнера и некоторых блоков мы продолжим использовать относительные единицы, но изменим их на %:

@media (max-width: 767px) {

Теги: #CSS #адаптивный веб-дизайн #CSS
Вместе с данным постом часто просматривают:

Автор Статьи


Зарегистрирован: 2019-12-10 15:07:06
Баллов опыта: 0
Всего постов на сайте: 0
Всего комментарий на сайте: 0
Dima Manisha

Dima Manisha

Эксперт Wmlog. Профессиональный веб-мастер, SEO-специалист, дизайнер, маркетолог и интернет-предприниматель.