Как сделать <label> и <input> появляться в одной строке в HTML-форме
Я работаю над проектом, и я пытаюсь создать регистрационную форму для веб-сайта. я хочу, чтобы и метка, и соответствующая область текста/ввода отображались в одной строке. Я пробовал много методов, чтобы немного или безрезультатно. Пожалуйста, вы можете помочь мне с правильным путем, чтобы пойти по этому поводу, так как я не хочу, чтобы это исправить из-за проб и ошибок.
здесь мой код
HTML
<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>
CSS
#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;
}
Ответы
Ответ 1
Предполагая, что вы хотите плавать элементы, вам также придется плавать элементы label
.
Что-то вроде этого будет работать.
label {
/* Other styling.. */
text-align: right;
clear: both;
float:left;
margin-right:15px;
}
#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" />
<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>
Ответ 2
HTML
Я бы предложил вам обернуть их в div, так как вы, вероятно, в конечном итоге плаваете в определенных контекстах.
<div class="input-w">
<label for="your-input">Your label</label>
<input type="text" id="your-input" />
</div>
CSS
Затем внутри этого div вы можете сделать каждую часть inline-block
, чтобы вы могли использовать vertical-align
, чтобы центрировать их - или установить базовую линию и т.д. (ваши метки и ввод могут изменить размеры в будущем...
.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
UPDATE: середина 2016 + с мобильными первыми медиа-запросами и гибкой коробкой
Вот что я делаю в наши дни.
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-directio3: 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
Ответ 3
То, что вам не хватало, было float: left; вот пример, только что сделанный в 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>
Более эффективный способ сделать это - добавить класс к меткам и установить float: left; к классу в CSS
Ответ 4
Помимо использования поплавков, как другие предложили, вы также можете полагаться на структуру, такую как Bootstrap, где вы можете использовать "горизонтальной формы", чтобы иметь метку и ввод в одной строке.
Если вы не знакомы с Bootstrap, вам нужно включить:
- ссылка на Bootstrap CSS (верхняя ссылка, где он говорит < - Последний скомпилированный и уменьшенный CSS → ), в голова, а также добавить некоторые divs:
- div class= "form-group"
- div class= "col -..."
- вместе с class= "col-sm-2 control-label" на каждой метке, как показывает Bootstrap, которую я включил ниже.
- Я также переформатировал вашу кнопку, чтобы она соответствовала Bootstrap.
- и добавили легенду в поле формы, так как вы использовали набор полей.
Это очень прямолинейно, и вам не нужно было возиться с поплавками или тоннами CSS для форматирования, как вы указали выше.
<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>
Ответ 5
Я сделал это несколько разных способов, но единственный способ, который я нашел, который хранит метки и соответствующие текстовые/входные данные в одной строке и всегда отлично переносится на ширину родительского объекта, - это использовать отображение: встроенная таблица.
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>
Ответ 6
Я нашел стиль "display:flex"
- это хороший способ сделать эти элементы в одной строке. Независимо от того, какой элемент в div. Особенно, если класс ввода является формальным, другие решения, такие как bootstrap, inline-block, не будут работать хорошо.
Пример:
<div style="display:flex; flex-direction: row; justify-content: center; align-items: center">
<label for="Student">Name:</label>
<input name="Student" />
</div>
Подробнее о дисплее: flex:
flex-direction: строка, столбец
justify-content: flex-end, center, space-between, space-around
align-items: растяжка, гибкий старт, гибкий конец, центр
Ответ 7
#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>
Ответ 8
Другой вариант - разместить таблицу внутри формы. (см. ниже). Я знаю, что некоторые столы недовольны некоторыми людьми, но я думаю, что они хорошо работают, когда дело доходит до гибких форм макетов.
<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>