如何调试CSS的跨浏览器样式bug
作者:网络转载 发布时间:[ 2014/9/16 13:40:30 ] 推荐标签:软件测试管理 缺陷管理
实现解决方案
当你找到bug的原因并且知道解决方法后,你同时也应该知道如何在修改代码时不破坏已有的正常效果的代码。下面是我的建议:
1. 依赖样式级联
2. 使用针对特定浏览器的前缀
3. 使用针对IE6/7的*和_
4. 不要使用针对IE8的9
5. 知道什么时候该放弃针对IE的hack
6. 不要对新版本的Firefox,Chrome,Safari使用任何hack
1. 依赖样式级联
首先,在任何可能的情况下都尽量依靠样式级联。浏览器总是采取他们能够读懂的后声明的样式。所以,你应该从针对老版本浏览器的样式开始书写,这样个浏览器能读懂和使用它能读懂的后的样式。例如:
.foo{
background-color: #ccc; /* older browsers will use this */
background-color: rgba(0,0,0,0.2); /* browsers that understand rgba will use this */
}
2. 使用针对特定浏览器的前缀
使用针对特定浏览器的前缀,尤其对于还未被广泛采用的属性适用。例如:
.foo{
background: #1e5799; /* Old browsers */
background: -moz-linear-gradient(top, #1e5799 0%, #2989d8 50%, #207cca 51%, #7db9e8 ); /* FF3.6+ */
background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#1e5799), color-stop(50%,#2989d8), color-stop(51%,#207cca), color-stop(,#7db9e8)); /* Chrome,Safari4+ */
background: -webkit-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 ); /* Chrome10+,Safari5.1+ */
background: -o-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 ); /* Opera 11.10+ */
background: -ms-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 ); /* IE10+ */
background: linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 ); /* W3C */
}
注意,这套代码里有两个针对不同版本webkit的语法。前缀代码的顺序同样应该从针对老版本浏览器开始书写(参照第一条)。
如果有一个W3C标准定义的语法,你应该把它放在后(例如上述代码后一行)。这样随着浏览器开始支持这些新特性的标准语法,你的代码也能够稳健表现。
3. 使用针对IE6/7的*和_
对于旧版本IE特有的bug,使用*和_来弥补。比如:
.clearfix {
overflow: hidden; /* new formatting context in better browsers */
*overflow: visible; /* protect IE7 and older from the overflow property */
*zoom: 1; /* give IE hasLayout, a new formatting context equivalent */
}
所有的IE hack都针对于某版本和其之前的所有浏览器,比如:
_ 针对IE6和更早版本
* 针对IE7和更早版本
9 针对IE8和更早版本 (注意,IE9在某些CSS属性上同样对于这个hack敏感)
所以,hack代码的顺序同样也应该从针对老版本浏览器开始书写(参照第一条)。
4. 不要使用针对IE8的9
我从来不会使用9来解决IE8里面出现的样式bug。我只会在弥补浏览器支持性上使用9来做“降级”处理。比如我使用了box-shadow(在更先进的浏览器上正常),可是在IE8下很难看,因此我使用了9来增加了一个新border。这种情况不能依靠样式级联(参照第一条)来处理,因为这是增加一个新样式,而不是修改一个已有的样式。
5. 知道什么时候该放弃针对IE的hack
不要试追求在IE中得到一模一样的效果。你是否愿意浪费额外的HTTP请求,繁杂的HTML/JS/CSS代码段为了实现在IE6-8中同样看到圆角框效果?对于我个人来说,我的答案是“不会”。
你应该知道什么时候放弃针对某功能的hack。例如,不要使用filter去模拟CSS3里的渐变效果,那样会导致性能问题和排版bug。简单的办法是,压根不要寄希望你的网页在所有浏览器中都表现得一模一样。对于IE 6-8的用户,好的办法是给他们一个简单化的用户体验(注意,是简单化而不是残缺)。
下述糟糕的代码是使用filter去模拟CSS3里的gradient:
.foo {
filter: progid:DXImageTransform.Microsoft.gradient( startColorstr='#1e5799', endColorstr='#7db9e8',GradientType=0 ); /* IE6-9 */
}
6. 不要对新版本的Firefox,Chrome,Safari使用任何hack
对于Firefox,Chrome,Safari上的样式bug,好的办法是仔细检查,很有可能这是因为你的代码违背了CSS的规则。
本文内容不用于商业目的,如涉及知识产权问题,请权利人联系SPASVO小编(021-61079698-8054),我们将立即处理,马上删除。
相关推荐
软件测试理论之缺陷管理Bug的生命周期的跟踪管理是怎么形成的?目前比较好用的缺陷管理工具都具备什么特点?缺陷等级的标准是如何判定的?有什么好用的缺陷管理工具吗?缺陷管理中缺陷的状态有哪些?如何进行状态管理?软件测试中的缺陷管理步骤和策略如何有效结合缺陷管理工具和缺陷管理流程?ALM(生命周期管理软件)之缺陷管理-缺陷流程处理ALM(生命周期管理软件)之缺陷管理-缺陷导出与修改ALM(生命周期管理软件)之缺陷管理-缺陷模版配置、导入缺陷ALM(生命周期管理软件)之缺陷管理-提交缺陷缺陷管理之Bug修复软件缺陷管理缺陷管理之测试新手缺陷管理项目实战缺陷管理工具:JIRA系统部署推进上线流程软件缺陷管理流程
更新发布
功能测试和接口测试的区别
2023/3/23 14:23:39如何写好测试用例文档
2023/3/22 16:17:39常用的选择回归测试的方式有哪些?
2022/6/14 16:14:27测试流程中需要重点把关几个过程?
2021/10/18 15:37:44性能测试的七种方法
2021/9/17 15:19:29全链路压测优化思路
2021/9/14 15:42:25性能测试流程浅谈
2021/5/28 17:25:47常见的APP性能测试指标
2021/5/8 17:01:11热门文章
常见的移动App Bug??崩溃的测试用例设计如何用Jmeter做压力测试QC使用说明APP压力测试入门教程移动app测试中的主要问题jenkins+testng+ant+webdriver持续集成测试使用JMeter进行HTTP负载测试Selenium 2.0 WebDriver 使用指南