Я пытаюсь создать форму входа, состоящую из двух полей ввода со вставкой, но эти два поля всегда выходят за пределы родительского поля; проблема связана с добавленным отступом . Что можно сделать, чтобы исправить эту проблему?
Фрагмент JSFiddle: http://jsfiddle.net/4x2KP/
Примечание: код может быть не самым чистым. Например, элемент span, который инкапсулирует текстовые вводы, может вообще не понадобиться.
#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;
Если все вышеперечисленное не сработало, попробуйте установить следующие свойства для ввода, чтобы оно занимало максимум места, но не переполнялось:
источник
Другие ответы, кажется, говорят вам жестко задавать ширину или использовать взлом для конкретного браузера. Я думаю, что есть более простой способ.
Вычисляя ширину и вычитая отступ (который вызывает наложение поля). 20px - от 10px для левого отступа и 10px для правого.
источник
min/max-width: 100%;
не сделал, неbox-sizing: border-box;
сделал. Я полагаю, что весь сайт будет помещен в контейнер, а заполнение будет работать, но я не хочу делать это только для этого простого исправления.Попробуйте изменить
box-sizing
Toborder-box
. Этоpadding
добавление кwidth
вашимinput
элементам.Посмотреть демо здесь
CSS
+
box-sizing
источник
Обивка добавляется к общей ширине. Поскольку ваш контейнер имеет ширину в пикселях, вам лучше также указать ширину ввода для входных данных, но не забудьте удалить отступы и границы из заданной вами ширины, чтобы избежать той же проблемы.
источник
Я попробовал эти решения, но так и не получил окончательного результата. В конце я использовал правильную семантическую разметку с набором полей. Это избавило от необходимости добавлять какие-либо вычисления ширины и размера окна.
Это также позволяет вам устанавливать ширину формы так, как вам нужно, и входные данные остаются в пределах отступа, необходимого для ваших краев.
В этом примере я поместил рамку на форму и набор полей и непрозрачный фон на легенду и набор полей, чтобы вы могли видеть, как они перекрываются и располагаются друг с другом.
источник
Заполнение по существу добавляется к ширине, поэтому, когда вы говорите
width:100%
иpadding: 5px 10px
фактически добавляете 20px к ширине 100%.источник
У вас также есть ошибка в вашем CSS с восклицательным знаком в этой строке:
удалите точку с запятой перед этим. Тем не менее, важно использовать редко и в целом можно избежать.
источник
Вы хотите, чтобы поля ввода были центрированы? Хитрость для центрирования элементов: укажите ширину элемента и установите для поля значение auto, например:
Ссылка на обновленную скрипку:
http://jsfiddle.net/4x2KP/5/
источник