Saya mencoba membuat formulir masuk yang terdiri dari dua bidang input dengan bantalan sisipan, tetapi kedua bidang itu selalu berakhir melebihi batas induknya; masalah berasal dari padding inset yang ditambahkan . Apa yang bisa dilakukan untuk memperbaiki masalah ini?
Cuplikan JSFiddle: http://jsfiddle.net/4x2KP/
NB: Kode mungkin tidak terbersih. Misalnya, elemen rentang yang merangkum input teks mungkin tidak diperlukan sama sekali.
#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;
Jika semua di atas gagal, coba atur properti berikut untuk input Anda, untuk membuatnya mengambil ruang maksimal tetapi tidak meluap:
sumber
Jawaban lain tampaknya memberi tahu Anda untuk membuat hard-code lebar atau menggunakan hack khusus browser. Saya pikir ada cara yang lebih sederhana.
Dengan menghitung lebar dan mengurangi padding (yang menyebabkan bidang tumpang tindih). 20px berasal dari 10px untuk bantalan kiri dan 10px untuk bantalan kanan.
sumber
min/max-width: 100%;
tidak,box-sizing: border-box;
tidak. Saya membayangkan menempatkan seluruh situs saya ke dalam wadah dan memberikannya padding akan berhasil, tetapi saya tidak mau harus melakukan itu hanya untuk perbaikan sederhana ini.Coba ubah
box-sizing
keborder-box
. Thepadding
adalah menambahwidth
dari Andainput
elemen.Lihat Demo di sini
CSS
+
box-sizing
sumber
Padding ditambahkan ke lebar keseluruhan. Karena wadah Anda memiliki lebar piksel, Anda sebaiknya memberikan lebar piksel juga pada input, tetapi ingat untuk menghapus bantalan dan batas dari lebar yang Anda atur untuk menghindari masalah yang sama.
sumber
Saya mencoba solusi ini tetapi tidak pernah mendapat hasil konklusif. Pada akhirnya saya menggunakan markup semantik yang tepat dengan fieldset. Ini menghemat harus menambahkan perhitungan lebar dan ukuran kotak.
Ini juga memungkinkan Anda untuk mengatur lebar formulir seperti yang Anda butuhkan dan input tetap dalam padding yang Anda butuhkan untuk tepi Anda.
Dalam contoh ini saya telah menempatkan batas pada formulir dan bidang dan latar belakang buram pada legenda dan bidang sehingga Anda dapat melihat bagaimana mereka tumpang tindih dan duduk satu sama lain.
sumber
Padding pada dasarnya ditambahkan ke lebar, karena itu ketika Anda mengatakan
width:100%
danpadding: 5px 10px
Anda benar-benar menambahkan 20px ke lebar 100%.sumber
Anda juga memiliki kesalahan dalam css Anda dengan tanda seru di baris ini:
hapus titik koma di depannya. Namun, penting harus jarang digunakan dan sebagian besar dapat dihindari.
sumber
Apakah Anda ingin bidang input dipusatkan? Trik untuk memusatkan elemen: tentukan lebar elemen dan setel margin ke otomatis, misalnya:
Tautan ke biola Anda yang diperbarui:
http://jsfiddle.net/4x2KP/5/
sumber