4

我有确切的字符串:123..

我想看看它的长度是多少,就好像它在 Html 页面上一样(作为 SPAN)

font-name:arial
font-size:16px;

我做了一个实验:

http://jsbin.com/axezib/edit#preview

所以

<span style="font-family:arial;border:solid 1px red;display:inline-block;font-size:16px;">123..</span>

呈现为:

在此处输入图像描述

及其性质:

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

在此处输入图像描述

如您所见,它的宽度为 35,高度 = 19。(让我们忽略边界......)

但是我有这段代码应该(或不)告诉我相同的结果:

void Main( )
      {
     string input = "123..";
     FontFamily fontFamily = new FontFamily("Arial");
     Font testFont = new  Font(   fontFamily,   16, FontStyle.Regular,   GraphicsUnit.Pixel);
     Size s = TextRenderer.MeasureText(input, testFont);
     Console.WriteLine("Size: height " + s.Height + ", width " + s.Width);
     Console.ReadLine();
      }

但是结果是:

在此处输入图像描述

我在这里想念什么?

谢谢:-)

编辑

通过添加 CSS RESET重新编辑html 代码后- 代码在所有 4 个浏览器中完全呈现。所以问题仍然存在 - 为什么 c# 没有向我显示相同的结果

4

2 回答 2

2

您可以为这个特定的网络浏览器解决这个难题,但您将无法测量所有可用浏览器的字符串。更糟糕的是,有许多操作系统、显卡、语言、字体版本和显示设置。这会产生无数组合显示的文本略有不同。

如果您正在测试您的 Web 应用程序,请从您的 C# 代码(例如 IE)运行 Web 浏览器,加载您的网页并从那里获取 DOM 节点测量值。这是获得真实世界价值的唯一方法。

此外,还有许多测试工具包可以为您简化这项任务。

于 2012-06-30T11:15:38.677 回答
2

似乎您正在尝试将呈现的字符串的大小与默认的 Windows 字体呈现(以及系统默认的任何抗锯齿、ClearType 设置等)进行比较,并将其与 Windows 上的浏览​​器完成的呈现进行比较,这可能或者可能没有自己的字体渲染引擎。据我所知,Gecko (Firefox) 和 Webkit (Chrome, Safari) 实现了自己的字体渲染,因此它们可以在不同平台上一致地呈现 HTML/CSS。

所以基本上,即使你可以让你的 C# 代码同意,结果也毫无意义,因为你在比较苹果和橘子!请参阅本文中的“当前实现” 。

于 2012-06-30T13:10:17.110 回答