关于读取style元素定义样式表的兼容问题

本文介绍了一种使用JavaScript动态修改CSS样式的实现方法,并探讨了不同浏览器间的兼容性问题。通过具体的示例代码,展示了如何利用JavaScript操作样式表,以及针对Firefox浏览器采用cssRules替代rules方法的解决方案。
<span style="font-size:18px;"></span><pre name="code" class="javascript"><html>
<head>
	<meta http-equiv="content-type" content="text/html;charset=utf-8" />
        <title>JavaScript Sample</title>
<style type="text/css">
div{color:#FF0000;font-weight:bold;}
p{color:#000000;font-size: 14px;}
</style>
</head>
<body>
<div id="div1">请点击<a href="#">网站链接</a>
</div>
<script type="text/javascript">
    var o = document.styleSheets[0];
    var ol = o.rules[1];
    alert(ol.style.color);
    ol.style.color ="green";
    alert(ol.style.color);
</script>
</body>
</html>


在测试上述代码的时候,在Google和IE中能够正常运行,以下是google中的运行截图:


但是,放在FF(火狐 29)中确不能运行,没有弹框,出现如下错误:

rules方法在FF中是没有定义的,所以将rules方法换成了cssRules()方法,就能正常运行:


cssRules()在Google和IE中式兼容的。

### 如何在 Qt 中应用和添加样式表(QSS) #### 添加 QSS 样式表的方法 可以通过多种方式在 Qt 应用程序中添加并应用 QSS 样式表。以下是具体方法: 1. **配置编辑器以支持 QSS 文件的语法高亮** 在 Qt Creator 的设置中,可以手动配置 `.qss` 文件的支持以便于编写样式表。进入菜单 `工具 -> 选项` 后,在左侧导航栏找到 `Text Editor` 或类似的条目,并通过快速搜索输入框定位到 `text/css` 类型。随后可以在详情区域添加扩展名 `*.qss` 来启用语法高亮功能[^1]。 2. **创建 QSS 文件并将其加入项目资源文件** 首先,在项目的根目录或其他合适位置新建一个 `.qss` 文件作为样式表存储载体。接着,在 Qt 开发环境中打开 Resources 资源管理窗口,右键点击空白处选择「添加现有文件」操作,将刚刚建立好的 `.qss` 文件引入至当前工程之中[^3]。 3. **加载 QSS 文件内容到应用程序主题风格里** 编写一段 C++ 函数用来读取指定路径下的 QSS 文件数据流,并调用 widget 的 setStyleSheet 方法完成实际的主题切换逻辑实现。例如下面展示了一个典型的函数模板用于更改整个主窗体(MainWindow)或者任意其他容器组件的整体视觉效果: ```cpp void MainWindow::changeStyle(QString fileName) { QString path = ":/qss/" + fileName; QFile file(path); if (file.open(QFile::ReadOnly)) { QString qss = QLatin1String(file.readAll()); this->setStyleSheet(qss); file.close(); } } ``` 4. **直接嵌入内联 CSS 字符串形式定义控件表现特征** 除了外部独立维护 .qss 文件外,还可以直接以内建字符串的形式即时设定单个部件或整体界面的表现属性。比如调整按钮(Button)大小颜色等参数可以直接这样处理: ```cpp QPushButton *button = new QPushButton("Click Me"); button->setStyleSheet("background-color: red; color: white;"); ``` 以上两种途径都可以有效达成自定义 UI 外观的目的,开发者可以根据实际情况灵活选用其中之一或是混合运用两者优势互补[^4]。 --- #### 动态刷新控件样式的机制说明 当需要实时更新某些特定条件下才会发生变化的部分时,则可能需要用到重新触发 polishevent()事件队列来强制让目标对象立即反映出最新的状态改变情况。通常情况下只需要简单地再次执行一次 setstylesheet 即可达到预期的效果而无需额外考虑太多复杂因素影响效率性能等问题。 --- #### 注意事项 - 确保所有的相对 URL 地址都相对于资源系统的前缀 `/` 正确声明。 - 如果遇到跨平台兼容性问题,请查阅官方文档确认是否存在版本间差异以及解决办法。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值