如何将 HTML 小部件与外部 CSS 隔离

2023-11-30

我使用 AngularJS 开发了一个即时消息组件,可以向任何网页添加即时消息功能。该组件相当复杂,其样式表长达约 800 行。

当该组件部署到第三方网站时,我遇到了问题。有时,主机网站的 CSS 会影响聊天小部件的样式。

Login and sign up buttons made upper case

当组件被添加到新的 Wordpress 安装中时,将使用该屏幕截图。您可以看到按钮文本被 Wordpress 样式覆盖为大写。

问题是该组件将部署到数以万计的网站,因此根据具体情况解决每个小问题是不切实际的。也不可能知道这些更改是否会对另一个网站产生连锁影响。

我目前正在考虑的方法是创建一个非常全面的重置样式表 - 我将覆盖所有元素上的所有可能的样式。这会给我一个新的画布来开始。

这似乎是一项非常繁重的任务,所以我想知道是否有人设计出了更好的解决方案?

Note:

iFrame 是不可能的,因为聊天必须覆盖原始网页


就像卢卡建议的那样,使用命名空间是正确的答案。

虽然您可以使用 !important 或 iframe,但我不喜欢这两个答案,原因如下。

为什么你不应该使用 !important

  1. 您的目标是创建无法被覆盖的 CSS。使用 !important 实际上并没有解决这个问题。我仍然可以凌驾于你之上 使用与您拥有的相同的特异性来设计样式。然而,这样做很痛苦。
  2. Mozilla 特别推荐你不这样做。
  3. 正如您自己所说,这可以在 10 万多个网站上使用。您将覆盖其他人的样式的可能性非常高。使用 !important 会毁了他们的一天。您已经有效地从 CSS 中去除了级联。通常,请使用您可以放心使用的最少的特异性。这让每个人的生活变得更轻松。

为什么 iframe 不是答案

我并不像反对使用 !important 那样反对使用 iframe,但您需要注意一些负面因素。

  1. iframe 将控制权交给您(插件制造商),但代价是用户。例如用户别无选择,能否将您的 iframe 的响应能力与他们的网站相匹配。某些用户很可能会遇到一个无法与您的插件配合良好的特定断点。
  2. 你的造型是不可能被覆盖的。这一点可以被视为对你来说是积极的,但我发现这对用户来说是消极的。能够设置插件的颜色样式有助于使插件成为网站的一部分。这保证了您的插件的颜色不会与某些网站很好地融合。让用户改变颜色对我来说是必须的。

使用命名空间

这个想法非常简单。假设您的应用程序名为 SuperIM2000。您要做的就是确保有一个具有相同类名的容器,并使用它来定位您的样式。这样做的另一个好处是允许您使用非常简单的类名,例如按钮。

HTML

<div class="superIM2000">
    <input class="button" />
</div>

CSS

.superIM2000 .button{
    color:#000;
}

正如您所看到的,特异性非常低。但是,您要覆盖其他人的样式的可能性非常低。这对用户也有好处。该按钮类可能已在其站点中使用,并且它可以利用您尚未覆盖的任何继承。

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

如何将 HTML 小部件与外部 CSS 隔离 的相关文章

  • 将外部脚本嵌入 Next.js 应用程序

    我一直在尝试将外部 JavaScript 源嵌入到我的 Next js 应用程序中 但不断收到以下错误 无法对 文档 执行 写入 无法写入 从异步加载的外部脚本写入文档 除非 它是明确打开的 可以找到我尝试使用的代码here https w
  • 关闭 Bootstrap 模式 onclick

    我使用 Bootstrap 模式让用户在将商品添加到购物车之前选择产品选项 我之前在这种情况下使用过它们 没有任何问题 但这个没有按预期关闭 当用户单击 添加到购物车 按钮时 会发生一些事情 我认为问题就在那里 首先 一些脚本检查某些字段是
  • Bootstrap 4 行布局没有响应

    我正在使用 Bootstrap 4 在 MEAN 堆栈上为新闻文章布局创建一个 html 模板 但这应该不重要 对于这种总体布局的要求是 一篇 特色 文章位于其自己的列中 而其他 8 篇文章位于另一列中的两行中 当在较小的屏幕或移动设备上查
  • 文本区域值高度[重复]

    这个问题在这里已经有答案了 我有一个 textarea 其 css 高度设置为 85px 用户可能会在该文本区域内键入内容行 我想知道文本 值的高度 而不是文本区域本身 有没有办法检查内部文本的高度 包括换行符 我会将文本区域的内容复制到另
  • CSS:仅背景不透明度,而不是内部文本[重复]

    这个问题在这里已经有答案了 我有这个注册表框 我真的很喜欢背景如何变得不透明 透明为 25 85 但后来我注意到文本和表单元素也变暗了一点 所以我想知道如何做到这一点只有边框和背景而不是盒子里面的东西 regForm z index 11
  • FPDF - 内嵌粗体文本

    我正在尝试从 PHP 创建 PDF 出于法律原因 我们需要将免责声明的一部分设为粗体 并且需要概述免责声明 我当前的代码使用 if isset POST optout POST optout yes pdf gt Ln 5 pdf gt S
  • CSS flex-basis: 0% 与 flex-basis: 0px 有不同的行为

    根据MDN https developer mozilla org en US docs Web CSS flex the flex 1应设置简写flex basis 0 然而 它实际上设置了flex basis 0 更令人惊讶的是 这有不
  • 在占位符中添加 HTML

    我喜欢使用 HTML 占位符 因为它有助于向用户描述他们需要输入的内容类型 但是 有时您需要为用户提供更多信息 而不仅仅是简单的句子 基本上我希望能够在我的文本区域占位符中添加换行符 制表符等 我听说过使用特殊编码来做到这一点 并且已经使用
  • 垂直对齐材质图标

    我正在尝试在导航菜单中垂直对齐 下拉箭头 我尝试过各种方法 例如vertical align middle display inline block 之类的东西 但这根本没有帮助 http img02 imgland net jfCmDoW
  • 如何解决flash的zindex问题

    在网页中我需要显示div覆盖未使用的 Flash 横幅wmode transparent环境 怎么解决呢 根据我的记忆 你可以将 div 推入 也许使用Javascript 这样你就不会弄乱你的HTML iframe 是像 flash 一样
  • 占位符不适用于 Internet Explorer

    我的应用程序出现了小问题 Internet Explorer 11 上不存在占位符 我尝试了下面的 CSS 示例 但没有成功 ms input placeholder IE10 11 color ccc important font wei
  • 如何以“打印”模式查看 Google 地图?

    我正在使用 Google Maps API v2 并且希望能够像 Google 在其地图页面上那样打印地图 您可以单击小打印机图标 它会创建一个具有相同地图的新弹出窗口 但所有不可打印的内容 如控件 都会被删除 我知道他们使用 media
  • 如何使用 jQuery 将各种元素包装在 div 标签中?

    我有一个 html 结构 如下所示 h5 Title h5 p Content p ul li Item li li Item li ul p Content p h5 Title h5 p Content p ul li Item li
  • 如何使单词中的每个字母在悬停时发生变化

    假设我的网站上某个段落中有一个单词 IamGreat 我希望它在悬停时更改为 Good4you 但是 我不想更改整个单词 而是希望每个字母单独更改 因此 如果我将鼠标悬停在字母 I 上 它将变成字母 G 字母 r 将变成数字 4 等 这两个
  • 从提交的表单中转义字符串中的字符

    每次发布帖子时 我都会得到转义字符 gt gt gt 我有一个多步骤表单 它将数据从一种表单传输到另一种表单 我将这些值与准备好的语句一起保存在数据库中 数据库中的值当前看起来像Paul s House 用户应该可以在字符串中使用单引号和双
  • 如何使链接悬停时的背景图像模糊?

    当您用鼠标光标悬停链接时 我想让我的背景图像模糊 5 像素 有什么简单的方法可以实现这一点吗 我有点纠结于类和 id 在这里 pic background url http www metalinjection net wp content
  • 如何创建环境变量来保护我的网站的 Google 地图 API 密钥(或任何其他秘密值)?

    我正在学习使用 Bootstrap 编写自己的网站 并使用 Google 地图 API 密钥和 Google Developers 的脚本轻松地将地图放置在我的页面上 理想情况下 我会有类似的东西 即我已经尝试过这个 Html PHP
  • 禁用 iframe 中的滚动

    有没有办法在 iframe 中禁用所有滚动 我有一个 iframe 其中内容超出了 iframe 尺寸 设置scrolling no 只会删除滚动条 但不会禁用滚动 我无法控制 iframe html 的头部 所以我无法设计它的样式 有任何
  • 使用带有箭头的 MaterializeCSS 轮播 - 如何使用普通 javascript 进行初始化

    我正在尝试使用 MaterializeCSS 创建带有箭头的轮播 我正在尝试使用这个代码笔 https codepen io Paco Cervantes pen ZLxKpj取得有限的成功 我想使用普通的 javascript 而不是 j
  • CSS交付优化:如何推迟CSS加载?

    我在尝试着优化 CSS 交付遵循针对开发人员的谷歌文档https developers google com speed docs insights OptimizeCSSDelivery example https developers

随机推荐

  • 如何使用 TagLib-Sharp 从 MP3 文件读取 XingHeaders 和 VBRIHeaders

    我需要使用 TagLib Sharp 提取 MP3 文件的 Xing 和 Fraunhofer VBRI 标头中存储的信息 我在网上搜索了一个示例 查看了源代码 但如何使用 XingHeader 和 VBRIHeader 类并不明显 它们看
  • 添加、减去 datetime.time 列 pandas

    我有以下数据框 flight departure arrival at desination boarding total flight time total flight time 2 time to collect bags 0 00
  • C# 是具有泛型类型约束的泛型类型

    我们假设一个接口 interface IOwnedBy
  • 罕见的 IE10 bug:背景位置的 CSS 动画在多个背景和百分比下失败

    这是一个非常具体的错误 但是 我希望有人能向我展示解决方法 该错误主要在于 IE10 无法执行 CSS 动画background position当这两个条件满足时同时 拥有多重背景 Setting background position以
  • 按列提取 PDF 文本

    我的问题是 如何从按列划分的 PDF 文件中提取文本 并获得按该列分隔的结果 背景 我从事一个关于文本分析 尤其是科学文本 的项目 这些文本有时以多栏布局发布 每栏都有一个单独的页码 要按布局页码对提取的文本进行排序 按列提取文本会很有用
  • Redis 中的范围查询 - Spring Data Redis

    有没有一种方法可以使用 Spring Data Redis 在 Redis 中实现范围查询 Eg 如果我的 Pojo 类有 Date 不是主键 并且我需要属于所需日期期间的数据 是否可以使用 Spring Data Redis 构建相同的查
  • iframe 内的页面看不到自己的 cookie

    我们有 2 个位于不同域的网站 为了简单起见 我们假设它们是 App 运行在上面的 SPA 应用程序main app com app Host 运行一个简单的index html页面random site com index html in
  • awk 搜索一个文件中的列,如果匹配则打印两个文件中的列

    我正在尝试比较 file1 中的第 1 列和文件 2 中的第 3 列 如果它们匹配 则打印 file1 中的第一列和 file2 中的前两列 这是每个文件的示例 file1 Cre01 g000100 Cre01 g000500 Cre01
  • 放置现有的sqlite数据库并读取

    在 android 文件夹结构中将现有的 sqlite 数据库放置在哪里 是drawable文件夹还是layout文件夹 我没有找到任何解决方案 任何帮助将不胜感激 你应该把它放在assets文件夹 这样你就可以确保它会附加到你的 apk
  • Vuejs图片src动态加载不起作用

    我刚刚开始使用 Vue js 和 Vue CLI 我遇到了一个问题 我不明白为什么我不能从范围内动态设置图像 但我可以直接在 HTML 中编写它 obj img是一个字符串 assets logo png也很有价值 我伪造 ajax 调用超
  • 如何生成 firebase 注册令牌

    我正在尝试使用新方法生成 firebase 注册令牌 但无法生成以下代码 MyFirebaseInstanceIdService java public class MyFirebaseInstanceIdService extends F
  • UIView 边界和框架的属性观察者的反应不同

    当我正在探索观察的选项时UIView s bounds or frame改变 提到here and here 我遇到了一个非常奇怪的差异 didSet and willSet将根据您放置的位置不同地触发UIView在视图层次结构中 如果我使
  • Gmail 不会在电子邮件中呈现 html

    我将用一个非常基本的示例再尝试一次 当我使用 PHP 向电子邮件客户端发送电子邮件时 除了 gmail 之外 没有任何问题 当我在 gmail 中查看电子邮件时 我看到的只是邮件的代码 Gmail 不显示 HTML 它只是显示代码 这是我的
  • 如何在 Accord.net 中保存“学习状态”?

    我是机器学习和 Accord net 的初学者 我了解了如何训练它然后使用它 但在企业环境中 在服务器上运行它 我如何坚持 Accord net 的学习成果 我是否需要保存所有训练数据并在每次重新启动应用程序时重新训练 通过添加在代码中导入
  • Linux crontab 每月第 n 个星期六

    除周六外 我喜欢在所有工作日恢复跑步 我的 crontab 条目 30 16 1 2 3 4 5 backup sh 这个条目工作正常 另外 我喜欢在第一 第三个星期六恢复 如果一个月内有第五个星期六可用 则应运行备份 crontab 的条
  • 从 Scanner 获取输入时 Maven 挂起

    我正在设计一个程序 该程序必须使用 mvn test 命令运行并从命令行获取用户输入 当我使用 mvn test 运行程序时 一切正常 直到Scanner next 执行后 CLI 挂起 我必须关闭该程序 my test method pu
  • PHP if not equal(!=) and or (||) 问题。为什么这不起作用?

    我知道这是简单的 PHP 逻辑 但它就是行不通 str dan if str joe str danielle str heather str laurie str dan echo a href Get to know get the a
  • YouTube 数据 API v3 调用返回的最大结果是多少

    Context 我正在提供一些有关使用 YouTube Data API V3 进行 HTTP GET 的咨询 为了开发一个基于 Windows 的应用程序来从 Youtube 获取结果列表 例如特定类别或特定标签 我们愿意使用任何编程语言
  • 使用 Zend/PHP 删除 YouTube 视频

    我正在使用 Zend 和 PHP 从我的主页上传和删除视频 上传部分工作正常 但下载部分比较复杂 videoEntryToDelete yt gt getVideoEntry videoId yt gt delete videoEntryT
  • 如何将 HTML 小部件与外部 CSS 隔离

    我使用 AngularJS 开发了一个即时消息组件 可以向任何网页添加即时消息功能 该组件相当复杂 其样式表长达约 800 行 当该组件部署到第三方网站时 我遇到了问题 有时 主机网站的 CSS 会影响聊天小部件的样式 当组件被添加到新的