tags: ‘JS’

categories: “JS”

JS修改CSS

修改style样式

通过document.styleSheets[n] // n表示期望修改的样式表序号,从0开始计数来获取到期望修改的样式表,通过cssRules[0]获取到该样式表的css内容,通过style修改特定样式。(此方法比较麻烦,需要清楚指定样式在样式表的顺序)

styleSheets:表示引入的所有CSS文件的数组
cssRules:表示CSS文件中所有定义的样式

  1. var stylesheet = document.styleSheets[0]; // 获取引入的第一个CSS文件
  2. // 获取CSS文件中的第一个设置的CSS样式
  3. stylesheet.cssRules[0].style.backgroundColor = "green";

上面代码实现的本质:更改CSS样式表中的样式。需要定位到是第几个CSS文件和在这个文件中是第几个定义的
// 每个style标签都是一个CSS样式表的文件,引入的CSS也是样式表的文件

修改特定元素节点的style内容

cssText

cssText可以一次性修改多个css属性
cssText会覆盖原来在行内style中定义的样式

  1. document.getElementsByClassName("setAttribute")[0].style.cssText = "width: 300px; background-color: red; height: 200px;"

style.attrName

style.attrName 修改单个属性 attrName的值

  1. document.getElementsByClassName("setAttribute")[0].style.border = "1px solid black"

querySelectorAll(),这个方法中不能查找特殊的伪类元素,会导致所有查找的元素都失效。例如:.scroll-other_scroll .ivu-scroll-container::-webkit-scrollbar-thumb这个选择器就是无效的
querySelectorAll(“.ivu-btn-primary, .scroll-other_scroll .ivu-scroll-container::-webkit-scrollbar-thumb”).setAttribute(‘style’, ‘color:red’);
例如:
// Array.from(document.querySelectorAll(‘.scroll-other_scroll .ivu-scroll-container, .scroll-style’)).forEach(item=>item.style.scrollbarArrowColor = this.$store.state.webInfo.style[‘primary-color’])

通过setAttribute 修改style属性值

setAttribute会覆盖原来在行内style中定义的样式

  1. document.getElementsByClassName("setAttribute")[0].setAttribute('style', 'width: 400px; background-color: yellow; height: 300px;')

动态生成CSS文件引入

动态为页面添加CSS样式文件引用:

  1. if (document.createStyleSheet) { //IE
  2. document.createStyleSheet("./Themes/Default/MessageTip.css");
  3. }
  4. else { //Firefox, Chrome
  5. var stylesheet = document.createElement("link");
  6. stylesheet.href = "./Themes/Default/MessageTip.css";
  7. stylesheet.rel = "stylesheet";
  8. stylesheet.type = "text/css";
  9. document.getElementsByTagName("head")[0].appendChild(stylesheet);
  10. }

动态生成CSS文件引入

使用