更改阴影 dom rem 大小
Change shadow dom rem size
我正在使用阴影 DOM 进行 CSS 隔离。我希望 rem
字体大小在阴影 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>
shadowRoots 不是文档,所以没有 <html><head><body>
标记;
shadowRoots 更 喜欢 DocumentFragments
您根据 :host
选择器设置阴影内容的样式;由于影子 DOM 是封装的,所以 类 不需要瞄准那个 DIV
REM 始终基于 html
定义;在 Component
中使用 em
还要注意如何 inheritable 属性,如 color
'trickle down' 到组件和 do 阴影内的样式内容DOM(font-size
也是,但是你在这段代码的组件中重载了它)
参见:https://lamplightdev.com/blog/2019/03/26/why-is-my-web-component-inheriting-styles/
这将您的代码简化为:
<style>
html { font-size: 10px }
body { font-size: 3rem; color:red }
</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>
我正在使用阴影 DOM 进行 CSS 隔离。我希望 rem
字体大小在阴影 DOM.
<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>
shadowRoots 不是文档,所以没有 <html><head><body>
标记;
shadowRoots 更 喜欢 DocumentFragments
您根据 :host
选择器设置阴影内容的样式;由于影子 DOM 是封装的,所以 类 不需要瞄准那个 DIV
REM 始终基于 html
定义;在 Component
还要注意如何 inheritable 属性,如 color
'trickle down' 到组件和 do 阴影内的样式内容DOM(font-size
也是,但是你在这段代码的组件中重载了它)
参见:https://lamplightdev.com/blog/2019/03/26/why-is-my-web-component-inheriting-styles/
这将您的代码简化为:
<style>
html { font-size: 10px }
body { font-size: 3rem; color:red }
</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>