javascript - 有没有办法匹配当前主题的背景/文本颜色?
问题描述
当强制使用主题时,color-scheme
有没有办法匹配实际的文本/背景颜色?背景颜色Canvas
和文本颜色CanvasText
与实际主题颜色不匹配(在 Edge/Chrome 深色主题中,它显示为黑色,而实际颜色较浅),当通过 javascript 切换主题时,这些颜色不反映更改(请参阅“单击复选框后的我的 Groupbox" 标签):
Math.floor(Math.random()*2)&&document.querySelector("input").click();
:root
{
color-scheme: light;
}
.groupbox
{
border: 1px solid rgba(127, 127, 127, 0.5);
display: grid;
padding: 1em 0.5em 0.5em 0.5em;
position: relative;
margin-top: 1em;
}
.groupbox > label
{
position: absolute;
top: -0.5em;
left: 0.5em;
font-size: 0.9em;
padding: 0 0.4em;
color: CanvasText;
background-color: Canvas;
}
<label><input type="checkbox" oninput="documentElement.style.colorScheme=this.checked&&'dark'"> Dark theme</label>
<div class="groupbox">
<label>My Groupbox</label>
<h1>My Header</h1>
<span>My Text</span>
</div>
有什么建议么?
解决方案
我能找到的最佳解决方案是更改 html 元素以更好地协同工作,而不是使用 Canvas 和 CanvasText css 属性。似乎 Canvas 和 CavasText 不会随方案而改变并坚持其默认颜色。
基本上,我只是将包装<div>
元素替换为 a<fieldset>
并替换<label>
为<legend>
,给出了完全相同的结果,但现在您不必担心背景或文本颜色。它还允许我删除一些不再需要的 CSS。
一起工作得<fieldset> & <legend>
很好,你不必担心边界线穿过你的文本,就像它对<div> & <label>
元素所做的那样。
Math.floor(Math.random() * 2) && document.querySelector("input").click();
:root {
color-scheme: light;
}
.groupbox {
border: 1px solid rgba(127, 127, 127, 0.5);
padding: 0.5em 0.5em 0.5em 0.5em;
position: relative;
margin-top: 1em;
}
<label><input type="checkbox" oninput="documentElement.style.colorScheme=this.checked&&'dark'"> Dark theme</label>
<fieldset class="groupbox">
<legend>My GroupBox</legend>
<h1>My Header</h1>
<span>My Text</span>
</fieldset>
推荐阅读
- css - 如何更改选项卡中链接的悬停颜色?
- python - 是否可以通过 Google Cloud Engine 中的烧瓶应用在本地计算机上播放音频?
- c++ - 如何将 torch::Tensor 转换为 cv::InputArray?
- python - 加入/合并二维列表
- html - 使用 flexbox 在我的列中使用空间
- javascript - 当页面可滚动时,无法使用鼠标在画布上的确切点绘制矩形
- git - git第一次没有远程名称无法签出分支
- scala - 安装烫伤时遇到问题
- azure-devops - 如何从 Azure DevOps 管道中的另一个作业访问 InvokeRestAPI 任务的响应?
- sql - 如何使用 sequelize 在 updateAt 上应用 date_format?