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 相关文章推荐
jQuery插件实现屏蔽单个元素使用户无法点击
Apr 12 Javascript
牛叉的Jquery——Jquery与DOM对象的互相转换及DOM的三种操作
Oct 29 Javascript
bootstrap读书笔记之CSS组件(上)
Oct 17 Javascript
Vue.js系列之项目搭建(1)
Jan 03 Javascript
jquery实现图片跟随鼠标的实例
Oct 17 jQuery
vue中路由验证和相应拦截的使用详解
Dec 13 Javascript
Vue引用第三方datepicker插件无法监听datepicker输入框的值的解决
Jan 27 Javascript
详解VUE自定义组件中用.sync修饰符与v-model的区别
Jun 26 Javascript
浅谈React之状态(State)
Sep 19 Javascript
我要点爆”微信小程序云开发之项目建立与我的页面功能实现
May 26 Javascript
javascript中的this作用域详解
Jul 15 Javascript
layui表单提交到后台自动封装到实体类的方法
Sep 12 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 str_pad 函数使用详解
2009/01/13 PHP
PHP将整个网站生成HTML纯静态网页的方法总结
2012/02/05 PHP
Yii2中cookie用法示例分析
2016/07/18 PHP
php+ajax实现带进度条的上传图片功能【附demo源码下载】
2016/09/14 PHP
ThinkPHP中create()方法自动验证表单信息
2017/04/28 PHP
yii框架数据库关联查询操作示例
2019/10/14 PHP
Aster vs Newbee BO5 第二场2.19
2021/03/10 DOTA
一份老外写的XMLHttpRequest代码多浏览器支持兼容性
2007/01/11 Javascript
第一个JavaScript入门基础 document.write输出
2010/02/22 Javascript
JS Range HTML文档/文字内容选中、库及应用介绍
2011/05/12 Javascript
jquery 选择器引擎sizzle浅析
2013/02/06 Javascript
Html5的placeholder属性(IE兼容)实现代码
2014/08/30 Javascript
需要牢记的JavaScript基础知识
2016/09/25 Javascript
jquery操作ID带有变量的节点实例
2016/12/07 Javascript
JS完成画圆圈的小球
2017/03/07 Javascript
详解如何使用微信小程序云函数发送短信验证码
2019/03/13 Javascript
JS数据类型(基本数据类型、引用数据类型)及堆和栈的区别分析
2020/03/04 Javascript
微信小程序12行js代码自己写个滑块功能(推荐)
2020/07/15 Javascript
vue+axios 拦截器实现统一token的案例
2020/09/11 Javascript
python函数缺省值与引用学习笔记分享
2013/02/10 Python
Python二维码生成库qrcode安装和使用示例
2014/12/16 Python
python使用threading获取线程函数返回值的实现方法
2017/11/15 Python
pandas每次多Sheet写入文件的方法
2018/12/10 Python
详解Python_shutil模块
2019/03/15 Python
Python + Requests + Unittest接口自动化测试实例分析
2019/12/12 Python
Python常见反爬虫机制解决方案
2020/06/01 Python
CSS3 Notes: -webkit-box-reflect实现倒影的实例
2016/12/08 HTML / CSS
巴西男士个人护理产品商店:SHOP4MEN
2017/08/07 全球购物
投资建议书模板
2014/05/12 职场文书
学校运动会霸气口号
2014/06/07 职场文书
毕业实习自我鉴定范文2014
2014/09/26 职场文书
结婚当天新郎保证书
2015/05/08 职场文书
2015年行风建设工作总结
2015/05/15 职场文书
培训计划通知
2015/07/15 职场文书
2016年教代会开幕词
2016/03/04 职场文书
MySQL 原理与优化之Limit 查询优化
2022/08/14 MySQL