Я хочу, чтобы мой ярлык вертикально выравнивался с моим полем ввода
Вот что моя работа до сих пор:
http://jsfiddle.net/2RCBQ/
<div id="main">
<form>
<label>First Name:<input type="text" id="firstname"></label><br/>
<label>Last Name:<input type="text" id="lastname"></label><br>
<label>E-Mail:<input type="text" id="email"></label><br/>
<label>Phone:<input type="text" id="phone"></label><br/>
</form>
</div>
CSS
#main {
width:300px;
}
#main input {
float:right;
display:inline;
}
#main label {
color: #2D2D2D;
font-size: 15px;
width:250px;
display: block;
}
В настоящее время метка (слева) относится к верхней части поля ввода (справа). Я хочу по вертикали выровнять их так, чтобы метка находилась в середине поля ввода.
Я пробовал выравнивание по вертикали, и оно не работает. Пожалуйста, помогите мне разобраться в проблеме. Спасибо.
Ответы
Ответ 1
Я чувствую, что вложенность <span>
добавляет много ненужной разметки.
display: inline-block
позволяет <label>
и <input>
сидеть рядом друг с другом точно так же, как с помощью float: right
, но без нарушения потока документов. Плюс он намного более гибкий и позволяет больше контролировать выравнивание, если вы (или читатель экрана пользователя) хотите изменить font-size
.
Изменить: jsfiddle
label, input {
display: inline-block;
vertical-align: baseline;
width: 125px;
}
label {
color: #2D2D2D;
font-size: 15px;
}
form, input {
box-sizing: border-box;
-moz-box-sizing: border-box;
-webkit-box-sizing: border-box;
}
form {
width: 300px;
}
<form>
<label for="firstname">First Name:</label><input type="text" id="firstname">
<label for="lastname">Last Name:</label><input type="text" id="lastname">
<label for="email">E-Mail:</label><input type="text" id="email">
<label for="phone">Phone:</label><input type="text" id="phone">
</form>
Ответ 2
Вы можете использовать flexbox css для вертикального выравнивания.
Просто оберните родительский элемент display-flex
.
.display-flex {
display: flex;
align-items: center;
}
Ответ 3
HTML:
Я добавляю span в свой ярлык, поэтому мы можем добавить стиль, специфичный для текстовой метки:
<div id="main">
<form>
<label><span>First Name:</span><input type="text" id="firstname"></label><br/>
<label><span>Last Name:</span><input type="text" id="lastname"></label><br>
<label><span>E-Mail:</span><input type="text" id="email"></label><br/>
<label><span>Phone:</span><input type="text" id="phone"></label><br/>
</form>
</div>
CSS
#main label span {
position:relative;
top:2px;
}
демонстрация
Ответ 4
Вы можете заключить элементы <label>
в диапазон и установить диапазон vertical-align
на middle
HTML
<div id="main">
<form> <span><label>First Name:<input type="text" id="firstname" /></label></span>
<br/> <span><label>Last Name:<input type="text" id="lastname" /></label></span>
<br/> <span><label>E-Mail:<input type="text" id="email" /></label></span>
<br/> <span><label>Phone:<input type="text" id="phone" /></label></span>
<br/>
</form>
</div>
CSS
#main {
width:300px;
}
#main input {
float:right;
display:inline;
}
#main label {
color: #2D2D2D;
font-size: 15px;
}
#main span {
display: table-cell;
vertical-align: middle;
width:250px;
}
http://jsfiddle.net/2RCBQ/2/
Ответ 5
Я думаю, что единственный метод, который работает для всех типов ввода.
label { display: flex; align-items: center; }
input { margin: 0; padding: 0; }
<label><input type="checkbox"> HTML</label>
<label><input type="radio"> JS</label>
<label>CSS <input type="text"></label>
<label>Framework
<select><option selected>none</option></select>
</label>