дабы не создавать новую тему…
вопрос, почему эти 2 варианта вносят кардинально разный результат?
ul :first-child { /* закрасит первую мишень*/
background-color: red;
}
ul:first-child { /* закрасит фон, а не мишени*/
background-color: red;
}
жесткий синтаксис относительно пробела и first-child:
пробел есть перед двоеточием -> дочерний элемент;
пробела нету -> к самому родительскому элементу
пробел есть после двоеточия -> вообще не работает.(ul: first-child { })
… и last-child:
пробел есть перед двоеточием -> дочерний элемент;
пробела нету -> вообще не работает.
Псевдоклассы(:first-child, :last-child, :nth-child и тд.) относятся конкретно к тому селектору, к которому вы их применяете. Если вы пишете ul:last-child - вы выбираете последний ul из всех ul.
Когда вы пишете ul :last-child(с пробелом перед двоеточием) - вы выбираете последний дочерний элемент ul в данном случае это - li.
Теория не скуповата, а рассчитана на то, что вы будете стараться соблюдать семантичность разметки.
Я к тому, что если вы применяете :last-child к элементу списка(li), то не надо изобретать колесо, а просто напишите li:last-child.