Web Design & UI/UX7 min read

Цвет разделителя в UI: почему разделители не бывают #000000

Чисто чёрная линия между строками списка громче слов, которые она разделяет. Берите #C6C6C8 на светлом, #38383A на тёмном, 1 px, с отступом до текста, и сначала попробуйте пространство, а уже потом рисуйте линию.

By Boone
XLinkedIn
Divider Color in UI: Why Dividers Are Not #000000

Правильный цвет разделителя это мягкий светло-серый вроде #C6C6C8, толщиной 1 px и с отступом до текста, а не чисто чёрная линия. Разделитель нужен, чтобы отделять строки, а чёрный становится самым громким элементом списка. Вот четыре исправления со значениями для светлых и тёмных экранов.

Почему чёрные разделители кричат

Никто не выбирает чёрный разделитель специально. Линия, нарисованная не задумываясь, получается #000000 и остаётся такой, пока кто-нибудь её не поменяет.

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

Разделитель это подсказка, а не фича. Его задача: находиться глазом, когда нужно, и игнорироваться всё остальное время.

Исправление 1: осветлите линии

Линии #000000

Список настроек со строками Wi-Fi, Сотовая связь и Уведомления, разделёнными жёсткими чёрными линиями

Линии #C6C6C8

Тот же список настроек с мягкими светло-серыми линиями между строками
Тот же список, те же строки. Слева линии самые тёмные штрихи на экране. Справа ведут слова, а линии остаются позади них.

iOS рисует разделители списков цветом #C6C6C8 на белом: это полупрозрачный системный цвет разделителя, осевший на белом фоне. Material 3 приходит к тому же с #CAC4D0, токеном outline variant, толщиной 1 dp.

#000000

Чёрная линия

#6B6B6B

Разделитель iOS

#6B6B6B

Разделитель Material 3

#6B6B6B

12% чёрного на белом

Если фон не чисто белый, используйте альфа-значение вместо фиксированного серого. Руководство Material описывает разделители как 12% чёрного в светлых темах и 12% белого в тёмных. #000000 с 12% поверх белого даёт #E0E0E0, а поверх тонированной поверхности остаётся тонированным, так что линия не выглядит приклеенной.

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

Исправление 2: сделайте отступ до текста

На всю ширину

Список настроек, где каждый разделитель идёт от левого края, под цветными иконками

Начинается у текста

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

Откройте «Настройки» на iPhone и посмотрите. Линия начинается у подписи, а не под иконкой. Material говорит то же самое: разделители с отступом отделяют связанный контент и сочетаются с якорными элементами, такими как аватары.

Именно этот отступ привязывает иконку к её строке. Линия на всю ширину под иконкой отрезает её, и список читается как полосы, а не как строки.

Начиная с iOS 16, списки SwiftUI по умолчанию выравнивают каждый разделитель по ведущему краю текста строки, а не по иконке. Если в строках нет иконки или аватара, обходить нечего, и линия на всю ширину подойдёт.

Исправление 3: сначала попробуйте пространство

Линия у каждой строки

Карточка события с чёрной линией между каждой строкой деталей

Справляется пространство

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

Прежде чем тянуться к линии, спросите, зачем она нужна. Часто это группировка, а группировать можно расстоянием. Material перечисляет альтернативы разделителям на всю ширину: свободное пространство, подзаголовки и разделители с отступом, и предупреждает, что злоупотребление полноширинными создаёт визуальный шум. Refactoring UI приводит тот же аргумент под лозунгом «используйте меньше границ»: разделяйте вещи пространством, цветом фона или тенью.

Быстрый тест: удалите все линии в списке. Если группы всё ещё видны, линии были декорацией.

Исправление 4: приглушите их и на тёмном

#FFFFFF на #1C1C1E

Тёмный список настроек, где каждый разделитель это яркая белая линия, слепящая глаза

#38383A на #1C1C1E

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

На тёмной теме правило не меняется, оно переворачивается. На светлом экране линия чуть темнее поверхности, а на тёмном чуть светлее.

iOS использует #38383A на тёмном фоне списка. Material 3 использует #49454F, свой тёмный outline variant, на поверхности #141218.

Чисто белые линии страдают той же проблемой, что и чисто чёрные: это самые яркие штрихи в списке, поэтому они побеждают текст.

Спецификация разделителя

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

Разделители светлой темы. Нажмите на цвет, чтобы скопировать код.
Разделители тёмной темы. Нажмите на цвет, чтобы скопировать код.
СвойствоЗначениеПочему
Цвет, светлая тема#C6C6C8Заметен, когда смотришь, тих, когда читаешь
Вариант с альфой#000000 при 12%Подстраивается под любую поверхность, на белом даёт #E0E0E0
Толщина1 px (1 dp)Более толстые линии становятся фигурами
ОтступНачинать у текстаУдерживает иконки и аватары привязанными к строкам
Цвет, тёмная тема#38383AЧуть светлее поверхности, никогда не белый
ПространствоПробуйте первымГруппировка без рисования чего-либо

Передайте это разработчику

css
:root { --divider: #C6C6C8; } @media (prefers-color-scheme: dark) { :root { --divider: #38383A; } } .row + .row { border-top: 1px solid var(--divider); margin-left: 56px; /* icon width plus gap, so the line starts at the text */ } .group + .group { margin-top: 24px; /* try this before adding a line */ }

margin-left у границы и есть отступ: линия начинается там, где начинается подпись. Если используете подход с альфой, замените переменную на rgba(0, 0, 0, 0.12) для светлой темы и rgba(255, 255, 255, 0.12) для тёмной.

FAQ

Какого цвета должны быть разделители?

Мягкий светло-серый на светлых экранах, например #C6C6C8 в iOS или #CAC4D0 в Material 3. На тёмных экранах используйте чуть более светлый тёмно-серый, например #38383A.

Должны ли разделители быть чёрными?

Нет. Чисто чёрная линия это самый контрастный штрих в списке, поэтому глаз читает её раньше контента. Используйте светло-серый или чёрный с прозрачностью около 12%.

Какой толщины должен быть разделитель?

1 px, то есть 1 dp в Material. Более толстые линии превращаются в фигуры и конкурируют со строками.

Что такое разделитель с отступом?

Разделитель, который начинается у текста строки, а не у края экрана, поэтому не режет под иконкой или аватаром. «Настройки» в iOS используют его для каждого списка.

Нужны ли разделители между каждой строкой?

Не всегда. Больший промежуток между группами часто отделяет контент, ничего не рисуя, а Material предупреждает, что злоупотребление полноширинными разделителями создаёт визуальный шум.

Какой цвет разделителя работает в тёмной теме?

#38383A на тёмном фоне списка iOS и #49454F на тёмной поверхности Material 3. Избегайте белого, потому что яркие линии слепят на тёмных экранах.

Источники

  • Material Design 2, Dividers: разделители толщиной 1 dp, 12% чёрного в светлых темах или 12% белого в тёмных; разделители с отступом отделяют связанный контент и работают с якорными элементами, такими как аватары; альтернативы полноширинным разделителям включают свободное пространство, подзаголовки и разделители с отступом; злоупотребление полноширинными разделителями создаёт визуальный шум.
  • Material 3 tokens: разделитель использует цвет outline variant толщиной 1.0 dp; базовое значение #CAC4D0 в светлой схеме и #49454F в тёмной. #141218 это базовая тёмная поверхность.
  • Apple, listRowSeparatorLeading и Adjust List Row Separator Insets: начиная с iOS 16 списки по умолчанию выравнивают каждый разделитель по ведущему краю текста строки.
  • Цвета разделителей iOS: светлый rgba(60, 60, 67, 0.29), который на белом выглядит как #C6C6C8, и #38383A на тёмном. Приложение «Настройки» на iPhone показывает отступ.
  • #000000 с 12% поверх #FFFFFF даёт #E0E0E0, рассчитано альфа-смешением.
  • Refactoring UI, «Use fewer borders» (Адам Уотан и Стив Шогер).
  • WCAG 2.2, 1.4.11 Non-text Contrast: разделитель между строками списка это декорация, он не нужен для понимания контента, поэтому минимальный контраст к нему не применяется.
  • Строки настроек и детали события «Design review» придуманы для этой страницы.
  • Впервые опубликовано как карусель в UX Brainy.

Want lists, forms and every other surface designed as one quiet system? Our team designs and builds product UI that holds up in light and dark.

Get Started

More from Brainy Papers

Keep reading