我试图做一个登录表单构成的两个输入字段与一个插入填充,但这两个字段总是超过其父的边界;该问题源于添加的插入填充。可以做什么来纠正这个问题?
JSFiddle代码段:http://jsfiddle.net/4x2KP/
代码可能不是最干净的。例如,可能根本不需要封装文本输入的span元素。
HTML:
<div id="mainContainer"> <div id="login" class="loginForm"> <div class="login-top"> </div> <form class="login-fields" onsubmit="alert('test'); return false;"> <div id="login-email" class="login-field"> <label for="email" style="-moz-user-select: none;-webkit-user-select: none;" onselectstart="return false;">E-mail address</label> <span><input name="email" id="email" type="text"></input></span> </div> <div class="spacer"></div> <div id="login-password" class="login-field"> <label for="password" style="-moz-user-select: none;-webkit-user-select: none;" onselectstart="return false;">Password</label> <span><input name="password" id="password" type="password"></input></span> </div> <div class="login-bottom"> <input type="checkBox" name="remember" id="login-remember"></input> <label for="login-remember" style="-moz-user-select: none;-webkit-user-select: none;" onselectstart="return false;">Remember my email</label> <input type="submit" name="login-button" id="login-button_normal" style="cursor: pointer" value="Log in"></input> </div> </form> </div> </div>
CSS:
#mainContainer { line-height: 20px; font-family: "Helvetica Neue",Helvetica,Arial,sans-serif; background-color: rgba(0,50,94,0.2); margin: 20px auto; display: table; -moz-border-radius: 15px; border-style: solid; border-color: rgb(40,40,40); border-radius: 2px 5px 2px 5px / 5px 2px 5px 2px; border-radius: 2px; border-radius: 2px 5px / 5px; Box-shadow: 0 5px 10px 5px rgba(0,0.2); } .loginForm { width: 320px; height: 250px; padding: 10px 15px 25px 15px; overflow: hidden; } .login-fields > .login-bottom input#login-button_normal { float: right; padding: 2px 25px; cursor: pointer; margin-left: 10px; } .login-fields > .login-bottom input#login-remember { float: left; margin-right: 3px; } .spacer { padding-bottom: 10px; } /* ELEMENT OF INTEREST HERE! */ input[type=text],input[type=password] { width: 100%; height: 20px; padding: 5px 10px; background-color: rgb(215,215,215); line-height: 20px; font-size: 12px; color: rgb(136,136,136); border-radius: 2px 2px 2px 2px; border: 1px solid rgb(114,114,114); Box-shadow: 0 1px 0 rgba(24,24,0.1); } input[type=text]:hover,input[type=password]:hover,label:hover ~ input[type=text],label:hover ~ input[type=password] { background:rgb(242,242,242);!important; } input[type=submit]:hover { Box-shadow: inset 0 1px 0 rgba(255,255,0.3),inset 0 -10px 10px rgba(255,0.1); } .login-top { height: 85px; } .login-bottom { padding: 35px 15px 0 0; }
解决方法
使用CSS定义Box-sizing:border-Box来防止填充影响元素的宽度或高度。参见
box-sizing
的文档。您可能还需要检查
browser compatibility of box-sizing
(IE8)。
border-Box : The width and height properties include the padding and border,but not the margin… Note that padding and border will be inside of the Box.
input[type=text],input[type=password] { Box-sizing : border-Box; }
编辑:在编辑时,框大小不需要前缀。见shouldiprefix.com。
#mainContainer { line-height: 20px; font-family: "Helvetica Neue",sans-serif; background-color: rgba(0,0.2); margin: 20px auto; display: table; -moz-border-radius: 15px; border-style: solid; border-color: rgb(40,40); border-radius: 2px 5px 2px 5px / 5px 2px 5px 2px; border-radius: 2px; border-radius: 2px 5px / 5px; Box-shadow: 0 5px 10px 5px rgba(0,0.2); } .loginForm { width: 320px; height: 250px; padding: 10px 15px 25px 15px; overflow: hidden; } .login-fields > .login-bottom input#login-button_normal { float: right; padding: 2px 25px; cursor: pointer; margin-left: 10px; } .login-fields > .login-bottom input#login-remember { float: left; margin-right: 3px; } .spacer { padding-bottom: 10px; } input[type=text],input[type=password] { width: 100%; height: 30px; padding: 5px 10px; background-color: rgb(215,215); line-height: 20px; font-size: 12px; color: rgb(136,136); border-radius: 2px 2px 2px 2px; border: 1px solid rgb(114,114); Box-shadow: 0 1px 0 rgba(24,0.1); Box-sizing: border-Box; } input[type=text]:hover,label:hover ~ input[type=password] { background: rgb(242,242); !important; } input[type=submit]:hover { Box-shadow: inset 0 1px 0 rgba(255,0.1); } .login-top { height: 85px; } .login-bottom { padding: 35px 15px 0 0; }
<div id="mainContainer"> <div id="login" class="loginForm"> <div class="login-top"> </div> <form class="login-fields" onsubmit="alert('test'); return false;"> <div id="login-email" class="login-field"> <label for="email" style="-moz-user-select: none;-webkit-user-select: none;" onselectstart="return false;">E-mail address</label> <span><input name="email" id="email" type="text" /></span> </div> <div class="spacer"></div> <div id="login-password" class="login-field"> <label for="password" style="-moz-user-select: none;-webkit-user-select: none;" onselectstart="return false;">Password</label> <span><input name="password" id="password" type="password" /></span> </div> <div class="login-bottom"> <input type="checkBox" name="remember" id="login-remember" /> <label for="login-remember" style="-moz-user-select: none;-webkit-user-select: none;" onselectstart="return false;">Remember my email</label> <input type="submit" name="login-button" id="login-button_normal" style="cursor: pointer" value="Log in" /> </div> </form> </div> </div>
或者,不是向< input>元素本身,样式< span>元素包围输入。这样,< input>元素可以设置为width:100%,而不受任何附加填充的影响。示例如下:
#login-form { font-family: "Helvetica Neue",0.2); margin: 20px auto; padding: 10px 15px 25px 15px; border: 4px solid rgb(40,40); Box-shadow: 0 5px 10px 5px rgba(0,0.2); border-radius: 2px; width: 320px; } label span { display: block; padding: .3em 1em; background-color: rgb(215,215); border-radius: .25em; border: 1px solid rgb(114,0.1); margin: 0 0 1em; } label span:hover { background: rgb(242,242); Box-shadow: inset 0 1px 0 rgba(255,0.1); } input[type=text],input[type=password] { background: none; border: none; width: 100%; height: 2em; line-height: 2em; font-size: 12px; color: rgb(136,136); outline: none; } .login-bottom { margin: 2em 1em 0 0; } input#login-button { float: right; padding: 2px 25px; } input#login-remember { float: left; margin-right: 3px; }
<form id="login-form"> <label>E-mail address <span><input name="email" type="text" /></span> </label> <label>Password <span><input name="password" type="password" /></span> </label> <div class="login-bottom"> <label> <input type="checkBox" name="remember" id="login-remember" />Remember my email </label> <input type="submit" name="login-button" id="login-button" value="Log in" /> </div> </form>