Почему :: selection был удален из спецификации CSS Selectors, и как его специфичность работает с селекторами типа? - PullRequest
11 голосов
/ 21 декабря 2010

Некоторые вопросы об использовании CSS для указания цвета выделенного текста:

  1. https://developer.mozilla.org/En/CSS/::selection говорит, что

    ::selection былосоставлен для селекторов CSS3 , но удален из текущего черновика CSS3.В любом случае, это реализовано в браузерах, и поддержка будет продолжена.

    Почему он был удален?

  2. Представьте себе, что правило, подобное следующемусуществует в CSS по умолчанию, который реализован браузером:

    ::selection { background-color: Highlight; color: HighlightText; }
    

    Кроме того, представьте, что правило, подобное следующему, определено в любой созданной для конкретного сайта таблице стилей:

    body { background-color: white }
    

    Учитывая эти правила, каким будет цвет фона выделенного основного текста: white или Highlight?

    Возможно, правило в таблице стилей автора должно переопределить правило по умолчанию: потому чтов соответствии со спецификой, body точно так же, как и ::selection, и указывается позже (и поэтому должно переопределять предыдущую запись).

    С другой стороны, это приведет к тому, что текст будет невидимым при его выделении(потому что, если Highlight - синий, а HighlightText - белый, а выделенный текст - белым на синем, то переопределение background-color выделенного текста, так что его белый цвет приведет к тому, что он будетhite-on-white).

  3. Предполагая, что поведение на шаге 2 нежелательно, как его избежать?

    • Скажите, что это ошибка в пользовательской таблице стилей, которая не должна указывать background-color без указания color?

    • Скажите, что body не соответствуетдля выделенного основного текста, кроме случаев, когда псевдоэлемент ::selection указан как часть селектора?

Ответы [ 4 ]

7 голосов
/ 21 декабря 2010

Селекторы типа (например, body) и селекторы псевдоэлементов (например, ::selection) действительно имеют одинаковую специфичность , но специфичность вступает в действие только тогда, когда два селектора выбирают одинаковыеelement .

Селектор body не выделяет выделенный текст или какой-либо текст вообще - он выбирает элемент <body>.Это элемент, а не его текст, который имеет цвет фона.

Принимая во внимание, что ::selection выбирает воображаемый элемент, который окружает текущий выбранный текст на странице.Таким образом, нет конфликта между стилями, установленными на body и ::selected, потому что селекторы выбирают разные вещи.

Пример

Представьте, что у вас есть следующий HTML:

<body>
    I am some body text.

    <p>I am some text in a paragraph.</p>
</body>

И следующий CSS:

p {
    background-color: red;
}

body {
    background-color: white;
}

Оба селектора имеют одинаковую специфичность, но фон <p> будет по-прежнему красным, поскольку это не элемент <body>.

То же самое верно, если вы замените p на ::selection - фон выделенного текста будет красным, потому что текст в элементе <body> не является элементом <body>.

Итак, в принципе, чтоВы сказали здесь:

body не соответствует выбранному основному тексту, за исключением случаев, когда псевдоэлемент ::selection указан как часть селектора

3 голосов
/ 21 декабря 2010

Следующий стиль:

body { background-color: white }

относится к цвету фона вашей страницы.

С другой стороны, это правило:

::selection { background-color: Highlight; color: HighlightText; }

применяет стили, когда вы выбираете текст на своей странице.

Так что они делают совершенно разные вещи, и между ними не возникает вопроса о столкновении.

2 голосов
/ 21 декабря 2010

Почему это было удалено?

Хорошо, это был бы вопрос, который вы должны задать комитету W3C, который удалил его из проекта. Насколько я понимаю, в сообществе W3C было много внутренних потрясений с тех пор, как они начали писать проекты HTML5 и CSS3. Некоторые люди, которые управляют проектами, разрабатывающими браузеры (и я не буду вдаваться в названия), хотели, чтобы это было сделано одним способом, и разработчики были прокляты. Сообщество разработчиков хотело сделать это по-другому, и поэтому началась вражда по поводу того, кто должен контролировать W3C.

Учитывая эти правила, каким будет цвет фона выделенного основного текста: будет ли он белым или выделенным цветом?

Сарфраз ударил его по голове, псевдокласс: selection будет влиять только на выделенный текст. Так что в вашем примере, когда вы выделяете что-то, цвет фона меняется на Подсветка, когда он не выбран, он возвращается к белому.

Я не тестировал этот конкретный пример, но вот что я понимаю

0 голосов
/ 25 июля 2014

::selection переопределит цвет фона после выбора и вернет его к body{background-color: white;} после отмены выбора текста.
мы просто должны всегда обеспечивать правильный цвет и фоновые значения как для выделения, так и для основного стиля.

...