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
猜你喜欢
- Fetch API 如何获取响应体? 2022-01-01
- 如何使用 JSON 格式的 jQuery AJAX 从 .cfm 页面输出查 2022-01-01
- 失败的 Canvas 360 jquery 插件 2022-01-01
- CSS媒体查询(最大高度)不起作用,但为什么? 2022-01-01
- Flexslider 箭头未正确显示 2022-01-01
- Css:将嵌套元素定位在父元素边界之外一点 2022-09-07
- 400或500级别的HTTP响应 2022-01-01
- Quasar 2+Apollo:错误:找不到ID为默认的Apollo客户端。如果您在组件设置之外,请使用ProvideApolloClient() 2022-01-01
- 使用RSelum从网站(报纸档案)中抓取多个网页 2022-09-06
- addEventListener 在 IE 11 中不起作用 2022-01-01