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 相关文章推荐
js实现透明度渐变效果的方法
Apr 10 Javascript
jQuery实现的简单折叠菜单(折叠面板)效果代码
Sep 16 Javascript
JS实现网页标题随机显示名人名言的方法
Nov 03 Javascript
jQuery实现点击水纹波动动画
Apr 10 Javascript
webpack开发跨域问题解决办法
Aug 03 Javascript
javascript实现Emrips反质数枚举的示例代码
Dec 06 Javascript
vue2.0的虚拟DOM渲染思路分析
Aug 09 Javascript
create-react-app使用antd按需加载的样式无效问题的解决
Feb 26 Javascript
koa+mongoose实现简单增删改查接口的示例代码
May 13 Javascript
JavaScript使用表单元素验证表单的示例代码
Aug 20 Javascript
JS this关键字在ajax中使用出现问题解决方案
Jul 17 Javascript
前端JavaScript大管家 package.json
Nov 02 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
第九节 绑定 [9]
2006/10/09 PHP
yii实现图片上传及缩略图生成的方法
2014/12/04 PHP
php根据年月获取当月天数及日期数组的方法
2016/11/30 PHP
PHP pthreads v3使用中的一些坑和注意点分析
2020/02/21 PHP
jQuery解决下拉框select设宽度时IE 6/7/8下option超出显示不全
2013/05/27 Javascript
Javascript中Date类型和Math类型详解
2016/02/27 Javascript
举例说明JavaScript中的实例对象与原型对象
2016/03/11 Javascript
Vue Spa切换页面时更改标题的实例代码
2017/07/15 Javascript
Angular项目中$scope.$apply()方法的使用详解
2017/07/26 Javascript
JS倒计时实例_天时分秒
2017/08/22 Javascript
深入浅析var,let,const的异同点
2018/08/07 Javascript
vue 利用路由守卫判断是否登录的方法
2018/09/29 Javascript
浅谈Vue.js中如何实现自定义下拉菜单指令
2019/01/06 Javascript
从vue源码看props的用法
2019/01/09 Javascript
js字符串类型String常用操作实例总结
2019/07/05 Javascript
超简单的微信小程序轮播图
2019/11/22 Javascript
python中如何使用朴素贝叶斯算法
2017/04/06 Python
Python+Selenium+PIL+Tesseract自动识别验证码进行一键登录
2017/09/20 Python
python 设置文件编码格式的实现方法
2017/12/21 Python
Python爬虫框架Scrapy实例代码
2018/03/04 Python
Python爬虫PyQuery库基本用法入门教程
2018/08/04 Python
对Python多线程读写文件加锁的实例详解
2019/01/14 Python
python使用phoenixdb操作hbase的方法示例
2019/02/28 Python
对Python中小整数对象池和大整数对象池的使用详解
2019/07/09 Python
python 图像的离散傅立叶变换实例
2020/01/02 Python
Python趣味实例,实现一个简单的抽奖刮刮卡
2020/07/18 Python
python 爬取小说并下载的示例
2020/12/07 Python
CSS3属性选择符介绍
2008/10/17 HTML / CSS
加拿大知名的国际儿童品牌:Hatley
2016/11/09 全球购物
农场厂长岗位职责
2013/12/28 职场文书
高一历史教学反思
2014/01/13 职场文书
企业指导教师评语
2014/04/28 职场文书
领导班子自我剖析材料
2014/08/16 职场文书
暑期工社会实践报告
2015/07/13 职场文书
2016年党员干部廉政承诺书
2016/03/24 职场文书
面试提问mysql一张表到底能存多少数据
2022/03/13 MySQL