<?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>SimpleCoding.org &#187; Web дизайн</title>
	<atom:link href="http://www.simplecoding.org/category/wd/feed" rel="self" type="application/rss+xml" />
	<link>http://www.simplecoding.org</link>
	<description>Блог о программировании</description>
	<lastBuildDate>Fri, 27 Jan 2012 18:27:45 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>CSS: оформление скроллбара в стиле Gmail</title>
		<link>http://www.simplecoding.org/css-oformlenie-skrollbara-v-stile-gmail.html</link>
		<comments>http://www.simplecoding.org/css-oformlenie-skrollbara-v-stile-gmail.html#comments</comments>
		<pubDate>Sat, 14 Jan 2012 19:30:05 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Web дизайн]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=1252</guid>
		<description><![CDATA[Сегодня мы рассмотрим небольшой пример оформления скроллбара для браузеров на движке WebKit (Chrome, Safari). Сразу хочу сказать, что я не сторонник изменения внешнего вида скролла, всё-таки это стандартный элемент управления и большинство пользователей привыкли к его виду. Злоупотребление возможностью его изменения может усложнить работу с сайтом. Тем не менее, в некоторых случаях создание собственного дизайна [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_1253" class="wp-caption alignnone" style="width: 230px"><img src="http://www.simplecoding.org/wp-content/uploads/2012/01/gmail-scroll.png" alt="gmail scrollbar" title="gmail scrollbar" width="220" height="208" class="size-full wp-image-1253" style="float:left" /><p class="wp-caption-text"> </p></div>
<p>Сегодня мы рассмотрим небольшой пример <strong>оформления скроллбара для браузеров на движке WebKit</strong> (Chrome, Safari).</p>
<p>Сразу хочу сказать, что я не сторонник изменения внешнего вида скролла, всё-таки это стандартный элемент управления и большинство пользователей привыкли к его виду. Злоупотребление возможностью его изменения может усложнить работу с сайтом.</p>
<p>Тем не менее, в некоторых случаях создание собственного дизайна для скроллбара полностью оправдано. Возьмем в качестве примера структуру страницы Gmail.<br />
<span id="more-1252"></span></p>
<div id="attachment_1254" class="wp-caption alignnone" style="width: 460px"><img src="http://www.simplecoding.org/wp-content/uploads/2012/01/gmail-window.png" alt="gmail-window" title="gmail-window" width="450" height="327" class="size-full wp-image-1254" /><p class="wp-caption-text"> </p></div>
<p>Видите, скроллбар находится внутри страницы, т.е. логично, что его внешний вид должен соответствовать дизайну всей страницы. Ведь во многих случаях в web интерфейсах используется нестандартное оформление кнопок, чекбоксов, ползунков и других элементов управления.</p>
<h2>Теперь рассмотрим, каким образом можно изменить внешний вид скролла</h2>
<p>Движок WebKit поддерживает несколько CSS псевдоклассов, которые определяют оформление различных областей скроллбара. Взгляните на следующий рисунок.</p>
<div id="attachment_1255" class="wp-caption alignnone" style="width: 460px"><img src="http://www.simplecoding.org/wp-content/uploads/2012/01/scroll-default.png" alt="scroll-default" title="scroll-default" width="450" height="204" class="size-full wp-image-1255" /><p class="wp-caption-text"> </p></div>
<p>Как видите, все псевдоклассы имеют префикс <code>-webkit-</code>.<br />
Кроме перечисленных на картинке, есть ещё два псевдокласса:<br />
<code>::-webkit-scrollbar-corner</code> – отвечает за оформление квадрата в месте соприкосновения вертикального и горизонтального скролла;<br />
<code>::-webkit-resizer</code> – используется для скроллбаров текстовой области, размеры которой можно изменять.</p>
<p>Также, вместе с этими классами можно использовать различные псевдоэлементы.</p>
<p>Обычные <code>:enabled</code>, <code>:disabled</code>, <code>:hover</code> и <code>:active</code> и специальные:</p>
<p><code>:horizontal</code> – применяется для частей скроллбара, которые расположены горизонтально;</p>
<p><code>:vertical</code> – применяется для частей скроллбара, которые расположены вертикально;</p>
<p><code>:decrement</code> – применяется к участкам полосы прокрутки и кнопкам при перемещении окна просмотра вверх или влево;</p>
<p><code>:increment</code> – применяется к участкам полосы прокрутки и кнопкам при перемещении окна просмотра вниз или вправо;</p>
<p><code>:start</code> – применяется к кнопкам и участкам полосы прокрутки. Показывает находится ли объект выше (левее) ползунка;</p>
<p><code>:end</code> – применяется к кнопкам и участкам полосы прокрутки. Показывает находится ли объект ниже (правее) ползунка;</p>
<p><code>:double-button</code> – применяется к кнопкам и участкам полосы прокрутки. Используется для того, чтобы определить, является ли кнопка частью двойной кнопки, расположенной на одном из концов полосы прокрутки. Для полосы прокрутки этот псевдокласс показывает граничит ли она с двойной кнопкой;</p>
<p><code>:single-button</code> – применяется к кнопкам и участкам полосы прокрутки. Используется для того, чтобы определить, является ли кнопка одинарной. Для полосы прокрутки этот псевдокласс показывает граничит ли она с одинарной кнопкой;</p>
<p><code>:no-button</code> – применяется к участкам полосы прокрутки и показывает, касается ли она края скроллбара (например, если нет кнопок на краях скроллбара);</p>
<p><code>:corner-present</code> – применяется к участкам полосы прокрутки и показывает, присутствует ли угловая область скроллбара (квадрат на стыке горизонтального и вертикального скроллбаров);</p>
<p><code>:window-inactive</code> – применяется ко всем элементам скроллбара и показывает является ли окно к которому относится данный скроллбар активным.</p>
<h2>Переходим к нашему примеру</h2>
<p>В скроллбаре, который используется в Gmail, нет кнопок вверх-вниз, а ползунок представляет собой обычный прямоугольник серого цвета. При наведении курсора на скроллбар, подсвечивается полоса прокрутки.</p>
<div id="attachment_1256" class="wp-caption alignnone" style="width: 26px"><img src="http://www.simplecoding.org/wp-content/uploads/2012/01/gmail-like-scroll.png" alt="gmail-like-scroll" title="gmail-like-scroll" width="16" height="101" class="size-full wp-image-1256" /><p class="wp-caption-text"> </p></div>
<p><strong>Займёмся оформлением.</strong></p>
<p>Для начала, зададим общую ширину скроллбара:</p>
<pre class="brush: css; gutter: true; first-line: 1; highlight: []; html-script: false">::-webkit-scrollbar{
    width:12px;
}</pre>
<p>Теперь займёмся оформлением полосы прокрутки (светлосерый фон, серая граница, делаем границу чуть толще с левой стороны):</p>
<pre class="brush: css; gutter: true; first-line: 1; highlight: []; html-script: false">::-webkit-scrollbar-thumb{
    border-width:1px 1px 1px 2px;
    border-color: #777;
    background-color: #aaa;
}</pre>
<p>При наведении курсора (<code>:hover</code>) на полосу прокрутки делаем её более тёмной:</p>
<pre class="brush: css; gutter: true; first-line: 1; highlight: []; html-script: false">::-webkit-scrollbar-thumb:hover{
    border-width: 1px 1px 1px 2px;
    border-color: #555;
    background-color: #777;
}</pre>
<p>Ползунок в неактивном состоянии будет выглядеть как сплошной прямоугольник серого цвета (без границы)</p>
<pre class="brush: css; gutter: true; first-line: 1; highlight: []; html-script: false">::-webkit-scrollbar-track{
    border-width:0;
}</pre>
<p>При наведении курсора на ползунок, делаем его темнее и добавляем границу.</p>
<pre class="brush: css; gutter: true; first-line: 1; highlight: []; html-script: false">::-webkit-scrollbar-track:hover{
    border-left: solid 1px #aaa;
    background-color: #eee;
}</pre>
<p>Как видите, используя обычные CSS правила можно изменить скроллбар до неузнаваемости <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p><strong>Успехов!</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/css-oformlenie-skrollbara-v-stile-gmail.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>jQuery и плагины: решения для просмотра больших изображений</title>
		<link>http://www.simplecoding.org/jquery-i-plaginy-resheniya-dlya-prosmotra-bolshix-izobrazhenij.html</link>
		<comments>http://www.simplecoding.org/jquery-i-plaginy-resheniya-dlya-prosmotra-bolshix-izobrazhenij.html#comments</comments>
		<pubDate>Sat, 25 Dec 2010 18:41:21 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web дизайн]]></category>
		<category><![CDATA[Web разработка]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=1161</guid>
		<description><![CDATA[Приветствую всех! В этот раз речь пойдет о нескольких плагинах для jQuery, которые помогают организовать просмотр больших изображений на сайте. Думаю, с этой проблемой в какой-то момент сталкиваются все веб мастера. Представьте, у вас есть высококачественные изображения с высоким разрешением (фотографии, скриншоты и т.п.) и их нужно показать на сайте. Понятно, что вставить их, не [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_1162" class="wp-caption alignnone" style="width: 277px"><img src="http://www.simplecoding.org/wp-content/uploads/2010/12/jquery_img_zoom.jpg" alt="jquery img zoom" title="jquery img zoom" width="267" height="185" class="size-full wp-image-1162" style="float:left" /><p class="wp-caption-text"> </p></div>
<p><strong>Приветствую всех!</strong></p>
<p>В этот раз речь пойдет о нескольких плагинах для <strong>jQuery</strong>, которые помогают организовать просмотр больших изображений на сайте.</p>
<p>Думаю, с этой проблемой в какой-то момент сталкиваются все веб мастера.</p>
<p>Представьте, у вас есть высококачественные изображения с высоким разрешением (фотографии, скриншоты и т.п.) и их нужно показать на сайте. Понятно, что вставить их, не меняя размеры, не получится. Картинки просто «порвут» дизайн. Поэтому предварительно нужно их уменьшить, но и возможность просмотра полноразмерного изображения необходимо обеспечить.</p>
<p><strong>Классическое решение этой задачи</strong> – сделать каждую миниатюру ссылкой на полноразмерное изображение. Т.е. использовать разметку вида.</p>
<pre class="brush: html">&lt;a href="1.jpg"&gt;&lt;img src="1_thumb.jpg" /&gt;&lt;/a&gt;</pre>
<p>где <code>1_thumb.jpg</code> – уменьшенное изображение <code>1.jpg</code>.</p>
<p>Главный <em>недостаток</em> такого подхода – посетитель покидает страницу, а затем должен на неё вернуться с помощью кнопки «Назад».</p>
<p>На данный момент существует множество решений, которые позволяют получить более красивое решение этой задачи.</p>
<p>Для этого примера я решил остановиться на плагинах к библиотеке jQuery. Т.к. на данный момент она одна из самых популярных и, кроме того, аналоги можно найти для всех распространённых JS библиотек.</p>
<p>Хочу сразу отметить, что плагинов для работы с изображениями – сотни, и многие дублируют друг друга.</p>
<p>Я же хочу показать основные подходы с примерами для решения задачи и обсудить их достоинства и недостатки, а какой именно плагин использовать – решать вам.<br />
<span id="more-1161"></span><br />
Чтобы было нагляднее, все описанные здесь примеры я разместил на демонстрационной страничке</p>
<p><a href="http://demosites.simplecoding.org/img_zoom/"><img src="http://www.simplecoding.org/wp-content/themes/three_cols/images/demo_btn_green.png" alt="демонстрационный пример" /></a></p>
<h2>Вариант 1. Предпросмотр при наведении мышки на изображение.</h2>
<p>Есть несколько разновидностей таких плагинов, которые различаются в основном визуальными эффектами. В простейшем случае, для реализации подойдет любой плагин создания подсказок (tooltips). Например, <a href="http://cssglobe.com/post/1695/easiest-tooltip-and-image-preview-using-jquery">Image Preview</a>.</p>
<p>Использовать его не сложно. Размещаете на странице миниатюры со ссылками на полноразмерные изображения, подключаете jQuery и плагин, добавляете несколько CSS стилей и всё, можно пользоваться.</p>
<p>Рассмотрим пример.</p>
<p>Разметка страницы</p>
<pre class="brush: html">&lt;a href="images/1.jpg" class="preview"&gt;&lt;img src="images/1t.jpg" alt="image 1" /&gt;&lt;/a&gt;
&lt;a href="images/2.jpg" class="preview"&gt;&lt;img src="images/2t.jpg" alt="image 2" /&gt;&lt;/a&gt;
&lt;a href="images/3.jpg" class="preview"&gt;&lt;img src="images/3t.jpg" alt="image 3" /&gt;&lt;/a&gt;</pre>
<p>Здесь ссылкам добавлен класс <code>preview</code>, чтобы плагин мог выбрать только те изображения, которые нужно увеличить.</p>
<p>Подключение JS файлов:</p>
<pre class="brush: html">&lt;script type="text/javascript" src="jquery-1.4.4.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="tooltip.js"&gt;&lt;/script&gt;</pre>
<p>И CSS стили:</p>
<pre class="brush: css">a img {
    border: none;
}

#preview {
    background: none repeat scroll 0 0 #333333;
    border: 1px solid #CCCCCC;
    color: #FFFFFF;
    display: none;
    padding: 5px;
    position: absolute;
}</pre>
<p>Их вы можете поменять. Главное – сохраните абсолютное позиционирование для блока предпросмотра (position: absolute). Иначе полноразмерная картинка будет вставлена внутрь страницы и испортит дизайн.</p>
<p>Теперь <em>о достоинствах и недостатках</em>.</p>
<p>Взгляните на <a href="http://demosites.simplecoding.org/img_zoom/">демонстрационную страничку</a> (первый ряд изображений).</p>
<p>Я специально выбрал картинки с большим разрешением, чтобы был виден главный недостаток. Полноразмерное изображение не всегда полностью помещается на экране и его положение зависит от положения миниатюры на странице.</p>
<p>Второй недостаток в том, что посетитель не всегда ожидает такого поведения и может случайно навести мышку на миниатюру, в результате часть текста окажется закрытой картинкой, а это раздражает.</p>
<p>Достоинством такого подхода является <em>минимум действий со стороны пользователя</em>. Если миниатюр много, то удобно просматривать их просто перемещая мышку.</p>
<p>В общем, я не советую использовать этот подход, если размер оригинала отличается от размера миниатюры более чем в два раза (цифра, конечно, приблизительная, но, думаю, идея ясна).</p>
<h2>Вариант 2. Увеличение картинки на весь экран.</h2>
<p>Реализовать можно с помощью плагинов для создания галерей. Пример для этой статьи я сделал с помощью плагина <a href="http://www.dfc-e.com/metiers/multimedia/opensource/jquery-fancyzoom/">Fancy Zoom</a>.</p>
<p>В данном случае, при клике по миниатюре она увеличивается до размеров окна браузера (плагин контролирует эту величину), а остальная часть страницы затеняется.</p>
<p>Подключение и настройка плагина достаточно простые.</p>
<p>Разметка страницы должна позволять выбрать нужные изображения с помощью jQuery селекторов. Например, так:</p>
<pre class="brush: html">&lt;div id="fancy"&gt;
    &lt;a href="images/1.jpg"&gt;&lt;img src="images/1t.jpg" alt="image 1" /&gt;&lt;/a&gt;
    &lt;a href="images/2.jpg"&gt;&lt;img src="images/2t.jpg" alt="image 2" /&gt;&lt;/a&gt;
    &lt;a href="images/3.jpg"&gt;&lt;img src="images/3t.jpg" alt="image 3" /&gt;&lt;/a&gt;
&lt;/div&gt;</pre>
<p>После этого, нужно подключить JS скрипты и передать плагину ссылки на полноразмерные изображения.</p>
<pre class="brush: html">&lt;script type="text/javascript" src="jquery-1.4.4.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jquery.shadow.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jquery.ifixpng.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jquery.fancyzoom.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
	$(function() {
		$('#fancy a').fancyzoom();
	});
&lt;/script&gt;</pre>
<p>Плагины <code>shadow</code> и <code>ifixpng</code> используются для создания тени вокруг полноразмерного изображения и исправления проблем IE при работе с png изображениями, соответственно.</p>
<p>Fancy Zoom имеет несколько полезных настроек, на которых я останавливаться не хочу, т.к. они достаточно подробно описаны в документации.</p>
<p>Теперь о достоинствах и недостатках.</p>
<p>Кликните по любому изображению во втором ряду на <a href="http://demosites.simplecoding.org/img_zoom/">демонстрационной страничке</a>. Картинка плавно увеличится и в правом верхнем углу появится кнопка «Закрыть».</p>
<p>Безусловным преимуществом тут является то, что можно удобно просматривать довольно большие изображения <em>без использования скролла</em>.</p>
<p>Кроме того, ни о каких случайных срабатываниях тут речь не идёт. Картинка будет увеличена только в ответ на явное действие пользователя – клик мышкой.</p>
<p>Но читать текст на странице уже не получится. Т.е. посетитель может смотреть либо на картинку, либо – на содержимое страницы.</p>
<h2>Вариант 3. Увеличение картинки в отдельном блоке.</h2>
<p>Для демонстрации этого решения я выбрал плагин <a href="http://www.mind-projects.it/projects/jqzoom/">jqZoom</a>.</p>
<p>Посмотреть как он работает можно на <a href="http://demosites.simplecoding.org/img_zoom/">демонстрационной страничке</a> (последний ряд). Когда вы наводите указатель мыши на изображение на нём появляется полупрозрачный прямоугольник, показывающий какая именно область картинки сейчас увеличена. Справа появится блок с увеличенным фрагментом изображения. Естественно, плагин не растягивает миниатюру, а просто показывает фрагмент полноразмерной картинки.</p>
<p>Разметка страницы для использования этого плагина не отличается от предыдущих вариантов.</p>
<pre class="brush: html">&lt;a href="images/2.jpg" class="jqzoom" title="image 2"&gt;
	&lt;img src="images/2t.jpg" alt="image 2" /&gt;
&lt;/a&gt;</pre>
<p>Для использования плагина нужно подлкючить библиотеку jQuery, сам плагин, найти нужные изображения и вызвать для них метод <code>jqzoom()</code>.</p>
<pre class="brush: html">&lt;script type="text/javascript" src="jquery-1.4.4.min.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript" src="jqzoom.pack.1.0.1.js"&gt;&lt;/script&gt;
&lt;script type="text/javascript"&gt;
	$(function() {
		$(".jqzoom").jqzoom();
	});
&lt;/script&gt;</pre>
<p>С помощью дополнительных параметров можно указать размеры области предпросмотра, её положение, масштаб и другие параметры. Подробнее читайте на официальном сайте.</p>
<p>Теперь подумаем, <em>что даёт использование такого плагина</em>.</p>
<p>На мой взгляд, его можно воспринимать как компромиссное решение между двумя первыми вариантами.</p>
<p>Возможность просмотра полноразмерного изображения сохраняется, требуется минимум действий от пользователя, и при этом не будет закрыт ни один элемент на странице.</p>
<p>Недостатком можно считать просмотр картинки по частям. Но, с другой стороны, если оригинал действительно большой, то просмотреть его в натуральную величину без скролла всё равно не получится.</p>
<p>И, конечно, использование этого плагина потребует изменения дизайна страницы. В нём должна быть предусмотрена область для просмотра увеличенной картинки. Предыдущие плагины можно просто подключить к любой странице, и они никак не повлияют на её дизайн.</p>
<p><strong>Обратите внимание</strong>. Все три решения используют стандартную разметку (картинка внутри ссылки). Такой подход гарантирует, что при отключённом JavaScript посетитель сможет просмотреть полноразмерное изображение.</p>
<p>В заключение, хочу отметить, что в этой статье рассмотрены далеко не все варианты решения задачи. Я выбрал те, которые считаю наиболее универсальными (подходят для большинства сайтов) и простые в использовании.</p>
<p>Если вам приходилось решать подобные задачи, и вы хотите о нём рассказать, пишите, буду рад обсудить <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Интересно почитать</strong></p>
<p><a href="http://nippondom.com/kak_privlech_klientov_v_kafe">Как привлечь клиентов в кафе</a> и убедить их заказать больше чем обычно?</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/jquery-i-plaginy-resheniya-dlya-prosmotra-bolshix-izobrazhenij.html/feed</wfw:commentRss>
		<slash:comments>22</slash:comments>
		</item>
		<item>
		<title>Собственное оформление комментариев в WordPress</title>
		<link>http://www.simplecoding.org/sobstvennoe-oformlenie-kommentariev-v-wordpress.html</link>
		<comments>http://www.simplecoding.org/sobstvennoe-oformlenie-kommentariev-v-wordpress.html#comments</comments>
		<pubDate>Tue, 15 Sep 2009 08:28:32 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[PHP]]></category>
		<category><![CDATA[Web дизайн]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=905</guid>
		<description><![CDATA[Вы, конечно, знаете, что новые версии WordPress поддерживают древовидные комментарии. Для каждого такого комментария движок создаёт довольно сложную разметку с большим количеством классов, которые можно использовать для оформления. В идеале разработчик темы WordPress должен использовать только параметры функции wp_list_comments (выводит список комментариев) и CSS стили. Но идеальных вещей не существует в природе и WordPress – [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_904" class="wp-caption alignnone" style="width: 260px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/09/wp-comments.png" alt="wordpress comments" title="wordpress comments" width="250" height="98" class="size-full wp-image-904" style="float:left" /><p class="wp-caption-text"> </p></div>
<p>Вы, конечно, знаете, что новые версии <a href="http://wordpress.org/">WordPress</a> поддерживают <strong>древовидные комментарии</strong>.</p>
<p>Для каждого такого комментария движок создаёт довольно сложную разметку с большим количеством классов, которые можно использовать для оформления.</p>
<p>В идеале разработчик темы WordPress должен использовать только параметры функции <code>wp_list_comments</code> (выводит список комментариев) и <strong>CSS</strong> стили.</p>
<p>Но идеальных вещей не существует в природе и WordPress – не исключение <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>В общем, стандартное оформление комментариев содержит несколько очень неприятных <strong>недостатков</strong>.</p>
<p>Например.</p>
<p>После имени комментатора выводится слово <code>says:</code>, которое нельзя изменить с помощью параметров <code>wp_list_comments</code>. Хотя, текст ссылки <code>Reply</code> можно изменить с помощью этой функции</p>
<pre class="brush: php">wp_list_comments(array('reply_text'=&gt;'Ответить'));</pre>
<p>Вывод даты имеет фиксированный формат, что-то вроде <code>сентября 7, 2009 at 9:29 am</code><br />
<span id="more-905"></span><br />
<em>Примечание</em>. Я использую оригинальную английскую версию <strong>WordPress</strong>, вполне возможно, что разработчики локализированных версий перевели надписи и поправили формат даты. Но проблему это не решает. Разработчик темы все равно вынужден использовать те настройки, которые есть. К тому же получается, что тема будет зависеть от локализации движка.</p>
<p>Проблема заключается в том, что эти настройки прописаны в файле <code>wp-includes/comment-templates.php</code>. Т.е. если мы внесем в него изменения, они будут перезаписаны после очередного обновления движка, которые, кстати, появляются довольно часто.</p>
<p>Кстати, строка <code>1226</code> в файле <code>wp-includes/comment-templates.php</code> выглядит так:</p>
<pre class="brush: php">&lt;?php printf(__('&lt;cite class="fn"&gt;%s&lt;/cite&gt; &lt;span class="says"&gt;says:&lt;/span&gt;'), get_comment_author_link()) ?&gt;</pre>
<p>Видите, мы может изменить оформление слова <code>says:</code> (с помощью CSS класса <code>says</code>), но не можем изменить сам текст.</p>
<p>Для того, чтобы решить эти проблемы нужно <strong>определить собственную функцию, формирующую дерево комментариев</strong>.</p>
<p>1) В файле <code>comments.php</code> вашей темы в параметре <code>callback</code> функции <code>wp_list_comments</code> указываем имя функции, которую нужно использовать для вывода комментариев.</p>
<pre class="brush: php">wp_list_comments('type=comment&#038;callback=mytheme_comment');</pre>
<p>В данном случае это <code>mytheme_comment</code>.</p>
<p>2) Создаем саму функцию. Она должна находиться в файл <code>functions.php</code> вашей темы.</p>
<p>Заново писать всю функцию целиком нет никакого смысла (разве что вы хотите сделать что-то неповторимое <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  ). Лучше использовать <a href="http://codex.wordpress.org/Template_Tags/wp_list_comments">готовый шаблон</a></p>
<p>Он полностью совпадает со стандартным выводом комментариев в WP.<br />
Теперь можно немного его подправить.</p>
<p><em>Примечание</em>. Почитать о форматировании дат можно <a href="http://ua.php.net/manual/en/function.date.php">здесь</a>.</p>
<p>У меня получилось примерно следующее.</p>
<p>Строка с форматами даты и времени.</p>
<pre class="brush: php">&lt;div class="comment-meta commentmetadata"&gt;&lt;a href="&lt;?php echo htmlspecialchars( get_comment_link( $comment-&gt;comment_ID ) ) ?&gt;"&gt;&lt;?php printf(__('%1$s в %2$s'), get_comment_date('j F Y'),  get_comment_time('G:i')) ?&gt;&lt;/a&gt;&lt;?php edit_comment_link(__('(Edit)'),'  ','') ?&gt;&lt;/div&gt;</pre>
<p>Слово <code>says:</code> я просто удалил.</p>
<p>Кстати, будьте аккуратны при использовании этого метода. Учтите, что на вывод комментариев влияют не только разметка и стили, указанные в теме WordPress, но и настройки, сделанные через админку движка.</p>
<p>Например, если вы будете уменьшать размер шрифта вложенных комментариев или сделаете большой отступ слева, то ваш дизайн может стать совсем не привлекательным без ограничения на количество уровней вложенности комментариев.</p>
<p>В общем, тщательно тестируйте все ваши нововведения.</p>
<p>Удачи!</p>
<p><strong>Интересно почитать</strong></p>
<p><a href="http://eutem.com" title="Разработка сайтов в Минске">Разработка сайтов в Минске</a>. Студия веб-дизайна в Минске.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/sobstvennoe-oformlenie-kommentariev-v-wordpress.html/feed</wfw:commentRss>
		<slash:comments>23</slash:comments>
		</item>
		<item>
		<title>Исправляем недостатки IE6</title>
		<link>http://www.simplecoding.org/ispravlyaem-nedostatki-ie6.html</link>
		<comments>http://www.simplecoding.org/ispravlyaem-nedostatki-ie6.html#comments</comments>
		<pubDate>Mon, 07 Sep 2009 07:11:27 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web дизайн]]></category>
		<category><![CDATA[Web разработка]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=898</guid>
		<description><![CDATA[Думаю, все кто когда-нибудь занимался версткой сайтов, знает о том насколько хорошо IE6 поддерживает разные полезные возможности Призывы перейти на нормальные браузеры или хотя бы обновить IE6, можно встретить на каждом шагу. Тем не менее ситуация меняется очень медленно. И на сегодняшний день игнорировать людей, которые используют устаревшую версию Internet Explorer нельзя. К тому же [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_899" class="wp-caption alignnone" style="width: 160px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/09/ie6-bugs-logo.png" alt="ie6-bugs-logo" title="ie6-bugs-logo" width="150" height="100" style="float:left; padding: 0 10px 10px 0" class="size-full wp-image-899" /><p class="wp-caption-text"> </p></div>
<p>Думаю, все кто когда-нибудь занимался <strong>версткой сайтов</strong>, знает о том насколько хорошо <strong>IE6</strong> поддерживает разные полезные возможности <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p>Призывы перейти на нормальные браузеры или хотя бы обновить IE6, можно встретить на каждом шагу. Тем не менее ситуация меняется очень медленно.</p>
<p>И на сегодняшний день игнорировать людей, которые используют устаревшую версию Internet Explorer нельзя.</p>
<p>К тому же для того чтобы обеспечить поддержку IE6 <strong>не обязательно отказываться от новых возможностей</strong>.</p>
<p>Сегодня я расскажу о двух проблемах, которые можно решить практически без усилий с вашей стороны. Это поддержка :hover селекторов и прозрачных png изображений.<br />
<span id="more-898"></span><br />
<strong>Поддержка :hover селекторов</strong></p>
<p>Вообще-то в IE6 есть поддержка этих селекторов, но только для тега <code>a</code>, т.е. ссылки. В тоже время в современных браузерах их можно использовать для любых элементов страницы.</p>
<p>Напомню, правила, определенные с помощью этого селектора, применяются, когда курсор мыши находится над элементом. При грамотном использовании можно получить очень красивые визуальные эффекты.</p>
<p>Решить проблему можно с помощью небольшого скрипта под названием <a href="http://www.xs4all.nl/~peterned/csshover.html">Whatever:hover</a>.</p>
<p>От вас требуется добавить только одно CSS правило</p>
<pre class="brush: css">body {
	behavior: url("csshover3.htc");
}</pre>
<p>Естественно нужно указать правильное размещение скрипта.</p>
<p>Скрипт сам найдет нужные элементы на странице и, если курсор мыши окажется над ними, применит соответствующие CSS правила.</p>
<p><strong>Поддержка альфа-канала в PNG файлах.</strong></p>
<p><em>Примечание</em>. В альфа-канале хранятся данные о прозрачности рисунка.</p>
<p>Рассмотрим небольшой пример. Допустим, у вас есть логотип с названием компании, который должен находиться над фоновой картинкой.</p>
<p>При этом для картинки установлено правило</p>
<pre class="brush: css">background-attachment: fixed;</pre>
<p>Т.е. при прокрутке страницы фон остается неподвижным, а логотип должен перемещаться.</p>
<p>Получается, что нужно делать отдельную картинку с логотипом и отдельную с фоном, а затем накладывать их друг на друга. При этом в Photoshop и современных браузерах все получается отлично, но не в устаревших версиях IE.</p>
<p>Чтобы проиллюстрировать проблему я сделал 2 скриншота.</p>
<img src="http://www.simplecoding.org/wp-content/uploads/2009/09/alpha-normal.png" alt="alpha-normal" title="alpha-normal" width="134" height="83" class="size-full wp-image-900" />
<p></p>
<div id="attachment_901" class="wp-caption alignnone" style="width: 159px"><img src="http://www.simplecoding.org/wp-content/uploads/2009/09/alpha-bug.png" alt="alpha-bug" title="alpha-bug" width="149" height="97" class="size-full wp-image-901" /><p class="wp-caption-text"> </p></div>
<p>Угадайте, какой из них сделан в IE6? <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>IE закрасил прозрачные пиксели серым цветом. Кстати, использование gif изображений не поможет, т.к. по краю букв идут частично прозрачные пиксели.</p>
<p>Решается эта проблема с помощью скрипта <a href="http://www.twinhelix.com/css/iepngfix/">IE PNG Fix</a>.</p>
<p>Вам нужно подключить его для тех элементов на странице, которые содержат прозрачные png изображения. Например, так.</p>
<pre class="brush: css">img {
    behavior: url("iepngfix.htc");
}</pre>
<p>После этого, изображения будут выглядеть правильно.</p>
<p><strong>Небольшое заключение для пользователей IE6.</strong></p>
<p>То, что web разработчик может как-то обойти обойти ограничения браузера не означает, что вам не нужно его апгрейдить <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Даже если вас не интересует собственная безопасность, нужно понимать, что такие решения используют <strong>JavaScript</strong> и работают обычно значительно медленнее, чем встроенные функции современных браузеров.</p>
<p>Так что не удивляйтесь, если после загрузки пары страничек у вас начнет «тормозить» компьютер <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p>Удачного обновления!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/ispravlyaem-nedostatki-ie6.html/feed</wfw:commentRss>
		<slash:comments>69</slash:comments>
		</item>
		<item>
		<title>Оформление внешних ссылок</title>
		<link>http://www.simplecoding.org/oformlenie-vneshnix-ssylok.html</link>
		<comments>http://www.simplecoding.org/oformlenie-vneshnix-ssylok.html#comments</comments>
		<pubDate>Sun, 07 Dec 2008 15:35:36 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web дизайн]]></category>
		<category><![CDATA[Web разработка]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=666</guid>
		<description><![CDATA[Сегодня речь пойдет о работе со ссылками на web странице, а если точнее – об их оформлении для просмотра и печати. У вас может возникнуть вполне закономерный вопрос: «О чем тут вообще речь? Ведь с помощью CSS можно оформить ссылки как угодно». В принципе, это действительно так, и большинство примеров в этой статье используют именно [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_667" class="wp-caption alignnone" style="width: 286px"><img src="http://www.simplecoding.org/wp-content/uploads/2008/12/jquery_links_decoration.png" alt="jquery links decoration" title="jquery links decoration" width="276" height="157" class="size-full wp-image-667" style="float:left" /><p class="wp-caption-text"> </p></div>
<p>Сегодня речь пойдет о <strong>работе со ссылками</strong> на web странице, а если точнее – об их оформлении для просмотра и печати. У вас может возникнуть вполне закономерный вопрос: «О чем тут вообще речь? Ведь с помощью CSS можно оформить ссылки как угодно». В принципе, это действительно так, и большинство примеров в этой статье используют именно CSS, но если добавить немного JavaScript кода, то результат будет намного интереснее <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
<p><strong>Начнем с постановки задачи.</strong></p>
<p>Нам нужно:</p>
<p>1) Выделить (визуально) все внешние ссылки на странице (внутренние должны остаться без изменений).</p>
<p>2) Сделать так, чтобы они открывались в новом окне браузера (опять же, внутренние ссылки должны работать как обычно).</p>
<p>3) При печати после текста внешней ссылки должен выводиться ее адрес. Тут существует несколько решений, но об этом чуть позже.</p>
<p>Предполагается, что <strong>мы работаем с уже существующим сайтом</strong>, и править разметку страниц (искать внешние ссылки и изменять их атрибуты) никто не будет.</p>
<p><strong>Первый этап. Изменяем оформление внешних ссылок.</strong><br />
<span id="more-666"></span><br />
Прежде всего, определимся, как именно нужно их оформить. Я решил использовать оформление в стиле википедии. Т.е. после ссылки размещаем маленькую иконку со стрелкой. Выглядеть это будет так:</p>
<div id="attachment_668" class="wp-caption alignnone" style="width: 221px"><img src="http://www.simplecoding.org/wp-content/uploads/2008/12/ext_link.png" alt="ext link" title="ext link" width="211" height="23" class="size-full wp-image-668" /><p class="wp-caption-text"> </p></div>
<p>Таким образом, нам нужно:</p>
<p>1) Создать CSS стили.</p>
<p>2) После загрузки страницы найти все внешние ссылки.</p>
<p>3) Установить для них соответствующие стили.</p>
<p>Стили разместим в файле <code>styles.css</code>.</p>
<pre class="brush: css">.ext {
	background-image: url('extlink14x14.gif');
	background-position: right;
	background-repeat: no-repeat;
	padding: 0 20px 0 0;
}</pre>
<p>Как видите, мы установили стили для класса <code>ext</code>. С их помощью мы создали отступ справа от ссылки (20 px) и добавили файл с картинкой.</p>
<p>Теперь ищем все внешние ссылки и устанавливаем для них наш новый класс. Сразу же добавляем атрибут <code>target='_blank'</code> (ссылки будут открываться в новом окне).</p>
<pre class="brush: javascript">$(function() {
	$('a[href^=http://]').addClass('ext').attr('target', '_blank');
});</pre>
<p>В принципе, эта операция довольно сложная, но с помощью <a href="http://jquery.com/">jQuery</a> её можно записать всего одной строкой.</p>
<p>Примечание. Мы считаем, что все внешние ссылки начинаются с <code>http://</code>.</p>
<p><strong>Оформление ссылок для печати.</strong></p>
<p>Тут все немного сложнее. Главная проблема в том, что, распечатав страницу, посетитель <strong>теряет часть информации</strong>, а именно – адреса ссылок.</p>
<p>Я нашел <strong>два варианта решения</strong> этой проблемы.</p>
<p><strong>Первый</strong> – использовать специальные CSS стили для «печатной» версии страницы. Подробно этот метод описан в статье «<a href="http://designformasters.info/posts/print-styles/">15 минут на подготовку к печати</a>».</p>
<p>Для его реализации нужно создать еще один файл со стилями (<code>printstyles.css</code>):</p>
<pre class="brush: css">.ext {
	background-image: none;
	padding: 0 0 0 0;
}

a[href^="http"]:after {
    content:" (" attr(href) ") "; font-size: 90%;
}</pre>
<p>И указать браузеру, использовать их при печати страницы (с помощью атрибута media):</p>
<pre class="brush: html">&lt;link rel=&quot;stylesheet&quot; href=&quot;styles.css&quot; type=&quot;text/css&quot; media=&quot;screen&quot; /&gt;
&lt;link rel=&quot;stylesheet&quot; href=&quot;printstyles.css&quot; type=&quot;text/css&quot; media=&quot;print&quot; /&gt;</pre>
<p>Теперь при печати страницы у нас вместо картинки после ссылки будет показан её адрес.</p>
<p>Все отлично, но есть <strong>два недостатка</strong>: ссылки мешают читать текст, и в IE этот метод не работает.</p>
<p><strong>Второй вариант решения</strong> – поместить все ссылки с адресами в конце страницы. Этот метод подробно описан в статье «<a href="http://www.alistapart.com/articles/improvingprint">Improving Link Display for Print</a>» (кстати, есть <a href="http://designformasters.info/posts/improving-link-display-for-print/">перевод на русский</a>).</p>
<p>Подробно пересказывать эту статью я не буду, остановлюсь только на основных моментах, которые касаются нашего примера.</p>
<p><strong>Алгоритм</strong> будет таким:</p>
<p>1) найти все внешние ссылки;</p>
<p>2) создать блок в конце страницы (в нем будет размещен список со ссылками);</p>
<p>3) скопировать найденные ссылки в этот блок, при этом после каждой ссылки в скобках добавить её адрес;</p>
<p>4) сделать так, чтобы блок со списком ссылок отображался только при печати страницы.</p>
<p>Первые три операции мы выполняем с помощью JavaScript функции:</p>
<pre class="brush: javascript">function createReferences() {
	$('
<ol id="references"></ol>

').appendTo('body');
	$('a[href^=http://]').clone()
		.each(function() {
				$('<span class="ext"> (' + this.href + ')</span>').appendTo(this);
			})
		.appendTo('#references')
		.wrap('
<li></li>

');
}</pre>
<p>Функция <code>appendTo</code> добавляет новый блок на страницу (в данном случае это нумерованный список). С помощью <code>clone()</code> мы копируем ссылки. После каждой ссылки вставляем новый тег span, в котором размещаем адрес ссылки.</p>
<p>Добавляем ссылки в список (строка 7) и при этом не забываем заключить её в теги <code>li</code> (с помощью функции <code>wrap</code>, строка 8).</p>
<p>В результате мы получим <strong>упорядоченный список со всеми внешними ссылками</strong>.</p>
<p>Остается только сделать его невидимым для «экранной» версии страницы. Эта задача легко решается с помощью CSS стилей.</p>
<p>В файл styles.css добавляем:</p>
<pre class="brush: css">#references {
	display: none;
}</pre>
<p>Этот стиль будет применен, если страница отображается на экране. При печати браузер его <strong>проигнорирует</strong>.</p>
<p>Как видите, ничего сверхсложного. Кстати, обратите внимание, страница будет нормально отображаться, даже если у посетителя отключен JavaScript. Блок со ссылками, естественно, создать не получится, страница будет просто распечатана как обычно.</p>
<p><strong>Скачать пример</strong></p>
<p>Если хотите поэкспериментировать качайте <a href='http://www.simplecoding.org/wp-content/uploads/2008/12/jquery_print_links.zip'>архив с примером</a>.</p>
<p>Я буду рад выслушать любые ваши пожелания, замечания и советы <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>До встречи!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/oformlenie-vneshnix-ssylok.html/feed</wfw:commentRss>
		<slash:comments>14</slash:comments>
		</item>
		<item>
		<title>Создаем подсказки в стиле WP-Coda</title>
		<link>http://www.simplecoding.org/sozdaem-podskazki-v-stile-wp-coda.html</link>
		<comments>http://www.simplecoding.org/sozdaem-podskazki-v-stile-wp-coda.html#comments</comments>
		<pubDate>Tue, 11 Nov 2008 07:02:19 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[Web дизайн]]></category>
		<category><![CDATA[Web разработка]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=630</guid>
		<description><![CDATA[Думаю, все кто интересуется web дизайном видели тему для WordPress WP-Coda. Меня прежде всего заинтересовал эффект со всплывающим блоком (появляется над первым пунктом в горизонтальном меню). Эффект очень красивый и мне захотелось сделать всплывающие подсказки в таком же стиле. Как оказалось – ничего сверх сложного . Прежде всего, рассмотрим принцип работы эффекта. При наведении указателя [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_631" class="wp-caption alignnone" style="width: 169px"><img src="http://www.simplecoding.org/wp-content/uploads/2008/11/wp_coda_effect.png" alt="wp coda effect" title="wp coda effect" width="159" height="139" style="float:left; padding:0 5px 5px 0" class="size-full wp-image-631" /><p class="wp-caption-text"> </p></div>
<p>Думаю, все кто интересуется web дизайном видели тему для WordPress <a href="http://wordpress.bustatheme.com/coda/">WP-Coda</a>.</p>
<p>Меня прежде всего заинтересовал <strong>эффект со всплывающим блоком</strong> (появляется над первым пунктом в горизонтальном меню).</p>
<p>Эффект очень красивый и мне захотелось <strong>сделать всплывающие подсказки в таком же стиле</strong>.</p>
<p>Как оказалось – ничего сверх сложного <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  .</p>
<p>Прежде всего, рассмотрим <strong>принцип работы эффекта</strong>.</p>
<p>При наведении указателя мышки на какой-то элемент страницы плавно появляется блок с текстом. При этом одновременно применяются два эффекта: <strong>перемещение</strong> и <strong>изменение прозрачности</strong>.</p>
<p>Если переместить мышку на другой элемент страницы – блок плавно исчезает.</p>
<p>В оригинальном варианте при наведении мышки на блок с текстом он остается видимым. Но, я решил, что для подсказок такое поведение не самое удачное, т.к. под ними могут оказаться нужные посетителю элементы страницы. Поэтому у меня блок исчезает, как только посетитель убирает мышку с элемента, для которого установлена подсказка.<br />
<span id="more-630"></span><br />
Кроме того, подсказок может быть несколько, поэтому необходима возможность работы с ними одновременно. Причем одновременно две подсказки не должны быть видимы никогда.</p>
<p>В результате получилось <strong>два JavaScript класса</strong>. Плюс для их работы нужна библиотека <a href="http://jquery.com/">jQuery</a>.</p>
<p><strong>Посмотреть демоверсию</strong> можно <a href="http://www.simplecoding.org/formgenerator/">здесь</a>. Я использовал такие подсказки для всех элементов горизонтального меню.</p>
<p>Первый класс (<code>Popup</code>) – создает подсказки и содержит методы для управления ими.</p>
<p>Второй (<code>PopupContainer</code>) – представляет собой контейнер для хранения экземпляров первого класса, и содержит только один метод <code>addPopup</code>. В качестве параметров он получает <code>id</code> элемента, которому принадлежит подсказка и <code>id</code> блока с самой подсказкой.</p>
<p>Теперь разберем <strong>порядок работы эффекта</strong>.</p>
<p>Как вы понимаете, переход подсказки из одного состояния в другое (видима/невидима) происходит при возникновении определенного события. В данном случае это <code>mouseenter</code> и <code>mouseleave</code>.</p>
<p>На следующей диаграмме я показал порядок работы эффекта при возникновении события mouseenter.</p>
<div id="attachment_632" class="wp-caption alignnone" style="width: 345px"><img src="http://www.simplecoding.org/wp-content/uploads/2008/11/muoseenter_diagram.jpg" alt="muoseenter diagram" title="muoseenter diagram" width="335" height="617" class="size-full wp-image-632" /><p class="wp-caption-text"> </p></div>
<p>Прежде всего, обратите внимание на переменные <code>visible</code> и <code>showBegin</code>. В них мы сохраняем текущее состояние подсказки.</p>
<p>Если <code>visible == true</code>, то подсказка в данный момент показана.</p>
<p><code>showBegin == true</code> означает, что в данный момент идет анимация.</p>
<p>Используя эти переменные, мы можем определить, когда нужно игнорировать событие <code>mouseenter</code>.</p>
<p>Представьте ситуацию. Посетитель навел мышку на элемент, начался показ анимации (изменяется прозрачность, и подсказка плавно смещается). В этот момент посетитель перемещает мышь. Что произойдет? Должна ли прерваться анимация?</p>
<p>Я решил сделать следующим образом. Анимация продолжается в любом случае, но если посетитель убирает мышку с элемента, то сразу же после ее завершения запускается обратный эффект. Т.е. в результате блок с подсказкой будет скрыт.</p>
<p>Для этого, используется переменная <code>nextAction</code>, в которой храниться название метода, который должен быть запущен после завершения анимации.</p>
<p>Таким образом, если посетитель уберет мышку с элемента после того как анимация завершилась, то метод <code>hide</code> спрячет подсказку. Если же анимация не завершилась, то метод <code>hide</code> просто установит значение переменной <code>nextAction = 'hide'</code>.</p>
<p>Перед завершением работы метод <code>show</code> проверит состояние <code>nextAction</code> и вызовет метод <code>hide</code>. Т.е. подсказка исчезнет.</p>
<p>Диаграмму работы при возникновении события <code>mouseleave</code> я не приводил, т.к. принцип работы такой же.</p>
<p>Теперь взгляните на <strong>исходный код</strong> класса <code>Popup</code></p>
<pre class="brush: javascript">function Popup(target, popup) {
	var showBegin = false;
	var visible = false;
	var nextAction = 'none';

	var target = target;
	var popup = popup;

	var curObj = this;

	this.show = function() {
		if (!visible &amp;&amp; !showBegin) {
			//сбрасываем предыдущее значение nextAction
			nextAction = 'show';
			showBegin = true;
			//рассчитываем координаты всплывающей подсказки
			var pWidth = popup.innerWidth();
			var tHieght = target.innerHeight();
			var tWidth = target.innerWidth();
			var tOffset = target.offset();
			var popupLeft = tWidth/2 + tOffset.left - pWidth/2;
			var popupTop = tHieght/2 + tOffset.top;

			//показываем подсказку
			popup.removeClass(&quot;hide&quot;);
			popup.css(&quot;top&quot;, popupTop);
			popup.css(&quot;left&quot;, popupLeft);
			popup.css(&quot;opacity&quot;, 0);
			//запускаем анимацию (изменение прозрачности и положения)
			popup.animate({
				opacity: 1,
				top: '+=' + 10 + 'px'
			}, 1000, 'swing', function() {
				//выполняется после завершения анимации
				visible = true;
				showBegin = false;
				if (nextAction == 'hide') {
					curObj.hide();
				}
			});
		}
		else {
			//если подсказка уже показана или начата анимация
			//сохраняем следующую операцию
			nextAction = 'show';
			return;
		}
	}

	this.hide = function() {
		if (!showBegin &amp;&amp; visible) {
			//сбрасываем предыдущее значение nextAction
			nextAction = 'hide';
			showBegin = true;
			//убираем подсказку (изменяем прозрачность и смещаем)
			popup.animate({
				opacity: 0,
				top: '-=' + 10 + 'px'
			}, 1000, 'swing', function() {
				//выполняется после завершения анимации
				visible = false;
				showBegin = false;
				popup.addClass(&quot;hide&quot;);
				if (nextAction == 'show') {
					curObj.show();
				}
			});
		}
		else {
			//если подсказка невидимая или идет анимация
			//сохраняем следующую операцию и выходим
			nextAction = 'hide';
			return;
		}
	}

	this.setEventHandlers = function() {
		target.bind('mouseenter', this.show)
			.bind('mouseleave', this.hide);
	}
}</pre>
<p>С помощью метода <code>setEventHandlers</code> мы устанавливаем обработчики событий. При возникновении <code>mouseenter</code> будет вызван метод <code>show</code>, а при возникновении <code>mouseleave</code> – <code>hide</code>.</p>
<p>Принцип работы метода <code>show</code> мы уже рассмотрели. Единственное, на что я хочу обратить ваше внимание – это <strong>способ размещения подсказки</strong>.</p>
<p>Нам нужно, поместить подсказку точно под элементом, к которому она относится.</p>
<p>Для этого мы определяем ширину подсказки, ширину и положение элемента и на основании этих данных вычисляем координаты левого верхнего угла подсказки.</p>
<p>Затем делаем подсказку видимой (убираем класс <code>hide</code>) и запускаем анимацию (функция <code>animate</code>). В данном случае мы плавно изменяем прозрачность, и смещаем подсказку вниз на 10 пикселов.</p>
<p><em>Примечание</em>. Для определения положения и размеров блоков используется плагин <a href="http://brandonaaron.net/docs/dimensions/">jQuery Dimensions</a>.</p>
<p>Теперь рассмотрим класс контейнера</p>
<pre class="brush: javascript">function PopupContainer() {
	var popups = [];

	this.addPopup = function(target, popup) {
		var newPopup = new Popup(target, popup);
		newPopup.setEventHandlers();
		popups.push(newPopup);
	}
}</pre>
<p>Как видите, он предельно прост. Единственный метод <code>addPopup</code> создает новый объект класса <code>Popup</code> и сразу же вызывает его метод <code>setEventHandlers</code>. Т.е. подсказка сразу же готова к работе.</p>
<p><strong>Использование подсказки</strong></p>
<p>1) Подключаем необходимые библиотеки и стили. Например:</p>
<pre class="brush: html">&lt;script src=&quot;js/jquery.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/popups.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;script src=&quot;js/common.js&quot; type=&quot;text/javascript&quot;&gt;&lt;/script&gt;
&lt;link href=&quot;css/styles.css&quot; charset=&quot;UTF-8&quot; rel=&quot;stylesheet&quot; type=&quot;text/css&quot; /&gt;</pre>
<p>2) Создаем элемент, для которого будет вызвана подсказка.</p>
<pre class="brush: html">&lt;p&gt;&lt;a id=&quot;targetblock&quot; href=&quot;#&quot;&gt;Наведите указатель мыши на этот текст чтобы увидеть подсказку&lt;/a&gt;&lt;/p&gt;</pre>
<p>3) Создаем подсказку</p>
<pre class="brush: html">&lt;div id=&quot;mypopup&quot; class=&quot;hide popuptip&quot;&gt;
	&lt;div class=&quot;tiptext&quot;&gt;
	Это всплывающая подсказка в стиле &lt;strong&gt;Coda&lt;/strong&gt;&lt;br /&gt;Она появляется при наведении указателя мыши на ссылку.
	&lt;/div&gt;
	&lt;div id=&quot;tipfooter&quot;&gt;&lt;/div&gt;
&lt;/div&gt;</pre>
<p>В принципе, разметка подсказки может быть практически любой. Но нужно выполнить <strong>два условия</strong>.</p>
<p>Во-первых, она должна быть <strong>абсолютно позиционирована</strong>.</p>
<p>Во-вторых, нужно иметь возможность ее <strong>спрятать</strong>. Обычно для этого используется правило <code>display: none</code>.</p>
<p>4) Оформление подсказки. Тут у вас полная свобода <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' />  . Я использовал следующие правила.</p>
<pre class="brush: css">.popuptip {
	position: absolute;
	z-index: 3000;
	width: 160px;
}

.hide {
	display: none;
}

.popuptip .tiptext {
	background-image: url('../images/tooltip_back_transp.png');
	padding: 20px 20px 5px 20px;
	font-size: 0.8em;
}

#tipfooter {
	background-image: url('../images/tooltip_back_transp.png');
	height: 20px;
	background-position: bottom left;
}</pre>
<p>Обязательными являются только первые два (<code>popuptip</code> и <code>hide</code>).</p>
<p><em>Примечание</em>. В качестве фона я использовал рисунок tooltip_back_transp.png и технику <strong>CSS спрайтов</strong>. Здесь на ней я останавливаться не буду, вы легко сможете найти подробные статьи на эту тему.</p>
<p>5) Создаем подсказку и «привязываем» ее к какому-нибудь элементу на странице.</p>
<pre class="brush: javascript">$(document).ready(function() {
	var pContainer = new PopupContainer();
	pContainer.addPopup($(&quot;#targetblock&quot;), $(&quot;#mypopup&quot;));
});</pre>
<p><strong>Скачать</strong></p>
<p>Если эффект вас заинтересовал – качайте <a href='http://www.simplecoding.org/wp-content/uploads/2008/11/coda_popups.zip'>архив с примером</a>. В нем находятся все необходимые библиотеки и скрипты.</p>
<p>Все вопросы и замечания буду рад почитать в комментариях <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_wink.gif' alt=';)' class='wp-smiley' /> </p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/sozdaem-podskazki-v-stile-wp-coda.html/feed</wfw:commentRss>
		<slash:comments>56</slash:comments>
		</item>
		<item>
		<title>Незаметная загрузка картинок</title>
		<link>http://www.simplecoding.org/nezametnaya-zagruzka-kartinok.html</link>
		<comments>http://www.simplecoding.org/nezametnaya-zagruzka-kartinok.html#comments</comments>
		<pubDate>Wed, 08 Oct 2008 17:52:38 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[Web дизайн]]></category>
		<category><![CDATA[Web разработка]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/?p=564</guid>
		<description><![CDATA[В этой заметке я хочу рассказать об одном нюансе, который обязательно нужно помнить при создании web интерфейса или дизайна сайта. Часто для того, чтобы подчеркнуть, что страница реагирует на действия посетителя, используют дополнительные изображения (например, gif анимацию). Самый распространенный пример – индикаторы загрузки. Кстати, существует бесплатный сервис, который создает такие загрузчики. Алгоритм работы в большинстве [...]]]></description>
			<content:encoded><![CDATA[<div id="attachment_565" class="wp-caption alignnone" style="width: 310px"><img src="http://www.simplecoding.org/wp-content/uploads/2008/10/image_loading.png" alt="image loading" title="image loading" width="300" height="91" class="size-full wp-image-565" style="float:left" /><p class="wp-caption-text"> </p></div>
<p>В этой заметке я хочу рассказать об одном нюансе, который обязательно нужно помнить при создании <strong>web интерфейса или дизайна сайта</strong>.</p>
<p>Часто для того, чтобы подчеркнуть, что страница реагирует на действия посетителя, используют дополнительные изображения (например, <strong>gif анимацию</strong>).</p>
<p>Самый распространенный пример – <strong>индикаторы загрузки</strong>. Кстати, существует <a href="http://www.ajaxload.info/">бесплатный сервис</a>, который создает такие загрузчики.</p>
<p><strong>Алгоритм работы</strong> в большинстве случаев следующий:<br />
<span id="more-564"></span><br />
1) посетитель нажимает на кнопку;</p>
<p>2) выполняется JavaScript функция, которая:</p>
<p>&nbsp;&nbsp;2.1) отправляет запрос серверу;</p>
<p>&nbsp;&nbsp;2.2) показывает загрузчик;</p>
<p>3) после получения ответа сервера, функция:</p>
<p>&nbsp;&nbsp;3.1) показывает результаты выполнения запроса;</p>
<p>&nbsp;&nbsp;3.2) убирает загрузчик.</p>
<p>И вот тут возникает <strong>проблема</strong>. Время загрузки изображения может быть <strong>соизмеримо</strong> со временем выполнения запроса. Т.е. посетитель нажмет на кнопку, а реакция на это нажатие появится через несколько секунд (в зависимости от скорости интернет канала).</p>
<p>Правда при повторном нажатии на кнопку задержек не будет, т.к. картинка с анимацией будет взята из кэша браузера.</p>
<p>Очевидно, что если картинка будет загружена в кэш <strong>до</strong> того, как посетитель нажмет на кнопку, то проблемы с задержкой не возникнет.</p>
<p>Самое просто <strong>решение</strong> – загружать все необходимые изображения сразу при загрузке страницы.</p>
<p>Для этого в конец страницы нужно вставить блок с рисунком и сделать его скрытым. Например, так:</p>
<pre class="brush: html">&lt;div class=&quot;hide&quot;&gt;&lt;img src=&quot;images/my_animation.gif&quot;&lt;/div&gt;</pre>
<p>CSS правило, которое скрывает блок с классом <code>hide</code>:</p>
<pre class="brush: css">.hide {
	display: none;
}</pre>
<p>Как видите, ничего сложного.</p>
<p>Если возникли вопросы или замечания – пишите. Постараюсь ответить <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>Удачи!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/nezametnaya-zagruzka-kartinok.html/feed</wfw:commentRss>
		<slash:comments>26</slash:comments>
		</item>
		<item>
		<title>Раскрашиваем блоки с кодом. PHP библиотеки и плагины для WordPress</title>
		<link>http://www.simplecoding.org/raskrashivaem-bloki-s-kodom.html</link>
		<comments>http://www.simplecoding.org/raskrashivaem-bloki-s-kodom.html#comments</comments>
		<pubDate>Thu, 22 May 2008 18:47:16 +0000</pubDate>
		<dc:creator>Владимир</dc:creator>
				<category><![CDATA[Web дизайн]]></category>
		<category><![CDATA[Web разработка]]></category>
		<category><![CDATA[WordPress]]></category>

		<guid isPermaLink="false">http://www.simplecoding.org/raskrashivaem-bloki-s-kodom.html</guid>
		<description><![CDATA[Ни для кого не секрет, что читать код значительно удобнее в редакторе с подсветкой синтаксиса. Поэтому очень полезно сделать такую подсветку на страницах своего сайта. В этой статье я расскажу о библиотеках, которые позволяют легко решить эту задачу. В первую очередь определим минимальные требования к таким библиотекам: 1) подсветка кода без лишних действий с вашей [...]]]></description>
			<content:encoded><![CDATA[<p><img src="http://www.simplecoding.org/wp-content/uploads/2008/05/highlight_code_libs.png" alt="Подсветка синтаксиса" style="float: left" /></p>
<p>Ни для кого не секрет, что читать код значительно удобнее в редакторе с <strong>подсветкой синтаксиса</strong>. Поэтому очень полезно сделать такую подсветку на страницах своего сайта. В этой статье я расскажу о библиотеках, которые позволяют легко решить эту задачу.</p>
<p>В первую очередь определим <strong>минимальные требования</strong> к таким библиотекам:</p>
<p>1) подсветка кода без лишних действий с вашей стороны, т.е. в идеале нужно указать только язык, подсветку для которого нужно включить, и выделить сам блок с кодом (обычно с помощью тегов &lt;pre&gt;);</p>
<p>2) нумерация строк кода (очень удобно ссылаться на эти номера в описании, да и посетителю будет легче ориентироваться).</p>
<p>На сегодняшний день существует довольно много библиотек, выполняющих подсветку кода. Но по принципу работы, на мой взгляд, можно выделить <strong>два основных типа</strong>:<br />
<span id="more-312"></span><br />
1) подсветка синтаксиса выполняется <strong>на стороне клиента</strong>, т.е. браузером;</p>
<p>2) подсветка выполняется <strong>серверным скриптом</strong>.</p>
<p>В первом случае браузер получает страницу, в которой блоки кода не имеют подсветки и находятся внутри тегов <code>&lt;pre&gt;&lt;code&gt;…&lt;/code&gt;&lt;/pre&gt;</code> (теги могут быть другими) и JavaScript функцию.</p>
<p>При загрузке страницы будет выполнена js функция, которая проанализирует содержимое этих блоков, &#034;раскрасит&#034; код, пронумерует строки и т.д.</p>
<p>Во втором варианте блоки кода анализируются на стороне сервера, и тут же выполняется подсветка. Например, если исходная страница содержит:<br />
<code>&lt;pre lang="php"&gt;  if ($tagcloud === FALSE) {&lt;/pre&gt;</code></p>
<p>то браузер получит что-то вроде:</p>
<pre class="brush: html">&lt;div class="ch_code_container" style="font-family: monospace;white-space: nowrap;height:-1px;"&gt;
&lt;ol&gt;
&lt;li style="font-family: 'Courier New', Courier, monospace; color: black; font-weight: normal; font-style: normal;"&gt;
&lt;div style="font-family: 'Courier New', Courier, monospace; font-weight: normal;"&gt;&lt;span style="color: #b1b100;"&gt;if&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;(&lt;/span&gt;&lt;span style="color: #0000ff;"&gt;$tagcloud&lt;/span&gt; === &lt;span style="color: #000000; font-weight: bold;"&gt;FALSE&lt;/span&gt;&lt;span style="color: #66cc66;"&gt;)&lt;/span&gt; &lt;span style="color: #66cc66;"&gt;{&lt;/span&gt;&lt;/div&gt;
&lt;/li&gt;
&lt;/ol&gt;
&lt;/div&gt;</pre>
<p><em>Примечание</em>. Этот блок я специально не форматировал.</p>
<p>Как видите, здесь каждый элемент находится внутри тегов <code>&lt;div&gt;</code> или <code>&lt;span&gt;</code>, для которых установлены соответствующие стили.</p>
<p>Теперь о <strong>преимуществах и недостатках</strong>.</p>
<p>Первый вариант (<strong>подсветка на стороне браузера</strong> с помощью JavaScript).<br />
<em>Преимущества</em>.<br />
1) Меньше нагрузка на сервер (хотя, если страницы кэшируются, особенной разницы не будет).<br />
2) Если вставки кода большие, то может быть выигрыш в размере страницы (т.е. размер JavaScript будет меньше размера дополнительной разметки со стилями во втором варианте).</p>
<p><em>Недостатки</em>.<br />
1) Нужна поддержка JavaScript на стороне клиента. Если страница просматривается в браузере, то это не проблема, а вот в RSS ридере подсветку не увидите.<br />
2) Размер страницы увеличивается за счет js-файла и грузить его ради пары строк как-то не рационально (т.е. выигрыш в размере можно получить только при достаточно больших блоках кода).</p>
<p>Второй вариант (<strong>подсветка на стороне сервера</strong>).<br />
<em>Преимущества</em>.<br />
1) Такую подсветку правильно отображают не только браузеры, но и RSS ридеры и eMail клиенты (актуально, если вы рассылаете ленту по почте).</p>
<p><em>Недостатки</em>.<br />
1) Объем страницы увеличивается и довольно сильно.<br />
2) Увеличивается время формирования страницы.</p>
<p>Теперь переходим к <strong>библиотекам</strong>.</p>
<p>Для <strong>подсветки на стороне браузера</strong> можно использовать:</p>
<p>1) <a href="http://softwaremaniacs.org/soft/highlight/">highlight.js</a></p>
<p>2) <a href="http://codepress.org/">Code Press</a></p>
<p>3) <a href="http://code.google.com/p/google-code-prettify/">Mike Samuel’s JavaScript Code Prettifier</a></p>
<p>4) <a href="http://code.google.com/p/syntaxhighlighter/">SyntaxHighlighter</a> – существует <a href="http://erik.range-it.de/wordpress/plugins/syntaxhighlighter/">плагин для WordPress</a>, основанных на этой библиотеке</p>
<p>Следующие три библиотеки позволяют не только подсветить код, но и <em>создать текстовый редактор</em> внутри textarea.</p>
<p>5) <a href="http://www.cdolivet.net/index.php?page=editArea&amp;sess=767041e536992a12bab9fe8bbc312707">Edit area</a></p>
<p>6) <a href="http://marijn.haverbeke.nl/codemirror/">CodeMirror</a></p>
<p>7) <a href="http://helene.muze.nl/ariadne/loader.php/helene/">Helene</a></p>
<p><strong>Подсветка на стороне сервера</strong>:</p>
<p>1) <a href="http://qbnz.com/highlighter/">GeSHi</a> (наверное, самая распространенная) на ее основе создан ряд плагинов для различних CMS</p>
<p>2) <a href="http://www.gnu.org/software/enscript/">GNU Enscript</a> и плагин для WordPress на ее основе &#8211; <a href="http://scott.yang.id.au/2004/05/syntax-hilight-enscript/">Syntax Highlighting with Enscript</a>.</p>
<p>3) <a href="http://www.andre-simon.de/dokuwiki/doku.php?id=en:wordpress">Highlight</a> &#8211; плагин для WordPress.</p>
<p>Теперь приведу список плагинов WordPress, которые работают <em>на основе GeSHi</em></p>
<p>4) <a href="http://blog.igeek.info/wp-plugins/igsyntax-hiliter/">iG:Syntax Hiliter</a></p>
<p>5) <a href="http://kpumuk.info/projects/wordpress-plugins/codecolorer/">CodeColorer</a></p>
<p>6) <a href="http://blog.kno.at/tools/highlight-source-pro/">Highlight Source Pro</a></p>
<p>7) <a href="http://mediakey.dk/~cc/syntax-highlight-code-in-wordpress-posts/">Code Snippet 2.0</a></p>
<p>8 ) <a href="http://www.deanlee.cn/wordpress/code_highlighter_plugin_for_wordpress/">Dean’s Code Highlighter</a> – этот плагин я использую в своем блоге.</p>
<p>9) <a href="http://wordpress.org/extend/plugins/wp-syntax/">WP-Syntax</a></p>
<p>Пару слов о <strong>количестве поддерживаемых языков</strong>. Если вам нужна подсветка широко распространенных языков (вроде C++, Java, PHP, HTML), то, скорее всего, вам подойдет любая из упомянутых здесь библиотек. Если же вы хотите подсветить что-нибудь экзотическое, то и в этом случае есть из чего выбрать. Например, GeSHi поддерживает более 70 языков (о некоторых я даже не слышал <img src='http://www.simplecoding.org/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' />  ).</p>
<p>Как видите, есть из чего выбрать!</p>
<p>Удачи!</p>
]]></content:encoded>
			<wfw:commentRss>http://www.simplecoding.org/raskrashivaem-bloki-s-kodom.html/feed</wfw:commentRss>
		<slash:comments>19</slash:comments>
		</item>
	</channel>
</rss>

