Если спросить любого дизайнера: «Что такое оптическая компенсация?» — он ответит, что это когда круг делают больше, чем квадрат, чтобы выглядело так, будто они одинакового размера.
Это базовое знание, с него начинается любой курс для начинающих.
И на практике чаще всего этот принцип применяют так, как он был описан, когда в макет нужно поместить что-то круглое вместе с чем-то некруглым: иконку добавить в начало строки или, например, аватарку выровнять относительно блока с описанием. В таких случаях круглый элемент делают чуть больше и сдвигают на пару пикселей влево и вверх, чтобы компенсировать оптическую потерю веса.
Но что если этот принцип применить шире? Там, где нет ничего круглого, но один элемент так же может терять вес относительно другого равноценного ему. Например, в формах.
Формы могут быть разные, но чаще всего они состоят из двух одинаково важных частей: набора полей и блока с действием. Самая простая форма — это одно поле с кнопкой.
Поле и кнопка одинаковой высоты, имеют одинаковый вес и хорошо работают друг с другом.
Форма может быть вертикальной и состоять из нескольких полей и кнопки. Как на авторизации, например. И здесь тоже все одинакового размера и хорошо работает.
Но чем богаче становится набор полей, тем больше он начинает «отъедать» веса у блока с действием. И если в небольшой форме кнопка по весу приравнивалась ко всему набору полей, то в большой ее вес становится равен отдельно взятому полю. Из-за чего слабеет восприятие кнопки как кульминации формы.
Это лучше видно на реальном примере.
Здесь как раз хорошо вспомнить принцип оптической компенсации
и пойти похожим путем: повысить вес кнопки за счет увеличения ее высоты относительно полей формы.
Да, это не совсем оптическая компенсация. Предпосылки другие. Здесь нет оптических иллюзий, мы работаем только с визуальным весом. И, несмотря на то что решение то же самое (увеличивать размер), принцип, для чистоты, правильно будет назвать «визуальная компенсация».
Если тебе повезло (или не повезло) и у проекта есть библиотека элементов, достаточно взять из нее кнопку на один размер больше. Если в форме поля размера S, то кнопку берем M, если поля M, то кнопка L. Принцип простой.
Если у проекта нет библиотеки элементов, это хороший предлог начать ее собирать. Как раз с самого базового элемента — кнопки. Разница в размерах по высоте может быть от 8 до 16 пикселей — по твоему усмотрению.