Какова поддержка браузера для этого?
По сути, IE7 + и любой другой современный браузер.
Могут быть угловые случаи для каждого браузера, в зависимости от того, какие элементы на самом деле выбираются или запрашиваются с помощью братского комбинатора +
, но я бы не стал беспокоиться о них так же сильно, как о том, что поле применяется только к о любом элементе это брат или сестра без практической причины.
Есть ли случаи, когда вы не хотели бы иметь равномерный интервал между элементами в статье, и если нет, проще ли сначала объявить это, а затем перезаписать или просто объявить каждый элемент отдельно?
Это кажется довольно полезным на первый взгляд, но если вы подумаете об этом, вероятно, будет гораздо лучше уточнить, к чему применять маржу. Это одно правило, которое я могу себе представить, будет многократно переопределено во всей остальной таблице стилей другими определенными селекторами, что делает его довольно избыточным и даже нежелательным во многих случаях. Я не могу представить себе какое-либо использование в реальном мире для правила, подобного вашему примеру.
Имейте в виду, что в этом конкретном случае вертикальные поля будут сжиматься , поэтому вам нужно только определить вертикальные поля для набора элементов, не прибегая к применению margin-top
исключительно ко всем элемент, следующий за братьями и сестрами.
Есть ли у вас проблемы с производительностью, так как вы выбираете все дважды?
На самом деле, не все выбирается дважды. Браузер просматривает каждый элемент только один раз, а затем определяет, следует ли каждому элементу другой элемент под тем же родительским элементом. Неважно, за каким элементом он следует, если он следует за другим. Не нужно снова выбирать каждый элемент, а затем сравнивать, чтобы увидеть, являются ли они братьями и сестрами.
Теперь, люди говорят , что использование универсального селектора *
в сочетании почти с любым комбинатором приводит к катастрофическим последствиям производительности рендеринга, поэтому люди говорят , что такого рода вещи следует избегать любой ценой. Но эти вещи вряд ли важны вообще (честно говоря, селектор, такой как * + *
, всего на несколько микросекунд медленнее, чем p + p
), так что вам действительно не нужно беспокоиться об этом. Сначала рассмотрите полезность самого правила CSS, а затем решите, действительно ли вам нужно правило, основанное на этом.
Теперь, учитывая все сказанное (здесь уже довольно поздно), я бы, вероятно, переписал пример, подобный этому, основываясь на том, что я сказал выше относительно коллапса полей:
.post > * { margin: 15px 0; }
Возможно, стоит заменить *
на p
, только если вы знаете, что единственные дочерние элементы, которые вы хотите выделить - это параграфы:
.post > p { margin: 15px 0; }
Или любые абзацы в пределах .post
по этому вопросу (например, в кавычках):
.post p { margin: 15px 0; }
(*
использование селектора потомков является честной игрой, я признаю; дочерний комбинатор, с другой стороны, ограничен только одним уровнем вложенности, поэтому для всех, кто помешан на производительности, это выиграет ' вообще больно.)