Как стать автором
Обновить

Комментарии 7

И снова здравствуйте))

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

Здравствуйте.

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

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

.list-item + .list-item {
  margin-top: 1rem;
}

Чем это хорошо?
Семантически отступ как бы выносится на уровень выше, где ему и следует быть.
Практически это читается легче, чем :nth-child() , потому что не нужно в голове формулы парсить.

Если список двумерный, то скорее всего, нужно просто использовать grid и gap. Флекс для этого неважно подходит.

Если список одномерный и однородный

А может лучше сразу:

.list-item ~ .list-item

.list-item:not(:first-child)

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

Мне вот "семантически" более верной кажется именно фильтрация через :not - "все, кроме...". Чем пытаться формулировать в голове цепочку "только если за элементом x непосредственно следует элемент y".

К тому же, если вам понадобится задать отступ у всех элементов кроме последнего (не всегда же margin-top проставлять, иногда и margin-bottom нужен), здесь ваша привычка через непосредственный соседний селектор даст сбой. И получается что в одном случае у вас будет p + p, а в другом p:not(:last-child) - каша мала какая-то получится.

Касаемо первых двух описанных проблем, полностью согласен. Они правда часто встречаются, правда я бы посоветовал для единообразия использовать оформление:

margin: 0rem 0rem;
padding: 0rem 0rem 0rem 0rem;

Имхо так код более читаем, чем с использованием -top, -bottom, -left, -right префиксов. Вместо 2-4 строчек мы всегда имеем одну.

Касаемо последней проблемы, то идея неплохая, но селектор с nth-child(2), имхо лучше не использовать в списках или перечислениях элементов в целом. В примере указан селектор (> :nth-child(2)) и он будет работать спору нет, но что произойдёт, когда количество элементов поменяется? А если нужно будет сделать несколько кнопок с особой иконкой, то нам через запятую перечислять все селекторы? Как по мне в таких случаях лучше использовать первоначальный вариант, но немного изменить его:

uia-button--icon-before
uia-button--icon-after
uia-button

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

Неверный ответ.

Margin - это margin (со всеми своими особенностями), padding - это padding, а gap - это gap. Первые два вообще свою историю из типографики, видимо, ведут. Использовать нужно именно те свойства, которые необходимо задать. А не заниматься "трюкачеством" и использовать свойства не по своему прямому назначению, пусть и с одинаковым внешним результатом. Вам напомнить блочную модель? И что будет, если padding заменить на margin?

Зарегистрируйтесь на Хабре, чтобы оставить комментарий