Как выровнять входные формы в HTML
Я новичок в HTML, и я пытаюсь научиться использовать формы.
самая большая проблема, с которой я сталкиваюсь до сих пор, - это выравнивание форм. Вот пример моего текущего файла HTML:
<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>
проблема в том, что поле после "электронная почта" резко отличается по расстоянию по сравнению с первым и последним именем. Каков "правильный" способ сделать так, чтобы они "выстраивались" по существу?
Я пытаюсь практиковать хорошую форму и синтаксис...много люди могут сделать это с помощью CSS я не уверен, я только изучил самые основы HTML до сих пор.
16 ответов:
другой пример, это использует CSS, я просто помещаю форму в div с классом контейнера. И указано, что входные элементы, содержащиеся внутри, должны составлять 100% ширины контейнера и не иметь никаких элементов с обеих сторон.
.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>
принятый ответ (установка явной ширины в пикселях) затрудняет внесение изменений и прерывается, когда ваши пользователи используют другой размер шрифта. С другой стороны, использование таблиц CSS отлично работает:
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>
вот JSFiddle:http://jsfiddle.net/DaS39/1/
и если вам нужны метки, выровненные по правому краю, просто добавьте
text-align: right
на ярлыки: http://jsfiddle.net/DaS39/
EDIT: еще одно краткое Примечание: таблицы CSS также позволяют играть со столбцами: например, если вы хотите, чтобы поля ввода занимали как можно больше места, вы можете добавить следующее в свою форму
<div style="display: table-column;"></div> <div style="display: table-column; width:100%;"></div>
вы можете добавить
white-space: nowrap
доlabels
в этом случае.
простое решение для вас, если вы новичок в HTML, это просто использовать таблицу, чтобы выровнять все.
<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>
мне гораздо проще изменить отображение меток на встроенный блок и установить ширину
label { display: inline-block; width:100px; text-align: right; }
вы должны использовать таблицу. Как вопрос логическая структура данные являются табличными: именно поэтому вы хотите, чтобы они выровнялись, потому что вы хотите показать, что метки связаны не только с их полями ввода, но и друг с другом, в двумерной структуре.
[подумайте, что бы вы сделали, если бы у вас были строковые или числовые значения для отображения вместо полей ввода.]
для этого я предпочитаю сохранять правильную семантику HTML и использовать CSS как можно проще.
что-то вроде этого будет делать работу :
label{ display: block; float: left; width : 120px; }
С помощью css
.containerdiv label { float:left; width:25%; text-align:right; margin-right:5px; /* optional */ } .containerdiv input { float:left; width:65%; }
это даст вам что-то вроде:
label1 |input box | another label |another input box |
Ну для самых основ вы можете попробовать выровнять их в таблице. Однако использование таблицы плохо для макета, так как таблица предназначена для содержимого.
то, что вы можете использовать, - это плавающие методы CSS.
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>
развернутая статья, которую я написал, Может быть найдена, отвечая на вопрос о проблеме поплавка IE7:IE7 поплавок правые проблемы
Я знаю, что на это уже ответили, но я нашел новый способ выровнять их красиво - с дополнительной выгодой-см. http://www.gargan.org/en/Web_Development/Form_Layout_with_CSS/
в основном вы используете элемент метки вокруг входа и выравниваете с помощью этого:
<label><span>Name</span> <input /></label> <label><span>E-Mail</span> <input /></label> <label><span>Comment</span> <textarea></textarea></label>
а потом с css вы просто выравниваете:
label { display:block; position:relative; } label span { font-weight:bold; position:absolute; left: 3px; } label input, label textarea, label select { margin-left: 120px; }
- вам не нужны никакие грязные БР валяются переносы - означает, что вы можете быстро выполнить многоколоночная компоновка динамически
- вся линия клик-состоянии. Особенно для флажков это огромная помощь.
- динамическое отображение / скрытие строк формы легко (вы просто ищете вход и скрываете его родитель - > метка)
- вы можете назначить классы для всей метки, чтобы она показывала ввод ошибок намного яснее (не только вокруг поля ввода)
традиционный метод заключается в использовании таблицы.
пример:
<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>
однако многие утверждают, что таблицы ограничивают и предпочитают CSS. Преимущество использования CSS заключается в том, что вы можете использовать различные элементы. Из divs, упорядоченного и неупорядоченного списка, вы можете выполнить тот же макет.
в конце концов, вы захотите использовать то, что вам наиболее удобно.
подсказка: таблицы легко начать работу.
Я большой поклонник использования списков определений.
<dl> <dt>Username:</dt> <dd><input type="text" name="username" /></dd> <dt>Password:</dt> <dd><input type="password" name="password" /></dd> </dl>
их легко стилизовать с помощью CSS, и они избегают стигмы использования таблиц для макета.
css, который я использовал для решения этой проблемы, похож на Gjaa, но стилизован лучше
p { text-align:center; } .styleform label { float:left; width: 40%; text-align:right; } .styleform input { float:left; width: 30%; }
вот мой HTML, используемый специально для простой регистрационной формы без 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>
это очень просто, и я только начинаю, но это сработало довольно хорошо
вставка входных тегов внутри неупорядоченных списков.Сделайте стиль-тип none. Вот вам пример.
<ul> Input1 <li> <input type="text" /> Input2 <li> <input type="text" /> <ul/>
работал на меня !
<form> <div> <label for='username'>UserName</label> <input type='text' name='username' id='username' value=''> </div> </form>
в CSS вы должны объявить как label, так и input как display: inline-block и дать ширину в соответствии с вашими требованиями. Надеюсь, это поможет вам. :)
Я думаю, что было бы проще, если бы вы использовали таблицу для структурирования формы. Может быть утомительно, но ничего "копировать и вставлять" с небольшим редактированием не может исправить.
<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>
вы можете добавить некоторые обивка или переместить содержимое ячейки, чтобы сделать его более просторным.