IE7:文本区域表单中的边距过多

发布于 2024-07-13 12:57:44 字数 614 浏览 7 评论 0原文

我正在尝试处理我的应用程序中的 IE7 错误。 这是 HTML/CSS 代码

<div style="margin-left: 320px">
    <form method="post" action=""><fieldset>
        <textarea name="prj_comment" id="prj_comment" rows="5" cols="50" 
                  style="margin: 0; padding: 0"></textarea>
    </fieldset></form>
</div>

在 Firefox/Opera/Webkit/IE6 中可以,但在 IE7 中文本区域有 100px 左边距。 如果有人有纠正这个问题的提示,非常感谢!

以下是 IE7 显示此示例 HTML 的屏幕截图:

http://daneel.net/pub/img/ie7_bug_decalage.jpg

I am trying to deal with an IE7 bug in my application. Here is the HTML/CSS code

<div style="margin-left: 320px">
    <form method="post" action=""><fieldset>
        <textarea name="prj_comment" id="prj_comment" rows="5" cols="50" 
                  style="margin: 0; padding: 0"></textarea>
    </fieldset></form>
</div>

In Firefox/Opera/Webkit/IE6 it is ok, but in IE7 the textarea have a 100px left margin.
If anyone have a tip to correct this, thanks a lot!

Here is a screenshot of IE7 displaying this sample HTML :

http://daneel.net/pub/img/ie7_bug_decalage.jpg

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(4

霞映澄塘 2024-07-20 12:57:44

这看起来像继承的边距错误(与浮动的双边距错误类似但不同)。 textarea 继承了表单周围 div 的边距。 《仓位就是一切》对此进行了更详细的描述

实际的解决方法是:

  • 为文本区域指定 -320px 的负左边距(显然,仅适用于 IE)。
  • 将内联元素放置在文本区域之前、字段集内部。 看起来可以将样式设置为display:none,但是元素不能为空。
  • 将文本区域包装在 div/span/any-other-tag 中,只要它没有任何提供布局的样式规则(我实际上认为表单或字段集可以修复它,但显然它们没有) 。

This looks like the inherited margin bug (similar to but different from the double-margin bug with floats). The textarea is inheriting the margin from the div around the form. Position Is Everything describes it in more detail.

The practical workarounds are:

  • Give the textarea a negative left margin of -320px (for IE only, obviously).
  • Put an inline element before the textarea, but inside the fieldset. It looks like you can set the style to display:none, but the element can't be empty.
  • Wrap the textarea in a div/span/any-other-tag as long as it doesn't have any style rule that gives it layout (I actually would have thought the form or fieldset would fix it, but apparently they don't).
極樂鬼 2024-07-20 12:57:44

太奇怪了。 我实际上在 ie7 中得到了 320px(=父 div 边距)。

您可以用 ie7 仅负边距覆盖,但这太糟糕了...

编辑: 好吧,我不知道为什么会这样,但它确实有效。 这绝对是一个错误:

<div style="margin-left: 320px; display:inline-block;">
    <form method="post" action=""><fieldset>
        <textarea name="prj_comment" id="prj_comment" rows="5" cols="50" 
                  style="margin: 0; padding: 0"></textarea>
    </fieldset></form>
</div>

Totally weird. I actually get a 320px (=parent div margin) in ie7.

You can overwrite with an ie7 only negative margin, but that's awful...

EDIT: OK, I have no idea why this works, but it works. this is defintely a bug:

<div style="margin-left: 320px; display:inline-block;">
    <form method="post" action=""><fieldset>
        <textarea name="prj_comment" id="prj_comment" rows="5" cols="50" 
                  style="margin: 0; padding: 0"></textarea>
    </fieldset></form>
</div>
江南月 2024-07-20 12:57:44

似乎是 IE 的默认样式

的一个错误。 我的猜测是,IE 在内部使用 float 代码设置字段集样式并触发臭名昭著的 双边距错误

我只需将包装器

就成功地克服了该错误。 直接在

内部。

Seems to be a bug with IE's default styling for <fieldset>. My guess would be that internally, IE is styling fieldsets using float code and triggering the infamous Double-margin bug.

I managed to defeat the bug simply by putting a wrapper <div> directly inside <fieldset>.

手心的海 2024-07-20 12:57:44

另一个(也很糟糕)的解决方案是在

another, (also awful) solution would be to add the   just in front of <textarea>...
but IMHO, i'm ok with fighting dirty IE bugs with drity solutions... fire with fire if you will... ;)

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文