`
yiminghe
  • 浏览: 1431413 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

获取css属性计算值问题

阅读更多

都知道标准浏览器可以用 getComputedStyle 以及对应 ie 可以用 currentStyle 来取得元素渲染时的实际css属性值吧。

但是对于css缩写属性似乎很混乱,虽然标准 说缩写属性应该正确读取,


For some shorthand properties that take missing values from other sides, such as the margin, padding, and border-[width|style|color] properties, the minimum number of sides possible should be used; i.e., "0px 10px" will be returned instead of "0px 10px 0px 10px".

 

代码 :

 

但是现实是残酷的(在各个浏览器中打开)

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
	"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
	<head>

		<style type="text/css">
/*<![CDATA[*/

		.test {
		border:1px solid green;
		padding:10px
		}
		/*]]>*/
		</style>
		<title>
			test getComputedStyle
		</title>
	</head>
	<body>
		<div class="test" id="test">
			test
		</div><script type="text/javascript">
//<![CDATA[
		function getStyle(el,p){
		if(typeof el=='string') {
		el=document.getElementById(el);
		}
		if (window.getComputedStyle) {
		//document.defaultView
			var compStyle = window.getComputedStyle (el, "");
		}
		else {
			var compStyle = el.currentStyle;
		}
		return compStyle[p];

		}

		var el="test";

		alert("padding : "+getStyle(el,"padding"));
		alert("padding-top : "+getStyle(el,"paddingTop"));
		alert("border : "+getStyle(el,"border"));
		alert("border-width : "+getStyle(el,"borderWidth"));
		//]]>
		</script>
	</body>
</html>
 

 

竟然opera支持最好 ,关于shorthand 的不同看看这里 的总结:


Another difference is that the shorthand style properties are partially supported by the CSSStyleDeclaration and currentStyle objects. For example, the border is a shorthand style property, because the color, style and width of the border can be declared with it in one place.


The border property is supported in Opera, but not supported in Internet Explorer, Firefox and Safari.


The borderColor, borderStyle and borderWidth properties are supported in Internet Explorer and Opera, but not supported in Firefox and Safari.


The borderBottomColor, borderBottomStyle, borderBottomWidth, borderLeftColor, borderLeftStyle, borderLeftWidth, ... properties are supported in Internet Explorer, Firefox, Opera and Safari as well.


Therefore, if you need the current border settings, you must use the borderBottomColor, borderBottomStyle, borderBottomWidth, ... properties for a cross-browser solution.


单单 border 就很混乱。


可能解决:


若要达到完全兼容的话,把缩写手动拆开是个方法吧:


value("padding") = value(" padding-top")+" "+ value(" padding-right")

+" "+ value(" padding-bottom")

+" "+ value(" padding-left")


把子项值读出来然后拼起来可行,只不过有点麻烦,需要考虑所有的缩写形式。

 

 

 

PS: 复杂的 IE 取得css属性的绝对像素值问题

0
0
分享到:
评论
1 楼 nagisaF 2011-03-26  
getStyle()函数里对符合标准的浏览器,属性的驼峰形式改为原始"-"连词形式即可
缩写值是可以正确读取的。

相关推荐

    css属性继承

    在CSS中,许多属性都是可以继承...这些属性被称之为inherited property,它会从父元素获取对应属性的经过计算与转换的值(computed value),如果父元素和它的情形一样,它就继续往上找,最后没有就使用浏览器的默认值。

    全国计算机类说课大赛一等奖:CSS样式表的使用教学设计.docx

    (二)过程与方法 依托班级学习网站、校园网资源库、蓝墨云班课移动教学平台为载体,使用交互式课件、三维动画、微课视频辅助教学,通过小组合作探究、自主学习等方式,让学生掌握添加CSS样式表的过程和修改属性值的...

    css权威指南(第三版)

    涵盖了Internet Explorer 7,详细介绍了各个CSS属性以及属性之间的相互作用,并指导你如何避免一些常见的错误。不论你是一位经验丰富的web创作人员,还是一无所知的新手,都可以把它作为内容翔实的CSS参考资料放在...

    charmax:给定一组字体 css 属性,计算可以显示的最大字符数

    给定一组样式表属性配置,这将返回一个数字,该数字指示可以在浏览器中显示的最大字符数使用样式表属性定义的元素。两阶段方法为了使服务可用,必须首先对其进行培训。 列车的输入参数在css_attrs.json 中提供。 ...

    css3中使用calc()函数计算宽高

    用于动态计算宽/高,你可以使用calc()给元素的各个属性设置值【margin、border、padding、font-size】等. calc()语法 calc的语法就是简单的四则运算 使用“+”、“-”、“*” 和 “/”四则运算; 可以使用百分比、px...

    CoCreate-calculation:Vanilla javascript中的一个简单的计算组件。 使用数据属性和_或JavaScript API轻松配置。 非常适合从多个元素获取值并进行计算以产生结果

    Vanilla javascript中的一个简单的计算组件。 使用HTML5数据属性和/或JavaScript API轻松配置。 在我们的 有关完整的指南和演示示例,请参考 CDN &lt; script src =" ...

    javascript中使用css需要注意的地方小结

    1.在改变单个元素样式时,注意style对象的语法和css中使用的语法几乎是一一对应的。不过包含连字符的属性则被替换为一种“camel ... 获得元素的计算样式: 在W3C DOM下可以: 代码如下: var heading = document.getEleme

    HTML图片3D旋转源码.rar

    源码使用HTML、CSS3、原生js方法结合实现了图片360度立体旋转效果,源码分别展示了六种情况下不同角度的多张图片立体旋转,具体运行效果可参见视频演示,实现技术:引用了大量的css3属性和原生js函数如动态获取页面...

    JS大全 web编程

    offsetLeft:获取对象相对于版面或由 offsetParent 属性指定的父坐标的计算左侧位置 offsetTop:获取对象相对于版面或由 offsetTop 属性指定的父坐标的计算顶端位置 event.clientX 相对文档的水平座标 event....

    JavaScript权威指南(第6版)(附源码)

    16.2 重要的CSS属性 16.3 脚本化内联样式 16.4 查询计算出的样式 16.5 脚本化CSS类 16.6 脚本化样式表 第17章 事件处理 17.1 事件类型 17.2 注册事件处理程序 17.3 事件处理程序的调用 17.4 文档加载事件 17.5 鼠标...

    javascript获取元素的计算样式

    背景 使用css控制页面有4种方式,分别为行内样式(内联样式)、内嵌式、链接式、导入式。 行内样式(内联样式)即写在html标签中的style...link href=”test.css” rel=”external nofollow” type=”text/css” rel=”s

    js 获取元素的具体样式信息getcss(实例讲解)

    如果想获取元素的某一个具体的样式属性值 1、元素.style.属性名 需要我们把元素的样式都写在行内样式上才可以(写在样式表中是不管用的) console.log(box.style.height) -&gt;null 在真实项目中,这种方式不常用,...

    基于struts+hibernate+css+mysql的网上书店项目源码

    优 惠 劵模块 - 可批量生成优惠劵,设定折扣率,订购时输入优惠劵号码可获得相应折扣 订单管理模块 - 包括订单查询、订单收款确认、发货确认、订单打印、存档查询等功能 会员管理模块 - 按不同类型查询会员资料、...

    JavaScript权威指南(第六版) 清晰-完整

    16.2 重要的CSS属性 16.3 脚本化内联样式 16.4 查询计算出的样式 16.5 脚本化CSS类 16.6 脚本化样式表 第17章 事件处理 17.1 事件类型 17.2 注册事件处理程序 17.3 事件处理程序的调用 17.4 文档加载事件 17.5 鼠标...

    ExtAspNet v2.2.1 (2009-4-1) 值得一看

    -修正了在Grid的PageIndexChange事件中不能获取SelectedRowIndexArray属性的BUG(feedback:Violet)。 -Button控件将不再自动拥有display:inline属性,如果希望两个按钮在一行显示,请为第一个按钮设置CssStyle=...

    JavaScript权威指南(第6版)(中文版)

    16.2 重要的CSS属性 16.3 脚本化内联样式 16.4 查询计算出的样式 16.5 脚本化CSS类 16.6 脚本化样式表 第17章 事件处理 17.1 事件类型 17.2 注册事件处理程序 17.3 事件处理程序的调用 17.4 文档加载事件 17.5 鼠标...

Global site tag (gtag.js) - Google Analytics