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 ...
随机推荐
- 优雅对API进行内部升级改造
优雅对API进行内部升级改造 背景 随着业务的快速发展老的系统将逐渐的无法快速支撑现有业务迭代重构一个必然的过程;然而在底层业务系统重构的过程中,对外提供的API也同时需要进行相应的升级替换;推动外部 ...
- 实验16:ACL
实验13-1:标准ACL Ø 实验目的通过本实验可以掌握:(1)ACL 设计原则和工作过程(2)定义标准ACL(3)应用ACL(4)标准ACL 调试 Ø 拓扑结构 本实验拒绝PC1 所在网 ...
- java工具类方法
1.生成16位数字(当时日期时间加随机两位数) public static String getNo16() { String getNo = getNo(); return getNo.substr ...
- RUST actix-web连接有密码的Redis数据库
RUST actix-web连接有密码的Redis数据库 actix-web的example里面,使用了自己的actix-redis,但是我尝试了一下,并不好用 替换成另一连接池,deadpool-r ...
- Codeforces_801
A.直接暴力就行了,先把能组合的按线性组合掉,再枚举剩下相邻没用过的. #include<bits/stdc++.h> using namespace std; string s; ] = ...
- PTA 7-9 集合相似度(STL之set初体验)
7-9 集合相似度(25 分) 给定两个整数集合,它们的相似度定义为:Nc/Nt×100%.其中Nc是两个集合都有的不相等整数的个数,Nt是两个集合一共有的不相等整数的个数.你 ...
- 【WPF学习】第四十三章 路径和几何图形
前面四章介绍了继承自Shape的类,包括Rectangle.Ellipse.Polygon以及Polyline.但还有一个继承自Shape的类尚未介绍,而且该类是到现在为止功能最强大的形状类,即Pat ...
- 版本控制工具-svn
两个疑问: 1.什么是版本控制? 2.为什么要用版本控制工具? 银联卡的特征: 1.受保护的 2.受约束的 如何与银联卡对应? 1.个人的代码--口袋里的钱 2.版本控制工具中的代码--银联卡里的钱 ...
- yukongDSRM账户安全防护
一.DSRM简介 1.DSRM(Diretcory Service Restore Mode,目录服务恢复模式)是windows域环境中域控制器的安全模式启动选项.域控制器的本地管理员账户也就是DSR ...
- 11-HTTP请求协议
今日知识 1. http 2. Tomcat使用 3. 知识总结 HTTP 1. 概念:Hyper Text Transfer Protocol * 传输协议:定义了,客户端和服务器通信时,发送的数据 ...