如何以编程方式将 CSS 定义应用于整个页面
How to programmatically apply CSS definitions to the whole page?
我确定信息已经存在,但我找不到它; 对不起 :-/
我想使用 JavaScript 创建 CSS 规则,并将它们应用于整个页面,就好像它们在文档头部的样式元素中一样。我不想通过生成 CSS 文本来做到这一点 - 我想将规则保留为我可以更改的实体(JavaScript 变量),从而稍后更改页面的外观。
任何帮助将不胜感激!
我找到了我想要的东西:http://www.javascriptkit.com/dhtmltutors/externalcss3.shtml .
(感谢所有回答和评论的人。我想要的 - 最终找到,见上面的链接 - 是一个实际的CSS规则对象,我可以动态使用,就像HTML元素一样。虽然有些答案很接近,但没有一个是完全的。
根据您的需求,如果您需要一种快速而肮脏的方式来编辑 css,这里可能适合您。 您可以简化它,甚至可以对其进行扩展。
function css(){
rules={};
ref=//get a reference to a style element
function setRules(){
var out='';
for(var x in rules){
out+=x+'{'+rules[x]+'}';
}
ref.innerHTML=out;
}
this.addRule=function(ident,styles,values){
var a;
if(rules[ident]){
a=rules[ident];
}
else{
a = new cssR();
rules[ident]=a;
}
if(styles.push){
var i=0;len=styles.length;
for(i;i<len;i++){
a[styles[i]]=values[i];
}
}
else{
a[styles]=values;
}
rules[ident]=a;
setRules();
}
function cssR(){
}
cssR.prototype.toString=function(){
var out='';
for(var x in this){
typeof this[x]=='function'?'':out+=x+':'+this[x]+';';
}
return out;
}
}
var a=new css();
a.addRule('#main','color','red');
a.addRule('#main','top','0px');
a.addRule('div .right','float','left');
a.addRule('div .right',['float','width'],['right','100px']);
我不完全确定你的意思,一个实际的例子会很有用。无论如何,您可以轻松地在JS中创建CSS规则和样式表。它会是这样的:
var elHead = document.getElementsByTagName('head')[0]
, elStyle = document.createElement('style')
;
elStyle.type= 'text/css';
elHead.appendChild( elStyle );
elStyle.innerHTML = 'body { background : red; }'; //for example
那么样式表只是你写到的另一部分 HTML。
我并不是说这是一个好主意。
正如Govind所提到的,LessCSS是最有前途的库。以下是它的使用方式:
- 创建 2 种不同类型的少文件。一个包含您希望通过javascript更改以更改整个外观的较少变量。第二个文件应该包含较少的样式,这些样式将使用第一个文件的较少变量来生成css。
- 启用"监视模式",这是一项客户端功能,可让您的样式在更改时自动刷新。
现在,当您需要更改外观时,只需用新变量覆盖第一个文件中的 Less 变量即可。(使用 js 删除第一个 Less 文件并添加此新文件)。更少的JS会自动创建一组新的CSS样式来改变外观。
请记住,从 Less 或 SASS 创建的 CSS 无法缓存,因为它们是动态生成的。
你可以简单地嵌入jQuery(无论如何你都应该查看jQuery)并像这样执行JavaScript:
$("h2").css("margin-bottom", "5px");
- 如何将HTML id分配给元素,以及如何将JavaScript应用于元素
- 如何将返回的值应用于多个不同位置的多个选择器
- ThreeJS将画布中的文本渲染为纹理,然后应用于平面
- 如何在angular.js中动态应用自定义过滤器
- 如何使jQuery中的悬停函数单独应用于数据库映像
- 使用css类将自定义样式应用于上下文按钮的Highcharts
- 自定义渲染器未应用于表渲染手动可操作
- 如何以编程方式将 CSS 定义应用于整个页面
- 如何将纹理应用于自定义几何体
- Knockout:在创建自定义绑定后,绑定未应用于页面的一部分
- 如何将类同时应用于所有角度自定义指令
- 如何将自定义jQuery插件应用于多个元素
- 自定义CSS错误类不应用于字段jquery验证器
- 如何将自定义排序应用于数组
- 某些对象不支持jScrollPane ?没有自定义css应用于滚动条
- 如何将导入的样式表应用于自定义元素的模板标记内容
- 将自定义参数应用于匿名JavaScript替换函数
- 为什么我的自定义类不应用于主体时,通过jQuery添加它与gmap事件单击侦听器
- 在Jquery中按类将自定义函数应用于元素
- 如何将无限滚动应用于此自定义分页页面