代码之家  ›  专栏  ›  技术社区  ›  Jeremy

回车导致Internet Explorer 8中出现可视空间

  •  0
  • Jeremy  · 技术社区  · 15 年前

    我的HTML代码中的回车会在资源管理器8中呈现的HTML中产生一个可视空间。我猜这也会影响到其他版本。

    例如:

    <span>
    (111)&nbsp;
    222-
    3333&nbsp;
    444444
    </span>
    

    如下所示:

    (111)  222- 3333  444444
    

    第一个括号后只能有1个空格,破折号后不能有空格,最后3个括号后只能有1个空格。我喜欢回车的代码可读性,有没有可能去保持,然后仍然让HTML在IE中正确呈现?

    这是doctype信息:

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
    <html xmlns="http://www.w3.org/1999/xhtml">
    

    编辑:
    实际上,我是在ASP.NET MVC 2应用程序中执行此操作的,而且ASPX模板标记相当冗长,这就是我尝试将其分隔为多行的原因:

    <span>
    (<%=((Model == null || Model.AreaCode == null) ? "" : Model.AreaCode).PadRight(3)%>)&nbsp;
    <%=((Model == null || Model.Prefix == null) ? "" : Model.Prefix).PadRight(3)%>-
    <%=((Model == null || Model.Suffix == null) ? "" : Model.Suffix).PadRight(4)%>&nbsp;
    <%=(Model == null || Model.Extension == null) ? "" : Model.Extension%>
    </span>
    
    4 回复  |  直到 12 年前
        1
  •  1
  •   leepowers    15 年前

    在这种情况下 sprintf 类型函数真的很亮。在.NET世界中,它们由 String.Format . 这里是 MSDN documentation 你可以这样重写代码:

    <span>
    <%= String.Format("({0:###}) {1:###}-{2:####} {3}", Model.AreaCode, Model.Prefix, Model.Suffix, Model.Extension); %>
    </span>
    

    我对.NET字符串格式语法有点生疏,所以不能保证代码片段。下面是另一个链接:

    http://blog.stevex.net/string-formatting-in-csharp/

        2
  •  2
  •   Mike Gleason jr Couturier    15 年前

    在HTML中,formFeed字符 (U+000C)被视为空白, XHTML

    http://www.w3.org/TR/xhtml1/#C_15

    阿尔索 http://www.w3.org/TR/xhtml1/#uaconf (要点9):

    空白区的处理依据 以下规则。以下 字符以[xml]白色定义 空格字符:

    空格()水平制表 ()回车() 线路馈电 )XML处理器 规范化不同系统的线端 代码转换为一个单行提要 字符,传递给 应用。

    用户代理必须使用定义 从用于处理空白的CSS 字符[css2]。注意CSS2 建议不明确 解决空白问题 处理非拉丁字符集。 这将在将来解决 CSS的版本,此时 将更新引用。

        3
  •  1
  •   S M Kamran    15 年前

    不仅仅是IE8。我用铬测试过,结果也一样。首先,您需要将空间从<SPAN></SPAN>元素中删除。事实上,在(111)222和3333 44444之间有2个空格。因此,似乎每一次回车都占用了一个空格。

    这是完全正常的考虑这个HTML…

    <html>
      <head>
      </head>
      <body>
        This is some static text
        with carriage return
        <span>
          (111)&nbsp;222- 3333&nbsp;444444
        </span>
      </body>
    </html>
    

    输出将是…

    这是一些带有回车(111)222-3333 444444的静态文本

    注意静态文本中文本和with之间的间距。因此,将回车转换为空格似乎是HTML的一般规则。

        4
  •  0
  •   jamesdlin    15 年前

    换行符就是空格。

    如果您真的想把这些东西放在单独的行上,可以使用HTML注释:

    <span><!--
    -->(111)&nbsp;<!--
    -->222-<!--
    -->3333&nbsp;<!--
    -->444444<!--
    --></span>
    

    尽管这对可读性也不是太好。就我个人而言,我看不出什么是不可读的,把它都放在一条线上。你可以这样做:

    <span style="white-space:nowrap">(111) 222-3333 444444</span>
    

    如果你感觉到 &nbsp; S使其无法读取。

    推荐文章