Estoy tratando de hacer un formulario de inicio de sesión constituido por dos campos de entrada con un relleno de inserción, pero esos dos campos siempre terminan excediendo los límites de sus padres; el problema se deriva del agregado inserción de relleno. ¿Qué se podría hacer para corregir este problema?
Fragmento de JSFiddle: http://jsfiddle.net/4x2KP/
NB: el código puede no ser el más limpio. Por ejemplo, el elemento span que encapsula las entradas de texto puede no ser necesario en absoluto.
#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,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, 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,255,0.3),
inset 0 -10px 10px rgba(255,255,255,0.1);
}
<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>
box-sizing:border-box;-moz-box-sizing:border-box;-webkit-box-sizing:border-box;
Si todo lo anterior falla, intente configurar las siguientes propiedades para su entrada, para que ocupe espacio máximo pero no se desborde:
fuente
Las otras respuestas parecen decirle que codifique el ancho o use un truco específico del navegador. Creo que hay una manera más simple.
Calculando el ancho y restando el relleno (lo que provoca la superposición del campo). El 20px viene de 10px para el relleno izquierdo y 10px para el relleno derecho.
fuente
min/max-width: 100%;
no lo hizo,box-sizing: border-box;
no lo hizo. Me imagino que poner todo mi sitio en un contenedor y darle relleno funcionaría, pero no quiero tener que hacer eso solo por esta simple solución.Intenta cambiar el
box-sizing
aborder-box
. Lapadding
está agregando awidth
susinput
elementos.Ver demostración aquí
CSS
+
box-sizing
fuente
El relleno se agrega al ancho total. Debido a que su contenedor tiene un ancho de píxel, es mejor darle a las entradas un ancho de píxel también, pero recuerde quitar el relleno y el borde del ancho que configuró para evitar el mismo problema.
fuente
Probé estas soluciones pero nunca obtuve un resultado concluyente. Al final utilicé el marcado semántico adecuado con un conjunto de campos. Se ahorró tener que agregar cualquier cálculo de ancho y cualquier tamaño de caja.
También le permite establecer el ancho del formulario según lo requiera y las entradas permanecen dentro del relleno que necesita para sus bordes.
En este ejemplo, he puesto un borde en el formulario y el conjunto de campos y un fondo opaco en la leyenda y el conjunto de campos para que pueda ver cómo se superponen y se sientan entre sí.
fuente
El relleno se agrega esencialmente al ancho, por lo tanto, cuando dices
width:100%
y enpadding: 5px 10px
realidad estás agregando 20 píxeles al 100% de ancho.fuente
También tiene un error en su CSS con el signo de exclamación en esta línea:
quite el punto y coma antes que él. Sin embargo,! Important debe usarse raramente y puede evitarse en gran medida.
fuente
¿Desea que los campos de entrada estén centrados? Un truco para centrar elementos: especifique el ancho del elemento y configure el margen en automático, por ejemplo:
Un enlace a su violín actualizado:
http://jsfiddle.net/4x2KP/5/
fuente