Подтвердить что ты не робот

Должен ли я использовать одиночные двоеточия (:) или двойные двоеточия (::) для псевдо-элементов до, после, первой буквы и первой строки?

Из MDN:

Обозначение :: было введено в CSS 3, чтобы установить дискриминация между псевдоклассами и псевдоэлементами. Браузеры также принять обозначение :, введенное в CSS 2.

Если обозначение : всегда будет приниматься браузерами CSS3, я должен использовать его, потому что он работает в старых и новых браузерах?

Или использовать оба из них, : для старых браузеров и :: для новых, потому что нотация : не всегда будет принята?


Примечание. Я думаю, что мой вопрос не является дубликатом, это не дубликат Должен ли я использовать одиночную или двойную нотацию для псевдоэлементов?, потому что в другом вопросе возникает вопрос о единичных и двойных обозначениях для ВСЕХ псевдоэлементов; в то время как мой вопрос касается только псевдоэлементов, определенных в CSS2, а не новых, определенных в CSS3, потому что я уже знаю, что с ними я должен использовать ::.

4b9b3361

Ответ 1

Для чего это стоит Селекторы 4 теперь явно спрашивают 1 что авторы используют двойные двоеточия для всех псевдоэлементов, включая псевдо-элементы CSS1 и CSS2, в дальнейшем:

Из-за устаревших ограничений пользовательские агенты должны разрешать ::before, ::after, ::first-line и ::first-letter псевдоэлементы, которые должны быть написаны с одним двоеточием, а не с двумя, подобно синтаксису псевдокласса. Авторы должны всегда использовать синтаксис с двойной колонкой для этих псевдоэлементов.

Это означает, что единственное правильное использование синтаксиса с одной колонкой сегодня - это если вы абсолютно нуждаетесь в унаследованной поддержке браузера - единственный браузер, который здесь имеет значение, - это IE8 и старше. Если вы этого не сделаете, вы должны использовать синтаксис с двойной колонкой для согласованности с новыми псевдоэлементами, которые будут принимать только двойные двоеточия. Кроме того, совершенно бессмысленно использовать синтаксис с одной колонкой, если, например, вы собираетесь применять свойства, которые не поддерживаются IE8 в любом случае, например border-radius или box-shadow, на ваши ::before и ::after псевдоэлементы.

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

Кроме того, нет никаких оснований использовать обе нотации вместе (например, :before, :after { ... } ::before, ::after { ... }), так как ни один браузер не поддерживает новый синтаксис, не поддерживая более старый.


1 Я говорю, что это полностью осознает, что, вероятно, это не указывалось в то время, когда задавался этот вопрос - Май 2013 WD, конечно, не сделал.

Ответ 2

Как я уже упоминал ранее в этом комментарии - http://css-tricks.com/html5-progress-element/#comment-533395

Короткий ответ - используйте одиночную нотацию двоеточия :

Длинный ответ. Нет реальной разницы между :before и ::before, или между :after и ::after. Но так как старые браузеры используют одну двоеточие, то использование : всегда более безопасное. Прочитайте эту спецификацию, определенную W3C на псевдоэлементах, которая гласит, что

Это: нотация вводится текущим документом, чтобы установить дискриминацию между псевдоклассами и псевдоэлементами. Для совместимости с существующими таблицами стилей пользовательские агенты также должны принимать предыдущую однотопливную нотацию для псевдоэлементов, введенных в CSS-уровнях 1 и 2 (а именно: first-line,: first-letter, before и: after). Эта совместимость не допускается для новых псевдоэлементов, введенных в CSS-уровне 3.

Ответ 3

Я бы пошел за синглом: У людей теперь есть дни, по крайней мере, некоторые из последних браузеров установлены, поэтому вам не о чем беспокоиться.