Можно ли изменить цвет текста в зависимости от цвета фона с помощью CSS?
Как на этом изображении
Поскольку текст пересекает один div (white-space:nowrap
), возможно ли изменить цвет текста с помощью CSS или, если не CSS, то JavaScript/jQuery?
Можно ли изменить цвет текста в зависимости от цвета фона с помощью CSS?
Как на этом изображении
Поскольку текст пересекает один div (white-space:nowrap
), возможно ли изменить цвет текста с помощью CSS или, если не CSS, то JavaScript/jQuery?
Вот мое решение (думая об этом по-другому):
Используйте DIV с overflow: hidden;
для "бара" военно-морского флота, который показывает шкалу оценки.
Затем выписываете два набора TEXT:
Результатом будет перекрытие двух цветных текстовых div:
________________________________
| 1 | 2 |
|_(dark blue w white)_|__________|
Вот мой jsFiddle
Он отлично работает, потому что он будет "прорезать" буквы, если полоса находится на этой ширине. Проверьте это, я думаю, что это то, что вы ищете.
Нет, вы не можете сделать это только с помощью CSS. Для этого вам нужен JavaScript.
С jQuery/JavaScript вы можете проверить, применяется ли к элементу правило CSS, а затем делать то, что вы хотите, т.е.
if ( $('#element').css('white-space') == 'nowrap' ) {
// do something
} else {
// do something else
}
Также читайте здесь: JQuery: как проверить, имеет ли элемент определенный класс/стиль css
Да, это возможно.
Вы можете связать фон и цвет переднего плана вместе в классе и использовать его в своем тексте. Таким образом, вы получили, например, один класс стиля с черным текстом на белом фоне и один с белым текстом и черным фоном. Вы можете переключить этот класс, и текст изменится с цветом фона.
И вы можете использовать jQuery('body').css('color', '#fff')
, например, чтобы изменить цвет основного текста на белый.
Если вы предоставили некоторый пример кода, было бы возможно создать более конкретный ответ для вашего вопроса.
Действительно, вам нужно использовать JavaScript. Я бы подошел к проблеме, выполнив что-то вроде этого:
Рассчитайте ширину перекрытия в пикселях. то есть width = ${"#container"}.width() - ${"#progressbar"}.width();
Подсчитайте объем текста, который вы должны выделить, вы можете использовать следовать этому обсуждению. Я бы начал с пустой строки, проверил бы ее ширину и, если она меньше, чем ширина, вычисленная выше, добавьте один символ и повторите. Как только оно станет выше, выберите эту строку
Вставьте указанную выше строку между интервалами, например, так: ${"#container"}.html("<span class='highlight'>"+highlitedText+"</span>"+restOfTheText);
Очевидно, что litlitText - это строка, содержащая символы в 2., а restOfTheText - это строка с остальными символами.
Хорошая особенность этого метода заключается в том, что вы можете запустить его повторно, если вы измените ширину вашего div прогрессбара.
Хотя принятое решение, вероятно, проще всего для этого точного случая, я написал более подробный плагин jQuery, который делает именно то, что вам нужно (и немного больше).
Репо: https://github.com/salsita/jq-clipthru
Блог: https://blog.javascripting.com/2014/06/11/changing-text-color-based-on-background-color/
Вкратце, он динамически создает клоны элемента с разными классами CSS и скрепляет их видимый контент, используя необработанный CSS-клип, чтобы соответствовать перекрытию. Если вы используете его, обратите внимание, что CSS-клип работает только с элементами position: absolute
или position: fixed
, поэтому вам придется размещать текст таким образом (что не должно быть проблемой в вашем случае, как я вижу).