Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/91.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html 是否有一种基于字符数动态估计标签宽度的方法?_Html_Dynamic_Label_Width - Fatal编程技术网

Html 是否有一种基于字符数动态估计标签宽度的方法?

Html 是否有一种基于字符数动态估计标签宽度的方法?,html,dynamic,label,width,Html,Dynamic,Label,Width,我有一列标签,我想让它和最宽的文本一样宽。如果我在网页中使用“小”文本大小,是否可以根据可用的最大文本字符串估计标签的宽度 这是针对带有c#的ASP.net的 谢谢 从这个开始: 我能够调整它以获得以下代码,这对我来说非常好: private static float MAX_RECT = 100000; private static float BITMAP_DPI = 2400; private static float ADJUST_TO_POINTS = 72.0f /

我有一列标签,我想让它和最宽的文本一样宽。如果我在网页中使用“小”文本大小,是否可以根据可用的最大文本字符串估计标签的宽度

这是针对带有c#的ASP.net的

谢谢

从这个开始:

我能够调整它以获得以下代码,这对我来说非常好:

private static float MAX_RECT = 100000;
    private static float BITMAP_DPI = 2400;
    private static float ADJUST_TO_POINTS = 72.0f / BITMAP_DPI;

    public static float GetTextWidth(String fontname, float fontsize, FontStyle style, String text)
    {
        System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(1, 1);
        bmp.SetResolution(BITMAP_DPI, BITMAP_DPI);
        System.Drawing.Graphics graphics = System.Drawing.Graphics.FromImage(bmp);
        graphics.TextRenderingHint = System.Drawing.Text.TextRenderingHint.AntiAlias;

        System.Drawing.StringFormat fmt = System.Drawing.StringFormat.GenericTypographic;
        fmt.Trimming=System.Drawing.StringTrimming.None;
        fmt.FormatFlags=System.Drawing.StringFormatFlags.MeasureTrailingSpaces | System.Drawing.StringFormatFlags.NoWrap;

        System.Drawing.Font font = new System.Drawing.Font(fontname, fontsize, style, System.Drawing.GraphicsUnit.Point);

        System.Drawing.RectangleF rect = new System.Drawing.RectangleF(0, 0, MAX_RECT, MAX_RECT);
        fmt.SetMeasurableCharacterRanges(new System.Drawing.CharacterRange[] { new System.Drawing.CharacterRange(0, text.Length) });

        System.Drawing.Region[] rgns = graphics.MeasureCharacterRanges(text, font, rect, fmt);
        rect = rgns[0].GetBounds(graphics);
        return rect.Width * ADJUST_TO_POINTS;
    }

    private static float GetLabelWidth(RS2005.ReportParameter[] parameters, String fontname, double fontSizeUnitVal, FontStyle style, String text)
    {
        float emSize = Convert.ToSingle(fontSizeUnitVal + 1);
        emSize = (emSize == 0 ? 12 : emSize);

        int pCnt = parameters.Count();
        string txt;
        float size = 0;
            for (int i = 0; i < pCnt; i++)
            {
                txt = parameters[i].Prompt == null ? parameters[i].Prompt : parameters[i].Name;
                var width=GetTextWidth(fontname, emSize, style, txt);

                if (width > size)
                    size = width;                                        
            }

            return size;            
    }

将HTML呈现为一个假的、隐藏的div,在页面外的某个地方,然后使用Javascript/jQuery来测量div的大小,该div随着文本的增长而增长。不要忘记应用css
空白:nowrap因此它的宽度将永远增加。

不。即使使用单间距字体,大小也会因操作系统/浏览器/设备而异。在呈现文本后,您只能使用JavaScript在客户端计算文本的宽度。如何确定用户安装了哪些字体?我不知道。我只是选择一种字体来使用和处理它。
size = GetLabelWidth(parameters, pPromptLbl.Font.Name, pPromptLbl.Font.Size.Unit.Value, FontStyle.Bold, pPromptLbl.Text);

                pPromptLbl.Width = Unit.Parse(Math.Round(size+30, 0).ToString());