От автора: мой друг шутил: HTML уже адаптивен. Это делают дизайнеры. Это странное мнение, но в целом правильное. Если вы напишете ванильный HTML с правильной семантической разметкой, он, по крайней мере, ПРИГОДЕН для UІ. Возможно, это некрасиво, возможно, имеет не самый желанный вид для пользователей, но допустимо.
Естественное обертывание традиционных элементов часто может быть лучше, если мы просто позволим ему делать свое дело. Даже по сравнению с такими вещами, как grid-template, потому что нам не нужно микроуправлять всеми нашими контрольными точками медиа-запросов.
Flex-wrap дает нам ту же возможность, но объявление ширины для переноса было немного сложным, пока в CSS не появились вычисления. CALC, MIN и MAX дают нам возможность переопределять значения таким образом, чтобы выполнять автоматическую обертку столбцов, которые не подходят. Допустим, у нас есть внешний контейнер с именем div.content который содержит MAIN, а также два DIV.extra, которые мы хотим использовать в качестве эластичных sidebar–ов.
ЕСЛИ вы используете ASIDE, чтобы сказать, что хотите отодвинуть блок в сторону, вы используете их в такой же презентационной манере, как и CENTER. HTML-теги следует выбирать в соответствии со структурой и грамматикой. Единственная грамматическая / структурная причина для aside — литературная, например, в произведениях Шекспира или актеров, «ломающих четвертую стену», таких как Феррис Бьюллер или Дэдпул. Если это не «необязательный подраздел, относящийся к основному содержанию» — это НЕ aside. Этот раздел курсивом? ЭТО aside!
1 2 3 4 5 6 7 8 9 10 11 12 13 |
<div class="Content"> <main> <p> Main Content HEre </p> </main> <div class="extras"> Extra Content #1 <!-- .extras --></div> <div class="extras"> Extra Content #1 <!-- .extras --></div> <!-- .content --></div> |
Теперь предположим, что мы хотим, чтобы основной столбец имел минимальную ширину 48em, а наши sidebar-ы имели минимальную ширину 16em, но мы хотим, чтобы автоматически переносились, а при обертывании расширялись по размеру. Присвоим контейнеру свойства flex и flex-wrap.
1 2 3 4 |
.content { display:flex; flex-wrap:wrap; } |
Для MAIN присвоим процентную ширину и некоторую магическую минимальную ширину.
1 2 3 4 |
main { width:50%; min-width:min(36em, 100%); } |
50% гарантирует, что контейнер вырастет достаточно, чтобы вместить столбцы. Магия в вычислении min-width:min. Он либо окажется размером меньше 36em, либо займет 100% доступного пространства, в зависимости от того, что меньше. Тогда ВСЕ что нам нужно – это .extra:
1 2 3 |
.extras { min-width:min(12em, 100%); } |
Ширина контейнера будет приближатся к 12em или к ширине экрана, в зависимости от того, что меньше. Таким образом, когда ширина 36em + 12em + 12em == 60em, наши компоненты уместятся рядом. Если вы сделаете это, последние столбцы будут обернуты, чтобы освободить место, где и как нужно. Поскольку мы используем только минимальную ширину в качестве элемента управления, компоненты будут расширяться, чтобы заполнить контейнер, когда они действуют как один столбец. Приведу пример кода:
Я добавил несколько дополнительных вещей, так что это полный макет, используя min() и VW для создания автоматически уменьшающихся отступов / полей, чтобы лучше использовать доступное пространство на экране по мере того, как компоненты становятся меньше.
Заключение
Это мощный, но простой метод, который действительно может улучшить ваш UI, когда дело доходит до адаптивного дизайна. Безусловно, некоторые проблемы с выравниванием и другие подобные мелкие детали требуют дополнительной настройки, но на самом деле, это проще и легче, чем микроуправление каждой возможной шириной. В 90% случаев, когда вы видите медиазапросы для десятка экранов разных размеров, вы сталкиваетесь с неспособностью использовать то, что HTML и CSS уже предоставляют нам. Вот почему «сетки из двенадцати» и бесконечные идиотские классы представления, такие как «col-4-s col-6-m col-8-l», просто глупы.
Люди часто спрашивают меня, как за полчаса я создаю макеты, на создание которых у них уходит неделя. Это потому, что я принимаю семантику, отделение презентации от контента, делаю дизайн экрана в CSS, а не использую какую-то программу рисования, и хорошо понимаю доступность, удобство использования, а также спецификации и рекомендации, которым мы, как веб-разработчики, должны следовать. Я не стану отвлекать внимание от всей причины, по которой HTML и CSS существуют с идиотскими тупыми фреймворками. Тем более позволять такой бессмысленной чепухе мешать вашему обучению и пониманию.
Пусть Flow и wrapping сделают свое дело, и у вас будет намного меньше головной боли и более быстрое время разработки!
Автор: Jason Knight
Источник: medium.com
Редакция: Команда webformyself.
Читайте нас в Telegram, VK, Яндекс.Дзен