Java, UX, HTML, CSS, WEB-design

Создание надежных компоновок с помощью контейнеров

Краткое описание по статье Создание надежных компоновок с помощью контейнеров

Название: Создание надежных компоновок с помощью контейнеров . Краткое описание: ⭐ Рассел Биш . Дата публикации: 24.01.2022 . Автор: Алишер Валеев .

Для чего создан сайт Novosti-Nedeli.ru

Данный сайт посвящен новостям мира и мира технологий . Также тут вы найдете руководства по различным девайсам.

Сколько лет сайту?

Возраст составляет 3 года


  • Рассел Бишоп

  • 0 Комментарии

Создание надежных компоновок с помощью контейнеров

  • 6 минут чтения

  • CSS, макеты, адаптивный дизайн

Краткое резюме ↬

При просмотре большинства других сеток в DevTools вы заметите, что ширина столбцов зависит от их родительского элемента. Эта статья поможет вам понять, как преодолеть эти ограничения с помощью переменных CSS и как вы можете начать строить с контейнерными единицами.

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

Они также обеспечивают постоянную ширину повсюду в вашем документе — независимо от их глубины вложенности, ширины их родителя или их родственных элементов. Таким образом, вместо того, чтобы требовать повторного набора .grid и .row родительские элементы, единицы контейнера измеряются от :root вашего документа — точно так же, как использование rem Блок.

единицы контейнера измеряются от корня вашего документа так же, как при использовании единицы рем
(Большой превью)

Чем отличаются контейнерные блоки?

Сетки из популярных фреймворков (таких как Bootstrap или Bulma) имеют одно и то же фундаментальное ограничение: они полагаются на относительные единицы, такие как «проценты», для построения столбцов и желобов.

Этот подход обязывает разработчиков использовать определенную структуру HTML всякий раз, когда они хотят использовать эти измерения, и требует parent > child вложенность по ширине для правильного расчета.

Не убежден? Попробуйте сами:

  • Откройте демонстрационную сетку любого CSS-фреймворка;
  • Осмотрите столбец и обратите внимание на ширину;
  • Используя DevTools, перетащите этот элемент в другое место в документе;
  • Обратите внимание, что ширина столбца изменилась в пути.

Еще после прыжка! Продолжить чтение ниже ↓

Свобода передвижения (…Не Брексит)

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

.sidebar {
  width: calc(3 * var(--column-unit));
  /* or columns(3) */
}

Ваш ...class="sidebar">... элемент может находиться где угодно внутри вашего документа — без определенных родительских элементов или вложенности.

Измерение трех столбцов и использование их для боковой панели.
Измерение трех столбцов и использование их для боковой панели (большой предварительный просмотр)

Совместное использование инструментов с дизайнерами

У дизайнеров и разработчиков есть отличная золотая середина, которая помогает перейти от программного обеспечения для дизайна к шаблонам внешнего интерфейса: числа.

Модульные шкалы исключительны не только потому, что они помогают дизайнерам привнести гармонию в свою типографику, но и потому, что разработчики могут воспроизвести их как простая система. То же самое относится и к Baseline Grids: превосходным самодокументирующимся системам с крошечной конфигурацией (один корневой номер) и огромной согласованностью.

Единицы-контейнеры настраиваются так же, как дизайнеры используют Sketch для настройки параметров макета:

Настройки макета

Настройки макета (большой предварительный просмотр)

Линии сетки эскиза

Линии сетки эскиза (большой предварительный просмотр)

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

Начните строить с контейнерными модулями

Определите пропорции сетки с тремя значениями:

:root {
  --grid-width: 960;
  --grid-column-width: 60;
  --grid-columns: 12;
}

Эти три значения определяют ширину столбца по отношению к вашей сетке. В приведенном выше примере ширина столбца равна 60 / 960. Желоба рассчитываются автоматически из оставшегося пространства.

Наконец, установите ширину для вашего контейнера:

:root {
  --container-width: 84vw;
}

Примечание: --container-width следует задавать как абсолютную единицу. я рекомендую использовать viewport units или rems.

Вы можете обновить свой --container-width в любой точке останова (все ваши блоки-контейнеры будут обновлены соответственно):

@media (min-width: 800px) {
  --container-width: 90vw;
}

@media (min-width: 1200px) {
  --container-width: 85vw;
}

/* what about max-width? */
@media (min-width: 1400px) {
  --container-width: 1200px;
}
контрольные точки
Точки останова (большой предварительный просмотр)

Теперь вы разблокировали два очень надежных юнита, из которых можно построить:

  1. --column-unit
  2. --gutter-unit

Пролеты колонн: третье и последнее оружие

Более распространено, чем строительство с колоннами или водосточными желобами, состоит в том, чтобы охватывать их оба:

6 колонок = 6 колонок + 5 промежутков
6 столбцов = 6 столбцов + 5 промежутков (большой предварительный просмотр)

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

.panel {
  /* vanilla css */
  width: calc(6 * var(--column-and-gutter-unit) - var(--gutter-unit));

  /* pre-processor shortcut */
  width: column-spans(6);  
}

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

Компоненты здания с контейнерами

Давайте возьмем пример дизайна и разберем его:

пример дизайна

(Большой превью)

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

.background-image {
  width: column-spans(9);
  padding-bottom: gutters(6);
  /* 6 gutters taller than the foreground banner */
}

.foreground-banner {
  width: column-spans(8);
  padding: gutters(2);
}

.button {
  height: gutters(3);
  padding: gutters(1);
}

Возьмите код

  • CSS: контейнер-единицы-css.css
  • Функции SCSS: container-units-css-fuctions.scss
  • Демонстрации и документация: Container Units
:root {
  /* Grid proportions */
  --grid-width: 960;
  --grid-column-width: 60;
  --grid-columns: 12;

  /* Grid logic */
  --grid-gutters: calc(var(--grid-columns) - 1);

  /* Grid proportion logic */
  --column-proportion: calc(var(--grid-column-width) / var(--grid-width));
  --gutter-proportion: calc((1 - (var(--grid-columns) * var(--column-proportion))) / var(--grid-gutters));

  /* Container Units */
  --column-unit: calc(var(--column-proportion) * var(--container-width));
  --gutter-unit: calc(var(--gutter-proportion) * var(--container-width));
  --column-and-gutter-unit: calc(var(--column-unit) + var(--gutter-unit));

  /* Container Width */
  --container-width: 80vw;
}

@media (min-width: 1000px) {
  :root {
    --container-width: 90vw;
  }
}

@media (min-width: 1400px) {
  :root {
    --container-width: 1300px;
  }
}

Зачем использовать переменные CSS?

«Препроцессоры могли делать это в течение многих лет с $variables — зачем вам CSS-переменные?»

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

Давайте возьмем следующий сжатый пример сетки:

.grid {
  $columns: 2;
  $gutter: $columns * 1rem;
  display: grid;
  grid-template-columns: repeat($columns, 1fr);
  grid-gap: $gutter;

  @media (min-width: $medium) {
    $columns: 3;
    grid-template-columns: repeat($columns, 1fr);
    grid-gap: $gutter;
  }

  @media (min-width: $large) {
    $columns: 4;
    grid-template-columns: repeat($columns, 1fr);
    grid-gap: $gutter;
  }
}

Этот пример показывает, как каждая ссылка на переменную SASS/LESS должна быть перекомпилирована если переменная меняется — дублирование кода снова и снова для каждого экземпляра.

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

.grid {
  --columns: 2;
  --gutter: calc(var(--columns) * 1rem);
  display: grid;
  grid-template-columns: repeat(var(--columns), 1fr);
  grid-gap: var(--gutter);

  @media (min-width: $medium) {
    --columns: 3;
  }

  @media (min-width: $large) {
    --columns: 4;
  }
}

Эта концепция помогает сформировать логику контейнерных единиц; сохраняя логику один раз в корне, каждый элемент в вашем документе отслеживает эти значения по мере их обновления и отвечает соответствующим образом.

Попробуйте!

  • «В чем разница между переменными CSS и переменными препроцессора?» Крис Койер
  • «Когда и как использовать многоколоночный макет CSS», Рэйчел Эндрю.
  • «Общие проблемы с CSS для интерфейсных проектов», Ахмад Шадид
  • «Шаблоны проектирования таблиц в Интернете», Чен Хуэй Цзин.
Сокрушительная редакция
(дм, ра, ил)




Source: https://smashingmagazine.com

Заключение

Вы ознакомились с статьей — Создание надежных компоновок с помощью контейнеров

Пожалуйста оцените статью, и напишите комментарий.

Похожие статьи

Добавить комментарий

Ваш адрес email не будет опубликован.

Кнопка «Наверх»