<?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>jQuery и другое... &#187; меню</title>
	<atom:link href="http://www.linkexchanger.su/tag/menyu/feed" rel="self" type="application/rss+xml" />
	<link>http://www.linkexchanger.su</link>
	<description>css, html, php, javascript, jQuery, ajax ... - решения, примеры, рецепты</description>
	<lastBuildDate>Tue, 25 May 2010 08:13:42 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Как использовать виджет Accordion в качестве меню?</title>
		<link>http://www.linkexchanger.su/2009/104.html</link>
		<comments>http://www.linkexchanger.su/2009/104.html#comments</comments>
		<pubDate>Tue, 18 Aug 2009 07:27:35 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery UI]]></category>
		<category><![CDATA[accordion]]></category>
		<category><![CDATA[jQuery]]></category>
		<category><![CDATA[UI]]></category>
		<category><![CDATA[аккордеон]]></category>
		<category><![CDATA[меню]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2009/104.html</guid>
		<description><![CDATA[Что такое Accordion наверное все знают, но если кто не знает, тому лучше сначала прочитать статью jQuery UI &#8211; виджет Accordion, в ней довольно подробно все рассказано. А сегодняшняя статья написана благодаря довольно многочисленным вопросам и моему обещанию рассказать, как, используя accordion, сделать на его основе меню для сайта. Естественно, что при переходе по ссылке [...]]]></description>
			<content:encoded><![CDATA[<p>Что такое Accordion наверное все знают, но если кто не знает, тому лучше сначала прочитать статью <a href="http://www.linkexchanger.su/2009/93.html">jQuery UI &#8211; виджет Accordion</a>, в ней довольно подробно все рассказано. А сегодняшняя статья написана благодаря довольно многочисленным вопросам и моему обещанию рассказать, как, используя accordion, сделать на его основе меню для сайта. Естественно, что при переходе по ссылке открытая секция аккордеона должна оставаться открытой и активный пункт меню должен быть как-то выделен&#8230;.<span id="more-104"></span></p>
<p>Сразу приведу <a href="http://www.linkexchanger.su/examples_2009/accordionMenu/ac_menu.html" target="_blank">пример</a> и выложу <a href="http://www.linkexchanger.su/examples_2009/accordionMenu/accordionMenu.zip">архив демо</a>, а то меня, не без оснований конечно, обвиняли в отсутствии демо в статьях про jQuery UI. Поскольку ничего особенно сложного в этом решении нет, то я буду краток &#8211; только код, пример и минимум необходимых пояснений.</p>
<p>Итак, сначала мы делаем все в точности так же, как написано в статье <a href="http://www.linkexchanger.su/2009/93.html">jQuery UI &#8211; виджет Accordion</a>. Т.е. подключаем необходимые файлы к HTML-странице. Здесь же внесем первое дополнение. Для того, чтобы иметь возможность запоминать состояние секций аккордеона, нам потребуется подключить еще один небольшой, но весьма полезный плагин &#8211; jQuery Cookie.</p>
<pre class="brush: xml;">&lt;script src=&quot;js/jquery.cookie.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Поиметь свежую версию этого плагина можно на <a href="http://plugins.jquery.com/project/Cookie">http://plugins.jquery.com/project/Cookie</a>.</p>
<p>Теперь приведу пример HTML-разметки меню-аккордеона.</p>
<pre class="brush: xml;">
&lt;div id=&quot;accordion&quot;&gt;
  &lt;h3&gt;&lt;a href=&quot;#&quot;&gt;Секция 1&lt;/a&gt;&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;?1-1&quot;&gt;Пункт меню 1-1&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;?1-2&quot;&gt;Пункт меню 1-2&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;?1-3&quot;&gt;Пункт меню 1-3&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3&gt;&lt;a href=&quot;#&quot;&gt;Секция 2&lt;/a&gt;&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;?2-1&quot;&gt;Пункт меню 2-1&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;?2-2&quot;&gt;Пункт меню 2-2&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;?2-3&quot;&gt;Пункт меню 2-3&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3&gt;&lt;a href=&quot;#&quot;&gt;Секция 3&lt;/a&gt;&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;?3-1&quot;&gt;Пункт меню 3-1&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;?3-2&quot;&gt;Пункт меню 3-2&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;?3-3&quot;&gt;Пункт меню 3-3&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
  &lt;h3&gt;&lt;a href=&quot;#&quot;&gt;Секция 4&lt;/a&gt;&lt;/h3&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a href=&quot;?4-1&quot;&gt;Пункт меню 4-1&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;?4-2&quot;&gt;Пункт меню 4-2&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a href=&quot;?4-3&quot;&gt;Пункт меню 4-3&lt;/a&gt;&lt;/li&gt;
  &lt;/ul&gt;
&lt;/div&gt;</pre>
<p>Ничего загадочного тут и вовсе нет. Что еще? Добавим немного стилей, чтобы выделять активный пункт меню. Например так:</p>
<pre class="brush: css;">a.open { color: #f00;}</pre>
<p>т.е. в примере просто выделяем текст ссылки в меню красным цветом.</p>
<p>А теперь самое интересное &#8211; javascript-код:</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(function(){
  $(&quot;#accordion&quot;).accordion({
    navigation: true
  });
  $(&quot;#accordion li a&quot;).click(function(){
    $.cookie(&quot;openItem&quot;, $(this).attr(&quot;href&quot;));
  });
  $(&quot;#accordion li a[href$=`&quot; + $.cookie(&quot;openItem&quot;) +
  &quot;`]&quot;).addClass(&quot;open&quot;);
});
&lt;/script&gt;</pre>
<p>И здесь ничего сложного! Отыскали нужный элемент по идентификатору <strong>#accordion</strong>, применили к нему возможности плагина. Из опций передали только одну, но в нашем случае необходимую опцию <strong>navigation</strong>, которой присвоили значение <strong>true</strong>. Это обеспечит нам открытие нужной секции аккордеона при переходе по ссылке.</p>
<p>На следующем шаге необходимо обрабатывать щелчок мышкой по пункту меню, чтобы поставить соответствующую куку. Что мы и делаем &#8211; находим все элементы a внутри li, внутри нашего аккордеона, связываем с ними событие click, по которому будет вызвана функция-обработчик.</p>
<p>Тут нам пригодятся возможности плагина jQuery Cookie. Мы устанавливаем куку с именем <strong>openItem</strong>, и значением, которое получаем из атрибута href той ссылки, по которой был совершен клик.</p>
<p>И последний шаг &#8211; при загрузке страницы мы должны прочитать куку (если она конечно есть) и в соответствии с ее значением &laquo;подсветить&raquo; нужный пункт меню. Делаем это &#8211; ищем нужный пункт меню выбирая элемент a внутри li аккордеона. Но не просто, а значение атрибута href которого соответствует значению, сохраненному в куке.</p>
<blockquote><p>Знак $ используем потому, что некоторые браузеры возвращают значения атрибута href по разному. Некоторые отдают абсолютный путь, некоторые &#8211; относительный. Чтобы исключить эту неоднозначность мы ищем такое значение атрибута href, которое заканчивается одинаково со значением, сохраненным в куке.</p></blockquote>
<p>Если такая ссылка будет найдена, то с помощью метода <strong>addClass</strong> мы добавим ей класс <strong>open</strong>, что заставит ее &laquo;покраснеть&raquo;.</p>
<p>Собственно это все, больше тут рассказывать не о чем&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2009/104.html/feed</wfw:commentRss>
		<slash:comments>63</slash:comments>
		</item>
		<item>
		<title>jQuery Treeview &#8211; древовидное меню</title>
		<link>http://www.linkexchanger.su/2008/49.html</link>
		<comments>http://www.linkexchanger.su/2008/49.html#comments</comments>
		<pubDate>Mon, 14 Apr 2008 19:16:17 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[tree]]></category>
		<category><![CDATA[меню]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/49.html</guid>
		<description><![CDATA[Хорошее древовидное меню пригодится в любом хозяйстве и поэтому сегодня я предлагаю познакомиться с прекрасным плагином для библиотеки jQuery &#8211; jQuery Treeview, который позволяет превратить ненумерованный список в древовидное меню.
Для начала, как всегда продемонстрирую пример работы&#8230;
Вы можете скачать исходный код примера и воспроизвести этот пример на своем сайте.
* &#8211; в архиве не содержатся js-файлы, их [...]]]></description>
			<content:encoded><![CDATA[<p>Хорошее древовидное меню пригодится в любом хозяйстве и поэтому сегодня я предлагаю познакомиться с прекрасным плагином для библиотеки jQuery &#8211; <strong>jQuery Treeview</strong>, который позволяет превратить ненумерованный список в древовидное меню.<span id="more-49"></span><br />
Для начала, как всегда продемонстрирую пример работы&#8230;</p>
<blockquote><p>Вы можете скачать <a href="http://www.linkexchanger.su/example_jquery/treeview.zip">исходный код</a> примера и воспроизвести этот пример на своем сайте.<br />
* &#8211; в архиве не содержатся js-файлы, их можно скачать отдельно в разделе <strong>Download</strong>.</p></blockquote>
<p>Нам потребуется подключить в раздел <strong>HEAD</strong> страницы несколько файлов: само собой разумеется библиотеку jQuery <strong>jquery-1.2.3.js</strong>, файл плагина <strong>jquery.treeview.js</strong> и если подразумевается работа с  cookies &#8211; файл <strong>jquery.cookie.js</strong></p>
<pre class="brush: xml;">&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.2.3.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.cookie.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery.treeview.js&quot;&gt;&lt;/script&gt;</pre>
<p>Для того, чтобы сделать из ненумерованного списка древовидное меню в самом простом случае, с настройками по умолчанию, достаточно будет написать только это:</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){
  $(&quot;#selector&quot;).treeview();
});
&lt;/script&gt;</pre>
<p>где <strong>#selector</strong> &#8211; это идентификатор ненумерованного списка, ну а <strong>$(document).ready(function(){});</strong> упоминается в каждой статье про jQuery &#8211; отслеживается момент готовности объектной модели документа (<strong>DOM</strong>).</p>
<p>В прилагаемых таблицах стилей содержатся несколько вариантов оформления, в архив включены и соответствующие изображения. Все это можно менять на свой вкус и цвет, сохраняя названия классов.</p>
<p>HTML-rод тоже не содержит ничего необычного. Пожалуй обращу Ваше внимание на такие моменты:<br />
- если элементу <strong>li</strong> ненумерованного списка присвоить класс с именем <strong>closed</strong>, то при первоначальной загрузке этот элемент будет скрыт.<br />
- элементы <strong>span</strong> с именем класса <strong>folder</strong>, находящиеся внутри <strong>li</strong> это папка, внутри которой могут находиться другие папки или пункты меню.<br />
- элементы <strong>span</strong> с именем класса <strong>file</strong>, находящиеся внутри <strong>li</strong> это пункты меню.</p>
<p>Выше мы уже рассмотрели как сделать древовидное меню с настройками по умолчанию, но возможно использование и некоторых опций, которые позволят более гибко использовать этот плагин. Посмотрим на примере кода:</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){
  $(&quot;#navigation&quot;).treeview({
    persist: &quot;location&quot;,
    collapsed: true,
    unique: true
  });
});
&lt;/script&gt;</pre>
<p>Приведу пояснения к этим, и некоторым другим опциям:<br />
<strong>animated</strong> &#8211; принимает строку (slow, normal, fast) или число (миллисекунды), определяющие скорость анимационного<br />
эффекта. Если опция неопределена &#8211; эффект отсутствует.</p>
<pre class="brush: jscript;">$(&quot;.selector&quot;).treeview({
   animated: &quot;fast&quot;
});</pre>
<p><strong>collapsed</strong> &#8211; по умолчанию false. Позволяет скрывать все ветви дерева при загрузке страницы, если установлена в true.</p>
<pre class="brush: jscript;">$(&quot;.selector&quot;).treeview({
   collapsed: true
});</pre>
<p><strong>unique</strong> &#8211; по умолчанию false. Если установить в true &#8211; устанавливает разрешение на открытие одновременно только одной ветки дерева на соответствующем уровне. Т.е. при открытии одной ветки &#8211; скрывает &laquo;сестринские&raquo; ветки уровня. При начальной загрузке все ветки скрыты.</p>
<pre class="brush: jscript;">$(&quot;.selector&quot;).treeview({
   unique: true
});</pre>
<p><strong>toggle</strong> &#8211; функция, которая будет вызвана в момент переключения веток. Аргумент this ссылается на переключаемый UL элемент (точнее на набор элементов LI, принадлежащих этому UL).</p>
<pre class="brush: jscript;">$(&quot;.selector&quot;).treeview({
   toggle: function() {
   	console.log(this + &quot; переключено!&quot;);
   }
});</pre>
<p><strong>control</strong> &#8211; определяет элемент который будет служить управляющим элементов древовидного меню, чтобы позволить пользователю разворачивать, сворачивать или переключать все меню одним кликом.</p>
<pre class="brush: jscript;">$(&quot;.selector&quot;).treeview({
   control: &quot;#container&quot;
});</pre>
<p>в примере им служит элемент с идентификатором container.<br />
<strong>persist</strong> &#8211; принимает строку. Варианты: &laquo;location&raquo; или &laquo;cookie&raquo;. Если установлено в &laquo;location&raquo; &#8211; выбирает активный элемент древовидного меню в location.href.</p>
<pre class="brush: jscript;">$(&quot;.selector&quot;).treeview({
   persist: &quot;location&quot;
});</pre>
<p>Если установлено в &laquo;cookie&raquo; &#8211; сохраняет и восстанавливает состояние выбранного элемента древовидного меню в cookie с именем treeview.</p>
<pre class="brush: jscript;">$(&quot;.selector&quot;).treeview({
   persist: &quot;cookie&quot;
});</pre>
<p><strong>cookieId</strong> &#8211; по умолчанию &laquo;treeview&raquo;. Определяет имя cookie, используемое в опции persist.</p>
<pre class="brush: jscript;">$(&quot;.selector&quot;).treeview({
   persist: &quot;cookie&quot;,
   cookieId: &quot;navigationtree&quot;
});</pre>
<p>Я рассказал далеко не все и привел не все примеры. Для того, кто хочет узнать про этот плагин побольше приведу ссылки. Материалы естественно на английском языке.<br />
<a href="http://jquery.bassistance.de/treeview/demo/">http://jquery.bassistance.de/treeview/demo/</a> &#8211; демонстрационная страница плагина.<br />
<a href="http://docs.jquery.com/Plugins/Treeview">http://docs.jquery.com/Plugins/Treeview</a> &#8211; страница плагина на сайте jQuery.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/49.html/feed</wfw:commentRss>
		<slash:comments>35</slash:comments>
		</item>
		<item>
		<title>CSS: создание горизонтального текстового меню на основе списка.</title>
		<link>http://www.linkexchanger.su/2008/28.html</link>
		<comments>http://www.linkexchanger.su/2008/28.html#comments</comments>
		<pubDate>Mon, 04 Feb 2008 21:11:43 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[li]]></category>
		<category><![CDATA[ul]]></category>
		<category><![CDATA[меню]]></category>
		<category><![CDATA[список]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/28.html</guid>
		<description><![CDATA[Мы уже пробовали создавать вертикальное текстовое меню на основе списка. Попробуем теперь использовать список для создания горизонтального текстового меню.
Как всегда первый шаг &#8211; это создание HTML-разметки.

&#60;ul&#62;
  &#60;li&#62;&#60;a href=&#34;/&#34;&#62;Главная&#60;/a&#62;&#60;/li&#62;
  &#60;li&#62;&#60;a href=&#34;products.html&#34; id=&#34;current&#34;&#62;Продукция&#60;/a&#62;&#60;/li&#62;
  &#60;li&#62;&#60;a href=&#34;gallery.html&#34;&#62;Фото&#60;/a&#62;&#60;/li&#62;
  &#60;li&#62;&#60;a href=&#34;responses.html&#34;&#62;Отзывы&#60;/a&#62;&#60;/li&#62;
  &#60;li&#62;&#60;a href=&#34;feedback.html&#34;&#62;Контакты&#60;/a&#62;&#60;/li&#62;
&#60;/ul&#62;

Здесь необходимо обратить внимание на пункт, где встречается id=&#187;current&#187;. В реально работающем меню необходимо [...]]]></description>
			<content:encoded><![CDATA[<p>Мы уже пробовали создавать вертикальное текстовое меню на основе списка. Попробуем теперь использовать список для создания горизонтального текстового меню.<span id="more-28"></span></p>
<p>Как всегда первый шаг &#8211; это создание HTML-разметки.</p>
<pre class="brush: xml;">
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/&quot;&gt;Главная&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;products.html&quot; id=&quot;current&quot;&gt;Продукция&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;gallery.html&quot;&gt;Фото&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;responses.html&quot;&gt;Отзывы&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;feedback.html&quot;&gt;Контакты&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</pre>
<blockquote><p>Здесь необходимо обратить внимание на пункт, где встречается <strong>id=&raquo;current&raquo;</strong>. В реально работающем меню необходимо определять текущую страницу при ее загрузке и присваивать этот <strong>id</strong> соответствующему пункту.</p></blockquote>
<p>А теперь приведу таблицу стилей для организации этого списка в горизонтальное меню.</p>
<pre class="brush: css;">ul {
  padding:3px 0;
  margin-left:0;
  border-bottom:1px solid #003;
  font:bold 8pt Verdana, sans-serif;
}
ul li {
  list-style:none;
  margin:0;
  display:inline;
}
ul li a {
  padding:3px 0.5em;
  margin-left:3px;
  border:1px solid #003;
  border-bottom:none;
  background-color:#FFA6BD;
  text-decoration:none;
  color:#AD2039;
}
ul li a:hover {
  background-color:#AD2039;
  color:#FFA6BD;
}
ul li a#current {
  background-color:#fff;
  border-bottom:1px solid #fff;
}</pre>
<p>Ничего особенно хитрого тут нет. Сначала зададим отступы и левое поле для элемента <strong>ul</strong>, там же определяем нижнюю рамку для всего элемента и шрифт, а вот затем начинается более интересное правило. Для <strong>ul li</strong> мы скрываем стандартные маркеры, полям задаем значение 0 и наконец <strong>display:inline;</strong> &#8211; вот что заставляет наш список &laquo;вытянуться&raquo; в строку.</p>
<p>Дальше описываем элемент <strong>a</strong>, задавая ему отступы, поля, рамки, определяя цвет фона и шрифта. Обращу внимание разве что на определения свойства <strong>border</strong>. Сначала заданы значения свойства <strong>border</strong> для всех четырех сторон, а в следующей строке мы пишем <strong>border-bottom:none;</strong>, т.е. отменили рамку снизу. Такой вариант написания вполне имеет право на существование.</p>
<p>Далее определяем стили элемента <strong>а</strong> при наведении на него указателя мыши &#8211; тут мы изменим только цвет фона и цвет текста.</p>
<p>И самое последнее &#8211; стили для элемента имеющего <strong>id=&raquo;current&raquo;</strong>. Цвет фона задаем совпадающим с цветом основного фона страницы, как впрочем и цвет нижней рамки.</p>
<p>Вот, что у нас получилось в итоге.<br />
<iframe src="http://www.linkexchanger.su/example_css/ul-menu-horizontal.html" style="border: medium none " height="70" width="420"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/28.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>CSS: создание текстового меню с визуальными эффектами на основе списка.</title>
		<link>http://www.linkexchanger.su/2008/27.html</link>
		<comments>http://www.linkexchanger.su/2008/27.html#comments</comments>
		<pubDate>Sun, 03 Feb 2008 21:12:05 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[css]]></category>
		<category><![CDATA[li]]></category>
		<category><![CDATA[ul]]></category>
		<category><![CDATA[меню]]></category>
		<category><![CDATA[список]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/27.html</guid>
		<description><![CDATA[Попробуем создать навигационное меню для сайта, но при его создании будем учитывать некоторые ограничения. Например, что это меню не должно использовать JavaScript, но в то же время иметь визуальные эффекты. Это меню должно оставаться работоспособным даже в случае, если в браузере пользователя отключено отображение стилей.
Итак, приступим. Меню будет представлять собой список, так как и теоретически [...]]]></description>
			<content:encoded><![CDATA[<p>Попробуем создать навигационное меню для сайта, но при его создании будем учитывать некоторые ограничения. Например, что это меню не должно использовать JavaScript, но в то же время иметь визуальные эффекты. Это меню должно оставаться работоспособным даже в случае, если в браузере пользователя отключено отображение стилей.<span id="more-27"></span></p>
<p>Итак, приступим. Меню будет представлять собой список, так как и теоретически и практически это наилучший способ структурирования меню.  Прежде всего создадим HTML-разметку.</p>
<pre class="brush: xml;">
&lt;ul&gt;
  &lt;li&gt;&lt;a href=&quot;/&quot;&gt;Главная&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;about.html&quot;&gt;О компании&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;products.html&quot;&gt;Каталог продукции&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;gallery.html&quot;&gt;Фото объектов&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;responses.html&quot;&gt;Отзывы клиентов&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;scheme.html&quot;&gt;Схема проезда&lt;/a&gt;&lt;/li&gt;
  &lt;li&gt;&lt;a href=&quot;feedback.html&quot;&gt;Форма для связи&lt;/a&gt;&lt;/li&gt;
&lt;/ul&gt;
</pre>
<p>Далее приведу файл стилей, который будет подробно прокомментирован.</p>
<pre class="brush: css;">ul {
  list-style:none;
  margin:0;
  padding:0;
  font-family:Arial, Helvetica, sans-serif;
  font-size:0.9em;
  font-weight:bold;
  width:20em;
  border-bottom:1px solid #003;
  border-right:1px solid #003;
  border-left:1px solid #003;
}
ul li {
  border-top:1px solid #003;
}
ul li a {
  display:block;
  padding:2px 2px 2px 0.5em;
  border-left:15px solid #AD2039;
  background-color:#FFA6BD;
  color:#AD2039;
  text-decoration:none;
  width:100%;
}
html &gt; body ul li a {
  width:auto;
}
ul li a:hover {
  border-left:15px solid #FFA6BD;
  background-color:#AD2039;
  color:#FFA6BD;
}</pre>
<p>Рассмотрим подробнее стилевое оформление элемента <strong>ul</strong>. Сначал скроем стандартные маркеры списка, затем установим значения свойств <strong>margin</strong> и <strong>padding</strong> (почему мы устанавливаем именно оба свойства можно прочитать в статье &laquo;CSS: задание отступов и изменение стилей маркера в списках.&raquo;). Свойства <strong>font</strong> установят нужные шрифты и размер. Свойство <strong>width</strong> ясное дело будет отвечать за ширину списка. Следующие три строки устанавливают рамку шириной в 1px справа, снизу и слева для элемента <strong>ul</strong>.</p>
<p>Почему не сверху? Потому, что неплохо иметь такую же тонкую рамку, которая будет отделять каждый элемент списка. Это мы проделаем, написав правило <strong>border-top:1px solid #003;</strong> для <strong>ul li</strong> (для всех элементов li, являющихся дочерними по отношению к элементу ul).</p>
<p>В следующем правиле <strong>ul li a</strong> мы зададим стили ссылок. Поскольку элемент <strong>a</strong> по умолчанию &#8211; это строчный элемент, нам необходимо изменить его отображение, чтобы элементы <strong>a</strong> отображались как блочные. Это необходимо для того, чтобы можно было использовать меню щелкая мышью на всем выбираемом элементе, а не только на тексте ссылки. Делаем это, задавая свойству <strong>display</strong> значение <strong>block</strong>.</p>
<p>Определяем отступы со всех сторон в свойстве <strong>padding</strong>, задаем рамку слева толщиной в 15px в свойстве <strong>border-left</strong>, определяем свойства <strong>background-color</strong> (цвет фона) и <strong>color</strong> (цвет текста), а также удаляем подчеркивание ссылок, воспользовавшись свойством <strong>text-decoration</strong>.</p>
<p>Последняя строчка задает теперь уже блочному элементу ширину <strong>width</strong> в 100%. Это сделано специально для IE, но может создать проблемы в Netscape Navigator и IE для Mac и поэтому следующее правило <strong>html&gt;body ul li a</strong> написано специально для решения этой проблемы. IE не сможет его прочесть, поскольку не умеет обрабатывать правила для селектора потомка.</p>
<p>И наконец последнее правило будет задавать стили использующиеся при наведении указателя мыши на ссылку. Здесь мы просто задаем другие цвета в свойствах <strong>border-left</strong>, <strong>background-color</strong> и <strong>color</strong>.</p>
<p>Вот как это будет выглядеть. По моему неплохо. Такое меню будет вполне работоспособно и при отключенной поддержке стилевого оформления.<br />
<iframe src="http://www.linkexchanger.su/example_css/ul-menu-vertical.html" style="border: medium none " height="200" width="420"></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/27.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>Пользовательские интерфейсы jQuery: tabs &#8211; содержимое во вкладках.</title>
		<link>http://www.linkexchanger.su/2008/24.html</link>
		<comments>http://www.linkexchanger.su/2008/24.html#comments</comments>
		<pubDate>Tue, 29 Jan 2008 06:03:24 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[ajax]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[tabs]]></category>
		<category><![CDATA[вкладка]]></category>
		<category><![CDATA[интерфейс]]></category>
		<category><![CDATA[меню]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/24.html</guid>
		<description><![CDATA[В общем случае применение этого UI jQuery может быть и шире, но использование для построения навигационной панели &#8211; это первое, что приходит в голову. Такая панель  хоть и имеет управление на JavaScript, управляется через имена селекторов, поэтому например поисковый робот &#171;увидит&#187; чистый HTML, а пользователь &#8211; элегантное меню. Посмотрим, как это может выглядеть и [...]]]></description>
			<content:encoded><![CDATA[<p>В общем случае применение этого UI jQuery может быть и шире, но использование для построения навигационной панели &#8211; это первое, что приходит в голову. Такая панель  хоть и имеет управление на JavaScript, управляется через имена селекторов, поэтому например поисковый робот &laquo;увидит&raquo; чистый HTML, а пользователь &#8211; элегантное меню. Посмотрим, как это может выглядеть и подробно разберем, как это работает. <strong><font color="#ff0000">Внимание! Эта статья устарела!</font></strong> Новую статью можно <a href="http://www.linkexchanger.su/2009/99.html">почитать здесь</a>.<span id="more-24"></span><br />
Как обычно заглянем на сайт разработчиков. Вот, что написано там.</p>
<pre class="brush: jscript;">$(&quot;#example &gt; ul&quot;).tabs();</pre>
<p>В общем действительно просто, никаких дополнительных опций не используется. Здесь скорее придется потрудиться над стилевым оформлением навигационной панели. Но стилевое оформление &#8211; это другая тема. Давайте испытаем пример и разберемся, как все это работает.<br />
<iframe src="http://www.linkexchanger.su/example_jquery/tabs.html" style="border: medium none " width="420" height="200"></iframe></p>
<blockquote><p>Вы можете скачать <a href="http://www.linkexchanger.su/example_jquery/tabs.zip">исходный код</a> примера, и при наличии библиотеки jQuery воспроизвести это пример на своем сайте.</p></blockquote>
<p>Файлы необходимые для реализации подключаем в раздел <strong>HEAD</strong>, их всего два &#8211; это сама библиотека jQuery и файл <strong>ui.tabs.js</strong></p>
<pre class="brush: xml;">&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.2.1.js&quot;&gt;&lt;/script&gt;
&lt;script type=&quot;text/javascript&quot; src=&quot;js/ui.tabs.js&quot;&gt;&lt;/script&gt;</pre>
<p>Стилевые таблицы упомяну вскользь, целиком их можно посмотреть в файле примера. Здесь можно творить, что душе угодно, не забывая проверить созданную Вами таблицу на совместимость с различными браузерами. Правда есть одно важное замечание: файл ui.tabs.js использует имена классов стилевой таблицы, поэтому, если Вы захотите использовать другие имена, Вам понадобится исправить и файл ui.tabs.js</p>
<p>Что касается HTML-кода &#8211; он тоже довольно прост. Если посмотрите исходные коды примера, то обязательно отметите, как четко он структурирован. Отдельно идет ненумерованный список разделов, отдельно блоки с содержимым разделов. В таком коде удобно разбираться, его удобно править при необходимости.</p>
<p>А вот интересующий нас более всего код, приведу без сокращений:</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){
$(&quot;#menu &gt; ul&quot;).tabs({
	fxFade: true,
	fxSpeed: slow
});
&lt;/script&gt;</pre>
<p>Как обычно все &laquo;завернуто&raquo; в $(document).ready(function(){&#8230;}); Дальше все так же просто, как и написано у разработчиков. Просто мы добавили еще пару опций.<br />
<strong>fxFade: true</strong> &#8211; используем функцию &laquo;затухания&raquo; при переходе на другую вкладку.<br />
<strong>fxSpeed: slow</strong> &#8211; и скорость этого затухания &#8211; медленная&#8230;<br />
Это конечно далеко не все возможные опции. Наш горизонтальный список может реагировать на события <strong>click</strong> (щелчок по вкладке), <strong>hide</strong> (при скрытии вкладки), <strong>show</strong> (при открытии вкладки) выполнением пользовательских функций. Может переключаться не по клику мышкой, а по <strong>event: mouseover</strong>, можно задавать открывающуюся по умолчанию вкладку и конечно же во вкладки можно подгружать содержимое используя Ajax. Но о том, как просто работать с Ajax через jQuery я расскажу в отдельной статье.</p>
<p>Буду благодарен, если найдете возможность оставить свои отзывы&#8230;</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/24.html/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Пользовательские интерфейсы jQuery: drag-and-drop сортируемый список.</title>
		<link>http://www.linkexchanger.su/2008/23.html</link>
		<comments>http://www.linkexchanger.su/2008/23.html#comments</comments>
		<pubDate>Mon, 28 Jan 2008 10:25:02 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[drag-and-drop]]></category>
		<category><![CDATA[draggable]]></category>
		<category><![CDATA[droppable]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[li]]></category>
		<category><![CDATA[ol]]></category>
		<category><![CDATA[ul]]></category>
		<category><![CDATA[интерфейс]]></category>
		<category><![CDATA[меню]]></category>
		<category><![CDATA[список]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/23.html</guid>
		<description><![CDATA[Внимание! Эта статья устарела. Новая статья по этой теме: &#171;jQuery UI &#8211; плагин Sortable&#187;. Давайте используем возможности jQuery для создания сортируемого с помощью drag-and-drop списка. Возможность сортировать список с помощью простого перетаскивания мышкой  его пунктов, наверняка сможет произвести впечатление на Ваших пользователей. Только не забывайте одну важную вещь: применение всех этих &#171;фишек&#187; должно быть [...]]]></description>
			<content:encoded><![CDATA[<p><font color="#ff0000">Внимание! Эта статья устарела. Новая статья по этой теме: <a href="http://www.linkexchanger.su/2009/111.html">&laquo;jQuery UI &#8211; плагин Sortable&raquo;</a>.</font> Давайте используем возможности jQuery для создания сортируемого с помощью drag-and-drop списка. Возможность сортировать список с помощью простого перетаскивания мышкой  его пунктов, наверняка сможет произвести впечатление на Ваших пользователей. Только не забывайте одну важную вещь: применение всех этих &laquo;фишек&raquo; должно быть целесообразным и соответствовать ожиданиям пользователя. Не стоит применять такие эффекты сплошь и рядом  &#8211; можно  получить совсем не тот результат, на который Вы рассчитывали. Это было небольшое лирическое отступление, а теперь &#8211; к делу.<span id="more-23"></span><br />
Как обычно, первым делом рассмотрим работу пары примеров.<br />
Меню слева работает с опциями, установленными по умолчанию. Все, что нужно для создания такого меню (разумеется, кроме библиотеки jQuery и своего HTML-кода), это написать следующее:</p>
<pre class="brush: jscript;">$(&quot;#menuList&quot;).sortable();</pre>
<p>где <strong>#menuList</strong> &#8211; это идентификатор списка.<br />
В меню справа использованы некоторые дополнительно установленные опции. Код конечно немного посложнее, но и в нем нет абсолютно ничего страшного.<br />
<iframe src="http://www.linkexchanger.su/example_jquery/sortable.html" style="border: medium none " width="420" height="250"></iframe></p>
<blockquote><p>Вы можете скачать <a href="http://www.linkexchanger.su/example_jquery/sortable.zip">исходный код</a> примера, и при наличии библиотеки jQuery воспроизвести это пример на своем сайте.</p></blockquote>
<p>А теперь разберем примеры более подробно. Этот пример для своей корректной работы требует подключения достаточно большого количества различных вспомогательных файлов.</p>
<pre class="brush: xml;">
&lt;script src=&quot;js/jquery-1.2.1.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery.dimensions.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/ui.mouse.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/ui.draggable.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/ui.draggable.ext.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/ui.droppable.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/ui.droppable.ext.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/ui.sortable.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Все файлы уже знакомы по предыдущим примерам. Добавился только один файл <strong>ui.sortable.js</strong>, который (как и все остальные) мы подключаем в разделе <strong>HEAD</strong> нашей страницы.<br />
Из таблицы стилей остановлюсь только на небольшом моменте, поскольку это по большому счету дело вкуса.</p>
<pre class="brush: css;">.dragStyle {
  background:#CFD4E6;
  border:1px solid #727EA3;
}</pre>
<p>Класс <strong>dragStyle</strong> используется во втором примере и применяется в момент перемещения элемента, отображая то место, на которое перемещаемый элемент будет &laquo;сброшен&raquo;.</p>
<p>Далее полностью приведен кусок кода, который и отвечает за работу обоих списков.</p>
<pre class="brush: jscript;">&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){
  $(&quot;#menuList&quot;).sortable(); // 1-ый спискок

  $(&quot;#menuList2&quot;).sortable({ // 2-ой список
	hoverClass: &quot;dragStyle&quot;,
	start: function(ev, ui) {
	  var text = $(ui.draggable.element).text();
	  $(&quot;#result&quot;).text(&quot;Перемещаем &quot; + text);
	},
	stop: function(ev, ui) {
	  $(&quot;#result&quot;).text(&quot;Перемещение окончено!&quot;);
	}
  });
});
&lt;/script&gt;</pre>
<p>Вот так просто. За работу первого списка отвечает всего-навсего одна строка кода. Для второго списка мы используем некоторые дополнительные опции.<br />
<strong>hoverClass</strong> &#8211; опция содержит название класса, который будет применен в процессе перемещения одного из пунктов списка, чтобы указать место, куда перемещаемый пункт будет &laquo;сброшен&raquo;.<br />
<strong>start</strong> &#8211; здесь указываем функцию, которая выполнится в момент старта перемещения элемента списка. В этой функции мы обращаемся к перемещаемому элементу, получаем его содержимое в виде текста и записываем в переменную <strong>text</strong>. Затем отыскиваем элемент <strong>#result</strong> и вставляем текст туда.<br />
<strong>stop</strong> &#8211; указываем функцию, которая выполнится в момент, когда произошел &laquo;сброс&raquo; элемента на нужную позицию (независимо от того изменилась ли фактическая позиция элемента). Тут тоже все предельно просто &#8211; вставляем текст сообщения в элемент <strong>#result</strong>.</p>
<p>Я использовал для примера всего несколько опций, а их полный список опций можно найти на сайте разработчиков библиотеки.</p>
<p>Буду рад, если найдете возможность оставить свой комментарий или задать вопросы.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/23.html/feed</wfw:commentRss>
		<slash:comments>63</slash:comments>
		</item>
		<item>
		<title>Пользовательские интерфейсы jQuery: создаем аккордеон</title>
		<link>http://www.linkexchanger.su/2008/22.html</link>
		<comments>http://www.linkexchanger.su/2008/22.html#comments</comments>
		<pubDate>Fri, 25 Jan 2008 12:12:59 +0000</pubDate>
		<dc:creator>Gennady</dc:creator>
				<category><![CDATA[jQuery]]></category>
		<category><![CDATA[accordion]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[аккордеон]]></category>
		<category><![CDATA[интерфейс]]></category>
		<category><![CDATA[меню]]></category>

		<guid isPermaLink="false">http://www.linkexchanger.su/2008/22.html</guid>
		<description><![CDATA[Вы знаете, что такое аккордеон? Правильно &#8211; музыкальный инструмент. А еще аккордеоном называют раскрывающуюся / закрывающуюся панель содержащую какой-либо контент. Его удобно применять, когда содержимое должно быть показано в ограниченном пространстве. Например, есть довольно большое меню, разделенное на разделы, а места, чтобы его отобразить сразу &#8211; просто хватает. Вот тогда и придет на помощь accordion. [...]]]></description>
			<content:encoded><![CDATA[<p>Вы знаете, что такое аккордеон? Правильно &#8211; музыкальный инструмент. А еще аккордеоном называют раскрывающуюся / закрывающуюся панель содержащую какой-либо контент. Его удобно применять, когда содержимое должно быть показано в ограниченном пространстве. Например, есть довольно большое меню, разделенное на разделы, а места, чтобы его отобразить сразу &#8211; просто хватает. Вот тогда и придет на помощь <strong>accordion</strong>. <strong><font color="#ff0000">Внимание! Эта статья устарела!</font></strong> Новую статью можно <a href="http://www.linkexchanger.su/2009/93.html">почитать здесь</a>.<span id="more-22"></span></p>
<p>Посмотрите эти два примера. Пример слева срабатывает по щелчку мышью на панельке-заголовке и имеет довольно интересный эффект &laquo;прыгающего мячика&raquo;, когда панелька падает вниз. Пример справа срабатывает при наведении указателя мыши на панель-заголовок. Тут применен эффект по умолчанию &#8211; простое скольжение.</p>
<blockquote><p>Жалко только, что как всегда в браузере названИЕкоторого Вы знаете без меня, все это выглядит не так прилично как в остальных. Ну, если немного помучаться с CSS, наверняка можно привести все к единообразию).</p></blockquote>
<p><iframe src="http://www.linkexchanger.su/example_jquery/accordion.html" style="border: medium none " width="420" height="360"></iframe></p>
<blockquote><p>Вы можете сохранить <a href="http://www.linkexchanger.su/example_jquery/accordion.zip">исходный код</a> примера и при наличии у Вас библиотеки jQuery, воспроизвести его на своем сайте.</p></blockquote>
<p>Как всегда, нам потребуется подключить саму библиотеку и еще пару-тройку небольших файлов в раздел <strong>HEAD</strong>.</p>
<pre class="brush: xml;">&lt;script src=&quot;js/jquery-1.2.1.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery.dimensions.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/ui.accordion.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/jquery.easing.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;</pre>
<p>Сначала подключаем саму библиотеку, затем файл jquery.dimensions.js (он нам уже знаком &#8211; отвечает за работу с размерами элементов). Интересный нам файл ui.accordion.js &#8211; именно он обеспечивает работу аккордеона. Файл jquery.easing.js понадобится только в том случае, если Вы решите использовать анимацию, отличную от той, что установлена по умолчанию.</p>
<p>HTML и CSS-код приводить не имеет смысла, поскольку он настолько прост, что пояснений не требует. Посмотреть его Вы всегда сможете в исходном коде примера. Не забывайте только, что тот маленький скрипт, код которого я приведу ниже, обращается к элементам по их идентификаторам.</p>
<p>Итак код:</p>
<pre class="brush: jscript;">
&lt;script type=&quot;text/javascript&quot;&gt;
$(document).ready(function(){
  $(&quot;#example&quot;).accordion({
     animated: &quot;bounceslide&quot;
  });
  $(&quot;#example2&quot;).accordion({
    event: &quot;mouseover&quot;
  });
});
&lt;/script&gt;</pre>
<p>И это все! Мы написали оба аккордеона!<br />
Как всегда весь код обернут в $(document).ready(function(){ &#8230; }); Для первого аккордеона выбран элемент с <strong>id #example</strong>, для второго соответственно <strong>#example2</strong>. В опции <strong>animated</strong> первого аккордеона мы (пользуясь тем, что подключили файл jquery.easing.js) задали интересный эффект, а в опции <strong>event</strong> второго аккордеона указали на то, что срабатывать он должен по событию <strong>mouseover</strong>.</p>
<p>Собственно мы могли поступить еще проще и написать вот так:</p>
<pre class="brush: jscript;">$(&quot;#example&quot;).accordion();</pre>
<p>и такой код прекрасно работал бы, потому, что в файле ui.accordion.js задаются опции по умолчанию.<br />
По умолчанию там заданы опции <strong>animated: slide</strong> и <strong>event: click</strong>, а также очень интересная опция <strong>autoheight: true</strong>. В примере, появляющиеся окошки для отображения контента всегда одинаковы и высота определяется по блоку с максимальным содержимым. Если же опцию <strong>autoheight</strong> установить в <strong>false</strong>, высота будет разная.</p>
<p>Полный список опций можно отыскать на сайте разработчика. Удачи и юзайте jQuery!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.linkexchanger.su/2008/22.html/feed</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
	</channel>
</rss>
