【发布时间】:2014-09-17 04:26:48
【问题描述】:
问题的简短描述:
我正在寻找一种方法来在相对于影子主机的影子 dom 内的元素中设置基于字体大小的值(类似于将某些属性设置为 em 值),而不管影子王国。类似于 rem-values 的工作方式,但使用阴影作为根而不是 html 根。
这样做的原因是能够像小部件一样在一个地方缩放内容(即插入 shadow dom)。如果可以通过这种方式缩放基于字体大小的属性,则可以在每个上下文中缩放整个小部件,而无需设置大量 css 值以使其适合每个位置。
问题的详细描述:
我正在寻找一种基于 DOM 中的给定元素来调整文本大小(字体大小)的方法,以便能够基于此包装元素缩放该元素内的不同内容部分(适用于小部件等) .这不仅适用于实际文本,通常有很多基于字体大小的 css 值是好的,因此元素的视觉布局会随着文本的大小(如填充、边框半径和阴影)缩放。如果一切都基于 em 值,这可能会有点混乱。如果元素内部有多个字体大小继承级别,并且我想放大第一级而不更改第二级,我需要放大 dom 中第一级的 em,同时减少任何第二级元素(即根据第一级计算)使子元素的文本保持相同的大小。在许多情况下,这不是最佳的。
一个不错的解决方案是基于根 EM (rem),因此更改 dom 的一个级别不会影响子元素。但是,如果我想在不影响同一页面上的其他元素的情况下放大/缩小此包装元素内的所有文本的大小(在一个地方),我需要放大/缩小所有字体大小的 rem 值该包装元素内的元素。
我最近开始研究带有 Shadow DOM 和模板的 Web 组件。在模板标签中,封装了 css,这非常棒,因为该框/小部件/组件的设计可以自行设置样式,而无需考虑其他设计、不需要的继承值等。最后是制作独立组件来构建网页的好方法。但是,如果我可以为模板本身设置一种模板根字体大小,那就太好了。因此,如果我将模板内的某些元素设置为 font-size 2rem (或任何其他类似单位),那么该元素的 font-size 将是模板的根字体大小的 2 倍,无论主机中的字体大小如何使用该模板的元素,并且与页面根目录(html 元素)的字体大小无关。
当我在模板中使用 rem-values 进行测试时,它仍然基于页面根(html 标记)字体大小。我还测试了 vw-values,但这也是基于整个视口,而不仅仅是封装区域(阴影根)。
我查看了很多关于 Shadow DOM 的文章,但我无法找到任何解决此问题的方法。有什么建议吗?
会发生什么(简化示例):
<html style="font-size: 16px">
<body style="font-size: 12px">
I am 12px large
<!-- em, based on the body in this case -->
<div style="font-size: 1.5em">
I am 18px large
<div style="font-size: 1.5em">
I am 27px large
</div>
</div>
<!-- rem, based on the styles of the html element -->
<div style="font-size: 1.5rem">
I am 24px large
<div style="font-size: 1.5rem">
I am 24px large
</div>
</div>
</body>
</html>
我想要什么:
<html style="font-size: 16px">
<body style="font-size: 12px">
I am 12px large
<div style="font-size: 1.5em">
I am 18px large
</div>
<div style="font-size: 1.5rem">
I am 24px large
</div>
<template> <!-- Simulates that it is inserted into the DOM by using shadow elements -->
<style>
:root{ /* Or something like that */
font-size: 20px; /* This is the simulated "template root fontsize" */
}
</style>
<div style="font-size: 1.5trem"> <!-- Based on the template root fontsize -->
I am 30px large
<div style="font-size: 2trem">
I am 40px large
</div>
</div>
</template>
</body>
</html>
这将提供一个位置(上面示例的 :root 部分)来控制该组件内的所有相对字体大小,然后可以将其与非相对字体大小(如 px 或其他普通 css 值)结合使用。
【问题讨论】:
-
我也想要这个。您确实需要能够根据容纳您的组件的容器的大小来确定所有大小。我发布了similar question。
标签: html css dom web-component