Próbuję utworzyć formularz logowania składający się z dwóch pól wejściowych ze wstawionym wypełnieniem, ale te dwa pola zawsze przekraczają granice swojego rodzica; problem wynika z dodanej wyściółki wstawki . Co można zrobić, aby rozwiązać ten problem?
Fragment JSFiddle: http://jsfiddle.net/4x2KP/
Uwaga: kod może nie być najczystszy. Na przykład element span, który hermetyzuje dane wejściowe, może w ogóle nie być potrzebny.
#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;
Jeśli wszystkie powyższe zawiodą, spróbuj ustawić następujące właściwości danych wejściowych, aby zajmowały maksymalną przestrzeń, ale nie przepełniły:
źródło
Inne odpowiedzi wydają się sugerować sztywne zakodowanie szerokości lub użycie hackowania specyficznego dla przeglądarki. Myślę, że jest prostszy sposób.
Obliczając szerokość i odejmując wypełnienie (które powoduje nakładanie się pól). Wartość 20 pikseli pochodzi z 10 pikseli dla wypełnienia z lewej strony i 10 pikseli dla wypełnienia z prawej strony.
źródło
min/max-width: 100%;
nie,box-sizing: border-box;
nie. Wyobrażam sobie, że umieszczenie całej mojej witryny w kontenerze i nadanie jej wypełnienia zadziała, ale nie chcę tego robić tylko dla tej prostej poprawki.Spróbuj zmienić
box-sizing
TOborder-box
.padding
Jest dodanie dowidth
swoichinput
elementów.Zobacz Demo tutaj
CSS
+
box-sizing
źródło
Dopełnienie jest dodawane do całkowitej szerokości. Ponieważ kontener ma szerokość w pikselach, lepiej jest podać wejściom szerokość w pikselach, ale pamiętaj, aby usunąć dopełnienie i obramowanie z ustawionej szerokości, aby uniknąć tego samego problemu.
źródło
Wypróbowałem te rozwiązania, ale nigdy nie uzyskałem rozstrzygającego wyniku. Na koniec użyłem odpowiedniego znacznika semantycznego z zestawem pól. Oszczędzało to konieczności dodawania wszelkich obliczeń szerokości i rozmiaru pudełka.
Pozwala również na ustawienie wymaganej szerokości formy, a dane wejściowe pozostają w wypełnieniu potrzebnym do krawędzi.
W tym przykładzie umieściłem obramowanie na formularzu i zestawie pól oraz nieprzezroczyste tło na legendzie i zestawie pól, abyś mógł zobaczyć, jak nakładają się i siedzą ze sobą.
źródło
Dopełnienie jest zasadniczo dodawane do szerokości, więc kiedy mówisz
width:100%
ipadding: 5px 10px
faktycznie dodajesz 20 pikseli do 100% szerokości.źródło
Masz również błąd w swoim css z wykrzyknikiem w tym wierszu:
usuń znajdujący się przed nim średnik. Jednak! Ważne powinno być używane rzadko i można go w dużym stopniu uniknąć.
źródło
Czy chcesz, aby pola wejściowe były wyśrodkowane? Sztuczka do wyśrodkowania elementów: określ szerokość elementu i ustaw margines na auto, np .:
Link do zaktualizowanych skrzypiec:
http://jsfiddle.net/4x2KP/5/
źródło