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 相关文章推荐
图片格式的JavaScript和CSS速查手册
Aug 20 Javascript
jQuery提交多个表单的小例子
Jun 30 Javascript
使用jquery修改表单的提交地址基本思路
Jun 04 Javascript
深入分析JSON编码格式提交表单数据
Jun 25 Javascript
jQuery实现的仿百度分页足迹效果代码
Oct 30 Javascript
jQuery form 表单验证插件(fieldValue)校验表单
Jan 24 Javascript
mui back 返回刷新页面的实例
Dec 06 Javascript
vue自动路由-单页面项目(非build时构建)
Apr 30 Javascript
微信小程序实现判断是分享到群还是个人功能示例
May 03 Javascript
微信小程序使用字体图标的方法
May 23 Javascript
jQuery位置选择器用法实例分析
Jun 28 jQuery
JS 创建对象的模式实例小结
Apr 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
jQuery结合Json提交数据到Webservice,并接收从Webservice返回的Json数据
2011/02/18 Javascript
JS Date函数整理方便使用
2013/10/23 Javascript
用JS实现3D球状标签云示例代码
2013/12/01 Javascript
js toFixed()方法的重写实现精度的统一
2014/03/06 Javascript
jquery实现搜索框常见效果的方法
2015/01/22 Javascript
js禁止页面刷新与后退的方法
2015/06/08 Javascript
浅析Node.js中使用依赖注入的相关问题及解决方法
2015/06/24 Javascript
使用JavaScript制作一个简单的计数器的方法
2015/07/07 Javascript
angularjs学习笔记之完整的项目结构
2015/09/26 Javascript
理解javascript函数式编程中的闭包(closure)
2016/03/08 Javascript
javascript html5移动端轻松实现文件上传
2020/03/27 Javascript
简单的渐变轮播插件
2017/01/12 Javascript
node.js实现复制文本到剪切板的功能
2017/01/23 Javascript
解决vuecli3.0热更新失效的问题
2018/09/19 Javascript
小程序实现留言板
2018/11/02 Javascript
在Python中处理XML的教程
2015/04/29 Python
python中引用与复制用法实例分析
2015/06/04 Python
详解Python中的from..import绝对导入语句
2016/06/21 Python
Python绘制七段数码管实例代码
2017/12/20 Python
python 3.6.4 安装配置方法图文教程
2018/09/18 Python
pycharm编写spark程序,导入pyspark包的3中实现方法
2019/08/02 Python
Python 2种方法求某个范围内的所有素数(质数)
2020/01/31 Python
PyCharm 2020.2 安装详细教程
2020/09/25 Python
matplotlib 多个图像共用一个colorbar的实现示例
2020/09/10 Python
Puritan’s Pride(普丽普莱)官方网站:美国最大最全的保健品公司之一
2016/10/23 全球购物
英国网上花店:Bunches
2016/11/29 全球购物
运动会通讯稿50字
2014/01/30 职场文书
新员工入职感言
2014/02/01 职场文书
自主招生教师推荐信
2014/05/10 职场文书
2014年计生工作总结
2014/11/21 职场文书
解除劳动关系协议书2篇
2014/11/28 职场文书
2015年大学生社会实践评语
2015/03/26 职场文书
工伤认定行政答辩状
2015/05/22 职场文书
JPA如何使用entityManager执行SQL并指定返回类型
2021/06/15 Java/Android
POST提交数据常见的四种方式
2022/01/18 HTML / CSS
MySQL数据库之存储过程 procedure
2022/06/16 MySQL