CSS 与 JavaScript 是两个有着明确分工的领域,前者负责页面的视觉效果,后者负责与用户的行为互动。但是,它们毕竟同属网页开发的前端,因此不可避免有着交叉和互相配合。

1. 使用JavaScript操作Inline Styles

所有的文档元素都有style属性,我们可以通过直接操作style属性来修改相关元素的样式。

需要注意的是style属性的值并不是一个string对象,而是一个CSSStyleDeclaration对象。

我们可以通过如下方式设置style属性的值。

 
e.style.fontSize = "24pt"; //由于JavaScript变量不允许使用连字符,所以设置相关属性时需要将该属性名的连字符移除,并且大写属性名非首单词首字母。font-size ==> fontSize。

e.style.color = "blue";<br>e.style.cssFloat = "right" //由于float是JavaScript的关键字,所以css float属性加了css前缀

有时,我们想获得Inline Styles的字符串形式,可以通过CSSStyleDeclaration对象的cssText属性获得。

e.style.cssText

2 CSS动画效果的制作

一个经常使用JavaScript操作CSS的场景就是制作一些动画效果。这可以通过定时器动态修改一些css样式的值来实现。

以下为一个产生震动效果的JavaScript函数。

// shake the specified element

function shake(e, oncomplete, distance, time) {

    if (typeof e === "string") e = document.getElementById(e);

    if (!time) time = 500;

    if (!distance) distance = 5;

    var originalStyle = e.style.cssText;

    e.style.position = "relative";

    var start = (new Date()).getTime();

    animate();

    function animate() {

        var now = (new Date()).getTime();

        var elapsed = now - start;

        var fraction = elapsed / time;

        if (fraction < 1) {

            var x = distance * Math.sin(fraction * 4 * Math.PI);

            e.style.left = x + "px";

            setTimeout(animate, Math.min(25, time - elapsed));

        } else {

            e.style.cssText = originalStyle;

            if (oncomplete) oncomplete(e);

        }

    }

}

3. 查询元素的Computed Styles

我们通过style属性得到的是元素的内联样式,并不是该元素的实际应用的样式。

元素实际的样式是由多级样式表按照指定的优先级计算出来的。我们可以通过window对象的getComputedStyle方法得到元素的实际样式。

var title = document.getElementById("sectionTitle");

var titleStyles = window.getComputedStyle(element, null);
 

该方法返回一个只读的CSSStyleDeclaration对象。并且该对象的cssText属性是undefined。

4. 操作CSS Classes

通过CSS Class, 我们可以灵活的组织页面样式,实现页面样式的重用与模块化。在JavaScript中,我们通过元素的className属性获得为元素指定的Classes。该值是一个字符串,class之间用空格分开。在HTML5中,为元素定义了一个classList属性,该属性返回一个只读的类数组对象DOMTokenList。该对象包含了操作class的方法add,remove,toggle,contains。And the DOMTokenList is a "live" representation of the element's set of classes。

下面用一个函数来返回一个对象,用来模拟DOMTokenList API。

//get the class list of a element

function classList(e) {

    if (e.classList) return e.classList;

    else return new CSSClassList(e);

}

function CSSClassList(e) {

    this.e = e;

}

CSSClassList.prototype.contains = function (c) {

    //Check that c is a valid class name

    if (c.length === 0 || c.indexOf(" ") != -1)

        throw new Error("Invalid class name : '" + c + "'");

    var classes = this.e.className;

    if (!classes) return false;

    if (classes === c) return true;

    return classes.search("\\b" + c + "\\b") != -1;

};

CSSClassList.prototype.add = function (c) {

    if (this.contains(c)) return;

    var classes = this.e.className;

    if (classes && classes[classes.length-1] != " ")

    {

        c = " " + c;

    }

    this.e.className += c;

}

CSSClassList.prototype.remove = function (c) {

    if (c.length === 0 || c.indexOf(" ") != -1)

        throw new Error("Invalid class name: '" + c + "'");

    var pattern = new RegExp("\\b" + c + "\\b\\s*", "g");

    this.e.className = this.e.className.replace(pattern, "");

}

CSSClassList.prototype.toggle = function (c) {

    if (c.contains(c)) {

        this.remove(c);

        return false;

    } else {

        this.add(c);

        return true;

    }

}

CSSClassList.prototype.toString = function (c) {

    return this.e.className;

}

CSSClassList.prototype.toArray = function (c) {

    return this.e.className.match(/\b\w+\b/g) || [];

}

5. 操作样式表

可以通过document.styleSheets得到与文档关联的样式表,样式表对象为CSSStyleSheet类型。

5.1 样式表的启用与禁用

<style>元素,<link>元素,CSSStyleSheet对象都包含有disabled属性,可以通过设置该值来启用与禁用相关CSS

5.2 样式表的查询,插入与删除操作

CSSStyleSheet对象包含有一个cssRules属性(IE下为rules),该属性为一个数组,包含了该样式表中的规则。样式表中的规则为CSSRule类型。CSSRule类型包含有两个属性,一个是selectorText,指定了规则的选择器。一个是类型为CSSStyleDeclaration的style属性。可以直接操作style属性来修改该规则的样式。

CSSStyleSheet对象包含有一组操作规则的API

inserRule用于添加规则,接受两个参数,一个为规则文本,一个为插入位置

document.styleSheets[0].insertRule("H1 {text-weight: bold; }", 0);

在IE下这两个API分别为addRule和removeRule,传入的规则文本被分为了两个参数,一个是selector text,一个是style text。

5.3 创建新的样式表

可以通过创建Style元素,然后设置其innerHtml值来创建新的样式表。

在IE8及以前,可以通过document.createStyleSheet来创建一个CSSStyleSheet对象,同过设置该对象的cssText属性来设置样式文本。

CSS操作的更多相关文章

  1. Jq_文档操作方法、属性操作方法、CSS操作函数

    JQuery文档操作方法 这些方法对于 XML 文档和 HTML 文档均是适用的,除了:html(). 方法                            描述 addClass()      ...

  2. 基础DOM和CSS操作(三)

    CSS方法 jQuery不但提供了CSS的核心操作方法,比如.css()..addClass()等.还封装了一些特殊功能的CSS操作方法,我们分别来了解一下. width()方法 方法名 描述 wid ...

  3. 基础DOM和CSS操作(二)

    元素样式操作 元素样式操作包括了直接设置CSS样式.增加CSS类别.类别切换.删除类别这几种操作方法.而在整个jQuery使用频率上来看,CSS样式的操作也是极高的,所以需要重点掌握. CSS操作方法 ...

  4. 基础DOM和CSS操作(一)

    DOM简介 DOM是一种文档对象模型,方便开发者对HTML结构元素内容进行展示和修改.在JavaScript中,DOM不但内容庞大繁杂,而且我们开发的过程中需要考虑更多的兼容性.扩展性.在jQuery ...

  5. jQuery 属性操作和CSS 操作

    如有在jQuery方法中涉及到函数,此函数必定会返回一个数值(函数由于运行次数不同触发一些不同效果) jQuery 属性操作方法(以下方法前些日子学习过,不再赘述) addClass() attr() ...

  6. (90)Wangdao.com第二十三天_JavaScript CSS 操作

    CSS 操作 通过 JavaScript 操作 CSS HTML 元素的 style 属性 <div style="background-color:red; border:1px s ...

  7. jquery 学习(五) - CSS 操作

    HTML + CSS 样式 /*CSS样式*/<style> body{ margin: 0; } div{ width: 100%; height: 2000px; background ...

  8. JS BOM DOM对象 select联动 计时器 时间 css操作 节点(标签 ) 查找标签 {前端基础之BOM和DOM}

    前端基础之BOM和DOM 前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互,我 ...

  9. JQuery 之CSS操作

    JQuery 之CSS操作 设置 <p> 元素的颜色: 将所有段落的颜色设为红色 $(".btn1").click(function(){ $("p" ...

  10. jQuery DOM/属性/CSS操作

    jQuery DOM 操作 创建元素 只需要把DOM字符串传入$方法即可返回一个 jQuery 对象 var obj = $('<div class="test">&l ...

随机推荐

  1. k8s-dashboard的部署与卸载

    相对于枯燥的命令行管理,控制台的管理方式相对就显得更加直观便捷了,虽然官方的dashboard有点不太好用,但是作为免费的dashaboard还是可以体验一番的,下面开始部署这个难用的dashboar ...

  2. 使用信号管理nginx的父子进程

    master进程 通过CHLD监控worker进程,worker异常退出,通过CHLD信号拉起worker进程. 接收信号 TERM,INT信号表示立刻停止worker进程 QUIT信号表示优雅的停止 ...

  3. CSS颜色表示的几种方式

    在CSS中颜色有很多表示方式,今天列出一些常见的颜色表示方式及它们的用法. ①color:blue;  第一种,调用颜色属性,将颜色的英文输入在冒号后,以分号结束. 这种方法直接了当,但是能表示的颜色 ...

  4. 行人重识别和车辆重识别(ReID)中的评测指标——mAP和Rank-k

    1.mAP mAP的全称是mean Average Precision,意为平均精度均值(如果按照原来的顺利翻译就是平均均值精度).这个指标是多目标检测和多标签图像分类中长常用的评测指标,因为这类任务 ...

  5. CVE-2019-0232:Apache Tomcat RCE复现

    CVE-2019-0232:Apache Tomcat RCE复现 0X00漏洞简介 该漏洞是由于Tomcat CGI将命令行参数传递给Windows程序的方式存在错误,使得CGIServlet被命令 ...

  6. 《C# GDI+ 破境之道》:第一境 GDI+基础 —— 第二节:画矩形

    有了上一节画线的基础,画矩形的各种边线就特别好理解了,所以,本节在矩形边线上,就不做过多的讲解了,关注一下画“随机矩形”的具体实现就好.与画线相比较,画矩形稍微复杂的一点就是在于它多了很多填充的样式. ...

  7. Apache Tomcat文件包含漏洞紧急修复

    Tomcat 漏洞 tomcat有漏洞, 需要升级到9.0.31 https://cert.360.cn/warning/detail?id=849be16c6d2dd909ff56eee7e26ae ...

  8. 【JavaScript】进制转换&位运算,了解一下?

    前言 在一般的代码中很少会接触到进制和位运算,但这不代表我们可以不去学习它.作为一位编程人员,这些都是基础知识.如果你没有学过这方面的知识,也不要慌,接下来的知识并不会很难.本文你将会学习到: 进制转 ...

  9. Apache 相关 mod_rewrite ,RewriteCond,{HTTP_HOST}

    1.给子域名加www标记  RewriteCond %{HTTP_HOST} ^([a-z.]+)?example\.com$ [NC] RewriteCond %{HTTP_HOST} !^www\ ...

  10. Java TreeMap使用方法

    1.使用默认的TreeMap 构造函数,其中key值需要有比较规则. 2.使用默认的TreeMap 构造函数,Key中添加自定义类型,自定义类型必须继承Comparator. 3.使用比较器类来来实现 ...