Cómo alinear formularios de entrada en HTML


Soy nuevo en HTML y estoy tratando de aprender a usar formularios.

El mayor problema que estoy teniendo hasta ahora es alinear los formularios. He aquí un ejemplo de mi archivo HTML actual:

<form>
 First Name:<input type="text" name="first"><br />
 Last Name:<input type="text" name="last"><br />
 Email:<input type="text" name="email"><br />
</form>

El problema con esto es que el cuadro de campo después de 'Correo electrónico' es drásticamente diferente en términos de espaciado en comparación con el nombre y el apellido. ¿Cuál es la manera' apropiada 'de hacer que se' alineen ' esencialmente?

Estoy tratando de practicar la buena forma y la sintaxis...mucha gente podría hacer esto con CSS No estoy seguro, solo he aprendido los conceptos básicos de HTML hasta ahora.

Author: yoshyosh, 2010-11-30

16 answers

Otro ejemplo, esto usa CSS, simplemente pongo el formulario en un div con la clase container. Y especificó que los elementos de entrada contenidos dentro deben ser 100% del ancho del contenedor y no tener ningún elemento en ninguno de los lados.

.container {
  width: 500px;
  clear: both;
}

.container input {
  width: 100%;
  clear: both;
}
<html>

<head>
  <title>Example form</title>
</head>

<body>
  <div class="container">
    <form>
      <label>First Name</label>
      <input type="text" name="first"><br />
      <label>Last Name</label>
      <input type="text" name="last"><br />
      <label>Email</label>
      <input type="text" name="email"><br />
    </form>
  </div>
</body>

</html>
 51
Author: serialk,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-03-19 14:57:55

La respuesta aceptada (establecer un ancho explícito en píxeles) hace que sea difícil hacer cambios, y se rompe cuando los usuarios utilizan un tamaño de fuente diferente. El uso de tablas CSS, por otro lado, funciona muy bien:

form  { display: table;      }
p     { display: table-row;  }
label { display: table-cell; }
input { display: table-cell; }
<form>
  <p>
    <label for="a">Short label:</label>
    <input id="a" type="text">
  </p>
  <p>
    <label for="b">Very very very long label:</label>
    <input id="b" type="text">
  </p>
</form>

Aquí hay un JSFiddle: http://jsfiddle.net/DaS39/1 /

Y si necesita las etiquetas alineadas a la derecha, simplemente agregue text-align: right a las etiquetas: http://jsfiddle.net/DaS39 /


EDITAR: Una nota rápida más: Las tablas CSS también te permiten jugar con columnas: por ejemplo, si desea que los campos de entrada ocupen tanto espacio como sea posible, puede agregar lo siguiente en su formulario

<div style="display: table-column;"></div>
<div style="display: table-column; width:100%;"></div>

Es posible que desee agregar white-space: nowrap a labels en ese caso.

 95
Author: Clément,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2018-06-20 08:30:50

Una solución simple para ti si eres nuevo en HTML, es usar una tabla para alinear todo.

<form>
  <table>
    <tr>
      <td align="right">First Name:</td>
      <td align="left"><input type="text" name="first" /></td>
    </tr>
    <tr>
      <td align="right">Last Name:</td>
      <td align="left"><input type="text" name="last" /></td>
    </tr>
    <tr>
      <td align="right">Email:</td>
      <td align="left"><input type="text" name="email" /></td>
    </tr>
  </table>
</form>
 22
Author: amonett,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-30 02:25:23

Me resulta mucho más fácil cambiar la visualización de las etiquetas a bloque en línea y establecer un ancho

label {
    display: inline-block;
    width:100px;
    text-align: right;
}
 16
Author: Byron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-08-08 21:55:22

Debe usar una tabla. Como cuestión de estructura lógica los datos son tabulares: es por eso que desea que se alineen, porque desea mostrar que las etiquetas no están relacionadas únicamente con sus cajas de entrada, sino también entre sí, en una estructura bidimensional.

[considere lo que haría si tuviera valores de cadena o numéricos para mostrar en lugar de cuadros de entrada.]

 6
Author: Collin Street,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-04-12 07:56:01

Para esto, prefiero mantener un HTML semántico correcto, y usar un CSS simple como sea posible.

Algo como esto haría el trabajo :

label{
  display: block;
  float: left;
  width : 120px;    
}

Un inconveniente sin embargo : es posible que tenga que elegir el ancho de etiqueta correcto para cada formulario, y esto no es fácil si sus etiquetas pueden ser dinámicas (etiquetas I18N, por ejemplo).

 3
Author: Samuel EUSTACHI,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-11-21 15:43:49

Usando css

.containerdiv label {
  float:left;
  width:25%;
  text-align:right;
  margin-right:5px; /* optional */
}
.containerdiv input {
  float:left;
  width:65%;
}

Esto te da algo como:

           label1 |input box             |
    another label |another input box     |
 2
Author: Gjaa,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-05-18 00:16:42

Bueno, para lo básico puedes intentar alinearlos en la tabla. Sin embargo, el uso de la tabla es malo para el diseño, ya que la tabla está destinada a los contenidos.

Lo que se puede utilizar es CSS técnicas flotantes.

Código CSS

.styleform label{float:left;}
.styleform input{margin-left:200px;} /* this gives space for the label on the left */
.styleform .clear{clear:both;} /* prevent elements from stacking weirdly */

HTML

<div class="styleform">
<form>
<label>First Name:</label><input type="text" name="first" /><div class="clear"></div>
<label>Last Name:</label><input type="text" name="first" /><div class="clear"></div>
<label>Email:</label><input type="text" name="first" /><div class="clear"></div>
</form>
</div>

Se puede encontrar un artículo elaborado que escribí respondiendo a la pregunta del problema de flotación IE7: Problemas de derecha de flotación IE7

 1
Author: mauris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 11:47:13

Sé que esto ya ha sido contestado, pero encontré una nueva manera de alinearlos bien-con un beneficio adicional-ver http://www.gargan.org/en/Web_Development/Form_Layout_with_CSS /

Básicamente se usa el elemento label alrededor de la entrada y se alinea usando eso:

<label><span>Name</span> <input /></label>
<label><span>E-Mail</span> <input /></label>
<label><span>Comment</span> <textarea></textarea></label>

Y luego con css simplemente alineas:

label {
    display:block;
    position:relative;
}

label span {
    font-weight:bold;
    position:absolute;
    left: 3px;
}

label input, label textarea, label select {
    margin-left: 120px;    
}
  • no necesita ningún desordenado br por ahí para saltos de línea, lo que significa que puede lograr rápidamente un diseño de varias columnas dinámicamente
  • toda la línea es capaz de hacer clic. Especialmente para las casillas de verificación, esto es una gran ayuda.
  • Mostrar/ocultar dinámicamente las líneas del formulario es fácil (solo busca la entrada y oculta su padre -> la etiqueta)
  • puede asignar clases a toda la etiqueta haciendo que muestre la entrada de error mucho más clara (no solo alrededor del campo de entrada)
 1
Author: Niko,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-17 09:38:47

El método tradicional es usar una tabla.

Ejemplo:

<table>
  <tbody>
     <tr>
        <td>
           First Name:
        </td>
        <td>
           <input type="text" name="first">
        </td>
     </tr>
     <tr>
        <td>
           Last Name:
        </td>
        <td>
           <input type="text" name="last">
        </td>
     </tr>
  </tbody>
</table>

Sin embargo, muchos argumentarían que las tablas son restrictivas y prefieren CSS. El beneficio de usar CSS es que puede usar varios elementos. Desde la lista divs, ordenada y no ordenada, puede lograr el mismo diseño.

Al final, querrás usar lo que te resulte más cómodo.

Sugerencia: Es fácil comenzar con las tablas.

 0
Author: OV Web Solutions,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-30 02:28:17

Soy un gran fan del uso de listas de definición.

<dl>
<dt>Username:</dt>
<dd><input type="text" name="username" /></dd>
<dt>Password:</dt>
<dd><input type="password" name="password" /></dd>
</dl>

Son fáciles de diseñar usando CSS, y evitan el estigma de usar tablas para el diseño.

 0
Author: Andrew,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-11-30 03:06:38

Css que utilicé para resolver este problema, similar a Gjaa pero con un estilo mejor

p
{
    text-align:center;
        }
.styleform label
{
    float:left;
    width: 40%;
    text-align:right;
    }
.styleform input
{
    float:left;
    width: 30%;
    }

Aquí está mi HTML, usado específicamente para un formulario de registro simple sin código php

<form id="registration">
    <h1>Register</h1>
    <div class="styleform">
    <fieldset id="inputs">
        <p><label>Name:</label> 
          <input id="name" type="text" placeholder="Name" autofocus required>
        </p>
        <p><label>Email:</label>   
          <input id="email" type="text" placeholder="Email Address" required>
        </p>
        <p><label>Username:</label>
          <input id="username" type="text" placeholder="Username" autofocus required>
        </p>
        <p>   
          <label>Password:</label>
          <input id="password" type="password" placeholder="Password" required>
        </p>
    </fieldset>
    <fieldset id="actions">

    </fieldset>
    </div>
    <p>
          <input type="submit" id="submit" value="Register">
          </p>

Es muy simple, y apenas estoy empezando, pero funcionó bastante bien

 0
Author: PA_Commons,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-04-16 23:32:11

Inserte etiquetas de entrada dentro de una lista desordenada.Haz que el tipo de estilo no sea ninguno. He aquí un ejemplo.

<ul>
Input1     
<li> <input type="text" />
Input2
<li> <input type="text" />
<ul/>

Funcionó para mí !

 0
Author: Vivek Iyer,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-17 04:20:59
<form>
    <div>
        <label for='username'>UserName</label>
        <input type='text' name='username' id='username' value=''>  
    </div>
</form>

En el CSS tienes que declarar tanto label como input como display: inline-block y dar ancho de acuerdo a tus requerimientos. Espero que esto te ayude. :)

 -1
Author: kta,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-02-07 09:04:23

Creo que sería más fácil si utilizaras una tabla para estructurar tu formulario. Puede ser agotador, pero nada de 'copiar y pegar' con un poco de edición no puede arreglarse.

<form>
<table>
<tr>
<td> <label>First Name:</label> </td> <td> <input type="text" name="first"> </td> </tr>
<tr> <td> <label>Last Name:</label> </td> <td> <input type="text" name="last"> </td></tr>
<tr> <td> <label> Email: </label> </td> <td> <input type="text" name="email"> </td></tr>
</table>
</form>

Puede agregar un poco de relleno o flotar el contenido de la celda para que se vea más espacioso.

 -2
Author: Hammerton Mwawuda,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-05 11:14:40

Simplemente agregue

<form align="center ></from>

Simplemente coloque alinear en la etiqueta de apertura.

 -3
Author: Zak Gill,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-10-07 20:28:20