记录一下js调用样式的方法addRule和insertRule
在js文件中要包括以下内容:创建DOM,创建CSS和实际开发内容;这样一个JS就把html、css和行为内容都囊括了,不需要引css,只引入这个js就能全部执行完。
使用这种方法还能防止css拷贝,下图可以看到单独引入的css文件是可以直接拷贝的
但是div1和div2的样式通过addRule和insertRule方法添加不会显示在css文件,也不会显示在HTML页面中;
- 下面了解一下document.styleSheets
console.log(document.styleSheets)
console.log(document.styleSheets[0])
console.log(document.styleSheets[0].cssRules)
console.log(document.styleSheets[0].cssRules[0])
console.log(document.styleSheets[0].cssRules[0].cssText)
console.log(document.styleSheets[0].cssRules[0].selectorText)
console.log(document.styleSheets[0].cssRules[0].style)
console.log(document.styleSheets[0].cssRules[0].style.width)
document.styleSheets[0].cssRules[0].style.width = '10px' ;
document.styleSheets[0].insertRule(".div{width:100px;height:100px;background-color:blue",document.styleSheets[0].cssRules.length)
document.styleSheets[0].addRule(".div","width:100px;border:1px solid red",document.styleSheets[0].cssRules.length)
addCss('.div1',{
width:'80px',
height:80,
backgroundColor:'yellowgreen',
borderRadius:'50%'
})
addCss('.div2',{
width:'80px',
height:80,
backgroundColor:'pink',
borderRadius:'50%'
})
那就封装它
function addCss(selector,style,title){
if(title === undefined) {
title = 'sheet'
}
var styleSheets = Array.from(document.styleSheets)
var styleSheet = styleSheets.reduce(function(value,item){
if(item.title === title){
return item
}else{
return value
}
},null)
if(!styleSheet){
var sty = document.createElement('style')
sty.title = title
document.head.appendChild(sty)
styleSheet = document.styleSheets[document.styleSheets.length - 1]
}
var str = ""
for(var prop in style){
str += prop.replace(/[A-Z]/g,function(value){
return '-' + value.toLowerCase()
}) + ":" + (typeof style[prop] === 'number' ? style[prop] + 'px' : style[prop]) + ";"
}
if(styleSheet.addRule){
styleSheet.addRule(selector,str,styleSheet.cssRules.length)
}else{
styleSheet.insertRule(selector + '{' + str + '}',styleSheet.cssRules.length)
}
}