Jump to content
  • 0

Вложенные селекторы


Justnewone
 Share

Question

Часто возникают вопросы по поводу вложенности селекторов. "Указываю свойство в CSS, а оно не применяется".

В том случае, если цепочка указания верная, существует вероятность, что достичь результата не позволяет более сильный селектор. Давайте попробуем разобраться:

Принцип состоит в следующем.

Самым сильным является инлайн стиль, его нельзя переназначить ничем. Если Вы указали в своем html документе, будьте готовы, что их не удастся переназначить в CSS, хоть в шапке, хоть в отдельном файле. Поэтому я бы не рекомендовал вообще их использовать, лучше назначить элементу класс и задать через него, причем цправляться будет централизовано, Вы в любой момент сможете в одном месте в CSS переназначить все что угодно для всех страниц, где встречается данный класс, тем самым оптимизируя код.

Менее сильным является id, который является уникальным и на одной отдельно взятой странице может встретиться только 1 раз.

Еще слабее class. Классы могут сколь угодно много раз встречаться на одной странице.

Предпоследнее по силе место занимает название самого элемента, название тега.

Самый слабый - это селектор *, который представляет из себя какой-угодно селектор. Это единственное правило, которое перенял CSS из регулярных выражений, в которых "*" - это все что угодно.

Есть небольшое исключение, это !important. Не являясь селектором, но будучи добавленным в свойство CSS, !important способен переназначить абсолютно любое свойство CSS, назначенное любым способом.

Теперь, о компоновке сложного селектора. Сложный селектор, это тот, в котором указано более одного простого селектора, да, все просто. :D

Если не применен !important, существует правило, некая табличка, которой можно пользоваться, чтобы переназначать стиль, очень напоминает отнимание одного числа от другого:

Представьте себе, четыре поля - X(inline) X(id) X(class) X(TAG-name), обратите внимания, они расположены в порядке убывания значимости в сложном селекторе. Для того, чтобы эта конструкция обрела смысл, необходимо при сравнении 2-х селекторов последовательно посчитать количество простых селекторов каждого типа и внести в эту табличку значения.

Пример:

1. HTML #main .menu UL LI SPAN.accent A

2. #main #left DIV.block A

В первом случае мы получим 0(inline) 1(id) 2(class) 4(TAG-name)

Во втором случае мы получим 0(inline) 2(id) 1(class) 2(TAG-name)

получаем 2 как-будто числа, 0124 и 0212. Отняв одно от другого :) как простые (в данном случае, ибо одинаковые соответствующие цифры в начале можно исключить) трехзначные числа, мы устанавливаем, что число 212 больше чем 124, соответственно, селектор #main #left DIV.block A несмотря на то, что он визуально короче и имеет меньше "колен" - сильнее, чем селектор HTML #main .menu UL LI SPAN.accent A.

Если же при арифметическом действе мы в конце получаем 0, значит более сильным окажется селектор, который браузер увидит самым последним.

Этим способом можно безошибочно вычислять абсолютно любые селекторы. Желаю Всем дальнейших творческих успехов.

PS:

А, кстати, забыл добавить, что селектор * актуален только в том случае, если не указано никаких более селекторов. Поэтому его можно не учитывать, никакого ВЕСА он в этой табличке не имеет. Псевдоклассы, типа hover и т.д. в подсчете тут тоже не участвуют.

Edited by Justnewone
Link to comment
Share on other sites

2 answers to this question

Recommended Posts

  • 0

Чтобы лучше понимать то, про что здесь говорится, возьмем простой пример. Вы - начальник бригады разнорабочих.

style будет равнозначен следующему приказу: (указывая на конкретного человека) "Ты идешь со мной".

id: "Иванов Иван Иванович, на выход".

class: "Все Ивановы идут со мной".

имя тега: "Все сантехники, на выход"

Вы можете комбинировать, например, все сантехники Петровы, или маляр Иванов Иван Иванович, и достигать наилучшего результата в своих селекторах.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy