【问题标题】:Margins and Padding for Forms Not Responding in IE8IE8 中无响应表单的边距和填充
【发布时间】:2012-02-15 21:11:17
【问题描述】:

我们即将结束一个巨大的网站重新设计,所以我正在测试和检查,跨浏览器等等。我为自己漂亮的带有图像悬停的表单感到非常自豪,并在 IE8 中检查了它,结果发现文本的填充和边距都被弄乱了。

这是显示问题的图片的链接:http://i.imgur.com/F6zPP.jpg

这不是什么大不了的事,只是从设计师的角度来看非常烦人,可能用户也是如此。

这是一个 jsfiddle,可以查看表单的外观:http://jsfiddle.net/kennyk3/qL96P/

这是表单的 HTML/CSS:

<div id='account'>
            <form id='login' action='signin.php' method='post' accept-charset='UTF-8'>
            <fieldset class='topform'>
            <input type='hidden' name='submitted' id='submitted' value='1'/>
            <div id='front_login_text'>
            <label for='email'>Email:</label>                               
            <input type='text' name='email' id='email' class='textInput' maxlength='50' />
            <label for='password'>Password:</label>
            <input type='password' name='password' id='password' class='textInput' maxlength='50' />
            </div>
            <input type='submit' name='Submit' value='' class='loginsubmit' />
            <p class='remtext'><input type='checkbox' class='rememberme' name='remember' value='remember' />Remember me on this computer</p>
            <p class='notamember'><strong>Not a Member?</strong> <a href='/register.php'>Sign Up Today!</a></p>
            </fieldset>
            </form>
            <p class='forgotpw'>Forgot Your Password? <a href=''><strong>Click Here to Reset it.</strong></a></p>
            </div>
            <div class='break'></div>
            <div id='button'>
            <a href='' class='toursprite' title='Take the Tour'>Take the Tour</a>
            </div>



.topform    {
    padding: 60px 0 0 20px ;
    border: none;
}
.textInput
{
    width: 190px;
    height: 39px;
    background: url(../images/textfield-bg.png) no-repeat;
    border: none;
    color: #929292;
    padding: 0 20px 0 10px;
    margin: 5px 0 0 0;
    overflow: hidden;
}

.textInput:hover {
    background: url(../images/textfield-hover.png) no-repeat;

}
#account label {
    float: left;
    text-align: right;
    width: 60px;
    font-size: 14px;
    margin: 12px 10px 0 0;
    color: #929292;
}

#account fieldset {
    width: 300px;
}

#front_login_text input:focus, #front_login_text textarea:focus {
    outline: 0;
    background: url(../images/textfield-hover.png) no-repeat;
}

#side_login_text input:focus, #side_login_text textarea:focus {
    outline: 0;
    background: url(../images/textfield-hover-small.png) no-repeat;
}

#side_optin_text input:focus, #side_optin_text textarea:focus {
    outline: 0;
    background: url(../images/textfield-hover-small.png) no-repeat;
}

.loginsubmit {
    float: right;
    margin: 10px 5px 0 0;
    width: 70px;
    height: 35px;
    background: url(../images/login-btn.png) center no-repeat;
    border: 0 none;
    cursor: pointer;
}

.loginsubmit:hover {
    float: right;
    margin: 10px 5px 0 0;
    width: 70px;
    height: 35px;
    background: url(../images/login-btn-hover.png) center no-repeat;
    border: 0 none;
    cursor: pointer;
}

.loginsubmit:active {
    float: right;
    margin: 10px 5px 0 0;
    width: 70px;
    height: 35px;
    background: url(../images/login-btn-active.png) center no-repeat;
    border: 0 none;
    cursor: pointer;
}

【问题讨论】:

  • 我在测试时注意到的一件快速的事情:不要将背景图像放在输入字段中。如果用户输入的文本比字段的宽度长,“边框”图像会从左侧滚动。
  • 抱歉,目前没有 IE9 可以测试。这应该是 IE8 特定的 @media \0screen { .textInput { padding: 10px 20px 0 10px; }

标签: css forms textinput


【解决方案1】:

在处理跨浏览器兼容的表单时。确保为字段定义 line-height。它可以发挥重要作用,并可以解决您的不一致问题。

【讨论】:

  • 感谢您的回答。我尝试将 line-height 放在所有字段上,但似乎没有做任何更改。
【解决方案2】:

如果您将 line-height 设置为 200% 或 250%,对于 Chrome,它仍应显示在中心,而在 IE 中应该更靠近中心。我刚刚在你的表格上试过了。

它不像浏览器特定的 CSS 修复那样干净,但它可能满足您的需求。

.textInput
{
    width: 190px;
    height: 39px;
    background: url(http://i.imgur.com/sEdWU.png) no-repeat;
    border: none;
    color: #929292;
    padding: 0px 20px 0 10px;
    margin: 5px 0 0 0;
    overflow: hidden;
line-height:220%;   
}

【讨论】:

  • 你在 IE8 中测试过这个吗?这对我来说并没有什么不同,但我将其用作测试人员:link 所以,我不确定这有多可靠。
  • 我在本地主机上的 WAMP 服务器上运行了它。使用 IE 8(非兼容模式)。此外,我刚刚意识到 background-attachment:absolute; 在我的图像测试中被留在了那里。这不应该添加到代码中。对不起。
【解决方案3】:

IE8 读取页边距很有趣,有时会折叠它们。与其重做任何事情,不如做这个 CSS hack:

.textInput
{
    width: 190px;
    height: 39px;
    background: url(http://i.imgur.com/sEdWU.png) no-repeat;
    border: none;
    color: #929292;
    padding: 0 20px 0 10px;
    margin: 5px 0 0 0;
    padding: 10px 20px 0 10px\9;
    overflow: hidden;
}

【讨论】:

  • 你的代码是最接近工作的。它确实在 IE8 中修复了它,但它会将其下方的其他文本下推并在 IE9 中将其弄乱。虽然越来越近了!谢谢。