HTML标记的样式属性不符合宽度设置

时间:2012-02-15 21:37:04

标签: asp.net html css

在下面的代码片段中,td标签的宽度百分比属性似乎在Firefox / IE等中被忽略。因此“密码”和文本框都获得了一半的行,这是浪费空间。以下片段是否存在明显错误:

<table align="center" width="80%" cellpadding="0" cellspacing="0" class="loginBg">
  <asp:Panel runat="server" ID="pnlLoginIn" style="width:100%;">
    <tr>
       <td style="padding-left:0px;font-family:Verdana;font-size:70%;width:30%">Username</td>
       <td style="padding-right:0px;width:70%" align="left"><asp:TextBox id="txtUsername" runat="server" Width="90px" /></td>
       <asp:RequiredFieldValidator ID="rfvUserName" runat="server" ErrorMessage="*" ControlToValidate="txtUsername" ValidationGroup="credentials" Display="Dynamic" />
    </tr>
  </asp:Panel>
</table>

另外,我正在进行样式排序,因为这是一个非常简单的页面,仅用于在另一个Web应用程序中填充iframe。

提前感谢任何提示。

编辑:添加了一些代码来澄清上下文。

编辑2:我删除了asp:Panel,宽度比例似乎现在正常工作......但仅当iframe或浏览器窗口宽度超过300像素时。在非常小的浏览器窗口/框架中,它强制两个s为50%。真的很奇怪。

4 个答案:

答案 0 :(得分:2)

<asp:RequiredFieldValidator>不应该位于<td>之一吗?

编辑:<asp:Panel><table>之间的<tr>可能没有帮助。也就是说,你的表中不应该有额外的控件/标签。类似于<asp:Panel>的东西应该包裹整个表格,或者位于<td>之一。

编辑:简而言之,排列的标签会生成无效的html,所以所有造型投注都会关闭。

答案 1 :(得分:2)

首先,将验证器放在<td>

其次 - 检查其他行'<td>样式中的宽度设置 - 您可能会有冲突。

如果你把textbox拿出来会发生吗?

答案 2 :(得分:2)

似乎ie和表格宽度不能很好地协同工作。

为了强制执行表的最小宽度,您可以执行的操作是在表中添加一个额外的行,该行跨越所有具有所需最小宽度的列。然后,当调整broswer或iframe很小时,这将强制执行您的td百分比。

像这样:

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title></title>
<style>
    .min500
    {
        width: 500px;
        height: 1px;
    }
</style>
</head>
<body>
<form id="form1" runat="server">
    <table align="center" border="1" cellpadding="0" cellspacing="0" class="loginBg">   
        <asp:Panel runat="server" ID="pnlLoginIn" style="width:100%;">     
            <tr>     
                <td colspan="2">
                    <div class="min500"></div>
                </td>  
            </tr>
            <tr> 
                <td style="padding-left:0px;font-family:Verdana;font-size:70%;width:30%;">
                    Username
                </td>        
                <td style="padding-right:0px;width:70%;" align="left">&nbsp;
                <asp:TextBox id="txtUsername" runat="server" Width="90px" /></td>        
                <asp:RequiredFieldValidator ID="rfvUserName" runat="server" ErrorMessage="*" ControlToValidate="txtUsername" ValidationGroup="credentials" Display="Dynamic" />     
            </tr>   
        </asp:Panel> 
    </table> 
</form>

答案 3 :(得分:0)

我在ASP.NET中遇到了很多问题。在表中使用colgroup标记导致从IIS返回页面源而没有该组。正如你可能猜到的那样,桌子只是做了它想要的东西。在弄清楚问题可能需要runat =&#39;服务器&#39;在colgroup上属于父表的属性,我遇到了no compile situation。最终对我有用的是将所需单元格宽度放在第一行标签上的典型特征。问题:表的第一行真实行包含跨越列的单元格,因此需要一个虚拟行。现在,如何隐藏它?

将表格设置为固定宽度和布局样式:

<tr id="DummyTableRow" style="line-height: 0px" runat="server">
  <td style="width: 200px; border: none">&nbsp;</td>
  <td style="width: 200px; border: none">&nbsp;</td>
  <td style="width: 400px; border: none">&nbsp;</td>
</tr>

然后使用类似这样的第一行来获得最少量的代码(使用与表宽度相加的宽度):

<tr runat="server" style="display: none">

所以其他人不会费心去尝试,一系列失败的尝试:

这不会起作用或尝试使用td标记进行任何组合:

<tr runat="server"  visible="false">

这不会起作用或尝试使用td标记进行任何组合:

<tr runat="server" style="visibility: hidden">

这种方法有效,但留下了一个空白行:

int foo(int x)
{   
    if (x >= 0)
    {
        return (x - 1) + 2 * foo(x - 1);
    }
    else
    {
        return 1;
    }

}