#css #sass #pseudo-element
#css #sass #псевдоэлемент
Вопрос:
Я не использую SASS очень долгое время и хотел бы знать, есть ли какие-то проблемы с псевдоэлементами, такими как :first-child
или :last-child
?
Комментарии:
1. В scss мне пришлось сделать:
div { > div:nth-child(1) { styles } }
Ответ №1:
Хотя @Andre прав, что существуют проблемы с псевдоэлементами и их поддержкой, особенно в старых браузерах (IE), эта поддержка постоянно улучшается.
Что касается вашего вопроса о том, есть ли какие-либо проблемы, я бы сказал, что на самом деле я их не видел, хотя синтаксис для псевдоэлемента может быть немного сложным, особенно при первом разборе. Итак:
div#top-level
declarations: ...
div.inside
declarations: ...
amp;:first-child
declarations: ...
который компилируется, как и следовало ожидать:
div#top-level{
declarations... }
div#top-level div.inside {
declarations... }
div#top-level div.inside:first-child {
declarations... }
Я не видел никакой документации ни по одному из этого, за исключением заявления о том, что «sass может делать все, что может делать css». Как всегда, с Haml и SASS отступ — это все.
Комментарии:
1. Очень полезно — как указано выше, не забудьте поставить amp; перед :first-child , как в amp;:first-child
2. В вашем примере, разве вы не должны ожидать, что это скомпилируется в div#top-level:first-child? amp;: первый потомок находится за пределами блока div.inside, зачем его применять к div.inside?
3. @Danny: Абсолютно верно — я обновил пример, чтобы отразить.
Ответ №2:
Я думаю, что лучше (по моему опыту) использовать: :first-of-type
, :nth-of-type()
, :last-of-type
. Это можно сделать, немного изменив правила, но я смог сделать гораздо больше, *-of-type
чем *-child
селекторы.
Ответ №3:
Именно так я обычно пишу псевдоэлементы :first-child
, :last-child
и :nth-child(n)
в sass
.my-class {
amp;:first-child {
// your css code
}
amp;:last-child {
// your css code
}
amp;:nth-child(2) {
// your css code
}
}
Ответ №4:
Прежде всего, все еще существуют браузеры, которые не поддерживают эти псевдоэлементы (т. Е.: первый потомок, : последний потомок), поэтому вам придется «разобраться» с этой проблемой.
Есть хороший пример, как заставить это работать без использования псевдоэлементов:
— смотрите пример канала с разделителем.
Я надеюсь, что это было полезно.
Комментарии:
1. Кстати, приятно знать, что :first-child существует с нами со времен CSS2 и, следовательно, широко поддерживается, тогда как :last-child был добавлен только в CSS3.
2. Я согласен с вами, @Ronny, но все же людям приходится сталкиваться с некоторыми проблемами со старыми версиями браузеров, хотя: first_child появился в CSS2, старые браузеры глючат. Ссылка: reference.sitepoint.com/css/pseudoclass-firstchild
3. Да, но при работе с наиболее распространенными случаями — удалением первой / последней границы и т.п., нет причин использовать еще менее поддерживаемый селектор. В остальном я полностью за агрессивную деградацию 😉