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实现div内部的文字或图片自动循环滚动代码
Apr 19 Javascript
jquery实现导航固定顶部的效果仿蘑菇街
Oct 22 Javascript
jquery代码实现简单的随机图片瀑布流效果
Apr 20 Javascript
javascript巧用eval函数组装表单输入项为json对象的方法
Nov 25 Javascript
JS设置cookie、读取cookie
Feb 24 Javascript
简单分析javascript中的函数
Sep 10 Javascript
微信小程序 教程之条件渲染
Oct 18 Javascript
详解Node中导入模块require和import的区别
Aug 11 Javascript
bootstrap模态框关闭后清除模态框的数据方法
Aug 10 Javascript
自定义javascript验证框架示例【附源码下载】
May 31 Javascript
Vue项目页面跳转时浏览器窗口上方显示进度条功能
Mar 26 Javascript
Node.JS如何实现JWT原理
Sep 18 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
提问的智慧(2)
2006/10/09 PHP
PHP简介
2006/10/09 PHP
PHP数组去重的更快实现方式分析
2018/05/09 PHP
作为PHP程序员你要知道的另外一种日志
2018/07/30 PHP
PHP实现简单注册登录系统
2020/12/28 PHP
PHP7修改的函数
2021/03/09 PHP
Google Map API更新实现用户自定义标注坐标
2009/07/29 Javascript
解决IE6的PNG透明JS插件使用介绍
2013/04/17 Javascript
JQUERY 获取IFrame中对象及获取其父窗口中对象示例
2013/08/19 Javascript
原生javascript实现图片弹窗交互效果
2015/01/12 Javascript
JS设置网页图片vspace和hspace属性的方法
2015/04/01 Javascript
javascript实现动态标签云
2015/10/16 Javascript
Ionic如何实现下拉刷新与上拉加载功能
2016/06/03 Javascript
JavaScript DOM节点操作方法总结
2016/08/23 Javascript
JavaScript 上传文件(psd,压缩包等),图片,视频的实现方法
2017/06/19 Javascript
Bootstrap 中data-[*] 属性的整理
2018/03/13 Javascript
vue2.0 + ele的循环表单及验证字段方法
2018/09/18 Javascript
微信公众平台获取access_token的方法步骤
2019/03/29 Javascript
微信小程序版本自动更新的方法
2019/06/14 Javascript
基于python select.select模块通信的实例讲解
2017/09/21 Python
APIStar:一个专为Python3设计的API框架
2018/09/26 Python
Pytorch反向求导更新网络参数的方法
2019/08/17 Python
selenium 多窗口切换的实现(windows)
2020/01/18 Python
Django 设置admin后台表和App(应用)为中文名的操作方法
2020/05/10 Python
浅谈tensorflow使用张量时的一些注意点tf.concat,tf.reshape,tf.stack
2020/06/23 Python
Idea安装python显示无SDK问题解决方案
2020/08/12 Python
python判断元素是否存在的实例方法
2020/09/24 Python
使用CSS3制作响应式导航菜单的方法
2015/07/12 HTML / CSS
CSS3中Animation属性的使用详解
2015/08/06 HTML / CSS
Lands’ End英国官方网站:高质量男女服装
2017/10/07 全球购物
施华洛世奇韩国官网:SWAROVSKI韩国
2018/06/05 全球购物
丝绸和人造花卉、植物和树木:Nearly Natural
2018/11/28 全球购物
波兰多品牌运动商店:StreetStyle24.pl
2020/09/22 全球购物
模具数控专业自荐信
2014/01/27 职场文书
银行转正自我鉴定
2014/09/29 职场文书
Spring Data JPA使用JPQL与原生SQL进行查询的操作
2021/06/15 Java/Android