JQuery插件Style定制化方法的分析与比较


Posted in Javascript onMay 03, 2012

1前言
最近因为项目的需要,使用了一个JQuery插件。把插件下下来后,很快我就发现,很多默认的插件Style不符合项目要求,必须要被修改。
在这个过程中,我发现自己先后使用了多种不同的方法实现插件Style的定制化。很高兴最后找到了我认为最好的方法,对CSS的认识也加深了不少,感触颇多。这篇文章就是对这些新的CSS的认识的一个梳理。
2JQuery 插件Style 定制化方法
2.1 初始化插件时输入定制化对象
做的比较好的插件会在初始化时允许输入定制化对象。
如果输入定制化对象,插件会使用定制化对象中的值,例如,

var adgallerySetting = { 
width: 600, // Width of the image, set to false and it will read the CSS width 
height: 400, // Height of the image, set to false and it will read the CSS height 
} 
var galleries = $('.ad-gallery').adGallery(adgallerySetting);

如果不输入定制化对象,插件会使用它自己的默认值,例如,
var galleries = $('.ad-gallery').adGallery();
2.2 修改插件的CSS
如果插件没有提供定制化对象或你想要修改的Style不在定制化对象定义里,一个比较直观的方法是修改插件的CSS文件。这不是一种值得提倡的方法,因为这会Corrupt插件的本身的源代码,且不利于以后插件版本的更新。
2.3 注册Callback函数
大部分插件还在定制化对象里定义Callback函数。如果Callback函数在插件完成style enhance后调用,你可以写这个Callback并注册,在Callback里修改DOM模型,从而完成插件style的定制化。这种方法比较繁琐,需要你花比较多的时间去理解插件内部的实现。例如,
var adgallerySetting = { 
// All callbacks has the AdGallery objects as 'this' reference 
callbacks: { 
// This gets fired right before old_image is about to go away, and new_image 
// is about to come in 
beforeImageVisible: function(new_image, old_image) { 
// Do something wild! 
var thing = "this is it"; 
//Change the plugin enhanced page 
$(".ad-gallery .ad-image-wrapper .ad-image").removeAttr("style"); 
$(".ad-gallery .ad-image-wrapper .ad-image").css("width", "100%"); 
var width = $(".ad-gallery .ad-image-wrapper .ad-image img").attr("width"); 
$(".ad-gallery .ad-image-wrapper .ad-image img").attr("width", "100%"); 
$(".ad-gallery .ad-image-wrapper .ad-image .img").attr("width", 100%); 
$(".ad-gallery .ad-image-wrapper .ad-image").attr("height", 100%); 
} 
} 
};

2.4 增加一个新的CSS文件,重载插件的部分style
CSS是cascading style sheet 的缩写,固名思义,它有一个Cascading 标准。当多个CSS 文件对同一个HTML element的style定义有冲突时,它会根据以下规则决定apply哪个CSS style.
1) ! Important 标识。
2) 来源。 Author (HTMl链入的CSS文件), Reader(Web surfer), User agent(Browser)
3) 相关性。
具体可以查看参考部分的链接网页。
这种方法,在我看来是除1.1 外最好的方法,下面是些代码示例。
#descriptions .ad-image-description { 
position: absolute; 
} 
#descriptions .ad-image-description .ad-description-title { 
display: block; 
} 
.ad-gallery .ad-image-wrapper .ad-image { 
width: 100% ! important; 
left: 0px ! important; 
}

3总结
根据这次的经验,我觉得定制插件Style的最好方法输入定制化对象(如果插件支持的话)或CSS重载。有些插件会以在HTML element中加入style="...."的方式定义style。在这种情况下,你就会发现,“! important”标识的出现是相当的令人舒心。J
4参考
http://www.w3.org/TR/CSS21/cascade.html
http://stackoverflow.com/questions/7022344/css-newbie-questions-on-authors-style-readers-style-agents-style
http://htmlhelp.com/reference/css/structure.html
http://css-tricks.com/override-inline-styles-with-css/
Javascript 相关文章推荐
破解Session cookie的方法
Jul 28 Javascript
javascript下4个跨浏览器必备的函数
Mar 07 Javascript
基于JQuery实现的类似购物商城的购物车
Dec 06 Javascript
Jquery ajax基础教程
Nov 20 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
Nov 25 Javascript
JavaScript实现设计模式中的单例模式的一些技巧总结
May 17 Javascript
JS选取DOM元素的简单方法
Jul 08 Javascript
详解js中的apply与call的用法
Jul 30 Javascript
xmlplus组件设计系列之按钮(2)
Apr 26 Javascript
Bootstrap实现省市区三级联动(亲测可用)
Jul 26 Javascript
vue项目中使用eslint+prettier规范与检查代码的方法
Jan 16 Javascript
原生js实现五子棋游戏
May 28 Javascript
拉动滚动条加载数据的jquery代码
May 03 #Javascript
基于jquery的固定表头和列头的代码
May 03 #Javascript
一个基于jQuery的树型插件(OrangeTree)使用介绍
May 03 #Javascript
ASP.NET中AJAX 调用实例代码
May 03 #Javascript
javascript中将Object转换为String函数代码 (json str)
Apr 29 #Javascript
基于jquery ajax 用户无刷新登录方法详解
Apr 28 #Javascript
学习从实践开始之jQuery插件开发 对话框插件开发
Apr 26 #Javascript
You might like
php jquery 实现新闻标签分类与无刷新分页
2009/12/18 PHP
php checkbox复选框值的获取与checkbox默认值输出方法
2010/05/15 PHP
浅谈web上存漏洞及原理分析、防范方法(安全文件上存方法)
2013/06/29 PHP
利用PHP实现短域名互转
2013/07/05 PHP
php socket实现的聊天室代码分享
2014/08/16 PHP
PHP动态编译出现Cannot find autoconf的解决方法
2014/11/05 PHP
php使用wordwrap格式化文本段落的方法
2015/03/17 PHP
php根据日期显示所在星座的方法
2015/07/13 PHP
用正则xmlHttp实现的偷(转)
2007/01/22 Javascript
小议Javascript中的this指针
2010/03/18 Javascript
分享纯手写漂亮的表单验证
2015/11/19 Javascript
ES6中非常实用的新特性介绍
2016/03/10 Javascript
JS如何设置iOS中微信浏览器的title
2016/11/22 Javascript
深入理解Angularjs向指令传递数据双向绑定机制
2016/12/31 Javascript
利用iscroll4实现轮播图效果实例代码
2017/01/11 Javascript
js css自定义分页效果
2017/02/24 Javascript
详谈构造函数加括号与不加括号的区别
2017/10/26 Javascript
如何在js代码中消灭for循环实例详解
2018/07/29 Javascript
js+html实现周岁年龄计算器
2019/06/25 Javascript
elementUI 动态生成几行几列的方法示例
2019/07/11 Javascript
[54:05]DOTA2-DPC中国联赛定级赛 SAG vs iG BO3第一场 1月9日
2021/03/11 DOTA
python练习程序批量修改文件名
2014/01/16 Python
Python时间戳使用和相互转换详解
2017/12/11 Python
python实现redis三种cas事务操作
2017/12/19 Python
Django项目使用CircleCI的方法示例
2019/07/14 Python
django-rest-swagger对API接口注释的方法
2019/08/29 Python
简单了解python中的与或非运算
2019/09/18 Python
Python如何读取、写入JSON数据
2020/07/28 Python
Django Form常用功能及代码示例
2020/10/13 Python
C#怎么让一个窗口居中显示?
2015/10/20 面试题
财务会计专业应届毕业生求职信
2013/10/18 职场文书
干部作风建设个人剖析材料
2014/10/11 职场文书
三行辞职书范文
2015/02/26 职场文书
肖申克的救赎观后感
2015/06/02 职场文书
学习习近平主席讲话心得体会
2016/01/20 职场文书
Redis安装使用RedisJSON模块的方法
2022/03/23 Redis