#html #css #mix-blend-mode
#HTML #css #режим смешивания-смешивания
Вопрос:
В течение нескольких дней я пытался наложить цветной фон на текст того же цвета, и в итоге смешанный текст получился белым. Вот пример того, что мне удалось заархивировать только с черно-белым:
Но как только я меняю цвет текста и фона с черного, например, на синий, текст становится не белым, а желтым или другим цветом.
Я использовал CSS mix-blend-mode
exclusion
.
Рабочий пример с черно-белым в настоящее время можно найти здесь . Моя цель — заменить черно-белую основную кнопку на сине-белую.
Комментарии:
1. поделитесь своим кодом здесь
Ответ №1:
Если мы рассмотрим mix-blend-mode difference
, это учитывает разницу между цветами фона и содержимого.
Итак, если у нас есть текст синего цвета, который rgb(0, 0, 255)
должен стать белым, нам нужно его изменить rgb(255, 255, 0)
.
И наоборот, если наш текст rgb(255, 255, 0)
, и мы отличаем его от белого, который является rgb (255, 255, 255), мы получаем rgb(0, 0, 255)
синий.
Итак, мы присваиваем тексту цвет rgb(255, 255, 0)
и просим его смешаться с белым фоном, который даст нам синий. Затем, когда мы наложим синий, мы получим белый текст.
Вот фрагмент. Я не предоставил волнистость, которая была бы предметом другого вопроса.
ОБНОВЛЕНИЕ: как видно из комментариев, результаты на данный момент в Windows10 и IOS выглядят нормально, но в MACOS наблюдаются переменные результаты: текст приобретает бледный цвет в Chrome и Safari, хотя в Firefox он белый. Различия в интерпретации (особенно между режимом смешивания и режимом смешивания фона) требуют дальнейшего изучения.
body {
position: relative;
background-color: rgb(255, 255, 255);
width: 100vw;
height: 100vh;
}
@keyframes updown {
0% {
height: 0;
top: 200px;
}
50% {
height: 200px;
top: 0;
}
100% {
height: 0;
top: 200px;
}
}
.background {
position: absolute;
background-color: rgb(0, 0, 255);
width: 400px;
height: 200px;
animation: updown 10s ease infinite;
}
.text {
position: absolute;
font-family: sans-serif;
width: 400px;
color: rgb(255,255,0);/* complement of blue */
mix-blend-mode: difference;
text-align: center;
font-size: 50px;
}
<div class="background"></div>
<div class="text">Primary button</div>
Комментарии:
1. Спасибо за ответ. Но проблема в том, что текст становится не белым, а скорее желтым. вы знаете, как это предотвратить?
2. Для меня он определенно белый. Какой браузер вы используете? Я попробовал это на Edge в Windows 10. Если фон белый, вы определенно не должны получать желтый цвет.
3. Я изменил фрагмент, чтобы использовать явные цвета rgb, чтобы мы знали, что говорим об одном и том же, и не полагались на то, что цвета не были переопределены (даже если бы это было возможно!).). Вы что-нибудь изменили во фрагменте?
4. Теперь протестировано на Edge / Chrome, Firefox и IE11 в Windows 10 и Safari IOS 14.2, и текст определенно белый.
5. Я использую Chrome на Mac. Вот скриншот, на котором вы можете увидеть желтый оттенок текста