<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Очередной блог фрилансера &#187; label</title>
	<atom:link href="http://dreamhelg.ru/tag/label/feed/" rel="self" type="application/rss+xml" />
	<link>http://dreamhelg.ru</link>
	<description>о моей работе в сети и не только</description>
	<lastBuildDate>Fri, 23 Dec 2011 07:10:04 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3</generator>
		<item>
		<title>Создание формы со скользящими подписями</title>
		<link>http://dreamhelg.ru/2010/01/create-form-with-sliding-labels/</link>
		<comments>http://dreamhelg.ru/2010/01/create-form-with-sliding-labels/#comments</comments>
		<pubDate>Thu, 28 Jan 2010 08:47:34 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[label]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=1850</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2010/01/home1.png" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>Пару недель назад, я читал статью <a href="http://www.lukew.com/">Люка Вроблевски</a>. Для тех, кто еще не слышал о нем, Люк -  автор книги о правильном дизайне веб-форм.

В его статье, меня особенно заинтересовала часть, о расположении подписей внутри текстовых полей:<span id="more-1850"></span>
<br/>
<p><blockquote><em>Поскольку подписи, расположенные внутри текстовых полей, исчезают при вводе текста, вместе с ними исчезает контекст введенных данных. Так что, если вы вдруг забудете, на какой вопрос вы ввели ответ, значит вам не повезло – подпись к полю вы, скорее всего нигде не найдете. Из этого следует, что подписи, расположенные внутри текстовых полей – не самое лучшее решение для создания длинных форм. Когда вы заполните форму до конца, все подписи пропадут! В этом случае, гораздо сложнее будет вернутся и проверить свои ответы.</em>

<em>Люк Вроблевски</em></blockquote></p>

Эти слова стали хорошим поводом для размышления. Конечно, вы можете взглянуть на поле со значением “Вася Пупкин”, и точно сказать что это поле для ввода имени. Но в случае с длинными формами, очень легко забыть вопросы, на которые вы отвечали.

Самым лучшим решением, по мнению Люка, является размещение подписей за пределами текстового поля, с тем, чтобы они всегда были доступны для пользователя. Я думаю это неплохое решение, но мы можем придумать кое-что поинтереснее.
<h3>Скользящие подписи</h3>
После прочтения этой статьи, мне пришло в голову, что мы вполне можем использовать преимущества каждого из методов. Мне нравится как выглядят подсказки внутри полей, но тем не менее, я согласен с тем, что она всегда должна оставаться на экране. Но, к счастью у нас в распоряжении есть JQuery, мы знакомы с принципом постепенного улучшения, поэтому давайте создадим подписи, расположенные внутри текстовых полей, которые, вместо того, чтобы исчезать, будут сдвигаться влево (или вверх, как вам больше хочется), при клике по текстовому полю.

<h3>HTML</h3>

[html]
&lt;form action=&quot;&quot; method=&quot;post&quot; id=&quot;info&quot;&gt;
    &lt;h2&gt;Контактная информация&lt;/h2&gt;
    &lt;div id=&quot;name-wrap&quot; class=&quot;slider&quot;&gt;
        &lt;label for=&quot;name&quot;&gt;
            Имя
        &lt;/label&gt;
        &lt;input type=&quot;text&quot; id=&quot;name&quot; name=&quot;name&quot;&gt;
    &lt;/div&gt;&lt;!--/#name-wrap--&gt;
    &lt;div id=&quot;email-wrap&quot; class=&quot;slider&quot;&gt;
        &lt;label for=&quot;email&quot;&gt;
            E&amp;ndash;mail
        &lt;/label&gt;
        &lt;input type=&quot;text&quot; id=&quot;email&quot; name=&quot;email&quot;&gt;
    &lt;/div&gt;&lt;!--/#email-wrap--&gt;
    &lt;div id=&quot;street-wrap&quot; class=&quot;slider&quot;&gt;
        &lt;label for=&quot;st&quot;&gt;
            Город
        &lt;/label&gt;
        &lt;input type=&quot;text&quot; id=&quot;st&quot; name=&quot;st&quot;&gt;
    &lt;/div&gt;&lt;!--/#street-wrap--&gt;
    &lt;div id=&quot;city-wrap&quot; class=&quot;slider&quot;&gt;
        &lt;label for=&quot;city&quot;&gt;
            Улица
        &lt;/label&gt;
        &lt;input type=&quot;text&quot; id=&quot;city&quot; name=&quot;city&quot;&gt;
    &lt;/div&gt;&lt;!--/#city-wrap--&gt;
    &lt;div id=&quot;zip-wrap&quot; class=&quot;slider&quot;&gt;
        &lt;label for=&quot;zip&quot;&gt;
            Индекс
        &lt;/label&gt;
        &lt;input type=&quot;text&quot; id=&quot;zip&quot; name=&quot;zip&quot;&gt;
    &lt;/div&gt;&lt;!--/#zip-wrap--&gt;
    &lt;input type=&quot;submit&quot; id=&quot;btn&quot; name=&quot;btn&quot; value=&quot;отправить&quot;&gt;
&lt;/form&gt;
[/html]

Единственным необходимым элементом, для создания скользящих подписей (в моей реализации), является оборачивающий элемент (в моем примере DIV), и применение к нему класса “slider” (это легко можно изменить в JavaScript).

На этом этапе, у нас получилась очень простая, и некрасивая форма:
<p style="text-align: center;"><img class="aligncenter" src="http://dreamhelg.ru/wp-content/uploads/2010/01/one_thumb.jpg" alt="one" width="292" height="266" /></p>

<h3>CSS</h3>
[css]
body {
    font: 12px / 1.3 Arial, Sans-serif;
}

form {
    width: 360px;
    padding: 10px 20px 30px 60px;
    margin: auto;
    background: #f7f7f7;
    border: 1px solid #ddd;
}

div {
    clear: both;
    position: relative;
    margin: 0 0 10px;
}

label {
    cursor: pointer;
    display: block;
}

input[type =
&quot;text&quot;] {
    width: 300px;
    border: 1px solid #999;
    padding: 5px;
    -moz-border-radius: 4px;
}

input[type =
&quot;text&quot;]:focus {
    border-color: #777;
}

input[name =
&quot;zip&quot;] {
    width: 150px;
}

/* submit button */
input[type =
&quot;submit&quot;] {
    cursor: pointer;
    border: 1px solid #999;
    padding: 5px;
    -moz-border-radius: 4px;
    background: #eee;
}

input[type =
&quot;submit&quot;]:hover, input[type = &quot;submit&quot;]:focus {
    border-color: #333;
    background: #ddd;
}

input[type =
&quot;submit&quot;]:active {
    margin-top: 1px;
}
[/css]

Единственный, 100%-необходимый CSS в этом примере – это применение position: relatve, к оборачивающему элементу (DIV). Все остальное используется только для настройки внешнего вида формы, вы можете изменять его по своему вкусу.

Теперь у нас получилась вполне симпатичная форма, в которой подписи расположены сверху непосредственных полей ввода.
<p style="text-align: center;"><img class="aligncenter" title="two" src="http://dreamhelg.ru/wp-content/uploads/2010/01/two.jpg" alt="two" width="384" height="392" /></p>

<h3>jQuery</h3>
Теперь, раздел, который все обычно пропускают, переходя к демо-странице:

[javascript]
$('form#info .slider label').each(function(){
	var labelColor = '#999';
	var restingPosition = '5px';

	// стилизация и позиционирование подписей 
	$(this).css({
		'color' : labelColor,
		 	'position' : 'absolute',
	 		'top' : '6px',
			'left' : restingPosition,
			'display' : 'inline',
    	               'z-index' : '99'
	});

	// получение введенного в поле, значения
	var inputval = $(this).next('input').val();

	// получение длины подписи, и добавление к ней 5px 
	var labelwidth = $(this).width();
	var labelmove = labelwidth + 5;

	//проверяем, если поле заполнено, то сдвигаем подпись за пределы поля
	if(inputval !== ''){
		$(this).stop().animate({ 'left':'-'+labelmove }, 1);
	}    	

	// если значение поля пустое при фокусе, сдвигаем подпись влево
	// если оно осталось пустым, при потере фокуса, возвращаем их обратно
	$('input').focus(function(){
		var label = $(this).prev('label');
		var width = $(label).width();
		var adjust = width + 5;
		var value = $(this).val();

		if(value == ''){
			label.stop().animate({ 'left':'-'+adjust }, 'fast');
		} else {
			label.css({ 'left':'-'+adjust });
		}
	}).blur(function(){
		var label = $(this).prev('label');
		var value = $(this).val();
		if(value == ''){
			label.stop().animate({ 'left':restingPosition }, 'fast');
		}
	});
})
[/javascript]

Вот и все, у вас должна получится полностью работающая форма со скользящими подписями.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/01/final.jpg"><img class="aligncenter size-full wp-image-1857" title="final" src="http://dreamhelg.ru/wp-content/uploads/2010/01/final.jpg" alt="" width="373" height="312" /></a>

Обратите внимание, что форма остается рабочей, даже с отключенным ява-скриптом, это является основным принципом постепенного улучшения. Верите или нет, но все еще остаются люди, не использующие ява-скрипт при просмотре веб-страниц.

<a href="http://dreamhelg.ru/demo/sliding-labels/index.htm">Демонстрационная страница</a>.
<a href="http://dreamhelg.ru/wp-content/uploads/2010/01/demo.zip">Архив с примером</a>.

Перевод статьи “<a href="http://www.csskarma.com/blog/sliding-labels/">Form Design with Sliding Labels</a>”, автор <strong>Tim Wright</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2010/01/create-form-with-sliding-labels/feed/</wfw:commentRss>
		<slash:comments>28</slash:comments>
		</item>
	</channel>
</rss>

