0

私の HTML コードの改行により、Explorer 8 でレンダリングされた HTML に視覚的なスペースが生じます。これは他のバージョンにも影響すると思います。

例えば:

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

次のようになります。

(111)  222- 3333  444444

最初の角かっこの後にはスペースを 1 つだけ、ダッシュの後にはスペースを 1 つだけ、最後の 3 の後にはスペースを 1 つだけ入れる必要があります。 ?

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

4 に答える 4

2

HTML では、フォームフィード文字 (U+000C) は XHTML では空白として扱われます。

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

またhttp://www.w3.org/TR/xhtml1/#uaconf (ポイント 9):

空白は、次の規則に従って処理されます。次の文字は、[XML] 空白文字で定義されています。

SPACE ( ) HORIZONTAL TABULATION ( ) CARRIAGE RETURN ( ) LINE FEED ( ) XML プロセッサは、さまざまなシステムの改行コードを 1 つの LINE FEED 文字に正規化し、アプリケーションに渡します。

ユーザー エージェントは、空白文字を処理するために CSS の定義を使用する必要があります [CSS2]。CSS2 勧告は、非ラテン文字セットでの空白処理の問題に明示的に対処していないことに注意してください。これは CSS の将来のバージョンで対処され、その時点でこのリファレンスが更新されます。

于 2009-12-27T07:06:40.687 に答える
1

sprintfこれは、型関数が本当に輝くシナリオです。.NETの世界では、これらは。によって処理されString.Formatます。これがMSDNのドキュメントであり、次のようにコードを書き直すことができます。

<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/

于 2009-12-27T09:42:28.390 に答える
1

IE8だけではありません。クロムでテストしましたが、同じ結果が得られます。最初に < span> < /span> 要素自体からスペースを削除する必要があります。実際、(111) 222 と 3333 44444 の間には 2 つのスペースがあります。そのため、各キャリッジ リターンは 1 つの空白スペースを使用しているようです。

これは、この 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

テキストと静的テキストの間のスペースに注意してください。したがって、キャリッジ リターンをスペースに変換することは、HTML の一般的なルールのようです。

于 2009-12-27T07:05:42.220 に答える
0

改行はスペースです。

これらを別々の行に配置したい場合は、HTMLコメントを使用できます。

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

それは読みやすさにとってもそれほど素晴らしいことではありませんが。個人的には、すべてを1行にまとめて読めないものはわかりません。あなたができること:

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

&nbsp;が読めなくなっていると感じた場合。

于 2009-12-27T07:20:47.583 に答える