html - 如何在基于背景的焦点轮廓上使用混合混合模式?
问题描述
mix-blend-mode
当背景与焦点轮廓颜色相同时,我正在尝试使用更改焦点轮廓。我很难把它们放在一起。
当背景是蓝色时,焦点轮廓应该是白色的,就是这样。但是,当背景为白色时,我希望焦点轮廓为蓝色,但事实并非如此。
document.querySelectorAll("a:not(a[href])").forEach((element) => {
element.setAttribute("href", "#");
});
body {
font-family: "Roboto", sans-serif;
font-size: 16px;
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
background: blue;
}
h4 {
font-size: 24px;
}
a {
text-decoration: none;
color: white;
}
.button {
background: grey;
color: white;
padding: 1rem 1.5rem;
border-radius: 4px;
text-transform: uppercase;
}
.button::after {
outline: 1px solid white;
mix-blend-mode: difference;
}
button:focus-visible,
a:focus-visible,
a:focus-visible::after,
input[type=checkbox]:focus-visible,
input[type=radio]:focus-visible,
input[type=submit] {
outline: 2px solid white;
outline-offset: 4px;
mix-blend-mode: difference;
}
<div class="container">
<a class="button">a button</a>
<h4><a href="#">Inline text element</a></h4>
</div>
解决方案
对于您的问题,需要在父元素上使用css
属性。isolation: isolate
在这种情况下,我们创建一个新的堆叠上下文并应用mix-blend-mode
。关于隔离
document.querySelector('.button').addEventListener('click', ev => {
const body = ev.target.closest('body');
body.classList.toggle('reverse');
});
document.querySelectorAll('a:not(a[href])').forEach(element => {
element.setAttribute('href', '#');
});
:root {
--primary-clr: white;
--secondary-clr: blue;
}
.reverse {
--primary-clr: blue;
--secondary-clr: white;
}
body {
font-family: 'Roboto', sans-serif;
font-size: 16px;
display: flex;
align-items: center;
justify-content: center;
height: 100vh;
background: var(--secondary-clr);
isolation: isolate;
}
h4 {
font-size: 24px;
}
a {
text-decoration: none;
color: var(--primary-clr);
}
.button {
background: grey;
color: var(--primary-clr);
padding: 1rem 1.5rem;
border-radius: 4px;
text-transform: uppercase;
}
.button::after {
outline: 1px solid var(--primary-clr);
mix-blend-mode: difference;
}
button:focus-visible,
a:focus-visible,
a:focus-visible::after,
input[type='checkbox']:focus-visible,
input[type='radio']:focus-visible,
input[type='submit'] {
outline: 2px solid var(--primary-clr);
outline-offset: 4px;
mix-blend-mode: difference;
}
<div class="container">
<a class="button">click to change</a>
<h4><a href="#">Inline text element</a></h4>
</div>
推荐阅读
- java - Docker Container javax.mail.MessagingException:没有合适的协议(协议被禁用或密码套件不合适);
- java - 我正在尝试初始化子类中的基类属性,但出现错误
- python - 如何在保持索引不变的同时基于列创建新行?
- python - python - Selenium Stackoverflow 机器人
- javascript - 重复表单的 AJAX 保存
- powershell - Powershell控制台缓冲区中随机出现神秘空白
- sql - 我必须更新 SQL Server 中的 4000 万行
- javascript - 在父母的构造函数中将道具传递给孩子
- sql - SQL UPDATE 中是否有隐式 JOIN 的概念?
- java - 如何从另一个列表中创建一个列表,该列表由 Java 中的对象属性过滤?