导航菜单
  • 首页
  • 首页>前端万博manbext备用网址>JavaScript万博manbext备用网址

    DOM基础4:对CSS样式的操作

    查找到html元素之后,很大一部分操作都需要修改元素的css样式。

    一般操作CSS样式的方法有如下几种:

    一、style对象

    element.style.properties

    这个style对象的属性是可读可写的,只是它只能读取和设置元素对象的行间样式表。

    比如:

    element.style.color="#f30";
    element.style.backgroundColor="#eee";
    element.style.display="none";

    如果嫌每一行写太麻烦,可以使用style对象的cssText属性把样式写在一起。

    cssText 对应的是 HTML 元素的 style 属性,用于设置或者返回元素声明的内联样式。

    返回样式:

    var oH1 = document.querySelector("h1");
    var x = oH1.style.cssText;

    设置样式:

    var oH1 = document.querySelector("h1");
    oH1.style.cssText="color:red;font-size:24px;text-align:center";
    elm.style.cssText = ''; //快速清空该规则的所有声明

    二、利用className和classList

    className属性可以返回元素的class类名。

    但是利用className要添加或者删除一个class类名的时候挺麻烦的。

    if (this.className.indexOf("bg1") > -1) {
           this.className = this.className.replace("bg1", "bg2")
        }
    else{
           this.className+=" bg2"
        }

    所以增加了一个classList属性,这个属性操作class类名简直太好用了。

    classList 属性返回元素的类名,作为 DOMTokenList 对象。这个对象也是一个类数组。

    console.log(this.classList);
    
    //DOMTokenList(4) ["box", "bg1", "bg2", "scale", value: "box bg1 bg2 scale"]
    //0: "box"
    //1: "bg1"
    //2: "bg2"
    //3: "scale"
    //length: 4
    //value: "box bg1 bg2 scale"

    classList有length属性,返回类列表中类的数量。

    它的几个方法都很好用:

  • add(class1, class2, ...)  在元素中添加一个或多个类名。如果指定的类名已存在,则不会添加

  • remove(class1, class2, ...)   移除元素中一个或多个类名。注意: 移除不存在的类名,不会报错。

  • toggle(class, true|false)  在元素中切换类名。 一个参数为要在元素中移除的类名,并返回 false。 如果该类名不存在则会在元素中添加类名,并返回 true。 

  • contains(class)    返回布尔值,判断指定的类名是否存在。

  • item(index)   返回元素中索引值对应的类名。索引值从 0 开始。

  • 三、用window对象的getComputedStyle方法

    这个方法可以访问外部样式表和内嵌样式表中对象的样式,而且是最终计算之后的样式,是样式叠加之后的最终样式,也更加精准。

    window.getComputedStyle(元素,伪元素).属性名

    这个方法是window下的全局函数,可以返回一个CSSStyleDeclaration 实例,包含了指定节点的最终样式信息。所谓“最终样式信息”,指的是各种 CSS 规则叠加后的结果。

    注意,CSSStyleDeclaration 实例是一个活的对象,任何对于样式的修改,会实时反映到这个实例上面。另外,这个实例是只读的。

    var div = document.querySelector('div');
    var styleObj = window.getComputedStyle(div);
    styleObj.backgroundColor; // rgb(244, 28, 120)

    getComputedStyle方法还可以接受第二个参数,表示当前元素的伪元素(比如:before、:after、:first-line、:first-letter等)。

    var result = window.getComputedStyle(div, ':before');

    CSSStyleDeclaration 实例返回的 CSS 值都是绝对单位。比如,长度都是像素单位(返回值包括px后缀),颜色是rgb(#, #, #)或rgba(#, #, #, #)格式。

    CSS 规则的简写形式无效。比如,想读取margin属性的值,不能直接读,只能读marginLeft、marginTop等属性;再比如,font属性也是不能直接读的,只能读font-size等单个属性。

    如果读取 CSS 原始的属性名,要用方括号运算符,比如styleObj['z-index'];如果读取骆驼拼写法的 CSS 属性名,可以直接读取styleObj.zIndex。

    该方法返回的 CSSStyleDeclaration 实例的cssText属性无效,返回undefined。

    计算样式的属性是只读的;

    四、IE下的currentStyle属性

    IE9以下不支持window.getComputedStyle()方法,而且就算是Edge支持这个方法,返回的值也和chrome等浏览器不一样,所以在IE下还是用currentStyle更保险。

    currentStyle是元素下面的一个属性,返回的也是CSSStyleDeclaration实例,包含当前元素全部计算后的样式。

    var oH1=document.querySelector("h1");
    console.log(oH1.currentStyle.width); //200px
    console.log(oH1.currentStyle.backgroundColor); //#f41c78

    所以可以写一个兼容性的方法:

    function getStyle(element, attr) {
      if (element.currentStyle) {
        return element.currentStyle[attr];//IE的获取元素的方法
      } else {
        return getComputedStyle(element, null)[attr];
      }
    }
    getStyle(oDiv,"marginTop");

    五、元素下面的一些属性

    比如element元素下面还提供了一些属性,可以直接获得元素的可视宽高,偏移值等。

  • element.clientHeight    返回内容的可视(padding+content)高度(不包括边框,外边距或滚动条)

  • element.clientWidth     返回内容的可视宽度(不包括边框,外边距或滚动条)

  • element.offsetHeight   返回元素的(border+padding+content+滚动条)高度

  • element.offsetWidth    返回元素的(border+padding+content+滚动条)宽度

  • element.offsetLeft        返回当前元素的相对水平偏移位置( 默认document,而不是body,祖先元素有定位,从自身的border外围到有定位(position不为static))的祖先元素的border的内围。

  • element.offsetTop        返回当前元素的相对垂直偏移位置

  • element.offsetParent    返回元素的相对偏移容器

  • element.scrollHeight    返回整个元素的高度(包括带滚动条的隐蔽的地方)

  • element.scrollWidth     返回元素的整个宽度(包括带滚动条的隐蔽的地方,如果没有滚动条,和clientWidth一样的范围)

  • element.scrollLeft        返回元素向右滚动的距离。

  • element.scrollTop        返回元素向下滚动的距离。如果是容器内,返回内容到容器border内围的距离,如果是浏览器,返回到可视区顶部的距离。

  • 下面有一张降龙十八掌大合集,看懂算你赢!

    各种宽度尺寸大合集.jpg

    点赞


    2
    保存到:

    相关文章

    发表评论:

    ◎请发表你卖萌撒娇或一针见血的评论,严禁小广告。

    Top