在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
首先要做的是挑选一个好的浏览器。我的选择是Chrome,因为它拥有强大的调试工具。当我在Chrome上完成调试后,我会接着在Safari或者Firefox上调试。 如果在这些“好的”浏览器上没有达到期望的效果,很有可能是代码本身违背了CSS规则。不要试图使用hack方法来解决在这些“好的”浏览器上出现的问题,而是应该找出问题的原因。通常我会检查以下可能的BUG出处:
接下来正文来了 最重要的需要记住的就是,W3C标准并没有定义错误的行为。因此,如果你没有按照规范写,那么可能会导致跨浏览器不同效果;如果你组合“奇怪的”属性(例如margin和inline element),那么也可能会导致跨浏览器不同效果bug。 Display 我认为书写CSS就像在选择一段旅程。你需要作出一些决定.比如你要首先选择使用不同display方式的元素:block,inline,inline-block和table。当你选择好以后,你可以使用一些具体的方法来改变其实际的显示。 块元素应该使用margin,padding,height和width。然而line-height不适用。 行内元素应该使用line-height,vertical align和空格符。然而margin,padding,height和width不适用。 首先,表格有垂直和水平排列方式。其次,如果你遗漏了表格中的某元素,整个表格可能会有诡异的显示。最后,margin不适用与表格的行和列,padding不适用与表格和表格的行。 Positioning 如果你选择使用块级元素,接下来你需要选择position方式:
在这里我就不列举所有的display和position组合了。总之,有两件事情需要注意:
比如,float,table-cell和行内元素组合在一起是否合适?浏览器将如何解释渲染?在W3C标准里有没有定义?如果没有,那么可能就有出现跨浏览器bug的风险。当然,这样的组合并不是不可以,但你要想清楚为什么要这样做,以及做好足够的跨浏览器测试。 Internet Explorer 当你解决了在“好的”浏览器上出现的问题后,现在应开始着手IE平台。我的建议是从你希望支持的最老版本的IE开始,因为很多老版本IE上的问题在新版本中延续出现。 就算对于IE,你也应该尝试找出问题而不是依赖于使用hack方法。盲目使用*和_的hack方法就像在一个返回错误值的函数中加入修正量(如下),而不是找出其中的算法性错误。 复制代码 代码如下:return result + 4; 当然,有时候在IE6和IE7里面使用hack是必要的。对于IE8,通常只在需要兼容CSS3的地方使用hack。通常情况下,在IE6/7里需要使用hack的地方有:
还有一些不太常见的需要使用hack的情况,比如当两个浮动元素中间有comment代码时将会触发重复内容bug。对于只在IE中出现的css问 题,我的建议是仔细描述你所看见的,并在google中搜索相应的解决方法。在你找到bug原因前,不要盲目使用hack掩饰它。IE自带的调试工具很糟 糕,所以可能你需要给元素增加背景色来方便你查看页面上真实的排版。 实现解决方案 当你找到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 100%); /* FF3.6+ */ background: -webkit-gradient(linear, left top, left bottom, color-stop(0%,#1e5799), color-stop(50%,#2989d8), color-stop(51%,#207cca), color-stop(100%,#7db9e8)); /* Chrome,Safari4+ */ background: -webkit-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* Chrome10+,Safari5.1+ */ background: -o-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* Opera 11.10+ */ background: -ms-linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* IE10+ */ background: linear-gradient(top, #1e5799 0%,#2989d8 50%,#207cca 51%,#7db9e8 100%); /* W3C */ } 注意,这套代码里有两个针对不同版本webkit的语法。前缀代码的顺序同样应该从针对老版本浏览器开始书写(参照第一条)。 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的规则。 |
2023-10-27
2022-08-15
2022-08-17
2022-09-23
2022-08-13
请发表评论