我正在制作一个小部件,将其添加到外部网站上,并创建了一个生成CSS供他们样式化它的页面(包括文本颜色、背景颜色、字体大小等)。最终会得到一个填充有CSS的文本域,供他们复制/粘贴到他们的网站上。
有没有一种方式将此CSS添加到当前页面中,以便实时预览?
我正在制作一个小部件,将其添加到外部网站上,并创建了一个生成CSS供他们样式化它的页面(包括文本颜色、背景颜色、字体大小等)。最终会得到一个填充有CSS的文本域,供他们复制/粘贴到他们的网站上。
有没有一种方式将此CSS添加到当前页面中,以便实时预览?
如果你想将CSS添加为文本
var style = document.createElement('style');
style.innerHTML = 'content';
document.head.appendChild(style);
如果你想要添加一个 CSS 文件
var link = document.createElement('link');
link.setAttribute('rel', 'stylesheet');
link.setAttribute('href', 'css/my.css');
document.head.appendChild(link);
在处理元素时,我通常会附加一个<style>
块。
var style_rules = [];
style_rules.push("#" + myElemId + " { /* Rules */ } ");
/* ... */
var style = '<style type="text/css">' + style_rules.join("\n") + "</style>";
$("head").append(style);
一个重要的事情需要注意,因为你不知道任何现有样式的内容,或者页面中可能存在的 id
冲突,所以在 JavaScript 应用程序内跟踪您的 id 并使用它们来填充注入的 <style>
块非常有用。我还倾向于通过前缀函数运行我的名称,以确保通用名称如 wrapper
和 unit
不会发生冲突(它们会变成类似于 myunique_wrapper
和 myunique_unit
的东西)。#myWrapper {margin: 0; padding: 0}
这样纳入基本 CSS 重置可以成为构建自己定制样式的良好起点。<style>
元素,或者更好的方法是给您的 <style>
元素一个 id。我不确定那种选择是否有效,但应该可以。var element = document.createElement('style');
element.setAttribute('type', 'text/css');
if ('textContent' in element) {
element.textContent = css;
} else {
element.styleSheet.cssText = css;
}
document.getElementsByTagName('head')[0].appendChild(element);
我建议你开始使用一个不错的框架来进行网页/JavaScript开发,个人推荐jQuery。
http://api.jquery.com/css/
;
,但这可能导致意外行为,并被视为不良实践。 - Daniel W.innerText
而不是innerHTML
来使其在 Chrome 中工作。 - anondocument.head
来代替document.getElementsByTagName('head')[0]
。 - Pontiacks;
。原因是即使你使用它们,你也需要知道何时需要一个分号,那么为什么要使用它们呢?Vue 的作者 Evan You 有一份关于此的好幻灯片展示。http://slides.com/evanyou/semicolons - Ray Foss