zoukankan      html  css  js  c++  java
  • 一个Tahoma字体bug引发的思考—关于样式bug的分析流程

    这是一篇分析流文章,不是技术流。

    问题:我们经常会碰到很多莫名其妙的样式bug,也许10个浏览器下,9个浏览器是好的。但是就有一个浏览器有问题。很多情况下,ie6/7出bug的几率比较大,当然解决办法也是很多,zIndex,双边距,末尾多一个字,等等都成为了耳熟能详的bug流派了。但是opera,firefox,safari下也会有bug,这个时候要是出了问题该怎么办呢。

    一个opera的bug实例
    我还是得说,我这里只是提供一个解决问题的流程,具体是什么什么原因导致的,就不做深入研究了。bug如下。
    -------



    -----
    这个结构大家应该很熟悉了,很多情况下就是 ul>li*n 的样子。li往左float了。所有浏览器除了opera都显示正常。但是opera显示了以上效果。
    连号走势 和 跨度走势 这两个li 为什么会在右边呢?明明是float左边的,应该是显示在左边啊!


    分析流程,排除法
    1。假如没有一手的开发代码,那先从线上另存为网页。看错误代码,如果能够有firebug这样的工具,能直接改代码的话就很方便了,但是现在没有。只能一步步来。
    2。另写一个网页,做一个纯粹的,ul>li*n结构的页面,放在opera下看效果。发现,纯粹的这个结构下,没有上面的问题。也就是说这个模型没有问题,必然是这个模型里加了一些未知的样式导致的。
    3。看源代码中结构是否复杂,如果太复杂的话不好分析,所以去掉一些元素,使其只剩下ul>li*n这样的纯粹结构。删除了其他元素,只剩下ul,li的样式。相同的结构,该清理的东西都清理掉了。发现ul和li上没有重叠的样式。但是还是存在问题。这很让人纳闷。
    4。这个时候我就考虑到了2个东西,一个是dtd声明,还有就是引入的公共css中的reset。
    5。于是先查看一reset里的css呢,我一下子就想到了字体,而不是font-size或者line-height。因为经验,我曾经就几次因为字体问题出现过这样莫名其妙bug问题。于是修改了一下字体,发现OK了。
    6。这个时候已经明白是字体导致的,于是百度一下这个字体,找到了这篇文章http://www.cnblogs.com/radom/archive/2010/07/04/1770979.html,说是中英文高度不一致引起的。
    7。再查看一下dtd,为什么我会想到的是dtd声明会出错呢?因为经验,我以前也碰到因为dtd声明错误导致的问题。于是我修改了dtd,发现也OK了。


    最后得到结果:

    Tahoma这个字体,在中文和数字等混合排版的时候,会导致了中文和数字的line-height不一致,从而导致最终的高度不一致。
    从而导致了上面连号走势被挤到除3余数的后面了.
    解决办法就很明白了。因为是字体高度引起的。所以
    第1个办法:换个高度相同的字体,用宋体就没有问题了。
    第2个办法:限定高度。设置height后,也没有问题了。
    另外:DTD声明错误一样会出现问题,建议使用最简单同时也是最安全的声明方式<! DOCTYPE HTML>。

    这里是从原来页面上摘下来的一个精简后的错误模型代码。可以复制到html中,在opera下看效果。

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" SYSTEM "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml" xmlns:esun>
    <head>
    
        <meta charset="UTF-8">
        <title></title>
        <style type="text/css">
    
        div{
            padding-left: 10px;
            width: 755px;
            float:left;
            font-family: Tahoma;
        }
        span{
            display: block;
            float: left;
            line-height: 25px;
            height: 25px;
            width: 104px;
        }
        
        
        </style>
    </head>
    <body>
    
        <div>
            <span><a href="http://trend.com/ssqZst!ssqjbzs.jhtml?flag=jbzs" target="_blank">基本走势</a></span>
            <span><a href="http://trend/ssqZst!ssqdxzs.jhtml" target="_blank">大小走势</a></span>
            <span><a href="http://trend/ssqZst!ssqjozs.jhtml" target="_blank">奇偶分析<s></s></a></span>
            <span><a href="http://trend/ssqZst!ssqzhzs.jhtml" target="_blank">质合分析</a></span>
            <span><a href="http://trend/ssqZst!ssqc3ys.jhtml" target="_blank">除5余数</a></span>
            <span><a href="http://trend/ssqZst!ssqwxzs.jhtml" target="_blank">五行走势</a></span>
            <span><a href="http://trend/ssqZst!ssqhzzs.jhtml" target="_blank">和值走势<s></s></a></span>
            <span><a href="http://trend/ssqZst!ssqlhzs.jhtml" target="_blank">连号走势<s></s></a></span>
            <span><a href="http://trend/ssqZst!ssqkdzs.jhtml" target="_blank">跨度走势</a></span>
        </div>
        
        <div style='margin-top:20px'>
        <pre>
                以上效果是错误的,可以修改3个地方。
                1:可以修改dtd为正确的方式,我不知道这里的dtd为什么会写成这样。其实这样的声明是最简单而且永远不会出错的 < ! DOCTYPE HTML > ,我一直这么使用。
                   但是很多人就是喜欢加上一堆的长代码,认为不这样声明会在ie下出错,等等问题。我觉得都是猜测,没有经过实践。
                   
                2:修改tahoma字体为等高的如宋体等。
                
                3:设置span的height。
                
        </pre>
        </div>
    
        
    </body>
    </html>



    总结
    碰到bug,不用着急。按照流程一步一步来分析。建模型,找不同之处。最好有总结的习惯,把碰到过的bug都能总结起来,bug再多也是有限的。

  • 相关阅读:
    重装window7系统(使用U盘)
    冒泡排序
    使用jad进行反编译.class文件生成.java
    java代码编写1+2+3+....+100之和
    springboot多模块项目不同模块组件不能@autowired问题
    django CBV和FBV写法总结
    django cookie与session组件
    djjango cookie和session 的几种常用需求使用方法
    django 一个关于分组查询的问题分析
    Django book manage system
  • 原文地址:https://www.cnblogs.com/lunalord/p/2502275.html
Copyright © 2011-2022 走看看