CSS操作
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操作的更多相关文章
- Jq_文档操作方法、属性操作方法、CSS操作函数
		JQuery文档操作方法 这些方法对于 XML 文档和 HTML 文档均是适用的,除了:html(). 方法 描述 addClass() ... 
- 基础DOM和CSS操作(三)
		CSS方法 jQuery不但提供了CSS的核心操作方法,比如.css()..addClass()等.还封装了一些特殊功能的CSS操作方法,我们分别来了解一下. width()方法 方法名 描述 wid ... 
- 基础DOM和CSS操作(二)
		元素样式操作 元素样式操作包括了直接设置CSS样式.增加CSS类别.类别切换.删除类别这几种操作方法.而在整个jQuery使用频率上来看,CSS样式的操作也是极高的,所以需要重点掌握. CSS操作方法 ... 
- 基础DOM和CSS操作(一)
		DOM简介 DOM是一种文档对象模型,方便开发者对HTML结构元素内容进行展示和修改.在JavaScript中,DOM不但内容庞大繁杂,而且我们开发的过程中需要考虑更多的兼容性.扩展性.在jQuery ... 
- jQuery 属性操作和CSS 操作
		如有在jQuery方法中涉及到函数,此函数必定会返回一个数值(函数由于运行次数不同触发一些不同效果) jQuery 属性操作方法(以下方法前些日子学习过,不再赘述) addClass() attr() ... 
- (90)Wangdao.com第二十三天_JavaScript CSS 操作
		CSS 操作 通过 JavaScript 操作 CSS HTML 元素的 style 属性 <div style="background-color:red; border:1px s ... 
- jquery 学习(五) - CSS 操作
		HTML + CSS 样式 /*CSS样式*/<style> body{ margin: 0; } div{ width: 100%; height: 2000px; background ... 
- JS BOM  DOM对象  select联动   计时器   时间  css操作  节点(标签 )  查找标签         {前端基础之BOM和DOM}
		前端基础之BOM和DOM 前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交互,我 ... 
- JQuery 之CSS操作
		JQuery 之CSS操作 设置 <p> 元素的颜色: 将所有段落的颜色设为红色 $(".btn1").click(function(){ $("p" ... 
- jQuery DOM/属性/CSS操作
		jQuery DOM 操作 创建元素 只需要把DOM字符串传入$方法即可返回一个 jQuery 对象 var obj = $('<div class="test">&l ... 
随机推荐
- oracle问题之死锁 (一)
			[前言] 遇到 oracle 异常 和 解决实践 系列文章 整理分享 杂症一.oracle死锁 一.症状: 执行SQL或程序时,程序没有响应或SQL执行一直处于执行状态,没有成功,也没有报错. 二.病 ... 
- Leetcode 题目整理-6 Swap Nodes in Pairs  & Remove Duplicates from Sorted Array
			24. Swap Nodes in Pairs Given a linked list, swap every two adjacent nodes and return its head. For ... 
- 今天更新IDEA后,我依旧要永久激活(支持2019.3.3版本)
			起因 今天一早用IDEA写代码,看到有下角有提示更新,有点强迫症的我,就手欠的又点了下更新,结果尼玛悲剧了,居然许可证过期,IDEA过期了,如下图所示: 就想用下新功能,就这样对我,就给两天的使用时间 ... 
- ELK:日志收集分析平台
			简介 ELK是一个日志收集分析的平台,它能收集海量的日志,并将其根据字段切割.一来方便供开发查看日志,定位问题:二来可以根据日志进行统计分析,通过其强大的呈现能力,挖掘数据的潜在价值,分析重要指标的趋 ... 
- 题解【RQNOJ PID497 0/1字串问题】
			\[ \texttt{Description} \] 编程找出符合下列条件的字符串:①字符串中仅包含 0 和 1 两个字符:②字符串的长度为 n :③字符串中不包含连续重复三次的子串. \[ \tex ... 
- num09---建造者模式
			建造者模式: 核心思想:将产品 和 产品建造过程解耦 
- Go语言实现:【剑指offer】题目汇总
			所列题目与牛客网<剑指offer>专题相对应. 数组: 和为S的两个数字 和为S的连续正数序列 连续子数组的最大和 数字在排序数组中出现的次数 数组中只出现一次的数字 旋转数组的最小数字 ... 
- Hanoi塔问题——递归
			/////////////Hanoi塔问题///////#include<iostream>using namespace std;void hanoi(int i,char A,char ... 
- Asp.net core下利用EF core实现从数据实现多租户(3): 按Schema分离  附加:EF Migration 操作
			前言 前段时间写了EF core实现多租户的文章,实现了根据数据库,数据表进行多租户数据隔离. 今天开始写按照Schema分离的文章. 其实还有一种,是通过在数据表内添加一个字段做多租户的,但是这种模 ... 
- 06-Spring03-事务管理
			今日知识 1. Spring事务管理 2. 转账案例 Spring事务管理 1. 事务特性(ACID) 1. 原子性:整体 [原子性是指事务包含的所有操作要么全部成功,要么全部失败] 2. 一致性:数 ... 
