Chrome(12)中使用getComputedStyle获取透明度(opacity)返回字符串不同于其它浏览器...

本文探讨了在不同浏览器中使用getComputedStyle方法获取CSS样式的差异,并通过实例展示了Chrome与其他浏览器之间的不同表现。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

获取计算后的元素样式,IE有currentStyle,而标准浏览器用getComputedStyle。IE9后也支持getComputedStyle了。发现以前写的css方法不好用了,在chrome中返回的结果与其它浏览器不同。重现如下

<!DOCTYPE HTML>
<HTML>
 <HEAD>
	<meta charset="utf-8" />
	<title>css opacity</title>
	<style type="text/css">
		div {
			background: gold;
			margin: 10px;
		}
		
		#d2 {
			opacity: 0.2;
			width : 250px;
		}
	</style>
 </HEAD>

 <BODY>
<div id="d1" style="opacity:0.1;width:200px;">d1</div>
<div id="d2">d2</div>

<button onclick="test()">getOpacity</button>

<script type="text/javascript">
	var d1 = document.getElementById('d1');
	var d2 = document.getElementById('d2');

	function test() {
		var sty1 = window.getComputedStyle(d1, null),
		sty2 = window.getComputedStyle(d2, null);
		
		alert(sty1.opacity);
		alert(sty2.opacity);
	}
</script>
 </BODY>
</HTML>

两个div:d1和d2。样式分别写在  style属性和css  中,透明度分别是0.1,0.2。都通过  getComputedStyle 方式获取opacity。点击按钮,Chrome中如下

而  IE9/Firefox/Safari/Opera 弹出的分别是0.1,0.2。Chrome返回的字符串长度是19,其它浏览器都是3。

jQuery的css方法也存在这个问题。 注意!

<think>嗯,用户的问题是关于如何处理当`getComputedStyle`返回的`lineHeight`值为字符串'normal'的情况。我需要仔细分析这个问题,并给出正确的解决方案。 首先,用户提到的场景是使用JavaScript获取元素的行高,但有时候`lineHeight`的值可能是'normal',这时候需要解析并计算实际值。根据引用[1]中的代码示例,当`lineHeight`是'normal'时,应该获取元素的字体大小,然后乘以大约1.2来估算行高。例如,如果字体大小是16px,那么行高就是16 * 1.2 = 19.2px,四舍五入后得到19px。 但用户可能想知道,为什么使用1.2这个系数?不同浏览器或字体可能会有不同的默认行高比例。这时候需要确认这个系数是否合理,或者是否有更准确的方法。根据CSS规范,当行高设置为'normal'时,浏览器会根据字体和用户代理的默认样式来计算,通常这个值在1.0到1.2之间。所以使用1.2是一个比较安全的估算值,但可能不是所有情况都准确。 接下来,用户可能需要确保在解析`fontSize`时正确转换单位。例如,`parseFloat(style.getPropertyValue('font-size'))`会提取数值部分,忽略单位(假设单位是px)。但如果有其他单位,比如em或rem,可能需要进一步处理。不过,引用[1]中的代码假设字体大小是像素单位,这可能适用于大多数情况,但需要注意环境是否一致。 另外,用户可能关心如何处理不同的浏览器兼容性问题。比如,某些旧版本浏览器是否返回'normal'以外的值,或者是否有其他方式获取更精确的行高。不过,根据现有的引用,使用`getComputedStyle`是标准方法,而处理'normal'的情况已经涵盖在代码中。 还有,用户可能希望了解是否有其他方法可以动态计算行高,比如使用Canvas或者DOM元素测量文本高度。但根据引用[2],计算文本宽度可以使用Canvas,但行高可能更复杂,因为涉及行间距和字体度量。不过,引用[4]提到使用ResizeObserver来监听元素尺寸变化,这可能与动态调整布局有关,但直接计算行高可能还是需要基于字体大小估算。 总结下来,正确的处理步骤是:检查`lineHeight`是否为'normal',如果是,获取字体大小并乘以系数(如1.2),然后处理可能的四舍五入。同时,需要注意字体单位的统一,并确认系数是否符合实际需求。</think>### 处理`lineHeight`为'normal'的解析方法 当`window.getComputedStyle`返回的`lineHeight`值为字符串'normal'时,需通过以下步骤处理: 1. **获取元素字体大小** 使用`parseFloat(style.fontSize)`提取数值部分(单位默认为`px`)[^1]。 例如:若`fontSize`为`16px`,解析后为`16`。 2. **计算默认行高** CSS规范中,`line-height: normal`的默认值约为字体大小的1.2倍[^1]。 公式: $$ \text{lineHeight} = \text{Math.round}(fontSize \times 1.2) + 'px' $$ 3. **完整代码示例** ```javascript const element = document.getElementById('yourElementId'); const style = window.getComputedStyle(element); let lineHeight = style.lineHeight; if (lineHeight === 'normal') { const fontSize = parseFloat(style.fontSize); lineHeight = Math.round(fontSize * 1.2) + 'px'; } ``` ### 注意事项 - **浏览器差异**:部分浏览器可能使用其他系数(如1.0-1.3),若需精确值,可创建临时元素测量实际行高[^2]。 - **动态调整**:若元素尺寸变化频繁,建议结合`ResizeObserver`监听并更新值[^4]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值