【问题标题】:HTML <td> tag's style attribute is not respecting the setting of widthHTML <td> 标签的样式属性不遵守宽度的设置
【发布时间】:2012-03-07 07:01:50
【问题描述】:

在下面sn-p的代码中,td标签的宽度百分比属性在Firefox/IE等中似乎被忽略了,所以“密码”和文本框都得到了一半的行,这很浪费空间.下面的 sn-p 是否有严重错误:

<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%。真的很奇怪。

【问题讨论】:

  • 对我来说,对您的代码稍作修改即可:jsfiddle.net/28d2A
  • “RequiredFieldValidator”向页面注入了什么?
  • @Diodeus 它输出一个&lt;span&gt; 标签。
  • 此上下文中的 无效。它会破坏您的 HTML。

标签: asp.net html css


【解决方案1】:

&lt;asp:RequiredFieldValidator&gt; 不应该在&lt;td&gt;s 之一内吗?

编辑:&lt;table&gt;&lt;tr&gt; 之间的 &lt;asp:Panel&gt; 可能没有帮助。也就是说,您的表格中不应该有不应该存在的额外控件/标签。像&lt;asp:Panel&gt; 这样的东西应该要么包裹整个桌子,要么放在&lt;td&gt;s 之一内。

编辑:简而言之,排列的标签将生成无效的 html,因此所有样式赌注都关闭了。

【讨论】:

  • 不幸的是,将其移入 并没有改变任何东西。
  • 抱歉,我将验证器移到了 中。我还删除了asp面板。现在它似乎可以工作,但只有当包含的浏览器窗口或 iframe 大于 300px 时。当它是 150px 左右时,两个 都得到 50%。
【解决方案2】:

一方面,将您的验证器放入&lt;td&gt;

其次——检查其他行的&lt;td&gt; 样式中的宽度设置——你可能有冲突。

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

【讨论】:

  • 我不包含任何样式表,我只是在那里进行内联。也感谢您建议移除 tb。在我删除 tb 并输入文本后,同样的问题。
  • OK then -- 检查其他行的 “内联”是否存在冲突。 :-) (样式就是样式,不管它是存储在表单还是内联等中)
【解决方案3】:

似乎 ie 和表格宽度不能很好地结合在一起。

您可以采取的措施来强制表格的最小宽度是在表格中添加一个额外的行,该行跨越所有列,宽度为您想要的最小尺寸。这将在调整浏览器大小或 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>

【讨论】:

  • 今天晚些时候我要试试这个。这看起来很有希望。
【解决方案4】:

我在 ASP.NET 中遇到了很大的问题。在表中使用 colgroup 标记会导致从 IIS 返回的页面源没有该组。正如您可能猜到的那样,该表当时只是做了它想要的。在弄清楚问题可能需要 colgroup 上的 runat='server' 属性,因为它在父表上时,我遇到了no compile situation。最终对我有用的是将所需单元格宽度放在第一行标签上的典型组合。问题:表格的第一真实行包含跨列的单元格,因此需要一个虚拟行。现在,如何隐藏它?

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

style="width: 800px; table-layout: fixed"

然后在第一行使用类似这样的代码,以尽可能少地工作(使用与表格宽度相加的宽度):

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

所以其他人都懒得尝试了,失败的尝试列表:

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

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

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

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

这种工作,但留下了一个空白行:

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

【讨论】:

    猜你喜欢
    相关资源
    最近更新 更多
    热门标签