|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
DIV本身就是容器性质的,你不但可以内嵌table还可以内嵌文本和其它的HTML代码CSS是CascadingstyleSheets的简称,中文译作“层叠样式表单”。
网页制造poluoluo文章简介:毫无疑问,基于体现与布局相分别的准绳,间接导进一个新的款式表是最好的选择,但有些情形就行欠亨,如我们做一个能拖动的DIV,从设置款式的角度看,就是把它相对定位,以防影响本来的文档流,然后一点点改动其top与left的值完成挪动的效果。
之前我就是一篇博文就给出一个好用的函数,它在我几篇博文中被普遍使用的。比来看了很多器材,因而便有了这篇博文,以梳理我学到的新器材。
毫无疑问,基于体现与布局相分别的准绳,间接导进一个新的款式表是最好的选择,但有些情形就行欠亨,如我们做一个能拖动的DIV,从设置款式的角度看,就是把它相对定位,以防影响本来的文档流,然后一点点改动其top与left的值完成挪动的效果。因为拖动是偶然间观点的,一秒24帧,款式表不成能八面玲珑都把它们写出来。因而静态天生款式划定规矩与疾速修正款式划定规矩长短常有需要的,W3C为此做了大批的事情,在DOM2.0中,扩大了很多接口。
退一步说,体现与布局相分别也不止导进款式表这一条路。要晓得,一共有三种款式范例,内部款式,外部款式,与内联款式。
- 内部款式,就是我们下面说的谁人,写在一个自力的CSS文件中。
- 外部款式,就是自力写在一个style标签中,一般是放在head标签中,我最初供应的函数天生的款式就是外部款式。
- 内联款式,就是写在元素的style属性中的款式。
新增加的接口次要会合在内部款式中——之以是说接口,由于响应的完成是由扫瞄器方供应的,像IE6那样狂妄的家伙,历来忽视它们的存在。
在W3C的模子中,type为"text/css"的link标签与style标签都是代表一个CSSStyleSheet工具,我们能够经由过程document.styleSheets取得以后页面中一切的CSSStyleSheet工具,不外这是一个汇合,非纯真的数组。每个CSSStyleSheet工具具有以下属性,
- type:永久前往“text/css”字符串。
- disabled:和input的disabled的感化不异,默许是false。
- href:前往URL,假如是style标签为null。
- title:前往其title的值,title与一般元素的title无异,随你写甚么。
- media:IE与火狐前往的器材其实不分歧,不太好说。media是用来划定它具有的款式划定规矩对甚么设备无效,默许是一切。
- ownerRule:前往一个只读的CSSRule工具,假如款式表是用@import引进的话。
- cssRules:前往一个只读的款式划定规矩工具(CSSStyleRuleobject)的汇合。
款式划定规矩工具(CSSStyleRuleobject),是W3C为了对款式举行更仔细的设定而弄出来的,以下面这个器材就是对应一个款式划定规矩工具:
button[type]{
padding:4px10px4px7px;
line-height:17px;
}
款式划定规矩工具具有以下几个次要属性:type,cssText,parentStyleSheet,parentRule。
type有点相似节点的nodeType,对款式划定规矩举行细分,它是用一个整数来暗示其范例。详细情形以下
- 0:CSSRule.UNKNOWN_RULE
- 1:CSSRule.STYLE_RULE(界说一个CSSStyleRule工具)
- 2:CSSRule.CHARSET_RULE(界说一个CSSCharsetRule工具,用于设定以后款式表的字符集,默许与以后网页不异)
- 3:CSSRule.IMPORT_RULE(界说一个CSSImportRule工具,就是用@import引进其他的款式表)
- 4:CSSRule.MEDIA_RULE(界说一个CSSMediaRule工具,用于设定此款式是用于显现器,打印机仍是投影机等等)
- 5:CSSRule.FONT_FACE_RULE(界说一个CSSFontFaceRule工具,CSS3的@font-face)
- 6:CSSRule.PAGE_RULE(界说一个CSSPageRule工具)
cssText不必多说,一个十分有效的属性,间接把字符串转换成款式划定规矩,忽视各扫瞄器款式属性的差别,如cssFloat和styleFloat。
parentStyleSheet和parentRule都是针对@import来讲的。不外,@import在IE下有成绩,我基础不必它。
网页制造poluoluo文章简介:毫无疑问,基于体现与布局相分别的准绳,间接导进一个新的款式表是最好的选择,但有些情形就行欠亨,如我们做一个能拖动的DIV,从设置款式的角度看,就是把它相对定位,以防影响本来的文档流,然后一点点改动其top与left的值完成挪动的效果。
另有几个生不逢时的办法:
- nsertRule(rule,index):增加一条款式划定规矩。
- deleteRule(index):移除一条款式划定规矩。
- getPropertyValue(propertyName)猎取元素响应款式属性的值。如我们取得一个款式划定规矩工具,能够使用CSSStyleRuleObject.getPropertyValue("color")取得其字体色彩的设置。与一般的el.style.color的办法比拟,其效力相称高,由于el.style.color猎取的是内联款式,像IE那样的怪胎,假如你的元素没有设置style属性,基本没法失掉筹办的值,大概为空,多是inhert……大概另有兼容成绩,并且这内联属性纷歧定是终极使用于元素的款式,IE只要挪用不那末宝物的el.currentStyle[prop],其他扫瞄器就挪用相称争气但有点贫苦的document.defaultView.getComputedStyle(el,"")[prop]。
- removeProperty(propertyName)移除元素响应款式属性。
- setProperty(propertyName,value,priority)设定元素增加一个款式,还能指定优先级。
我们能够弄一个设定款式的函数出来:
varhyphenize=function(name){
returnname.replace(/([A-Z])/g,"-$1").toLowerCase();
}
varcapitalize=function(prop){
returnprop.replace(/[a-z]/g,function(match){
returnmatch.toUpperCase();
});
}
varsetStyle=function(el,styles){
for(varpropertyinstyles){
if(!styles.hasOwnProperty(property))continue;
if(el.style.setProperty){
//必需是连字符作风,el.style.setProperty(background-color,red,null);
el.style.setProperty(hyphenize(property),styles[property],null);
}else{
//必需是驼峰作风,如el.style.paddingLeft="2em"
el.style[camelize(property)]=styles[property]
}
}
returntrue;
}
利用办法:
setStyle(div,{
left:0,
top:0,
line-height:2em,
padding-right:4px
});
不外我十分不喜好这办法,天生的是内联款式,它还得特别处置float与opacity。在IE7的内联款式中,滤镜另有一个Bug,必定要让其失掉hasLayout,要不滤镜就不会失效(我们能够经由过程el.currentStyle.hasLayout检察其情况)。因而,如其一个个设置,不如用cssText一扫而光。
最初附上我的增强版addSheet办法。它增加主动处置opacity的功效,也就是说我们只必要按尺度设置cssText,它会主动天生响应的滤镜,如许一来最少让火狐等扫瞄器经由过程W3C的校检。
varaddSheet=function(){
vardoc,cssCode;
if(arguments.length==1){
doc=document;
cssCode=arguments[0]
}elseif(arguments.length==2){
doc=arguments[0];
cssCode=arguments[1];
}else{
alert("addSheet函数最多承受两个参数!");
}
if(!+"v1"){//新增功效,用户只需输出W3C的通明款式,它会主动转换成IE的通明滤镜
vart=cssCode.match(/opacity:(d?.d+);/);
if(t!=null){
cssCode=cssCode.replace(t[0],"filter:alpha(opacity="+parseFloat(t[1])*100+");");
}
}
cssCode=cssCode+"
";//增添开端的换行符,便利在firebug下的检察。
varheadElement=doc.getElementsByTagName("head")[0];
varstyleElements=headElement.getElementsByTagName("style");
if(styleElements.length==0){//假如不存在style元素则创立
if(doc.createStyleSheet){//ie
doc.createStyleSheet();
}else{
vartempStyleElement=doc.createElement(style);//w3c
tempStyleElement.setAttribute("type","text/css");
headElement.appendChild(tempStyleElement);
}
}
varstyleElement=styleElements[0];
varmedia=styleElement.getAttribute("media");
if(media!=null&&!/screen/.test(media.toLowerCase())){
styleElement.setAttribute("media","screen");
}
if(styleElement.styleSheet){//ie
styleElement.styleSheet.cssText+=cssCode;//增加新的外部款式
}elseif(doc.getBoxObjectFor){
styleElement.innerHTML+=cssCode;//火狐撑持间接innerHTML增加款式表字串
}else{
styleElement.appendChild(doc.createTextNode(cssCode))
}
}
原文:http://www.ckuyun.com/rubylouvre/archive/2009/08/30/1556869.html
你的设计不仅仅用于web浏览器,也可以发布在其他设备上,比如PowerPoint。 |
|