CSS输入宽度:100%超出父级的边界

前端之家收集整理的这篇文章主要介绍了CSS输入宽度:100%超出父级的边界前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我试图做一个登录表单构成的两个输入字段与一个插入填充,但这两个字段总是超过其父的边界;该问题源于添加的插入填充。可以做什么来纠正这个问题?

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>

猜你在找的CSS相关文章