Как создать правило CSS, чтобы отменить другой фон на узле ::selection

Мы используем некоторый код, который внедряет CSS непосредственно в документ, который изменяет свойство фона для некоторых элементов с помощью селектора ::selection.

На самом деле мы не можем изменить этот код, но для некоторых элементов мы хотим вернуть их состояние обратно, чтобы они выглядели/вели себя так, как будто фон ::selection не был установлен.

Изменить фон при выделении легко, я могу просто сделать: ::selection { background: red; }

Сделать фон всего выделенного текста красным, но, похоже, нет способа стилизовать элементы так, как будто к ним никогда не применялся стиль ::selection.

Очевидным решением было бы ::selection { background:initial; }, но оно не работает, поскольку при этом фон становится прозрачным, что делает выделение текста невидимым.

    <style>
    div::selection { background-color:red; }
    
    /** Here I need something which undo the rule setting the 

    background-color to red on selection 
    *::selection { background-color:initial !important; } does set the background on selection to transparent.
    
    */
    </style>
    <div>This is text</div>

Не уверен, как будет выглядеть минимальный пример, но я кое-что добавил.

MTilsted 27.06.2024 13:41

Отвечает ли это на ваш вопрос? Как сбросить цвет фона ::выбора

ColdIV 27.06.2024 13:42

Это хороший вопрос, но я не уверен, что это действительно работает. Похоже, что он меняет цвет выделения в Safari, но похоже, что он устанавливает неправильное значение альфа, потому что, когда текста много, разные выбранные элементы окрашиваются по-разному. Точно такая же проблема, как описана здесь: stackoverflow.com/questions/71567352/… Я изучу проблему, чтобы узнать, могу ли я это исправить.

MTilsted 27.06.2024 13:56
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Введение в CSS
Введение в CSS
CSS является неотъемлемой частью трех основных составляющих front-end веб-разработки.
Как выровнять Div по центру?
Как выровнять Div по центру?
Чтобы выровнять элемент <div>по горизонтали и вертикали с помощью CSS, можно использовать комбинацию свойств и значений CSS. Вот несколько методов,...
Навигация по приложениям React: Исчерпывающее руководство по React Router
Навигация по приложениям React: Исчерпывающее руководство по React Router
React Router стала незаменимой библиотекой для создания одностраничных приложений с навигацией в React. В этой статье блога мы подробно рассмотрим...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
CSS: FlexBox
CSS: FlexBox
Ранее разработчики использовали макеты с помощью Position и Float. После появления flexbox сценарий полностью изменился.
1
3
77
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если вам нужно установить для какого-либо свойства значение по умолчанию, вы можете использовать ключевое слово initial. Как указано в документах:

Ключевое слово initial CSS применяет к элементу начальное (или по умолчанию) значение свойства. Его можно применить к любому свойству CSS.

Вот пример с селектором ::selection.

.sel::selection {
  background-color: red;
}
.sel {
  background-color: initial;
}

::selection {
  background-color: red;
}
div::selection {
  background-color: initial;
}
<div><p>This text is inside a div</p></div>
<p class = "sel">Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Non curabitur gravida arcu ac tortor dignissim convallis aenean et. Massa tincidunt nunc pulvinar sapien et ligula ullamcorper malesuada proin. Nec feugiat in fermentum posuere urna nec tincidunt praesent semper. At in tellus integer feugiat scelerisque varius. Congue nisi vitae suscipit tellus mauris a diam maecenas. Nunc eget lorem dolor sed. Ipsum nunc aliquet bibendum enim facilisis gravida neque. Nunc aliquet bibendum enim facilisis gravida neque convallis a. In egestas erat imperdiet sed euismod nisi porta. Tempor id eu nisl nunc mi ipsum faucibus. Id velit ut tortor pretium viverra suspendisse potenti. Ipsum a arcu cursus vitae congue. Vitae nunc sed velit dignissim sodales ut. Duis ultricies lacus sed turpis tincidunt id aliquet. Tempus egestas sed sed risus pretium. Tortor aliquam nulla facilisi cras fermentum. Volutpat est velit egestas dui id ornare. Penatibus et magnis dis parturient. Egestas integer eget aliquet nibh praesent.</p>

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

MTilsted 27.06.2024 14:59

Извините, вы имеете в виду, что настоящие символы станут красными? С моей стороны только фон становится красным при выборе и возвращается в исходное состояние при потере выделения. Могу ли я спросить вас, какой браузер вы используете?

CcmU 27.06.2024 15:08
Ответ принят как подходящий

Вы ищете SelectedItem и SelectedItemText (https://drafts.csswg.org/css-color-4/#valdef-color-selecteditem)

div::selection {
  background-color: red
}

div::selection {
  background-color: SelectedItem;
  color: SelectedItemText;
}
<div>This is text</div>

Должно ли это решение полностью поддерживаться каждым браузером? Потому что у меня (Firefox) это не работает

CcmU 29.06.2024 11:49

Другие вопросы по теме