rem in web component shadow dom(Web组件影子DOM中的REM)
本文介绍了Web组件影子DOM中的REM的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
运行此命令,然后查看DevTools Computed选项卡。您将看到:
1.文本问题描述
我们知道可以将font-size
on[2-1]>设置为正常DOM节点中的rem
base,我使用这个技巧使我的应用程序的字体更灵活,随js动态更改。
然而,当我创建一个Web组件时,我发现阴影DOM中的rem
总是指向16px,即使我尝试在阴影DOM中添加样式。16px是常见浏览器的默认字体大小。
这里有一个简单的演示: https://jsfiddle.net/qmacwb6r/
<html>
<head>
<script>
var template =`
<style>
* {
font-size: 72px;
}
div {
font-size:2rem;
}
</style>
<div>
I am 2rem = 2*broser default
</div>
`
class TestTemplate extends HTMLElement {
constructor(){
super();
this.rt = this.attachShadow({mode:"open"});
this.rt.innerHTML = template;
}
}
customElements.define("test-component", TestTemplate);
</script>
</head>
<body>
<test-component></test-component>
</body>
</html>
我还尝试在控制台中调用getRootNode()
。
对于普通DOM节点,它返回HTMLElement,而对于阴影DOM节点,它返回ShadowRoot,与HTMLElement不同,它不能设置样式。
是否可以使阴影DOM中节点的rem基本字体可变且可控?
推荐答案
除非我遗漏了什么rem
值始终基于为<html>
标记设置的字体大小:
html {
font-size: 100px;
}
以上大小1rem
等于100px
。
html
的font-size
设置为4px的示例。然后在组件中使用rem
值。
数据-lang="js"数据-隐藏="假"数据-控制台="真"数据-巴贝尔="假">
var template = `
<style>
:host, :root { font-size: 48px; }
.rem2 { font-size:2rem; }
.rem3 { font-size:3rem; }
</style>
<p>I am 48px Times</p>
<div class="rem2">I am 2rem = 2*browser default</div>
<div class="rem3">I am 3rem = 3*browser default</div>
`;
class TestTemplate extends HTMLElement {
constructor(){
super();
this.rt = this.attachShadow({mode:"open"});
this.rt.innerHTML = template;
}
}
customElements.define("test-component", TestTemplate);
html {
font: 4px Courier;
}
body {
font: 24px Tahoma;
}
<div>Before</div>
<test-component></test-component>
<div>After</div>
I am 2rem = 2*browser default
的字体大小仅为8px
2.文本I am 3rem = 3*browser default
的字体大小为12px;
font-size
和:host
的font-size
对rem
大小没有任何影响。只有<html>
标记中的font-size
才有。
这篇关于Web组件影子DOM中的REM的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:Web组件影子DOM中的REM
基础教程推荐
猜你喜欢
- 如何使用TypeScrip将固定承诺数组中的项设置为可选 2022-01-01
- 直接将值设置为滑块 2022-01-01
- 如何使用JIT在顺风css中使用布局变体? 2022-01-01
- html表格如何通过更改悬停边框来突出显示列? 2022-01-01
- 用于 Twitter 小部件宽度的 HTML/CSS 2022-01-01
- Vue 3 – <过渡>渲染不能动画的非元素根节点 2022-01-01
- Electron 将 Node.js 和 Chromium 上下文结合起来意味着 2022-01-01
- 我可以在浏览器中与Babel一起使用ES模块,而不捆绑我的代码吗? 2022-01-01
- 自定义 XMLHttpRequest.prototype.open 2022-01-01
- Chart.js 在线性图表上拖动点 2022-01-01