web*_*man 4 html javascript css shadow-dom
我使用 Shadow DOM 进行 CSS 隔离。我希望rem字体大小使用 Shadow DOM 中的 HTML 元素字体大小。
中的字体<div class="shadow-div">shadow DOM font (should be 100px)</div>应该是,100px但 rem 大小仍然是16px。
这是一个小代码片段,演示了我想要做什么。
<style>
html {
font-size: 16px;
}
</style>
<div>light dom font</div>
<div id="root"></div>
<script>
const root = document.getElementById('root');
root.attachShadow({ mode: 'open' });
const html = document.createElement('html')
html.innerHTML = `
<head>
<style>
html {
font-size: 100px;
}
.shadow-div {
font-size: 1rem;
}
</style>
</head>
<body>
<div class="shadow-div">shadow dom font (should be 100px)</div>
</body>
`;
root.shadowRoot.appendChild(html);
</script>Run Code Online (Sandbox Code Playgroud)
ShadowRoots 不是Documents,因此没有<html><head><body>标记;
ShadowRoots更像DocumentFragments
您可以根据:host选择器设置阴影内容的样式;并且由于 Shadow DOM 已被封装,因此类不再需要针对该一个 DIV
REM 始终基于html定义;在组件内部使用em代替
另请注意可继承的属性(例如color“滴入”组件)以及如何在 ShadowDOM 中设置font-size样式内容(也可以在这段代码中的组件中重载它),
请参阅: https: //lamplightdev.com/blog/2019/03/26 /为什么是我的网络组件继承样式/
这将您的代码简化为:
<style>
html { font-size: 10px }
body { font-size: 3rem; color:green }
</style>
<div>3rem body font-size = 3 * html font-size</div>
<div id="root"></div>
<script>
document.getElementById('root')
.attachShadow({ mode: 'open' })
.innerHTML = `<style>
:host { font-size: 50px }
div { font-size: 2rem }
p { font-size: .5em }
</style>
50px Component font-size
<div>2rem = 2 * html font-size = 20px</div>
<p>.5em = .5 * :host font-size = 25px</p>`;
</script>Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2756 次 |
| 最近记录: |