<?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; навигация</title>
	<atom:link href="http://dreamhelg.ru/tag/navigation/feed/" rel="self" type="application/rss+xml" />
	<link>http://dreamhelg.ru</link>
	<description>о моей работе в сети и не только</description>
	<lastBuildDate>Mon, 21 May 2012 14:37:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<item>
		<title>Создание навигации &#8220;волшебная линия&#8221; с помощью jQuery</title>
		<link>http://dreamhelg.ru/2010/02/create-magic-line-navigation-with-jquery/</link>
		<comments>http://dreamhelg.ru/2010/02/create-magic-line-navigation-with-jquery/#comments</comments>
		<pubDate>Sun, 14 Feb 2010 18:41:17 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[animate]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[навигация]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=1903</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2010/02/home1.png" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>Такой “скользящий” стиль навигации существует довольно давно, мне всего лишь было нужно изменить его немного под собственные нужды, поскольку появилась такая возможность. Это оказалось очень легко. Можете взглянуть на <a href="http://dreamhelg.ru/demo/magic-line/">два примера</a> такой навигации на демонстрационной странице.<span id="more-1903"></span>
<h3>Идея</h3>
Идея состоит в наличие какой-либо подсветки (фонового изображения или подчеркивания), следующей за мышью, при наведении к какому-либо пункту меню. Это реализуется с помощью анимации jQuery. Следовательно, “волшебную линию” можно добавить только с помощью JavaScript. После того, как линия будет добавлена и стилизована, при движении мыши к любому пункту меню, ее ширина и левое позиционирование будет изменятся с анимационным эффектом.
<h3>HTML</h3>
Здесь обычный маркированный список. Ему назначен класс “group”, так как в примере будет использовано два горизонтальных меню. ID используется для указания элемента JavaScript.

[html]
&lt;div class=&quot;nav-wrap&quot;&gt;
 &lt;ul class=&quot;group&quot; id=&quot;example-one&quot;&gt;
    &lt;li class=&quot;current_page_item&quot;&gt;&lt;a href=&quot;#&quot;&gt;Home&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Buy Tickets&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Group Sales&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Reviews&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;The Show&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Videos&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Photos&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;#&quot;&gt;Magic Shop&lt;/a&gt;&lt;/li&gt;
 &lt;/ul&gt;
&lt;/div&gt;
[/html]

Обратите внимание, что список заключен внутри блока .nav-wrap. Это сделано в связи с особенностями стилизации. Панель, на которой расположена навигация, растянута на всю ширину экрана, но сама навигация центрирована внутри этой панели.

<h3>CSS</h3>
Здесь мы располагаем список горизонтально, и позиционируем волшебную линию абсолютно, поверх меню. Все остальное – просто наведение красоты.

[css]
.nav-wrap { margin: 50px auto;  background-color: rgba(0,0,0,0.6); border-top: 2px solid white; border-bottom: 2px solid white; }
#example-one { margin: 0 auto; list-style: none; position: relative; width: 960px; }
#example-one li { display: inline-block; }
#example-one li a { color: #bbb; font-size: 14px; display: block; float: left; padding: 6px 10px 4px 10px; text-decoration: none; text-transform: uppercase; }
#example-one li a:hover { color: white; }
#magic-line { position: absolute; bottom: -2px; left: 0; width: 100px; height: 2px; background: #fe4902; }
[/css]

<h3>JQuery JavaScript</h3>
<ol>
	<li>Когда DOM загружен…</li>
	<li>Устанавливаем переменные, включающие текущее левое смещение навигации</li>
	<li>Добавляем волшебную линию к навигации</li>
	<li>Назначаем позиционирование и ширину волшебной линии равной значению текущего элемента списка</li>
	<li>Также назначаем оригинальную ширину и позиционирование в качестве данных, с тем чтобы их можно было использовать для обратной анимации</li>
	<li>При наведении мыши, подсчитываем новую ширину и левое позиционирование, и включаем анимацию для изменения этих значений</li>
	<li>При отведении мыши от пункта меню, включаем анимацию возвращения линии на исходную позицию.</li>
</ol>

[javascript]
$(function() {

    var $el, leftPos, newWidth,
        $mainNav = $(&quot;#example-one&quot;);

    $mainNav.append(&quot;&lt;li id='magic-line'&gt;&lt;/li&gt;&quot;);
    var $magicLine = $(&quot;#magic-line&quot;);

    $magicLine
        .width($(&quot;.current_page_item&quot;).width())
        .css(&quot;left&quot;, $(&quot;.current_page_item a&quot;).position().left)
        .data(&quot;origLeft&quot;, $magicLine.position().left)
        .data(&quot;origWidth&quot;, $magicLine.width());

    $(&quot;#example-one li a&quot;).hover(function() {
        $el = $(this);
        leftPos = $el.position().left;
        newWidth = $el.parent().width();
        $magicLine.stop().animate({
            left: leftPos,
            width: newWidth
        });
    }, function() {
        $magicLine.stop().animate({
            left: $magicLine.data(&quot;origLeft&quot;),
            width: $magicLine.data(&quot;origWidth&quot;)
        });
    });
});
[/javascript]

<h3>Альтернативная версия</h3>
На демонстрационной <a href="http://dreamhelg.ru/demo/magic-line/">странице</a>, также имеется альтернативная версия “волшебной” линии, использующая фон вместо линии, и анимирующей цвет вместе с шириной и левым позиционированием. В основе все то же самое, отличается разве что CSS и JavaScript, который получает цвет для нового элемента списка, из HTML-атрибута rel. Для анимации цвета, потребуется <a href="http://plugins.jquery.com/files/jquery.color.js.txt">специальный плагин</a>.

<a href="http://dreamhelg.ru/wp-content/uploads/2010/02/magicline.zip">Скачать архив с примером</a>.

Перевод статьи “<a href="http://css-tricks.com/jquery-magicline-navigation/">jQuery MagicLine Navigation</a>”, автор <strong>Chris Coyier</strong>

<strong>Примечение:</strong>
После небольшой доработки, скрипт нормально работает в опере и IE7-8, насчет IE6 не знаю, не тестировала.]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2010/02/create-magic-line-navigation-with-jquery/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Решение для очень длинных выпадающих меню</title>
		<link>http://dreamhelg.ru/2009/10/long-dropdowns-solutions/</link>
		<comments>http://dreamhelg.ru/2009/10/long-dropdowns-solutions/#comments</comments>
		<pubDate>Thu, 29 Oct 2009 05:05:30 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[общая]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[меню]]></category>
		<category><![CDATA[навигация]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=1670</guid>
		<description><![CDATA[<p><img width="200" height="169" src="http://dreamhelg.ru/wp-content/uploads/2009/10/home1.jpg" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>Мне нравится давать статьям точные заголовки, но в данном случае, правильно было бы сказать *<strong>возможное</strong>* решение для очень длинного, выпадающего меню. Проблема с такими меню состоит в том, что выпадающий список может выйти за пределы самой веб-страницы, то есть ниже видимой области окна браузера. Так, что для доступа к нижним пунктам меню, вам понадобится прокручивать страницу до нужного пункта.<span id="more-1670"></span>

Для пользователей, имеющих специальное колесо прокрутки у мыши, это не большая проблема. Для тех же, у кого нет такой полезной функциональности, длинное выпадающее меню станет совершенно неработоспособным, потому что для прокрутки окна, им придется использовать полосу прокрутки браузера, для чего придется отвести мышь от меню, в связи с чем, меню, конечно же, закроется.

Но есть очень простое решение для этого. Прежде чем мы начнем, взгляните на <a href="http://css-tricks.com/examples/LongDropdowns/">результат</a>.

Впервые, я увидел эту идею на странице аккаунта, на сайте Media Temple. У них есть выпадающее меню для «Доменов», в котором перечислены все ваши домены, находящиеся у них на хостинге. Это может быть очень длинный список. Но, Media Temple применили специальную технику – при прокручивании окна, меню также прокручивается в ускоренном режиме.

<img class="aligncenter size-full wp-image-1671" title="mt-below-fold" src="http://dreamhelg.ru/wp-content/uploads/2009/10/mt-below-fold.jpg" alt="mt-below-fold" width="570" height="322" />

И конечно, поскольку я делал скриншот, то обратил внимание, что замечательное решение, которое они так расхваливали, оказалось не таким уж хорошим. Это заставило меня задуматься, какие именно проблемы у них возникают с этим меню, так что давайте смотреть вместе. Далее представлена визуализация идеи:

<img class="aligncenter size-full wp-image-1672" title="visual-long-dropdowns" src="http://dreamhelg.ru/wp-content/uploads/2009/10/visual-long-dropdowns.jpg" alt="visual-long-dropdowns" width="570" height="355" />
<h3>JQuery делает это мгновенно</h3>
Я выложу весь код здесь, просто для справки. Код сопровождают комментарии, так что понять его будет легко. Он насчитывает 60 строк, но не пугайтесь, что это слишком много, весь код очень простой.
<ol>
	<li>Устанавливаем максимальную высоту выпадающего меню</li>
	<li>При наведении открываем дочернее меню</li>
	<li>Рассчитываем коэффициент скорости, основанный на высоте дочернего меню</li>
	<li>Отслеживаем движение мыши в меню</li>
	<li>Прокручиваем меню вместе с движением мыши, основываясь на коэффициенте</li>
	<li>При покидании мыши, закрываем меню</li>
</ol>

[javascript]
var maxHeight = 400;

$(function(){

    $(&quot;.dropdown &gt; li&quot;).hover(function() {

         var $container = $(this),
             $list = $container.find(&quot;ul&quot;),
             $anchor = $container.find(&quot;a&quot;),
             height = $list.height() * 1.1,     // проверяем, достаточно ли свободного места внизу
             multiplier = height / maxHeight; // необходим для более быстрого движения, если список длиннее

        // сохраняем высоту здесь, так что она восстанавливается при покидании мыши       
$container.data(&quot;origHeight&quot;, $container.height());

        // сохраняем цвет наведения, пока открыто выпадающее меню
        $anchor.addClass(&quot;hover&quot;);

        // проверяем, появился ли список непорседственно под родительским списком
        $list
            .show()
            .css({
                paddingTop: $container.data(&quot;origHeight&quot;)
            });

        // Не применяем анимацию, если список короче максимального
        if (multiplier &gt; 1) {
            $container
                .css({
                    height: maxHeight,
                    overflow: &quot;hidden&quot;
                })
                .mousemove(function(e) {
                    var offset = $container.offset();
                    var relativeY = ((e.pageY - offset.top) * multiplier) - ($container.data(&quot;origHeight&quot;) * multiplier);
                    if (relativeY &gt; $container.data(&quot;origHeight&quot;)) {
                        $list.css(&quot;top&quot;, -relativeY + $container.data(&quot;origHeight&quot;));
                    };
                });
        }

    }, function() {

        var $el = $(this);

        // возвращаем все как было
        $el
            .height($(this).data(&quot;origHeight&quot;))
            .find(&quot;ul&quot;)
            .css({ top: 0 })
            .hide()
            .end()
            .find(&quot;a&quot;)
            .removeClass(&quot;hover&quot;);

    });

    // Добавляем нижнюю стрелку только для тех пунктов, у которых есть дочернее меню
    $(&quot;.dropdown &gt; li:has('ul')&quot;).each(function() {
        $(this).find(&quot;a:first&quot;).append(&quot;&lt;img src='images/down-arrow.png' /&gt;&quot;);
    });

});
[/javascript]

<h3>HTML и CSS</h3>
Я не стал выкладывать здесь HTML и CSS, поскольку они очень простые и не интересные. Вы, в любом случае, можете скачать архив с примером, и посмотреть. Это самый обыкновенный, вложенный, маркированный список, и немного очень простых стилей.
<h3>Тестирование</h3>
Пример тестировался во всех браузерах, вплоть до IE6, меню отлично выглядит и работает везде.

<a href="http://css-tricks.com/examples/LongDropdowns.zip">Скачать архив с примером</a>.

Перевод статьи "<a href="http://css-tricks.com/long-dropdowns-solution/">Solution For Very Long Dropdown Menus</a>", автор <strong>Chris Coyier</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2009/10/long-dropdowns-solutions/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Создаем эластичное меню из миниатюр</title>
		<link>http://dreamhelg.ru/2009/09/make-elastic-thumbnail-menu/</link>
		<comments>http://dreamhelg.ru/2009/09/make-elastic-thumbnail-menu/#comments</comments>
		<pubDate>Tue, 29 Sep 2009 10:49:02 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[меню]]></category>
		<category><![CDATA[навигация]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=1460</guid>
		<description><![CDATA[<p><img width="200" height="135" src="http://dreamhelg.ru/wp-content/uploads/2009/09/home2.jpg" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>Еще один интересный пример навигации - из миниатюр. У него есть как минимум два преимущества - работает просто и выглядит эффектно. Сделать такую навигацию под силу любому пользователю, поэтому сегодняшняя статья, скорее похожа на заметку, чем на полноценную инструкцию.

Итак, как обычно взгляните на конечный <a href="http://buildinternet.com/live/elasticthumbs/">результат</a>, и если понравилось, читатайте далее.

<span id="more-1460"></span>
<h3>HTML</h3>
HTML очень простой. Каждый пункт меню представляет собой ссылку, внутри которой расположено изображение:

[html]
&lt;div id=&quot;menuwrapper&quot;&gt;
&lt;div id=&quot;menu&quot;&gt;
  &lt;a class=&quot;menuitem&quot; href=&quot;#&quot;&gt;
      &lt;img src=&quot;image.jpg&quot; alt=&quot;&quot; /&gt;
   &lt;/a&gt;&lt;!--Шаблон для каждого пункта меню--&gt;
&lt;/div&gt;
&lt;/div&gt;
[/html]
<h3>CSS</h3>
Обычно, при ресайзе контейнера <code>&lt;div&gt;</code>, его высота увеличивается, причем он растет вниз. Однако, в нашем меню, нам нужно получить прямо противопложный результат - когда пользователь подводит мышью к миниатюре, она должна "вырасти", направляясь вверх (совсем как док в OSX).  Для получения такого эффекта, мы будем использовать свойство <code>position: fixed,</code> которое поможет нам "зафиксировать" пункты меню по нижнему краю. Итак, вот какой будет CSS:

[css]
/* Контейнер, для нашего меню */
#menuwrapper{ position:relative; height:210px; }

/* Устанавливаем меню по нижнему краю родительского div-a */
#menu{position:absolute; bottom:0;}

/* Каждый пункт меню фиксируем по нижнему краю, и назначаем display:inline-block для создания эластичности */
.menuitem{ position:fixed relative; bottom:0px; display:inline-block; }
[/css]
<h3>JQuery</h3>
jQuery в этом примере выполняет две функции:
<ul>
	<li>уменьшает картинки при загрузке страницы</li>
	<li>добавляет анимацию "растущей" картинке, при наведении мыши</li>
</ul>
Далее показан пример кода, который сможет все это реализовать:

[javascript]
$(document).ready(function(){
$('.menuitem img').animate({width: 100}, 0); //Уменьшаем все элементы меню

$('.menuitem').mouseover(function(){ //Когда мышь подводят к меню
gridimage = $(this).find('img'); //Назначаем цель в качестве переменной
gridimage.stop().animate({width: 200}, 150); //Анимация растягивания картинки до оригинального размера
})

.mouseout(function(){ //Когда мышь отводят от пункта меню
gridimage.stop().animate({width: 100}, 150); //Анимация возврата картинки к маленькому размеру
});
});

[/javascript]
<h3>Internet Explorer</h3>
И все бы хорошо, но IE как всегда порадовал неприятным сюрпризом, для того чтобы ваше меню красиво ресайзилось в Internet Explorer, вам нужно добавить одну строчку кода в CSS:

[css] img { -ms-interpolation-mode: bicubic; } [/css]

Вот и все, после этого, ваше меню готово к использованию.

<a href="http://buildinternet.com/live/elasticthumbs/elasticthumbs.zip">Архив с приведенным примером.</a>

Оригинал статьи "<a href="http://buildinternet.com/2009/09/sproing-make-an-elastic-thumbnail-menu/">Sproing! – Make An Elastic Thumbnail Menu</a>", автор <strong>Sam Dunn</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2009/09/make-elastic-thumbnail-menu/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>«Скользящая дверь» c одним изображением</title>
		<link>http://dreamhelg.ru/2009/09/sliding-door-with-one-image/</link>
		<comments>http://dreamhelg.ru/2009/09/sliding-door-with-one-image/#comments</comments>
		<pubDate>Fri, 11 Sep 2009 15:56:17 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[hover]]></category>
		<category><![CDATA[навигация]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=1255</guid>
		<description><![CDATA[Сегодня, я собираюсь поделиться одной замечательной CSS-техникой, о которой узнала совсем недавно. Она довольно простая, как все гениальное, и немного похожа на технику верстки блоков с закругленными краями. Вообще, термин [...]]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2009/09/sliding-door-with-one-image/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>WordPress и хлебные крошки</title>
		<link>http://dreamhelg.ru/2009/01/breadcrumb/</link>
		<comments>http://dreamhelg.ru/2009/01/breadcrumb/#comments</comments>
		<pubDate>Wed, 14 Jan 2009 13:54:15 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[навигация]]></category>
		<category><![CDATA[тема]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=129</guid>
		<description><![CDATA[На многих сайтах, особенно имеющих сложную многоуровневую структуру можно встретить навигацию под названием хлебные крошки (breadcrumb). Она представляет собой цепочку ссылок от главной страницы до той, на который вы находитесь в [...]]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2009/01/breadcrumb/feed/</wfw:commentRss>
		<slash:comments>13</slash:comments>
		</item>
	</channel>
</rss>

