Прежде всего, ваши селекторы не совпадают. .twocolumn a
сам по себе будет соответствовать как a
элементам, так как вы не указали, что смотрите только в div:nth-child(1)
.
Это в сторону. Помните, что единственной целью комбинаторов в селекторах CSS является установление отношений между двумя или более элементами разметки. Таким образом, комбайнер из сестры говорит, что «этот элемент должен быть братом следующего за ним», компилятор-потомок говорит, что «этот элемент должен содержаться внутри этого», а дочерний комбинатор говорит, что «этот элемент является потомком этого». Если вам не нужно принудительно устанавливать определенную взаимосвязь между двумя элементами (обычно это происходит из предположений, которые вы делаете о структуре вашей страницы), то вам, вероятно, не нужно указывать, что многие элементы в вашем селекторе.
Берем фрагмент кода, например: если вы можете гарантировать, что каждый внутренний div
в пределах этой структуры имеет p
, за которым следует a
, вы можете оставить из p +
. Вам это нужно только в том случае, если a
может появиться в другом месте, и вы хотите убедиться, что вы нацеливаете только a
, если он непосредственно следует за p
.
Далее, если вы можете как-то гарантировать, что каждый section > div
будет иметь класс .twocolumn
, то вы можете просто использовать селектор классов. Я считаю, что на самом деле вряд ли учитывая то, что имя класса должно описывать, но при условии, что это так, то, если вы хотите, чтобы выбрать первый a
только вы будете нуждаться в div:nth-child(1)
по крайней мере:
.twocolumn div:nth-child(1) a {
...
}
Я могу» t предлагают гораздо более общие рекомендации, потому что это действительно зависит от ваших требований и того, с чем вы работаете. Но я скажу, что вы должны поддерживать баланс, т. Е. Не полностью полагаться на структуру вашей разметки, использовать классы и идентификаторы, чтобы указать на ключевые элементы, где это возможно. Как уже упоминалось в другом ответе, вы хотите избежать плотной связи вашего CSS и вашего HTML-кода, что приведет к изменению ваших селекторов, чтобы отразить любые потенциальные изменения в структуре HTML.
Но по-прежнему учитывайте небольшой набор возможных изменений в структуре, например, с приведенным выше примером p + a
, поэтому вы не будете излишне использовать классы и раздувать вашу разметку без необходимости. В настоящее время веб-приложения настолько динамичны, и CSS предоставляет достаточно мощный синтаксис для использования, поэтому не бойтесь его использовать и воспитывать других о том, как это работает.
Придерживайтесь более конкретного селектора. В этом случае это будет имя класса, так как глубина вложенности тегов может измениться. – WebChemist
Селекторы для вашей разметки не совпадают. Таким образом, его нельзя сравнивать. Эти два селектора имеют здесь разный смысл. –