Estoy creando un formulario de registro para un sitio web. Quiero que cada etiqueta y su elemento de entrada correspondiente aparezcan en la misma línea.
Aquí está mi código:
#form {
background-color: #FFF;
height: 600px;
width: 600px;
margin-right: auto;
margin-left: auto;
margin-top: 0px;
border-top-left-radius: 10px;
border-top-right-radius: 10px;
padding: 0px;
}
label {
font-family: Georgia, "Times New Roman", Times, serif;
font-size: 18px;
color: #333;
height: 20px;
width: 200px;
margin-top: 10px;
margin-left: 10px;
text-align: right;
clear: both;
}
input {
height: 20px;
width: 300px;
border: 1px solid #000;
margin-top: 10px;
float: left;
}
<div id="form">
<form action="" method="post" name="registration" class="register">
<fieldset>
<label for="Student"> Name: </label>
<input name="Student" />
<label for="Matric_no"> Matric number: </label>
<input name="Matric_no" />
<label for="Email"> Email: </label>
<input name="Email" />
<label for="Username"> Username: </label>
<input name="Username" />
<label for="Password"> Password: </label>
<input name="Password" type="password" />
<input name="regbutton" type="button" class="button" value="Register" />
</fieldset>
</form>
</div>
Respuestas:
Suponiendo que desee hacer flotar los elementos, también tendría que hacer flotar los
label
elementos.Algo como esto funcionaría:
label { /* Other styling... */ text-align: right; clear: both; float:left; margin-right:15px; }
Mostrar fragmento de código
#form { background-color: #FFF; height: 600px; width: 600px; margin-right: auto; margin-left: auto; margin-top: 0px; border-top-left-radius: 10px; border-top-right-radius: 10px; padding: 0px; text-align:center; } label { font-family: Georgia, "Times New Roman", Times, serif; font-size: 18px; color: #333; height: 20px; width: 200px; margin-top: 10px; margin-left: 10px; text-align: right; clear: both; float:left; margin-right:15px; } input { height: 20px; width: 300px; border: 1px solid #000; margin-top: 10px; float: left; } input[type=button] { float:none; }
<div id="form"> <form action="" method="post" name="registration" class="register"> <fieldset> <label for="Student">Name:</label> <input name="Student" id="Student" /> <label for="Matric_no">Matric number:</label> <input name="Matric_no" id="Matric_no" /> <label for="Email">Email:</label> <input name="Email" id="Email" /> <label for="Username">Username:</label> <input name="Username" id="Username" /> <label for="Password">Password:</label> <input name="Password" id="Password" type="password" /> <input name="regbutton" type="button" class="button" value="Register" /> </fieldset> </form> </div>
Alternativamente, un enfoque más común sería envolver los elementos
input
/label
en grupos:<div class="form-group"> <label for="Student">Name:</label> <input name="Student" id="Student" /> </div>
Mostrar fragmento de código
#form { background-color: #FFF; height: 600px; width: 600px; margin-right: auto; margin-left: auto; margin-top: 0px; border-top-left-radius: 10px; border-top-right-radius: 10px; padding: 0px; text-align:center; } label { font-family: Georgia, "Times New Roman", Times, serif; font-size: 18px; color: #333; height: 20px; width: 200px; margin-top: 10px; margin-left: 10px; text-align: right; margin-right:15px; float:left; } input { height: 20px; width: 300px; border: 1px solid #000; margin-top: 10px; }
<div id="form"> <form action="" method="post" name="registration" class="register"> <fieldset> <div class="form-group"> <label for="Student">Name:</label> <input name="Student" id="Student" /> </div> <div class="form-group"> <label for="Matric_no">Matric number:</label> <input name="Matric_no" id="Matric_no" /> </div> <div class="form-group"> <label for="Email">Email:</label> <input name="Email" id="Email" /> </div> <div class="form-group"> <label for="Username">Username:</label> <input name="Username" id="Username" /> </div> <div class="form-group"> <label for="Password">Password:</label> <input name="Password" id="Password" type="password" /> </div> <input name="regbutton" type="button" class="button" value="Register" /> </fieldset> </form> </div>
Tenga en cuenta que el
for
atributo debe corresponder alid
de un elemento etiquetable, no a suname
. Esto permitirá a los usuarios hacer clic enlabel
para enfocar el elemento de formulario correspondiente.fuente
clear: both;
cuya mención ayudó a mi caso.Descubrí que el
"display:flex"
estilo es una buena manera de hacer que estos elementos estén en la misma línea. No importa qué tipo de elemento en el div. Especialmente si la clase de entrada es control de formulario, otras soluciones como bootstrap, inline-block no funcionarán bien.Ejemplo:
<div style="display:flex; flex-direction: row; justify-content: center; align-items: center"> <label for="Student">Name:</label> <input name="Student" /> </div>
Más detalles sobre la pantalla: flex:
dirección flexible: fila, columna
justificar-contenido: flex-end, center, space-between, space-around
alinear-elementos: estirar, flex-start, flex-end, center
fuente
aaa ## HTML Le sugiero que los envuelva en un div, ya que probablemente terminará flotando en ciertos contextos.
<div class="input-w"> <label for="your-input">Your label</label> <input type="text" id="your-input" /> </div>
CSS
Luego, dentro de ese div, puede hacer cada pieza
inline-block
para que pueda usarlavertical-align
para centrarla, o establecer una línea de base, etc. (sus etiquetas y entradas pueden cambiar de tamaño en el futuro ....input-w label, .input-w input { float: none; /* if you had floats before? otherwise inline-block will behave differently */ display: inline-block; vertical-align: middle; }
jsFiddle
ACTUALIZACIÓN: mediados de 2016 + con consultas de medios móviles primero y flex-box
Así es como hago las cosas estos días.
HTML
<label class='input-w' for='this-input-name'> <span class='label'>Your label</span> <input class='input' type='text' id='this-input-name' placeholder='hello'> </label> <label class='input-w' for='this-other-input-name'> <span class='label'>Your label</span> <input class='input' type='text' id='this-other-input-name' placeholder='again'> </label>
SCSS
html { // https://www.paulirish.com/2012/box-sizing-border-box-ftw/ box-sizing: border-box; *, *:before, *:after { box-sizing: inherit; } } // if you don't already reset your box-model, read about it .input-w { display: block; width: 100%; // should be contained by a form or something margin-bottom: 1rem; @media (min-width: 500px) { display: flex; flex-direction: row; align-items: center; } .label, .input { display: block; width: 100%; border: 1px solid rgba(0,0,0,.1); @media (min-width: 500px) { width: auto; display: flex; } } .label { font-size: 13px; @media (min-width: 500px) { /* margin-right: 1rem; */ min-width: 100px; // maybe to match many? } } .input { padding: .5rem; font-size: 16px; @media (min-width: 500px) { flex-grow: 1; max-width: 450px; // arbitrary } } }
jsFiddle
fuente
<label>
elemento ahora en días.Lo que te faltaba era el flotador: izquierda; aquí hay un ejemplo recién hecho en HTML
<div id="form"> <form action="" method="post" name="registration" class="register"> <fieldset> <label for="Student" style="float: left">Name:</label> <input name="Student" /> <label for="Matric_no" style="float: left">Matric number:</label> <input name="Matric_no" /> <label for="Email" style="float: left">Email:</label> <input name="Email" /> <label for="Username" style="float: left">Username:</label> <input name="Username" /> <label for="Password" style="float: left">Password:</label> <input name="Password" type="password" /> <input name="regbutton" type="button" class="button" value="Register" /> </fieldset> </form>
La forma más eficiente de hacer esto es agregar una clase a las etiquetas y establecer el float: left; a la clase en CSS
fuente
Además de usar flotadores, como han sugerido otros, también puede confiar en un marco como Bootstrap donde puede usar la clase "forma horizontal" para tener la etiqueta y la entrada en la misma línea.
Si no está familiarizado con Bootstrap, deberá incluir:
Es muy sencillo y no tendría que meterse con flotantes o una tonelada de CSS para formatear, como se enumeró anteriormente.
<div id="form"> <div class="row"> <form action="" method="post" name="registration" class="register form-horizontal"> <fieldset> <legend>Address Form</legend> <div class="form-group"> <label for="Student" class="col-sm-2 control-label">Name:</label> <div class="col-sm-6"> <input name="Student" class="form-control"> </div> </div> <div class="form-group"> <label for="Matric_no" class="col-sm-2 control-label">Matric number: </label> <div class="col-sm-6"> <input name="Matric_no" class="form-control"> </div> </div> <div class="form-group"> <label for="Email" class="col-sm-2 control-label">Email: </label> <div class="col-sm-6"> <input name="Email" class="form-control"> </div> </div> <div class="form-group"> <label for="Username" class="col-sm-2 control-label">Username: </label> <div class="col-sm-6"> <input name="Username" class="form-control"> </div> </div> <div class="form-group"> <label for="Password" class="col-sm-2 control-label">Password: </label> <div class="col-sm-6"> <input name="Password" type="password" class="form-control"> </div> </div> <div> <button class="btn btn-info" name="regbutton" value="Register">Submit</button> </div> </fieldset> </form> </div> </div> </div>
fuente
Para Bootstrap 4 se podría hacer con
class="form-group" style="display: flex"
<div class="form-group" style="display: flex"> <label>Topjava comment:</label> <input class="form-control" type="checkbox"/> </div>
fuente
Estoy usando Angular 6 con Bootstrap 4 y encuentro que esta forma funciona:
<div class="form-group row"> <div class="col-md-2"> <label for="currentPassword">Current Password:</label> </div> <div class="col-md-6"> <input type="password" id="currentPassword"> </div> </div>
fuente
He hecho esto de varias maneras diferentes, pero la única forma que he encontrado que mantiene las etiquetas y los datos de entrada / texto correspondientes en la misma línea y siempre se ajusta perfectamente al ancho del padre es usar display: inline table.
CSS
.container { display: inline-table; padding-right: 14px; margin-top:5px; margin-bottom:5px; } .fieldName { display: table-cell; vertical-align: middle; padding-right: 4px; } .data { display: table-cell; }
HTML
<div class='container'> <div class='fieldName'> <label>Student</label> </div> <div class='data'> <input name="Student" /> </div> </div> <div class='container'> <div class='fieldName'> <label>Email</label> </div> <div class='data'> <input name="Email" /> </div> </div>
fuente
Envuelva la etiqueta y la entrada dentro de un div bootstraps
<div class ="row"> <div class="col-md-4">Name:</div> <div class="col-md-8"><input type="text"></div> </div>
fuente
Esto funciona bien Puso el botón de radio o la casilla de verificación con la etiqueta en la misma línea sin ningún CSS.
<label><input type="radio" value="new" name="filter">NEW</label> <label><input type="radio" value="wow" name="filter">WOW</label>
fuente
Mostrar fragmento de código
#form { background-color: #FFF; height: 600px; width: 600px; margin-right: auto; margin-left: auto; margin-top: 0px; border-top-left-radius: 10px; border-top-right-radius: 10px; padding: 0px; text-align:center; } label { font-family: Georgia, "Times New Roman", Times, serif; font-size: 18px; color: #333; height: 20px; width: 200px; margin-top: 10px; margin-left: 10px; text-align: right; margin-right:15px; float:left; } input { height: 20px; width: 300px; border: 1px solid #000; margin-top: 10px; }
<div id="form"> <form action="" method="post" name="registration" class="register"> <fieldset> <div class="form-group"> <label for="Student">Name:</label> <input name="Student" /> </div> <div class="form-group"> <label for="Matric_no">Matric number:</label> <input name="Matric_no" /> </div> <div class="form-group"> <label for="Email">Email:</label> <input name="Email" /> </div> <div class="form-group"> <label for="Username">Username:</label> <input name="Username" /> </div> <div class="form-group"> <label for="Password">Password:</label> <input name="Password" type="password" /> </div> <input name="regbutton" type="button" class="button" value="Register" /> </fieldset> </form> </div>
fuente
Otra opción es colocar una tabla dentro del formulario. (ver más abajo) Sé que algunas personas desaprueban las tablas, pero creo que funcionan bien cuando se trata de diseños de formularios receptivos.
<FORM METHOD="POST" ACTION="http://www.cs.tut.fi/cgi-bin/run/~jkorpela/echo.cgi"> <TABLE BORDER="1"> <TR> <TD>Your name</TD> <TD> <INPUT TYPE="TEXT" NAME="name" SIZE="20"> </TD> </TR> <TR> <TD>Your E-mail address</TD> <TD><INPUT TYPE="TEXT" NAME="email" SIZE="25"></TD> </TR> </TABLE> <P><INPUT TYPE="SUBMIT" VALUE="Submit" NAME="B1"></P> </FORM>
fuente