你可能不知道的5种 CSS 和 JS 的交互方式

英文原文: 5 Ways that CSS and JavaScript Interact That You May Not Know About
译文地址:http://blog.csdn.net/renfufei/article/details/18665457

CSS和JavaScript: 在各个浏览器版本中的分界线似乎变得越来越模糊。两者所完成的功能差异非常明显,但说到底他们都是前端技术,所以确实需要紧密地配合。

虽然我们将代码拆分到独立的 .js 文件和 .css 文件中,但他们之间还能进行一些更密切的交互,这些通常是普通JS框架所不支持的。

下面是你可能不知道的CSS和JS的交互的5种方式:

使用JavaScript获取CSS伪元素属性

我们可以通过DOM元素的 style 属性获取基本的CSS样式值,但怎么获取CSS伪元素属性呢? 确实,JavaScript提供了相应的API:

// 获取 .element:before 的 color 值  
var color = window.getComputedStyle(  
    document.querySelector('.element'), ':before'  
).getPropertyValue('color');  
  
  
// 获取 .element:before 的 content 值  
var content = window.getComputedStyle(  
    document.querySelector('.element'), ':before'  
).getPropertyValue('content');  

你可以查看作者的博客文章: Device State Detection,如果你想创建动态,独特的网站那会非常有用。

classList API

在最受欢迎的JS框架中,我们可以使用 addClass , removeClass ,以及 toggleClass 方法来处理 class 列表。 为了兼容旧版本浏览器,每个框架都会先获取元素的 className属性(类型为String) 并添加/移除 相应的 class,然后再更新 className 字符串。 现在,有一个新的API可以用来高效地添加、删除、切换 class,名为 classList:

myDiv.classList.add('myCssClass'); // 添加 class  
myDiv.classList.remove('myCssClass'); // 移除 class  
myDiv.classList.toggle('myCssClass'); // 切换 class  

大多数浏览器支持 classList 已经好几年了,但是 IE 很杯具的在 10.0 版本才开始支持。

直接操作样式表

我们对于使用 element.style.propertyName 这种形式的方法修改样式都很熟悉, 并可以通过 JavaScript 工具来处理,但你知道怎样在新的和已存在的 stylesheets 中 读取和写入样式规则吗? 这个API也是很简单的:

function addCSSRule(sheet, selector, rules, index) {  
    // 注意 sheet 的新 API   
    if(sheet.insertRule) {  
        sheet.insertRule(selector + "{" + rules + "}", index);  
    }  
    else {  
        sheet.addRule(selector, rules, index);  
    }  
}  
  
  
// 调用!  
addCSSRule(document.styleSheets[0], "header", "float: left");  

通常是使用此种方式来创建一个新的样式表,但如果你想修改一个现有的样式表也可以,快试试吧!

使用 Loader 加载 CSS 文件

对图片,JSON,以及JS脚本的懒加载是减少页面显示时间的有效方法。 我们可以通过 curl.js 或者 jQeury 库加载这些外部资源, 但你知道如何懒加载样式表并在加载完成后触发回调函数么?

curl(  
    [  
        "namespace/MyWidget",  
        "css!namespace/resources/MyWidget.css"  
    ],   
    function(MyWidget) {  
        // 使用 MyWidget 进行  
        // The CSS reference isn't in the signature because we don't care about it;  
        // we just care that it is now in the page  
    }  
});  

本博客的 原文 就使用懒加载导入了 PrismJS,基于 pre 元素实现文字的高亮显示. 在所有资源(包括css)加载完成后,会调用回调函数,这应该是很有用的。

CSS 的 pointer-events 属性

CSS pointer-events 属性扮演了一种类似 JavaScript 的方式, 如果 pointer-events 值为 none 则禁用某个元素,不为 none 则允许元素的常用功能。 可能你会问: "这有什么用?" 好处是 pointer-events 能高效地阻止触发 JavaScript 事件。

.disabled { pointer-events: none; }  

在元素上的 click 以及通过 addEventListener 添加的回调函数都不会被触发。 这真是一个完美的属性,真的 —— 你在回调函数中不需要先检测 className 以决定某些分支。

上面列举了CSS与Javascript交互的5种方式,还有更多的交互方式吗? 欢迎您进行分享!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,793评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,567评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,342评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,825评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,814评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,680评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,033评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,687评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,175评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,668评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,775评论 1 332
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,419评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,020评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,978评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,206评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,092评论 2 351
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,510评论 2 343

推荐阅读更多精彩内容

  • 问答题47 /72 常见浏览器兼容性问题与解决方案? 参考答案 (1)浏览器兼容问题一:不同浏览器的标签默认的外补...
    _Yfling阅读 13,727评论 1 92
  • 1.几种基本数据类型?复杂数据类型?值类型和引用数据类型?堆栈数据结构? 基本数据类型:Undefined、Nul...
    极乐君阅读 5,498评论 0 106
  • 当还青春,当我以为还有大把时光去挥霍,去享受生活,生命的恶魔,光顾了我…… 这天开始,我的天空变成了灰色,从来乐观...
    DonaZqc阅读 334评论 0 1
  • 一、 归来了 走在香樟树暗香浮动的影子里 我脚下的影子开出一朵一朵的小花 我轻轻抚一抚白色衬衫的衣袖 滚动一颗颗粘...
    代小鱼儿阅读 220评论 0 3
  • 既然早已猜中这被设计好的结局 何必再浪费精力对预谋愤愤不平 心知与肚明 相煎何太急 就此别过 虽然这场告别有些唏嘘...
    阅燃知上阅读 177评论 0 0