代码之家  ›  专栏  ›  技术社区  ›  Ken Ray

php包括烦人的上边距

  •  7
  • Ken Ray  · 技术社区  · 5 年前

    我不知道为什么每次我尝试使用php包含我的头时 include 有一个上边距。我用Firebug检查了一下,上面写着22px的偏移量。有人遇到这个问题吗?我认为这是一个CSS propiety:top:22px。但即使我写h1 style=“top:0px;margin-top:0px;”,也无法更改它。我认为这是一个永远无法解决的php-css谜团。

    编辑:消除上边距偏移或其他偏移的唯一方法是将以下属性添加到h1:top:0px; 位置:绝对;

    这些财产将来会产生更多的问题吗?

    有没有更好的方法来解决这个上边缘偏移问题?

    伊迪丝2:我想编码有问题。所包含文件(header.html)的编码与索引文件之间是否存在冲突?

    我的索引如下:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
        <title>Untitled 1</title>
        <link rel="stylesheet" type="text/css" href="style2.css" />
    </head>
    <body>
        <div id="page-wrap">
        <?php include_once("header2.html"); ?>
        </div>
    </body>
    </html>
    

    用这个CSS:

    * {
        padding: 0px;
        margin: 0px;
    }
    

    我的 标题HTML (包括的那个):

    <h1>Header 2</h1> 
    

    这就是输出:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <meta content="text/html; charset=utf-8" http-equiv="Content-Type" />
        <title>Untitled 1</title>
        <link rel="stylesheet" type="text/css" href="style2.css" />
    </head>
    <body>
        <div id="page-wrap">
        <h1>Header 2</h1>  </div>
    </body>
    </html>
    
    • 天哪,这太简单了,我真的不知道上边缘是从哪里来的(在所有浏览器中)。
    • 它只在我使用php include时发生。
    • 源代码看起来与不使用php include时相同。
    12 回复  |  直到 11 年前
        1
  •  16
  •   Jacob    15 年前

    这很奇怪,但我复制并粘贴了您的输出HTML到记事本++,在h1之前有一个奇怪的字符。当粘贴到记事本中时,h1中的h被下标。

    因此,在我看来,您可能在所包含的HTML(或包含它的PHP)中有一个错误(或对PHP来说是意外的)字符。我的怀疑?可怕的UTF-8 BOM。尝试更改包含的HTML文件的编码,以消除BOM(在处理PHP时,我总是遇到一些问题)。

    编辑:是的。刚用十六进制编辑器验证过。在包含的HTML的开头有一个字节顺序标记。我不知道您使用哪种编辑器,但您应该可以选择更改文本编码设置。

    this 有关php和bom的更多信息。

        2
  •  3
  •   Jacob    15 年前

    你应该把你的 生成 HTML,比如从Web浏览器中选择“查看源代码”时复制所看到的内容。通常,我在php生成的html中看到神秘的空行,因为php被配置为输出错误和警告。即使这不是由这个原因引起的,如果我们看到输出的HTML,就可以更容易地诊断问题。

        3
  •  1
  •   Roy Rico Alexandr Lazarev    15 年前

    好吧,不知道你的php包含了什么,很难说清楚,但是要确保里面没有css。还要确保正在加载的CSS被找到并加载。我通过改变背景色或其他视觉效果进行调试,这样你就可以确定它正在加载。

        4
  •  1
  •   thinbegin    15 年前

    我敢打赌,它与PHP无关,包括它自己。如前所述,在包含的文件中可能有一些CSS正在执行此操作,但我从未见过像您描述的那样的PHP。

    我将查看doctype声明[暂时删除它以查看会发生什么情况],并删除当前的html声明标记,并将其替换为普通的<html>标记[再次只是暂时地,以进行调试]

        5
  •  1
  •   Nolte    15 年前

    很多时候,一个额外的新行将出现在您包含在后面的PHP脚本文件的末尾?标签。这将导致在生成的输出中包含一个额外的字符。你可以不结案来解决这个问题吗?>在文件的最后加上标签。PHP知道“假设”它是关闭的。

        6
  •  0
  •   merkuro    15 年前

    你能给我们一个链接吗?我只是在本地尝试了一些东西,如果有一个不可打印的字符,你可能会在你的内容和“doctype”声明之间“毫无理由”地得到这一“不需要的”新行。尝试删除“>!”后面的所有字符,并用十六进制编辑器查看以确定是否删除。请提供更多信息。

        7
  •  0
  •   Tammo    15 年前

    这很有趣,因为我刚刚使用了您的标记和CSS。我还将它放入一个PHP文件中,并包含一个HTML文件。但是没有利润。什么都没有。

    因此,请确保您的浏览器能够使用 * { margin: 0; padding: 0 }

    我建议你用这样的重设表- http://meyerweb.com/eric/tools/css/reset/index.html .

    另外,如果你拥有一些网站空间,把它放到网上,给我们发送一个链接。

        8
  •  0
  •   Christopher    14 年前

    Dreamweaver的自动物料清单添加让我抓狂。这里是修复:

    http://www.adobe.com/support/documentation/en/dreamweaver/mx2004/dwusing_errata/dwusing_errata2.html

        9
  •  0
  •   brettbuddin    12 年前

    我遇到了同样的问题……所以我所做的就是在第一个文件的开头添加一个HTML开头注释,在第二个文件的开头添加一个HTML结尾注释。这会将BOM(或文件之间出现的任何内容)包含在注释中,因此不会以HTML格式输出。

    例如:

    #header.php
    <?php ?>
    <html>
    <!--
    
    #body.php
    <?php ?>
    -->
    <body>
    ...
    

    我试图解决在记事本++中转换编码格式的问题。所以这只是暂时的解决方法,直到我找到更好的解决方案。

        10
  •  0
  •   wonder jinnie    12 年前

    我正在使用记事本,我从菜单中选择了->编码->使用不带BOM的UTF-8编码,它工作得很好。每个包含的文件都应该这样做。我认为这是解决你问题的办法。祝你晚上愉快。

        11
  •  0
  •   shaldan    12 年前

    为了解决这个问题,我差点杀了我的基奥巴德。 然后我尝试 PSPad editor ,显式更改 .inc .php UTF-8 效果不错!!

        12
  •  0
  •   Arthur    11 年前

    我曾经有一次遇到过这个问题,这里是解决它的方法——这是一个真正的字符集问题。我花了10个小时才找到它。在我的情况下,我将所有PHP文件(所有PHP文件、所有TPL(如果有)文件)的字符集从UTF-8更改为不带BOM的UTF-8,然后保存并尝试。之后,您还可以将at.htaccess字符串设置为“adddefaultcharset utf-8”。