web组件shadow dom中的rem

2023-11-28

我们知道我们可以设置font-size on html as the rem基于普通 DOM 节点,我使用这个技巧使我的应用程序的字体更加灵活,可以通过 js 动态更改。

然而,当我创建一个Web组件时,我发现rem即使我尝试添加样式,影子 DOM 内部始终引用 16px*{ font-size:72px }在影子 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 不同,ShadowRoot 无法设置样式。

是否可以使shadow DOM中节点的rem基础字体可变且可控?


除非我错过了什么rem值是always基于设置的字体大小<html>像这样的标签:

html {
  font-size: 100px;
}

有了上面的尺寸1rem等于100px.

这是我设置的示例font-size for html到 4 像素。然后使用rem组件中的值。

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>

运行它,然后查看 DevTools 计算选项卡。你会看到: 1. 文本的字体大小I am 2rem = 2*browser default只有8px 2. 文本的字体大小I am 3rem = 3*browser default是 12 像素;

The font-size for body and :host没有任何影响rem尺寸。只有font-size in the <html>标签确实如此。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

web组件shadow dom中的rem 的相关文章

  • 您可以将现有的 div 复制到模式对话框吗

    我有一个带有多个面板的仪表板来显示不同的信息 我希望能够添加一个按钮来以模式显示面板 我正在使用引导程序 我所能找到的只是已经编写的模态 我想复制作为面板的 div 标签的内容 然后将其显示在模型中 但我不确定如何进行 该面板的 html
  • Sequelize - 使用 es6 和模块运行迁移

    我不确定我是否做错了什么或者什么 我觉得我正在运行一个现代的 相当常见的堆栈 但我无法让新的 Sequelize v6 与我的设置完美配合 我在 Node v14 17 Sequelize v6 6 2 上 在我的 package json
  • 递归修剪对象中所有元素的更好方法?

    如果我有一个像这样的物体 const obj field subfield innerObj a asdasd asdas innerArr s ssad innerArrObj b adsad 我想出了这样的东西 const trimFi
  • 在 setInterval / setTimeout 中使用变量作为时间[重复]

    这个问题在这里已经有答案了 这是一个示例情况 var count time 1000 setInterval function count 1 time 上面的代码会将 count 变量加 1 即 1000 毫秒 看来 setInterva
  • 在按钮之间添加空间?

    嗨 我这里有一个代码 除了一件事之外 一切都很完美 代码中每个按钮之间没有空格 我尝试过 margin 但不幸的是它是一个无序列表 所以我有点困惑 我将添加或替换什么以在两个按钮之间留出空间 帮助
  • GWT 主题/模板 [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 我正在使用 GWT 开发一个应用程序 尽管 GWT 是基于 JAVA 的媒介 但外观和感觉只能通过 CS
  • setInterval() 在用户离开选项卡时暂停?

    javascript 中是否有任何方法的行为类似于 setInterval 并且当用户离开选项卡时停止并在用户再次进入选项卡时恢复 您可以使用以下方法创建自己的 API可见性API https developer mozilla org e
  • 将异步事件监听器与 Nestjs EventEmitter 模块和无服务器函数结合使用

    我正在尝试在 Nestjs EventEmitter 模块的帮助下实现具有无服务器 lambda 函数的异步工作线程 处理程序在发出事件时被调用 但该函数在 async await 调用之前关闭 我尝试过同时使用emit and emitA
  • 引导标签输入宽度

    我正在尝试使用引导程序标签输入 http timschlechter github io bootstrap tagsinput examples 以模态中包含的形式 像这样 div class form group div
  • 如何在 javascript 中基于类型字符串创建新对象?

    如何基于变量类型字符串 包含对象名称 在 javascript 中创建新对象 现在我有 随着更多工具的出现 列表会变得更长 function getTool name switch name case SelectTool return n
  • 有没有办法伪造同步 XHR 请求?

    我正在使用 Emscripten 系统将一堆 C 代码移植到 Javascript C 代码有很多调用fopen这是一个同步 IO 调用 在 Emscripten 中 我们使用对本地资源的 XHR 请求来模拟这一点however 在 Fir
  • 没有类的 CSS 选择器

    我正在使用选择器来选择不具有一个类的所有元素 list th not foo some rules 我怎样才能将其应用到多个班级 list th not foo list th not bar some rules 上面的 CSS 当然不会
  • JavaScript Promise 不执行 .then()

    我在 JavaScript 中的 Promise 方面遇到了一些问题 我想做的是获得一个地址列表 然后对于每个地址 我需要调用地理编码 API 来获取 lat lng 然后我将继续将标记与热图一起绘制 这是我的代码 let promiseK
  • JavaScript 提升解释

    下面的片段有什么区别 var a 0 function b a 10 return function a b console log a gt 10 and var a 0 function b a 10 return function a
  • Aurelia - 仅 HTML 自定义元素的内联定义

    我的 Aurelia 视图模型中有一个递归对象 如下所示 Class BottomlessPit Name string MorePits BottomlessPit null 因此 我想在 Aurelia 视图中使用递归模板 它只会在一个
  • 在 Bootstrap 中使用 CakePHP 时如何修改包装器 div 错误类

    我在用着Bootstrap 3 0RC1 with CakePHP 2 3 6 尝试利用那些漂亮的课程 例如has error and has warning for 验证状态 http getbootstrap com css forms
  • 使用 AJAX 和 JQuery 按设定的时间间隔刷新 Rails 部分

    I have a page in my rails application that looks like 现在 我有另一个用 python 编码的人工智能应用程序 它处理视频 显示在 Rails 应用程序页面的左侧 并使用捕获的车辆及其相
  • 具有固定顶部菜单的语义 UI 侧边栏

    Semantic UI 对其进行预警侧边栏页面 http semantic ui com modules sidebar html usage 当侧边栏出现时 固定位置内容可能会出现改变其位置的问题 然后它提供了该问题的两种可能的解决方案
  • 如何:带有 onclick 的 div 位于另一个带有 onclick 的 div 中

    只是一个简单的问题 我遇到了 div 与 onclick javascript 之间的问题 当我点击内部 div 时 它应该只触发它的 onclick javascript 但外部 div 的 javascript 也会被触发 用户如何点击
  • 在方法内部执行方法

    我目前正在 FreeCodeCamp 中进行 JavaScript 练习 我的代码应该使用的测试用例之一是函数调用 如下所示 addTogether 2 3 这是我得到的基本功能 function addTogether return 当我

随机推荐

  • RGB 值到 HSL 转换器

    Google 地图 API v3 允许将 样式 应用于地图 包括设置各种要素的颜色 然而 它使用的颜色格式是 HSL 或者看起来像这样 色调 RGB 十六进制字符串 亮度 100 到 100 之间的浮点值 饱和度 100 到 100 之间的
  • MEDIA_TYPE_IMAGE 无法识别

    我在使用 Android 开发人员的相机资源时遇到问题 这是我的代码 create Intent to take a picture and return control to the calling application Intent
  • 填写 jasper 报告时的进展

    我想在 Jasper 报告填写编译报告时向用户提供进度 基本上我希望在执行时取得进展 JasperFillManager fillReport JasperReport rpt 地图参数 JRDataSource src 有办法实现这个目标
  • 比较 XML 忽略元素顺序

    使用 XMLUnit 2 如何在不考虑元素顺序的情况下比较两个文档 I got XMLUnit 1 的这个问题 但显然 v2 中的新 API 不再有提到的方法了 这是我当前的代码 Diff diff DiffBuilder compare
  • aks 报告“pod 不足”

    我已经完成了 Azure Cats Dogs 教程中描述的内容here我在 AKS 中启动应用程序的最后一步中遇到错误 Kubernetes 报告我的 Pod 不足 但我不确定为什么会出现这种情况 几周前我已经完成了相同的教程 没有出现任何
  • Firefox、IE9+ 在 td 内出现 div 高度 100% 的问题(Chrome 上的工作示例)

    拿着它 http jsfiddle net zVscL 4 edit me height 100 does not behave the same as Chrome width 10px border 1px solid blue bac
  • 如何使用 git 正确处理 GreaseMonkey 用户脚本?

    我正在为 Firefox 编写用户脚本 所以我使用油猴 另外 为了方便开发 我使用git更新我的代码的不同版本 现在 让我尝试解释一下这个问题 当我将本地 git 目录中的用户脚本添加到 GreaseMonkey 时 就会在 Firefox
  • Rails .where 与 .find

    我注意到Model where即使只有一个结果 方法也始终返回一个数组Model find方法没有 这有什么原因吗 我想Model where是自 Rails 3 X 以来的首选函数 我应该使用Model find当我期望一个结果并且Mod
  • 为什么 JavaScript 中的 new Number(2) != new String("2")

    以下评价为true new Number 2 2 new String 2 2 显然 但请执行以下操作 2 2 new Number 2 2 new String 2 2 那么有人可以清楚地解释为什么他下面的评价false new Numb
  • 我可以将层归一化与 CNN 结合使用吗?

    我发现层归一化是比批量归一化更现代的归一化方法 并且在 Tensorflow 中编码非常简单 但我认为层归一化是为 RNN 设计的 批量归一化是为 CNN 设计的 我可以使用 CNN 的层归一化来处理图像分类任务吗 选择批量归一化或层的标准
  • 从列表中删除项目[重复]

    这个问题在这里已经有答案了 在循环列表时 我想根据条件删除列表中的项目 请参阅下面的代码 这给了我一个ConcurrentModification例外 for Object a list if a getXXX equalsIgnoreCa
  • 将 IConfigurationRoot 部分的更改保存到 .net Core 2.2 中的 *.json 文件

    我正在挖掘寻找解决方案 但没有找到它 我敢打赌有人遇到过这个问题 那么问题是什么 为了测试 我创建了简单的控制台应用程序 解决方案将在 asp net core web api 中使用 我有 TestSetting json 配置文件 设置
  • 为什么模板参数不推导只作为返回类型?

    如果我不在函数参数列表中使用模板参数 类型 gt 仅作为返回类型 则不会有任何推论 template
  • 多地图空间问题:Guava

    在我的 Java 代码中 我使用 Guava 的 Multimap com google common collect Multimap 通过使用这个 Multimap
  • 散列密码的最佳方法是什么?在 PHP 7 中,password_hash 是否足够安全或者是否有更安全的方法?

    散列密码的最佳方法是什么 我知道一种方法可以很好地完成工作 但我想知道是否有更好的方法在 PHP 7 中对密码进行哈希处理password hash password hash 足够好吗 我想知道在 PHP 7 中是否有比 password
  • SpringTemplate 没有找到适合响应类型的 HttpMessageConverter

    我在使用 Spring Rest 模板时收到以下错误 但我已经为 json 响应定义了 jackson 当我使用其余客户端查询 url 时 我得到了很好的响应 org springframework web client RestClien
  • Python Tornado渲染静态目录

    我正在尝试使用 Python 中的 Tornado API 从静态目录提供页面 这个答案与我想做的类似 但我似乎无法让它发挥作用 我的目录结构如下所示 所有静态文件都位于名为的文件夹内web 我有一个像这样的网络服务器设置 class Ap
  • 录制音频并以 Wav 或 MP3 形式上传到服务器

    我不确定我问的地方是否正确 但基本上我正在寻找有关最佳方法的建议 通过网站上的麦克风录制音频并将音频以 Wav 或 MP3 文件上传到服务器 有没有人对闪光灯有丰富的经验 这会很难做到吗 目前市场上有什么可以做到这一点吗 我正在考虑将其实现
  • 如何为“日期”创建索引?

    如何为 日期 创建索引 CentOS7 MongoDB服务器版本 3 4 2 db animals createIndex date ok 0 errmsg The field key must be an object but got s
  • web组件shadow dom中的rem

    我们知道我们可以设置font size on html as the rem基于普通 DOM 节点 我使用这个技巧使我的应用程序的字体更加灵活 可以通过 js 动态更改 然而 当我创建一个Web组件时 我发现rem即使我尝试添加样式 影子