Java, UX, HTML, CSS, WEB-design

Дерзкое управление Z-индексом для сложных макетов

[ad_1]

  • Джеки Бальцер

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

Дерзкое управление Z-индексом для сложных макетов

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

  • Кодирование, Фреймворки, CSS, Sass

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

Z-индекс по своей сути сложная штука, а поддержание порядка z-индексов в сложном макете, как известно, сложно. При разных порядках укладки и контекстах отслеживать их по мере увеличения их количества может быть сложно — и как только они начнут распространяться по файлам CSS, забудьте об этом! Поскольку z-index может сделать или разрушить видимость и удобство использования элемента пользовательского интерфейса, поддержание пользовательского интерфейса вашего веб-сайта в рабочем состоянии может быть тонким балансом.

Поскольку z-index зависит от контекста, как только вы начнете его использовать, другим элементам может быть легко начать требовать его. Находка z-index: 99999 правила, разбросанные по всему веб-сайту, не редкость, но печально известный 99999 был просто рожден разочарованием. Его часто неправильно используют как простой способ поставить элемент выше всего остального, но z-indexе не всегда так прямолинейны. Это также не совсем масштабируемо: что, если вам нужно добавить что-то сверх этого?

Дальнейшее чтение на SmashingMag:

  • CSS-свойство Z-Index: всесторонний взгляд
  • Расширение в Sass без создания беспорядка
  • Что каждый должен знать о процессе разработки приложений
  • Сильный, лучший, быстрый дизайн с CSS3

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

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

Каждый экземпляр z-index вызывает ряд вопросов:

  1. Почему этот элемент имеет такое значение z-index? Что это означает в контексте любого другого элемента?
  2. Какое место он занимает в порядке и контексте других значений z-index? Если я увеличу этот, какие другие пострадают?
  3. Если я добавлю элемент в порядок наложения, какие значения z-index мне нужно соответственно увеличить?

Использование Sass для поддержания порядка

В Sass контролировать все вышеперечисленные факторы легко с помощью списков. Давайте используем домашнюю страницу Behance в качестве примера:

sass z-индекс
Контролировать все вышеперечисленные факторы легко с помощью списков. (Посмотреть большую версию)
Нам нужно поддерживать порядок размещения обложек проекта, панели фильтров, модального окна поиска местоположения, настраиваемого раскрывающегося списка над модальным окном и навигации по веб-сайту в этом порядке, снизу вверх. Мы можем настроить список Sass, например:

$elements: project-covers, sorting-bar, modals, navigation;

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


.project-cover {
   z-index: index($elements, project-covers);
}

Это распечатает:


.project-cover {
   z-index: 1;
}  

Это потому что project-cover это первый элемент в списке по индексу 1и самый низкий элемент в нашем порядке наложения z-индекса. Давайте напишем Sass для остальных элементов нашего списка:


.sorting-bar {
   z-index: index($elements, sorting-bar);
}
.modal {
   z-index: index($elements, modals);
}
.navigation {
   z-index: index($elements, navigation);
}  

Теперь наш скомпилированный CSS будет выглядеть так:


.project-cover {
   z-index: 1;
}
.sorting-bar {
   z-index: 2;
}
.modal {
   z-index: 3;
}
.navigation {
   z-index: 4;
}   

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

С Sass нам просто нужно обновить наш список новым элементом.
С Sass нам просто нужно обновить наш список новым элементом. (Посмотреть большую версию)
С ванильным CSS это изменение будет означать необходимость обновления значений z-index панели сортировки, модального окна и навигации. С Sass нам просто нужно обновить список с нашим новым элементом:

$elements: project-covers, user-tooltip, sorting-bar, modals, navigation;   

Поскольку значения z-index полосы сортировки, модальных окон и навигации в списке изменились (у них были значения 2, 3 и 4 но теперь 3, 4 и 5), наш скомпилированный CSS автоматически скорректирует их значения z-index, используя их новые позиции. Давайте добавим эту новую строку Sass:


.user-tooltip {
   z-index: index($elements, user-tooltip);
}  

Таким образом, скомпилированный CSS будет выглядеть следующим образом:


.user-tooltip {
   z-index: 2;
}
.sorting-bar {
   z-index: 3;
}
.modal {
   z-index: 4;
}
.navigation {
   z-index: 5;
}

## Масштабирование решения по контекстам наложения Предположим, что наш макет еще более сложный, с несколькими контекстами наложения и порядком наложения. (Помните, что для того, чтобы значение z-index элемента имело эффект, его position не должно быть static. Это то, что создает новый контекст наложения, задавая всем дочерним элементам порядок наложения, специфичный для его родителя.) В этом случае одного линейного списка может быть недостаточно. Вместо этого мы можем создать столько списков, сколько нам нужно, каждый из которых будет считаться одним контекстом.

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

$elements: project-covers, user-tooltip, sorting-bar, modals, navigation;
$modal-elements: fields, form-controls, errors, autocomplete-dropdown;

.modal {
   z-index: index($elements, modals);

   .field {
      z-index: index($modal-elements, fields);
   }
   .form-controls {
      z-index: index($modal-elements, form-controls);
   }
   .error {
      z-index: index($modal-elements, errors);
   }
   .autocomplete-dropdown {
      z-index: index($modal-elements, autocomplete-dropdown);
   }

} /* .modal */

Это компилируется в:


.modal {
   z-index: 4;
}
.modal .field {
   z-index: 1;
}
.modal .form-controls {
   z-index: 2;
}
.modal .error {
   z-index: 3;
}
.modal .autocomplete-dropdown {
   z-index: 4;
}   

## Масштабирование решения на веб-сайте Наиболее важным требованием этого метода является его соблюдение. Любые мошеннические жестко запрограммированные значения z-index могут поставить под угрозу целостность значений, полученных из вашего списка. Из-за этого вы можете обнаружить, что вам нужно поддерживать порядок z-index на нескольких страницах веб-сайта. Самое простое решение — создать партиал, содержащий списки для всего сайта, которые затем можно включить в любое место, где вам это нужно. (Возможно, у вас уже есть партиал, который вы включаете везде, где хранятся переменные для цветов вашего веб-сайта, размеров шрифта и т. д. — это та же идея.) ### _zindex.scss


$elements: project-covers, user-tooltip, sorting-bar, modals, navigation;
$modal-elements: fields, form-controls, errors, autocomplete-dropdown;   

### mypage.scss


@import '_zindex.scss'

.modal {
   z-index: index($elements, modals);
}   

Также возможно объединение или изменение глобальных списков на отдельной странице. Вы можете импортировать свой частичный список, а затем использовать функции списка Sass (или другие расширенные функции) для изменения по мере необходимости. Например:


@import '_zindex.scss'

$modal-elements: append($modal-elements, close-button);
$elements: insert-nth($elements, sidebar-filters, 3);

.modal .close-button {
   z-index: index($modal-elements, close-button);
}
.sidebar-filter {
   z-index: index($elements, sidebar-filter);
}   

Этот Sass добавит кнопку «Закрыть» в конец модального порядка размещения и вставит птиц в основной порядок размещения страницы, на которую он включен, и все это не повлияет на другие страницы, использующие этот параметр. _zindex.scss частичный. ## Отчеты об ошибках Всегда проверяйте наличие ошибок в коде, чтобы избежать ошибок. Например, если вы попытались получить значение z-index элемента, не входящего в ваш список, вы можете получить неожиданный результат:


.objects {
   z-index: index($elements, thing-not-in-my-list);
}
.objects {
   z-index: false;
}

Так как false не является допустимым значением для z-index, мы не хотим этого в нашем скомпилированном коде. Мы можем предотвратить это, создав пользовательскую функцию, которая действует как прокси для вызова list и это использует Sass @warn чтобы сказать нам, если что-то пошло не так.


@function z($list, $element) {

   $z-index: index($list, $element);

   @if $z-index {
      @return $z-index;
   }

   @warn 'There is no item "#{$element}" in this list; choose one of: #{$list}';
   @return null;
}   

Эта функция принимает те же аргументы, что и index, но прежде чем вернуть значение, он проверяет, что мы запрашиваем что-то, что существует в списке. Если значение существует, то возвращается результат index Звоните, как прежде. Если значение не существует, то происходят две вещи:

  1. Печатается предупреждение о том, что запрашиваемого вами элемента нет в списке, а также печатаются значения списка, чтобы вы могли видеть, из чего выбирать.
  2. Возвращаемое значение nullкоторый говорит Sass вообще не распечатывать правило.

Итак, вместо следующего недопустимого CSS…


.objects {
   z-index: false;
}   

z-index вообще не напечатают. В качестве бонуса, если бы это было единственное правило в вашем наборе правил, то Sass даже не печатал бы селектор, тем самым сводя к минимуму ненужный вывод. ## Заключение Отслеживание контекстов и порядков укладки в CSS сложно, но переменные в препроцессорах значительно облегчают эту задачу. Есть много способов справиться с этим, но подход, который мы рассмотрели здесь, должен быть наиболее простым и требовать наименьшего объема обслуживания, используя простые списки элементов в том порядке, в котором они должны появляться. И поскольку списки и функции Sass настолько эффективны, у вас есть бесконечные возможности для расширения этой техники, чтобы она была настолько всеобъемлющей, насколько вам нужно! ### Ресурсы

  • «Свойство CSS Z-Index: всесторонний взгляд», Луи Лазарис.
  • «Что вам никто не говорил о Z-индексе», Филип Уолтон
  • «Работа с Z-индексом», Крис Койер
  • «Контекст стекирования», Паоло Ломбарди.
  • «Функции скрипта», документация Sass
  • «Расширенные функции списка Sass», Китти Жиродель
Сокрушительная редакция
(ал, мл, ил)



[ad_2]
Source: https://smashingmagazine.com

Заключение

Вы ознакомились с статьей — Дерзкое управление Z-индексом для сложных макетов

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

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

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

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

Краткое описание по статье Дерзкое управление Z-индексом для сложных макетов

Название: Дерзкое управление Z-индексом для сложных макетов . Краткое описание: [ad_1] ⭐ Джеки Б . Дата публикации: 10.02.2022 . Автор: Алишер Валеев .

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

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

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

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

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