<?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/menu/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/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>Выпадающее меню в WordPress</title>
		<link>http://dreamhelg.ru/2009/06/drop-down-menu-in-wordpress/</link>
		<comments>http://dreamhelg.ru/2009/06/drop-down-menu-in-wordpress/#comments</comments>
		<pubDate>Sun, 14 Jun 2009 19:19:08 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[меню]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=514</guid>
		<description><![CDATA[Выпадающее меню в представлении не нуждается, все давно уже поняли его преимущества. Удобный способ навигации, отражающий иерархию страниц сайта. И сегодня мы поговорим о том как создать такое меню в [...]]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2009/06/drop-down-menu-in-wordpress/feed/</wfw:commentRss>
		<slash:comments>112</slash:comments>
		</item>
	</channel>
</rss>

