<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><rss 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/" version="2.0">

<channel>
	<title>Как создать свой сайт. Основы самостоятельного сайтостроения</title>
	
	<link>http://webformyself.com</link>
	<description>Проект содержит массу полезных обучающих статей и видео уроков по созданию сайта. Будет полезен веб-разработчикам, а также новичкам, которые только пытаются создать свой сайт</description>
	<lastBuildDate>Wed, 23 May 2012 07:35:40 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/webformyself" /><feedburner:info xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" uri="webformyself" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><item>
		<title>Премиум. Секреты работы с CMS WordPress. Выбор статей для вывода.</title>
		<link>http://webformyself.com/premium-sekrety-raboty-s-cms-wordpress-vybor-statej-dlya-vyvoda/</link>
		<comments>http://webformyself.com/premium-sekrety-raboty-s-cms-wordpress-vybor-statej-dlya-vyvoda/#comments</comments>
		<pubDate>Wed, 23 May 2012 07:32:25 +0000</pubDate>
		<dc:creator>Андрей Кудлай</dc:creator>
				<category><![CDATA[Премиум]]></category>
		<category><![CDATA[wordpress]]></category>
		<category><![CDATA[выбор статей для вывода]]></category>

		<guid isPermaLink="false">http://webformyself.com/?p=7677</guid>
		<description><![CDATA[<img class="webfor-img" src="http://webformyself.com/wp-content/uploads/premium/2012/wpsecretsseries/03/100.jpg" alt="wordpress выбор статей для вывода" title="wordpress выбор статей для вывода" width="100" height="100" class="alignnone size-full wp-image-256" />

<p><em><strong>От автора:</strong> мы продолжаем цикл уроков, посвященных работе с CMS WordPress. В этом уроке мы научимся отбирать необходимые нам статьи для их вывода на сайте. По умолчанию все статьи в WP отбираются и выводятся в обратном хронологическом порядке, т.е. первой будет показана самая "свежая" статья, за ней - чуть более старая и так далее независимо от категории статьи. Мы научимся сами определять вывод статей, указывая какую статью показывать, а какую нет.</em></p>

<p><strong>Из этого урока Вы узнаете:</strong></p>
<p>1. Функция query_posts(), как одна из основ WordPress.</p>
<p>2. Что такое произвольные поля и для чего их можно использовать?</p>
<p>3. Как получить вывод статей только по произвольному полю?</p>
<p>4. Каким образом можно выводить статьи только определенной категории или даже нескольких категорий.</p>
<p>5. Как исключить статьи рубрики из вывода?</p>
<p>6. Что такое метки в WordPress и почему они используются далеко не в полной мере?</p>
<p>7. Как можно отбирать статьи для вывода по меткам?</p>

<h3>План урока:</h3>
<ol>
<p><span class="amazing">1. Выбор статей для вывода.</span></p>
</ol>

<h3>Детали учебника</h3>
<div class="perechen">
<p><span class="amazing"><strong>Сложность:</strong> Легкая</span></p>
<p><span class="amazing"><strong>Урок:</strong> Видео (.mp4)</span></p>
<p><span class="amazing"><strong>Время:</strong> 00:30:51</span></p>
<p><span class="amazing"><strong>Размер архива:</strong> 57 Mb</span></p>
</div>
<div class="autor-tut">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top"><img src="http://webformyself.com/wp-content/themes/default/images/kudlai.jpg" border="0" alt="автор" width="100" height="100" align="left" /></td>
<td valign="top">
<h2>Автор: Андрей Кудлай</h2>
Зовут меня Андрей Кудлай. Родом я из Украины, живу в Днепропетровске. Веб-программированию учился сам. Неплохо знаю HTML, CSS, PHP. Немного разбираюсь в JavaScript’e - в свободное время как раз занимаюсь его изучением.
</tr>
</tbody></table>
</div>
<p>Итак, приступим!</p>
<!-- Начало кода EcommTools.com -->
<a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium1month']);" href="http://www.ecommtools.com/buy/andreybern/premium1month/saler1month" target="_blank">
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium1month',action:'buy',payby:'',refid:'',channel:'page1month'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium1.png" alt="купить" border="0" />
</a>

<a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium3month']);" href="http://www.ecommtools.com/buy/andreybern/premium3month/saler3month" target="_blank">
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium3months',action:'buy',payby:'',refid:'',channel:'page3months'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium3.png" alt="купить" border="0" />
</a>
<!-- Конец кода EcommTools.com -->
<a href="http://webformyself.com/premium-sekrety-raboty-s-cms-wordpress-vybor-statej-dlya-vyvoda/">Продолжить чтение →</a><div class="exerpt_more_link"><a href="http://webformyself.com/premium-sekrety-raboty-s-cms-wordpress-vybor-statej-dlya-vyvoda/">Подробнее »»</a></div>]]></description>
			<content:encoded><![CDATA[<p><img class="webfor-img" src="http://webformyself.com/wp-content/uploads/premium/2012/wpsecretsseries/03/100.jpg" alt="wordpress выбор статей для вывода" title="wordpress выбор статей для вывода" width="100" height="100" class="alignnone size-full wp-image-256" /></p>
<p><em><strong>От автора:</strong> мы продолжаем цикл уроков, посвященных работе с CMS WordPress. В этом уроке мы научимся отбирать необходимые нам статьи для их вывода на сайте. По умолчанию все статьи в WP отбираются и выводятся в обратном хронологическом порядке, т.е. первой будет показана самая &laquo;свежая&raquo; статья, за ней &#8211; чуть более старая и так далее независимо от категории статьи. Мы научимся сами определять вывод статей, указывая какую статью показывать, а какую нет.</em></p>
<p><strong>Из этого урока Вы узнаете:</strong></p>
<p>1. Функция query_posts(), как одна из основ WordPress.</p>
<p>2. Что такое произвольные поля и для чего их можно использовать?</p>
<p>3. Как получить вывод статей только по произвольному полю?</p>
<p>4. Каким образом можно выводить статьи только определенной категории или даже нескольких категорий.</p>
<p>5. Как исключить статьи рубрики из вывода?</p>
<p>6. Что такое метки в WordPress и почему они используются далеко не в полной мере?</p>
<p>7. Как можно отбирать статьи для вывода по меткам?</p>
<h3>План урока:</h3>
<ol>
<p><span class="amazing">1. Выбор статей для вывода.</span></p>
</ol>
<h3>Детали учебника</h3>
<div class="perechen">
<p><span class="amazing"><strong>Сложность:</strong> Легкая</span></p>
<p><span class="amazing"><strong>Урок:</strong> Видео (.mp4)</span></p>
<p><span class="amazing"><strong>Время:</strong> 00:30:51</span></p>
<p><span class="amazing"><strong>Размер архива:</strong> 57 Mb</span></p>
</div>
<div class="autor-tut">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top"><img src="http://webformyself.com/wp-content/themes/default/images/kudlai.jpg" border="0" alt="автор" width="100" height="100" align="left" /></td>
<td valign="top">
<h2>Автор: Андрей Кудлай</h2>
<p>Зовут меня Андрей Кудлай. Родом я из Украины, живу в Днепропетровске. Веб-программированию учился сам. Неплохо знаю HTML, CSS, PHP. Немного разбираюсь в JavaScript’e &#8211; в свободное время как раз занимаюсь его изучением.<br />
</tr>
</tbody>
</table>
</div>
<p>Итак, приступим!</p>
<p><!-- Начало кода EcommTools.com --><br />
<a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium1month']);" href="http://www.ecommtools.com/buy/andreybern/premium1month/saler1month" target="_blank"><br />
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium1month',action:'buy',payby:'',refid:'',channel:'page1month'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium1.png" alt="купить" border="0" /><br />
</a></p>
<p><a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium3month']);" href="http://www.ecommtools.com/buy/andreybern/premium3month/saler3month" target="_blank"><br />
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium3months',action:'buy',payby:'',refid:'',channel:'page3months'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium3.png" alt="купить" border="0" /><br />
</a><br />
<!-- Конец кода EcommTools.com --><br />
<a href="http://webformyself.com/premium-sekrety-raboty-s-cms-wordpress-vybor-statej-dlya-vyvoda/">Продолжить чтение →</a>
<div><a href="http://webformyself.com/premium-sekrety-raboty-s-cms-wordpress-vybor-statej-dlya-vyvoda/"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://webformyself.com/premium-sekrety-raboty-s-cms-wordpress-vybor-statej-dlya-vyvoda/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Кроссбраузерные отражения, свечения и размытия CSS.</title>
		<link>http://webformyself.com/krossbrauzernye-otrazheniya-svecheniya-i-razmytiya-css/</link>
		<comments>http://webformyself.com/krossbrauzernye-otrazheniya-svecheniya-i-razmytiya-css/#comments</comments>
		<pubDate>Fri, 18 May 2012 05:00:09 +0000</pubDate>
		<dc:creator>Андрей Кудлай</dc:creator>
				<category><![CDATA[HTML&CSS]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://webformyself.com/?p=7644</guid>
		<description><![CDATA[От автора: отражения способны добавить объектам интересную размерность, ссужая их оттенком реализма и наделяя внутри окружающей среды некоторым контекстом. Давайте рассмотрим достижение эффекта отражения с помощью CSS, а также для сравнения исследуем свечение и кроссбраузерное размытие.. Детали учебника Сложность: Средняя &#8230; <a href="http://webformyself.com/krossbrauzernye-otrazheniya-svecheniya-i-razmytiya-css/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="webfor-img" title="отражение, свечение и размытие в CSS" src="http://webformyself.com/wp-content/uploads/2012/20/100.jpg" alt="отражение, свечение и размытие в CSS" width="100" height="100" /></p>
<p><em><strong>От автора:</strong> отражения способны добавить объектам интересную размерность, ссужая их оттенком реализма и наделяя внутри окружающей среды некоторым контекстом. Давайте рассмотрим достижение эффекта отражения с помощью CSS, а также для сравнения исследуем свечение и кроссбраузерное размытие..</em></p>
<h3>Детали учебника</h3>
<div class="perechen">
<p><span class="amazing"><strong>Сложность:</strong> Средняя</span></p>
<p><span class="amazing"><strong>Примерное время выполнения:</strong> 30 мин.</span></p>
<p><span class="amazing"><strong>Совместимость:</strong> современные браузеры, IE7+</span></p>
</div>
<div class="down-demo">
<p align="center"><a href="http://narod.ru/disk/49561226001.2b719ef3d2ab2eed549c07c1f282fbdc/Archive.zip.html" target="_blank"><img src="/wp-content/themes/web4my/images/download.jpg" alt="скачать исходники" /></a><a href="http://webdesigntutsplus.s3.amazonaws.com/tuts/306_reflections/reflection/demo.html" target="_blank"><img src="/wp-content/themes/web4my/images/demo.jpg" alt="демо" /></a> </p>
</div>
<p><span id="more-7644"></span></p>
<h2>Предпосылки</h2>
<p>Изучение данного материала предполагает, что:</p>
<p> &#8211; Вы знаете HTML;</p>
<p> &#8211; Вы знакомы с селекторами CSS и CSS2;</p>
<p> &#8211; Если хотите в точности воспроизвести образец, то должны знать, как работает тень блока box-shadow. Она в этом учебнике не является ключевой, так что вам придется постигать ее самим. Если понадобится объяснение, предлагаю вам взглянуть на статью <a href="http://webdesign.tutsplus.com/tutorials/htmlcss-tutorials/css3-vs-photoshop-rounded-corners-and-box-shadows/" target="_blank">CSS3 vs. Photoshop : закругленные углы и тени блока</a>.</p>
<h2>Box-reflect vs. &laquo;Свой метод&raquo;</h2>
<p>Box-reflect &#8211; свойство CSS, как раз предназначенное для этой цели: создания отражений. Мы не станем применять box-reflect и mask-image, потому что:</p>
<p> &#8211; На момент написания этой статьи оба свойства поддерживаются только webkit (Chrome и Safari).</p>
<p> &#8211; Реализация кишит ошибками, если не сказать более.</p>
<p>Когда Microsoft представил свои эффекты фильтра (вспомните эпоху IE 4, вложенные таблицы для разметки и изображения для отражений), устаревшие фильтры не применялись ко всему данному элементу. Думаю, они использовали некий вид граничного блока из верхнего левого к нижнему правому углу элемента, что имело смысл, так как, насколько я знаю, не было способа выйти за пределы этого блока. Однако, так и не исправили это.</p>
<p>Сейчас, в век Chrome 17, webkit сделал ту же ошибку. Рисунки маски, ключ к -webkit-box-reflect, делают некий вид динамического снэпшота внутри граничного блока, вставляют его снизу и меняют непрозрачность. Я постарался восстановить демо-образец с помощью -webkit-box-reflect:</p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/20/1.jpg" title="" alt="" width="600" height="356" /></p>
<p>Я его не закончил, но проблема ясна. У отображаемого элемента (будем называть его ETBR &#8211; Element to be Reflected) есть border-radius и box-shadow. Тень блока видна внутри, а не снаружи граничного блока.</p>
<p>В моем собственном методе матрица видоизменяется, вставленная тень блока и непрозрачность заменят box-reflect и mask-image. Ограничения:</p>
<p> &#8211; Самое большое ограничение заключается в том, что вставленная тень блока не делает отражение полностью прозрачным. Это сочетание настоящей и фальшивой прозрачности будет работать в большинстве случаях, но не всегда.</p>
<p> &#8211; Встроенная тень блока не влияет на текст отображаемого элемента (ETBR). Это происходит, если цвет текста не такой же, как фоновый цвет поверхности.</p>
<p><a href="http://jsfiddle.net/_bop/CD3qv/11/" target="_blank">Поиграть с образцом</a> | <a href="http://jsfiddle.net/_bop/CD3qv/11/show" target="_blank">Полноэкранное изображение</a></p>
<p>Цвет текста не становится темнее там, где это делает фон. Поэтому, кажется, нельзя получить другой цвет и тень блока одновременно.</p>
<h2>Выбор…</h2>
<p>Кстати говоря, о матрицах и отражениях&#8230;</p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/20/2.jpg" title="" alt="" width="600" height="339" /></p>
<p><em>&laquo;Выбираете синюю таблетку – я показываю, как воссоздать демо-образец шаг за шагом. Выбираете красную – покажу, как сделать отражения чего угодно и расскажу, где можно купить отражающие тени по очень привлекательной цене&raquo;</em></p>
<p>Проще говоря, некоторые из следующих этапов дополнительные, в зависимости от того, желаете ли вы восстановить демо-образец пиксель за пикселем.</p>
<h2>Дополнительно: подготовка</h2>
<p>Демо-образец начинается с шаблона HTML5…</p>
<p><strong>index.html</strong></p>
<pre class="brush: html">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;meta charset=&quot;utf-8&quot; /&gt;
        &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge,chrome=1&quot; /&gt;
        &lt;title&gt;CSS3 Reflections&lt;/title&gt;
        &lt;meta name=&quot;description&quot; content=&quot;Reflection...&quot; /&gt;
        &lt;meta name=&quot;author&quot; content=&quot;Bob de Ruiter&quot; /&gt;
        &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width; initial-scale=1.0&quot; /&gt;
        &lt;link rel=&quot;shortcut icon&quot; href=&quot;/favicon.ico&quot; /&gt;
        &lt;link rel=&quot;apple-touch-icon&quot; href=&quot;/apple-touch-icon.png&quot; /&gt;
    &lt;/head&gt;
    &lt;body&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>…и этого файла CSS.</p>
<p><strong>style.css</strong></p>
<pre class="brush: css">
html {
    height: 100%;
}
body {
    text-align: center;
    line-height: 1;
    margin: 0;
    padding: 0;
    height: 100%;
}
p {
    line-height: 1.2;
}
</pre>
<p>И, конечно, в таблицу стилей добавим ссылку:</p>
<pre class="brush: html">
&lt;head&gt;
    &lt;meta charset=&quot;utf-8&quot; /&gt;
    &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge,chrome=1&quot; /&gt;
    &lt;title&gt;CSS reflections!&lt;/title&gt;
    &lt;meta name=&quot;description&quot; content=&quot;&quot; /&gt;
    &lt;meta name=&quot;author&quot; content=&quot;Bob&quot; /&gt;
    &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width; initial-scale=1.0&quot; /&gt;

    &lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot; /&gt;

    &lt;link rel=&quot;shortcut icon&quot; href=&quot;/favicon.ico&quot; /&gt;
    &lt;link rel=&quot;apple-touch-icon&quot; href=&quot;/apple-touch-icon.png&quot; /&gt;
&lt;/head&gt;
</pre>
<h2>2D, но 3D</h2>
<p>Демо-образец двухмерный. Ни единого 3D-элемента. Мы об этом знаем, но наша цель – заставить их считать, что мы это создали, а затем сфотографировали фронтальный вид.</p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/20/3.jpg" title="" alt="" width="600" height="400" /></p>
<p>Если мы хотим заставить их поверить, что это 3D, то должны определить, как объекты располагаются и вращаются в трехмерном пространстве. У <a href="http://d3pr5r64n04s3o.cloudfront.net/tuts/306_reflections/reflection/demo.html" target="_blank">демо-образца</a> есть горизонт. Верхние 10% &#8211; это черное «небо», прочие 90% &#8211; фальшивая трехмерная плоскость. Отображаемый элемент и плоскость перпендикулярны друг другу (под углом 90°), отражение должно быть параллельно отображаемому элементу.</p>
<h2>Шаг 1: дополнительный Плоскость и отображаемый элемент</h2>
<p>HTML:</p>
<pre class="brush: html">
&lt;body&gt;
    &lt;div id=&quot;plane&quot;&gt;
        &lt;header&gt;&lt;span id=&quot;ETBR&quot;&gt;reflection&lt;/span&gt;&lt;/header&gt;
    &lt;/div&gt;
&lt;/body&gt;
</pre>
<p>Отражаемый элемент (ETBR) – потомок плоскости. Таким образом, он остается в одном и том же положении видимым с плоскости, а свечение остается на плоскости.</p>
<pre class="brush: css">
body {
    text-align: center;
    line-height: 1;
    margin: 0;
    padding: 0;
    background-color: #000;
    height: 100%;
}
p {
    line-height: 1.2;
}
#plane {
    left: 0;
    top: 10%;
    width: 100%;
    bottom: 0;
    min-width: 1080px;
    min-height: 600px;
    position: absolute;
    overflow: hidden;
    overflow-x: visible;
}
</pre>
<p>Примечание:</p>
<p> &#8211; У плоскости есть минимальная ширина min-width и минимальная высота min-height, поэтому отражаемый элемент всегда виден.</p>
<p> &#8211; Переполнение overflow-y установлено на hidden, поэтому свечение отражаемого элемента остается на плоскости. (Небо должно быть непроглядно черным.)</p>
<p> &#8211; У плоскости нет фонового цвета, она получает свою окраску от свечения, что совершенно бессмысленно, но смотрится лучше всего.</p>
<h2>Шаг 2: разметка отражения</h2>
<p>Определите место отражаемого объекта (ETBR), скопируйте его, вставьте внутрь самого себя и переименуйте в refl:</p>
<pre class="brush: html">
&lt;span id=&quot;ETBR&quot;&gt;reflection&lt;span id=&quot;refl&quot;&gt;reflection&lt;/span&gt;&lt;/span&gt;
</pre>
<p>Теперь внутри css создайте селектор объекта. Добавьте к селектору #refl, чтобы наши стили применялись к обоим элементам:</p>
<pre class="brush: css">
#ETBR, #refl {

}
</pre>
<p>По существу, CSS и HTML отражения должны быть такими же, как CSS и HTML отражаемого элемента ETBR. Мы разместим, зеркалируем и приукрасим отражение, начиная с шага 5. А сейчас мы скроем отражение.</p>
<pre class="brush: css">
#ETBR, #refl {

}
#refl {
    display: none;
}
</pre>
<p>Internet Explorer – это всегда Internet Explorer, так что нам придется добавить немного условного HTML:</p>
<pre class="brush: html">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;meta charset=&quot;utf-8&quot; /&gt;
        &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge,chrome=1&quot; /&gt;
        &lt;title&gt;CSS3 Reflections&lt;/title&gt;
        &lt;meta name=&quot;description&quot; content=&quot;Reflection...&quot; /&gt;
        &lt;meta name=&quot;author&quot; content=&quot;Bob de Ruiter&quot; /&gt;
        &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width; initial-scale=1.0&quot; /&gt;

        &lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot; /&gt;

        &lt;link rel=&quot;shortcut icon&quot; href=&quot;/favicon.ico&quot; /&gt;
        &lt;link rel=&quot;apple-touch-icon&quot; href=&quot;/apple-touch-icon.png&quot; /&gt;
    &lt;/head&gt;
    &lt;!--[if lt IE 9 ]&gt; &lt;body class=&quot;oldie&quot;&gt; &lt;![endif]--&gt;
    &lt;!--[if IE 9 ]&gt; &lt;body class=&quot;ie9&quot;&gt; &lt;![endif]--&gt;
    &lt;!--[if (gt IE 9)|!(IE)]&gt;&lt;!--&gt; &lt;body class=&quot;modern&quot;&gt; &lt;!--&lt;![endif]--&gt;
        &lt;div id=&quot;plane&quot;&gt;
            &lt;header&gt;&lt;span id=&quot;ETBR&quot;&gt;reflection&lt;span id=&quot;refl&quot;&gt;reflection&lt;/span&gt;&lt;/span&gt;&lt;/header&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Вы можете спросить &laquo;почему?&raquo;, просто немного потерпите. Так как вы нетерпеливы, первый раздел <a href="http://jsfiddle.net/_bop/CD3qv/" target="_blank">Поиграть с образцом</a> будет совершенно черным. Хотите увидеть влияние плоскости? Измените размер.</p>
<p><a href="http://jsfiddle.net/_bop/CD3qv/" target="_blank">Поиграть с образцом</a> | <a href="http://jsfiddle.net/_bop/CD3qv/show" target="_blank">Полноэкранное изображение</a></p>
<h2>Шаг 3: дополнительный Основные стили</h2>
<p>Здесь объяснения не нужны:</p>
<pre class="brush: css">
#ETBR, #refl {
    color: #004;

    font-family: Impact, &#039;Arial Black&#039;, Helvetica, Arial, sans-serif;
    text-transform: uppercase;
    font-size: 200px;
    background-color: #FFE;
    font-weight: bold;
    padding: 30px;
    display: inline-block;
}
#refl {
    display: none;
}
</pre>
<p>Ну хорошо, немного объясню. Сочетание text-align: center; и display: inline-block; располагает элемент по центру, но это – не поиски Святого Грааля; встраиваемые элементы не могут содержать элементы блоков. Я применил это, потому что не хотел добавлять к образцу тысячи «плавающих» контейнеров. Хотя в общем, <a href="http://matthewjamestaylor.com/blog/beautiful-css-centered-menus-no-hacks-full-cross-browser-support" target="_blank">это</a> – то, что нужно.</p>
<p><a href="http://jsfiddle.net/_bop/CD3qv/1/" target="_blank">Поиграть с образцом</a> | <a href="http://jsfiddle.net/_bop/CD3qv/1/show" target="_blank">Полноэкранное изображение</a></p>
<h2>Шаг 4: дополнительный Закругленные углы и свечение</h2>
<p>Свечение состоит из трех теней: большой растянутой тени (которая выглядит больше похожей на отражение света на поверхности), настоящего свечения (белой тени с более коротким диапазоном размытия) и черной вставленной тени (которая дает возможность отражаемому элементу ETBR выглядеть, как будто он светится). Как я уже говорил, я не собираюсь объяснять, как работает тень блока box-shadow, а уж радиус угла border-radius сейчас уже говорит сам за себя.</p>
<pre class="brush: css">
#ETBR, #refl {
    color: #004;

    font-family: Impact, &#039;Arial Black&#039;, Helvetica, Arial, sans-serif;
    text-transform: uppercase;
    font-size: 200px;
    background-color: #FFE;
    font-weight: bold;
    padding: 30px;
    display: inline-block;

    box-shadow: rgba(255,255,240,.2) 0 0 200px 100px, rgba(255,255,240,.3) 0 0 40px, inset rgba(0,0,0,.8) 0 0 20px;
    border-radius: 30px;
}
</pre>
<p><a href="http://jsfiddle.net/_bop/CD3qv/2/" target="_blank">Поиграть с образцом</a> | <a href="http://jsfiddle.net/_bop/CD3qv/2/show" target="_blank">Полноэкранное изображение</a></p>
<h2>Шаг 5: размещаем отражение</h2>
<p>Отобразите селектор #refl, чтобы отражение стало видимым. Так как отражения «ненастоящие», наше отражение не станет частью тракта обработки документов; оно должно «плавать». Очевидный выбор – установить абсолютное позиционирование, это значит, элемент размещается относительно своего родительского элемента. Так как у родительского элемента отражения не существует, он будет расположен относительно тэга body.</p>
<p>Гораздо легче установить отражение относительно реального текста, который тоже является родителем отражения (совпадение?). Чтобы сделать это, сначала нужно «установить» ETBR:</p>
<pre class="brush: css">
#ETBR, #refl {
    color: #004;

    font-family: Impact, &#039;Arial Black&#039;, Helvetica, Arial, sans-serif;
    text-transform: uppercase;
    font-size: 200px;
    background-color: #FFE;
    font-weight: bold;
    padding: 30px;
    display: inline-block;

    box-shadow: rgba(255,255,240,.2) 0 0 200px 100px, rgba(255,255,240,.3) 0 0 40px, inset rgba(0,0,0,.8) 0 0 20px;
    border-radius: 30px;

    position: relative;
}
</pre>
<p>Таким образом местоположение в действительности не меняется, но он теперь расположен. Теперь:</p>
<pre class="brush: css">
#refl {
    position: absolute;

    top: 100%;
    left: 0;
}
</pre>
<p>Верх отражения относителен высоты и расположения отражаемого элемента (ETBR). 0% дает нам тот же верх, 200% дает зазор, равный высоте ETBR, а 100% ставит верх отражения в низ отражаемого элемента ETBR. Левое значение то же самое, но принимает процентное отношение ширины.</p>
<p><a href="http://jsfiddle.net/_bop/CD3qv/3/" target="_blank">Поиграть с образцом</a> | <a href="http://jsfiddle.net/_bop/CD3qv/3/show" target="_blank">Полноэкранное изображение</a></p>
<h2>Шаг 6: современное зеркалирование, размытие и прозрачность</h2>
<p>Эти свойства есть почти у каждого часто используемого браузера, от IE6 до Google Chrome. Однако их реализация отличается. Современные браузеры очень прямолинейны, для каждой характеристики свойств: transform, blur и opacity. Еще мы применим box-shadow, но сначала зеркалирование.</p>
<p><strong>Зеркалирование</strong></p>
<pre class="brush: css">
#refl {
    position: absolute;

    top: 100%;
    left: 0;

    -moz-transform: scaleY(-1);
    -webkit-transform: scaleY(-1);
    -ms-transform: scaleY(-1);
}
</pre>
<p>С помощью transform можно модифицировать элемент до любого параллелограмма, который только можно представить. Я знаю, есть много параллелограммов. Но нам нужно всего лишь зеркалировать отражение, так что большинство функций трансформирования у нас останутся неиспользованными.</p>
<p>Каждый дизайнер должен знать, что масштабирование на -1 по оси Y – то же самое, что зеркалирование. Масштабирование по оси Y – это умножение расстояния между верхом (и низом) и центром. Если по оси Y масштабировать в 2, расстояние между верхом и центром дважды увеличится. Если масштабировать на -1, расстояние останется прежним, но верх будет там, где был низ, а низ – где был верх. Поздравляю, вы теперь знаете, как зеркалировать!</p>
<p><strong>Размытие</strong></p>
<p>Очень скоро все современные браузеры будут поддерживать фильтры -webkit-filter или фильтры SVG. FF, Opera и IE10 уже поддерживают последнее, Safari и Chrome пока только создают напряжение перед их выпуском. Одним из фильтров SVG является старое доброе Гауссово размытие (Gaussian Blur). Он развивается неторопливо, но это что-то…</p>
<p>Создайте файл &laquo;filter.svg&raquo; в той же папке, где style.css. Его содержимое:</p>
<pre class="brush: html">
&lt;?xml version=&quot;1.0&quot; standalone=&quot;no&quot;?&gt;
&lt;svg width=&quot;1&quot; height=&quot;1&quot; version=&quot;1.1&quot;
xmlns=&quot;http://www.w3.org/2000/svg&quot;
xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
  &lt;defs&gt;
    &lt;filter id=&quot;blur&quot;&gt;
      &lt;feGaussianBlur in=&quot;SourceGraphic&quot; stdDeviation=&quot;2 3&quot; /&gt;
    &lt;/filter&gt;
  &lt;/defs&gt;
&lt;/svg&gt;
</pre>
<p>Все как обычно, кроме правил с 6 по 8. Фильтр с названием &laquo;blur&raquo; (можете назвать его как хотите) размывает 2 px по горизонтали и 3 px по вертикали. А теперь обратно к таблице стилей!</p>
<pre class="brush: css">
#refl {
    position: absolute;

    top: 100%;
    left: 0;

    -moz-transform: scaleY(-1);
    -webkit-transform: scaleY(-1);
    -ms-transform: scaleY(-1);

    filter: url(filter.svg#blur); /* FF, IE10 &amp; Opera */
    -webkit-filter: blur(2px);
}
</pre>
<p>filter.svg#blur означает элемент &#8216;blur&#8217; in filter.svg. Если бы ID фильтра было &#8216;anything&#8217;, url был бы filter.svg#anything. Радиус размытия определяется в файле SVG. Браузеры Webkit определяют это все в одном правиле.</p>
<p><strong>Прозрачность</strong></p>
<p>Прозрачность гораздо дольше находится в употреблении, так что нам нужно определить всего одно свойство:</p>
<pre class="brush: css">
#refl {
    position: absolute;

    top: 100%;
    left: 0;

    -moz-transform: scaleY(-1);
    -webkit-transform: scaleY(-1);
    -ms-transform: scaleY(-1);

    filter: url(filter.svg#blur); /* FF, IE10 &amp; Opera */
    -webkit-filter: blur(2px);

    opacity: .25;
}
</pre>
<p>Я не могу вложить файл SVG в ссылку &laquo;Поиграть с образцом&raquo;. (Должен держать образец в подчинении, поэтому не могу смешивать семантику и презентацию. Это сильно осложнило бы все…) Но сейчас я не возмещаю размытие SVG…</p>
<p><a href="http://jsfiddle.net/_bop/CD3qv/4/" target="_blank">Поиграть с образцом</a> | <a href="http://jsfiddle.net/_bop/CD3qv/4/show" target="_blank">Полноэкранное изображение</a></p>
<p>Оно неполное. Когда на третий день Apple создал отражение, оно должно было стать менее отражательным. Оно должно быть менее четким, чем дальше оно от поверхности. Пусть там будет тьма!</p>
<p>Это работает, только если у поверхности есть плотный цвет, а цвет шрифта  похож на него: мы затемним его, добавив другую тень блока. Эта тень блока переписывает старую в селекторе #ETBR, #refl. Мы противодействуем этому, повторно заявляя встроенную тень старого селектора. Вторая тень – это новая тень. Помните, что каждая добавленная к отражению тень зеркалируется.</p>
<pre class="brush: css">
#refl {
    position: absolute;

    top: 100%;
    left: 0;

    -moz-transform: scaleY(-1);
    -webkit-transform: scaleY(-1);
    -ms-transform: scaleY(-1);

    filter: url(filter.svg#blur); /* FF, Opera + IE10*/
    -webkit-filter: blur(2px); /* webkit */

    opacity: .25;

    box-shadow: inset rgba(0,0,0,.8) 0 0 20px, inset #000 0 50px 100px; /* first shadow is old */
}
</pre>
<p>Офсет Y второй тени равен 50 px, но элемент всегда зеркалируется после применения тени. Тень не движется вниз, она движется вверх.</p>
<p>Смотрите здесь:</p>
<p><a href="http://jsfiddle.net/_bop/CD3qv/5/" target="_blank">Поиграть с образцом</a> | <a href="http://jsfiddle.net/_bop/CD3qv/5/show" target="_blank">Полноэкранное изображение</a></p>
<p>Отлично! Теперь рассмотрите это с помощью IE8 (или поверьте мне на слово): это в основном две копии отражаемого элемента ETBR одна над другой, незеркалированные, непрозрачные и не размытые.</p>
<h2>Шаг 7: устаревшие фильтры</h2>
<p>В начале работы мы добавили несколько условных комментариев; три группы.</p>
<p> &#8211; Современные браузеры и IE10, которые не поддерживают старые фильтры IE (IE10 прекратил сопровождение), но поддерживают новые.</p>
<p> &#8211; IE8 и ниже, старые IE, поддерживают устаревшие фильтры и не поддерживают новые.</p>
<p> &#8211; IE9, понемногу поддерживающий оба вида.</p>
<p>Если бы IE9 не поддерживал новых фильтров, было бы гораздо проще. (Не поймите меня неверно, я счастлив, что Internet Explorer старается измениться. Но было бы легче…) А чтобы еще все усложнить, существуют различия между устаревшими фильтрами в IE9 и IE8. Хватит жаловаться, давайте что-нибудь с этим сделаем. Добавьте для каждой группы по селектору #refl и сдвиньте свойство непрозрачности на modern.</p>
<pre class="brush: css">
#refl {
    position: absolute;

    top: 100%;
    left: 0;

    -moz-transform: scaleY(-1);
    -webkit-transform: scaleY(-1);
    -ms-transform: scaleY(-1);

    filter: url(filter.svg#blur); /* FF, Opera + IE10*/
    -webkit-filter: blur(2px); /* webkit */

    box-shadow: inset rgba(0,0,0,.8) 0 0 20px, inset #000 0 50px 100px;
}
.modern #refl {
    opacity: .25;
}
.ie9 #refl {

}
.oldie #refl {

}
</pre>
<p>Устаревшим фильтрам не нравится непрозрачность CSS2. И, если говорить о них, то мы собирается употребить следующие:</p>
<p> &#8211; DXImageTransform.Microsoft.BasicImage дает нам возможность зеркалировать изображение и меняет его непрозрачность</p>
<p> &#8211; DXImageTransform.Microsoft.MotionBlur и DXImageTransform.Microsoft.MotionBlur просто замечательные.</p>
<p> &#8211; DXImageTransform.Microsoft.Gradient в качестве заменителя второй тени блока.</p>
<p><strong>Зеркалирование</strong></p>
<p>У первого фильтра, BasicImage, на самом деле имеется свойство &laquo;mirror&raquo;! ДА-ДА! К сожалению, при установке этого свойства на 1 контент зеркалируется по горизонтали, а не вертикали. Но это не означает его бесполезность для нас. Разворот элемента на 180° и зеркалирование его по горизонтали – то же самое, что зеркалирование его по вертикали. И оно возможно:</p>
<pre class="brush: css">
.oldie #refl {
    filter: progid:DXImageTransform.Microsoft.BasicImage(mirror=1, rotation=2);
}
</pre>
<p>Этот разворот не измеряется в градусах: 0 – это 0°, 1 – это 90°, 2 – 180°, а 3 – это 270°. Этого требуют только браузеры-&raquo;старички&raquo;. IE9 поддерживает -ms-transform.</p>
<p><strong>Непрозрачность</strong></p>
<p>Непрозрачность можно определять в том же фильтре…</p>
<pre class="brush: css">
.ie9 #refl {
    -ms-filter: &quot;progid:DXImageTransform.Microsoft.BasicImage(opacity=.25);&quot;
}
.oldie #refl {
    filter: progid:DXImageTransform.Microsoft.BasicImage(mirror=1, rotation=2,  opacity=.35);
}
</pre>
<p>IE9 (и IE8, но я считаю, что Internet Explorer  уже получил достаточно внимания) поддерживает -ms-filter. Значение его – одна большая строка. Она создает понимание со стороны других браузеров (Firefox из-за Internet Explorer’а ходит по пятницам к психиатру).</p>
<p><strong>Размытие</strong></p>
<p>…но нам нужен новый фильтр для размытия. Множественные фильтры, если хотите, чтобы оно хорошо смотрелось. Никаких запятых, никаких filter:s между фильтрами, только промежуток или новая строка. -ms-filter больше не понимает новых строк…</p>
<pre class="brush: css">
.ie9 #refl {
    -ms-filter: &quot;progid:DXImageTransform.Microsoft.BasicImage(opacity=.25) progid:DXImageTransform.Microsoft.Blur(PixelRadius=&#039;3&#039;, MakeShadow=&#039;false&#039;) progid:DXImageTransform.Microsoft.MotionBlur(strength=15, direction=0) progid:DXImageTransform.Microsoft.Blur(PixelRadius=&#039;3&#039;, MakeShadow=&#039;false&#039;);&quot;
}
.oldie #refl {
    filter: progid:DXImageTransform.Microsoft.BasicImage(mirror=1, rotation=2, opacity=.35)
    progid:DXImageTransform.Microsoft.Blur(PixelRadius=&#039;3&#039;, MakeShadow=&#039;false&#039;)
    progid:DXImageTransform.Microsoft.MotionBlur(strength=15, direction=0)
    progid:DXImageTransform.Microsoft.Blur(PixelRadius=&#039;3&#039;, MakeShadow=&#039;false&#039;);
}
</pre>
<p>Если один раз сделать размытие с радиусом в 6 px, выглядит это так, будто кто-то сделал 4 копии отражения и сдвинул одну на 6 px вверх, одну на 6 px вниз, одну на 6 px влево и одну на 6 px вправо. Если хотите похвастать перед кем-нибудь в пабе, то должны знать название: размытие блока (Box Blur). При добавлении повторов (делая размытие размытого) Box Blur выглядит, как обычное размытие. Второй повтор – это размытие движения motion blur, потому что оно хорошо смотрится.</p>
<p><a href="http://jsfiddle.net/_bop/CD3qv/7/" target="_blank">Поиграть с образцом</a> | <a href="http://jsfiddle.net/_bop/CD3qv/7/show" target="_blank">Полноэкранное изображение</a></p>
<p>На этот раз неверно получились не одна, а две вещи:</p>
<p>1. Размытие сдвинуло отражение на несколько пикселей вверх и вправо в IE9, но в IE8 сдвинуло отражение вниз. Почему? Остается тайной.</p>
<p>2. В IE7 и IE8 отражение везде одинаково прозрачное.</p>
<p>Сначала вторая проблема: так как браузеры-&raquo;старички&raquo; не поддерживают тень блока box-shadow, мы применим в качестве замены устаревшему альфа-градиенту. Это, насколько я знаю, первые значения типа RGBA в CSS, но если в спецификациях w3c что-либо вообще тогда было сказано о значениях rgba, Internet Explorer все прослушал. Вместо 6 шестнадцатеричных разрядов они использовали 8. Два первых представляют alpha; устаревшие градиенты принимают ARGB вместо RGBA, что, должен заметить, звучит гораздо лучше:</p>
<pre class="brush: css">
.ie9 #refl {
    -ms-filter: &quot;progid:DXImageTransform.Microsoft.BasicImage(opacity=.25) progid:DXImageTransform.Microsoft.Blur(PixelRadius=&#039;3&#039;, MakeShadow=&#039;false&#039;) progid:DXImageTransform.Microsoft.MotionBlur(strength=15, direction=0) progid:DXImageTransform.Microsoft.Blur(PixelRadius=&#039;3&#039;, MakeShadow=&#039;false&#039;);&quot;
}
.oldie #refl {
    filter: progid:DXImageTransform.Microsoft.Gradient(startColorstr=#99000000, endColorstr=#00000000)
    progid:DXImageTransform.Microsoft.BasicImage(mirror=1, rotation=2, opacity=.35)
    progid:DXImageTransform.Microsoft.Blur(PixelRadius=&#039;3&#039;, MakeShadow=&#039;false&#039;)
    progid:DXImageTransform.Microsoft.MotionBlur(strength=15, direction=0)
    progid:DXImageTransform.Microsoft.Blur(PixelRadius=&#039;3&#039;, MakeShadow=&#039;false&#039;);
}
</pre>
<p>Градиент тоже нужно размыть, так что этим займемся в первую очередь. Градиенты устаревших фильтров по умолчанию вертикальные. startColorstr  &#8211; цвет градиента вверху, а startColorstr  &#8211; цвет внизу, но он зеркалирован! #99000000 – то же, что rgba(0, 0, 0, 153). Помните: чем выше мы устанавливаем непрозрачность градиента, тем ниже становится непрозрачность отражения.</p>
<p>Расположение – всего лишь дело метода проб и ошибок. Так как у отражения уже имеется местоположение, установленное в процентном отношении, мы не можем настроить в пикселях с помощью свойств left и top. Вместо того мы применим поле:</p>
<pre class="brush: css">
.ie9 #refl {
    margin-top: 20px;
    margin-left: -10px;

    -ms-filter: &quot;progid:DXImageTransform.Microsoft.BasicImage(opacity=.25) progid:DXImageTransform.Microsoft.Blur(PixelRadius=&#039;3&#039;, MakeShadow=&#039;false&#039;) progid:DXImageTransform.Microsoft.MotionBlur(strength=15, direction=0) progid:DXImageTransform.Microsoft.Blur(PixelRadius=&#039;3&#039;, MakeShadow=&#039;false&#039;);&quot;
}
.oldie #refl {
    margin-top: -20px;
    margin-left: -7px;

    filter: progid:DXImageTransform.Microsoft.Gradient(startColorstr=#99000000, endColorstr=#00000000)
    progid:DXImageTransform.Microsoft.BasicImage(mirror=1, rotation=2, opacity=.35)
    progid:DXImageTransform.Microsoft.Blur(PixelRadius=&#039;3&#039;, MakeShadow=&#039;false&#039;)
    progid:DXImageTransform.Microsoft.MotionBlur(strength=15, direction=0)
    progid:DXImageTransform.Microsoft.Blur(PixelRadius=&#039;3&#039;, MakeShadow=&#039;false&#039;);
}
</pre>
<p><a href="http://jsfiddle.net/_bop/CD3qv/9/" target="_blank">Поиграть с образцом</a> | <a href="http://jsfiddle.net/_bop/CD3qv/9/show" target="_blank">Полноэкранное изображение</a></p>
<h2>Шаг 8: финальные штрихи</h2>
<p>Мы изменим две вещи до того, как начнем тратить время на что-нибудь получше, типа просмотра <a href="http://www.youtube.com/watch?v=FzRH3iTQPrk" target="_blank">чихающих панд</a> на youtube.</p>
<p> &#8211; Расположим отражение по ту сторону отражаемого элемента (ETBR) (в z-пространстве), так как размытое отражение лежит над ETBR и над свечением.</p>
<p> &#8211; Сдвинем ETBR вниз. Верх ETBR идеально выравнивается по горизонту, что смотрится очень странно.</p>
<p>Решения проблемы:</p>
<p> &#8211; Обычно мы бы установили z-index отражаемого элемента (ETBR) и отражение соответственно на 2 и 1. Но так как за отражением в образце нет других элементов (в z-пространстве), мы можем просто установить z-index отражения на -1.</p>
<p> &#8211; Вверху поверхности добавьте отступ. Так как ETBR является потомком поверхности, он сдвинется вниз.</p>
<p>Вот файл CSS.</p>
<pre class="brush: css">
html {
    height: 100%;
}
body {
    text-align: center;
    line-height: 1;
    margin: 0;
    padding: 0;
    background-color: #000;
    height: 100%;
}
p {
    line-height: 1.2;
}
#plane {
    padding-top: 5%;

    left: 0;
    top: 10%;
    width: 100%;
    bottom: 0;
    min-width: 1080px;
    min-height: 600px;
    position: absolute;
    overflow: hidden;
    overflow-x: visible;
}
#ETBR, #refl {
    color: #004;

    font-family: Impact, &#039;Arial Black&#039;, Helvetica, Arial, sans-serif;
    text-transform: uppercase;
    font-size: 200px;
    background-color: #FFE;
    font-weight: bold;
    padding: 30px;
    display: inline-block;

    box-shadow: rgba(255,255,240,.2) 0 0 200px 100px, rgba(255,255,240,.3) 0 0 40px, inset rgba(0,0,0,.8) 0 0 20px;
    border-radius: 30px;

    position: relative;
}
#refl {
    position: absolute;
    z-index: -1;

    top: 100%;
    left: 0;

    -moz-transform: scaleY(-1);
    -webkit-transform: scaleY(-1);
    -ms-transform: scaleY(-1);

    filter: url(filter.svg#blur); /* FF, Opera + IE10*/
    -webkit-filter: blur(2px); /* webkit */

    box-shadow: inset rgba(0,0,0,.8) 0 0 20px, inset #000 0 50px 100px;
}
.modern #refl {
    opacity: .25;
}
.ie9 #refl {
    margin-top: 20px;
    margin-left: -10px;

    -ms-filter: &quot;progid:DXImageTransform.Microsoft.BasicImage(opacity=.25) progid:DXImageTransform.Microsoft.Blur(PixelRadius=&#039;3&#039;, MakeShadow=&#039;false&#039;) progid:DXImageTransform.Microsoft.MotionBlur(strength=15, direction=0) progid:DXImageTransform.Microsoft.Blur(PixelRadius=&#039;3&#039;, MakeShadow=&#039;false&#039;);&quot;
}
.oldie #refl {
    margin-top: -20px;
    margin-left: -7px;

    filter: progid:DXImageTransform.Microsoft.Gradient(startColorstr=#99000000, endColorstr=#00000000)
    progid:DXImageTransform.Microsoft.BasicImage(mirror=1, rotation=2, opacity=.35)
    progid:DXImageTransform.Microsoft.Blur(PixelRadius=&#039;3&#039;, MakeShadow=&#039;false&#039;)
    progid:DXImageTransform.Microsoft.MotionBlur(strength=15, direction=0)
    progid:DXImageTransform.Microsoft.Blur(PixelRadius=&#039;3&#039;, MakeShadow=&#039;false&#039;);
}
</pre>
<p><strong>index.html</strong></p>
<pre class="brush: html">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
    &lt;head&gt;
        &lt;meta charset=&quot;utf-8&quot; /&gt;
        &lt;meta http-equiv=&quot;X-UA-Compatible&quot; content=&quot;IE=edge,chrome=1&quot; /&gt;
        &lt;title&gt;CSS3 Reflections&lt;/title&gt;
        &lt;meta name=&quot;description&quot; content=&quot;Reflection...&quot; /&gt;
        &lt;meta name=&quot;author&quot; content=&quot;Bob de Ruiter&quot; /&gt;
        &lt;meta name=&quot;viewport&quot; content=&quot;width=device-width; initial-scale=1.0&quot; /&gt;

        &lt;link rel=&quot;stylesheet&quot; href=&quot;style.css&quot; /&gt;

        &lt;link rel=&quot;shortcut icon&quot; href=&quot;/favicon.ico&quot; /&gt;
        &lt;link rel=&quot;apple-touch-icon&quot; href=&quot;/apple-touch-icon.png&quot; /&gt;
    &lt;/head&gt;
    &lt;!--[if lt IE 9 ]&gt; &lt;body class=&quot;oldie&quot;&gt; &lt;![endif]--&gt;
    &lt;!--[if IE 9 ]&gt; &lt;body class=&quot;ie9&quot;&gt; &lt;![endif]--&gt;
    &lt;!--[if (gt IE 9)|!(IE)]&gt;&lt;!--&gt; &lt;body class=&quot;modern&quot;&gt; &lt;!--&lt;![endif]--&gt;
        &lt;div id=&quot;plane&quot;&gt;
            &lt;header&gt;&lt;span id=&quot;ETBR&quot;&gt;reflection&lt;span id=&quot;refl&quot;&gt;reflection&lt;/span&gt;&lt;/span&gt;&lt;/header&gt;
        &lt;/div&gt;
    &lt;/body&gt;
&lt;/html&gt;
</pre>
<p><strong>filter.svg</strong></p>
<pre class="brush: html">
&lt;?xml version=&quot;1.0&quot; standalone=&quot;no&quot;?&gt;
&lt;svg width=&quot;1&quot; height=&quot;1&quot; version=&quot;1.1&quot;
xmlns=&quot;http://www.w3.org/2000/svg&quot;
xmlns:xlink=&quot;http://www.w3.org/1999/xlink&quot;&gt;
  &lt;defs&gt;
    &lt;filter id=&quot;blur&quot;&gt;
      &lt;feGaussianBlur in=&quot;SourceGraphic&quot; stdDeviation=&quot;2 3&quot; /&gt;
    &lt;/filter&gt;
  &lt;/defs&gt;
&lt;/svg&gt;
</pre>
<h2>Заключение</h2>
<p>Вот и все! Вот последний <a href="http://jsfiddle.net/_bop/CD3qv/10/" target="_blank">образец</a>, без размытия фильтра SVG.</p>
<p><a href="http://jsfiddle.net/_bop/CD3qv/10/" target="_blank">Поиграть с образцом</a> | <a href="http://jsfiddle.net/_bop/CD3qv/10/show" target="_blank">Полноэкранное изображение</a></p>
<p>Вот дополнительно чистый CSS (кроме звездочек на фоне) <a href="http://d3pr5r64n04s3o.cloudfront.net/tuts/306_reflections/dock/mac.html" target="_blank">Мак Дока (Mac Dock), применяющего ту же технику</a>.</p>
<p>Надеюсь, вам понравился этот учебник, и вы узнали что-то новое. Не стесняйтесь задавать в комментариях любые вопросы!</p>
<p><strong>Автор: </strong>Bob de Ruiter</p>
<p><strong>Источник: </strong><a href="http://webdesign.tutsplus.com/tutorials/htmlcss-tutorials/cross-browser-css-reflections-glows-and-blurs/" target="_blank">http://webdesign.tutsplus.com/</a></p>
<p><strong>Редакция:</strong> Команда webformyself.</p>
]]></content:encoded>
			<wfw:commentRss>http://webformyself.com/krossbrauzernye-otrazheniya-svecheniya-i-razmytiya-css/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Премиум. Курс по CSS3. Выпуск 2.</title>
		<link>http://webformyself.com/premium-kurs-po-css3-vypusk-2/</link>
		<comments>http://webformyself.com/premium-kurs-po-css3-vypusk-2/#comments</comments>
		<pubDate>Wed, 16 May 2012 10:30:56 +0000</pubDate>
		<dc:creator>Андрей Кудлай</dc:creator>
				<category><![CDATA[Премиум]]></category>
		<category><![CDATA[css3]]></category>

		<guid isPermaLink="false">http://webformyself.com/?p=7637</guid>
		<description><![CDATA[<img class="webfor-img" src="http://webformyself.com/wp-content/uploads/premium/2012/css3series/2/100.jpg" alt="курс по css3" title="курс по css3" width="100" height="100" class="alignnone size-full wp-image-256" />

<p><em><strong>От автора:</strong> из второго выпуска курса вы узнаете, как работать с прозрачностями в CSS 3. Научитесь управлять прозрачностью для элементов. Узнаете о новых способах задания цвета для фона, для текста, для теней блоков. Так же в уроке пойдет речь о задании линейного градиета для элементов, не используя изображения. Научитесь задавать наклонные градиеты, двух, трех, четырех и т.д. цветные и повторяющиеся градиенты.</em></p>
<p>Также из урока Вы узнаете о работе с полупрозрачностью, научитесь создавать реалистичные тени и многое другое.</p>

<p><strong>Из этого урока Вы узнаете:</strong></p>
<p>1. Как задавать прозрачность для блока, и с какими трудностями при этом сталкиваемся.</p>
<p>2. Как обходить трудности в указании прозрачности.</p>
<p>3. Новые форматы задания прозрачных цветов, их отличия и способы задания.</p>
<p>4. Как создавать градиенты не используя изображения.</p>
<p>5. Как заставить градиент "идти" под наклоном, то есть, например, от правого нижнего угла к левому верхнему.</p>
<p>6. Как оставить градиент в нужном месте элемента, затем продолжить основной фон, и закончить элемент опять градиентом</p>
<p>7. Старый и новый синтаксис задания градиентов для webkit (google  chrome, Safari) браузеров </p>

<h3>План урока:</h3>
<ol>
<p><span class="amazing">1. Изучаем свойство opacity</span></p>
<p><span class="amazing">2. Изучаем форматы rgba, rgb</span></p>
<p><span class="amazing">3. Изучаем форматы hsl, hsla</span></p>
<p><span class="amazing">4. Изучаем background-image: linear-gradient</span></p>
<p><span class="amazing">5. Изучаем  background-image: repeating-linear-gradient</span></p>
</ol>

<p><strong>Результат урока:</strong></p>
<p>Изучив данный урок, вы научитесь управлять прозрачностью, делать полупрозрачные цвета. Например, прозрачность для тени блока, делает ее еще более реалистичной. Научитесь задавать всевозможные градиенты. Вам больше не придется ругаться с дизайнером за то, что он нарисовал градиент от левого верхнего края к правому нижнему. </p>

<h3>Детали учебника</h3>
<div class="perechen">
<p><span class="amazing"><strong>Сложность:</strong> Средняя</span></p>
<p><span class="amazing"><strong>Урок:</strong> Видео версия (.mp4)</span></p>
<p><span class="amazing"><strong>Время:</strong> 01:08:06</span></p>
<p><span class="amazing"><strong>Размер архива:</strong> 207 Mb</span></p>
</div>
<div class="autor-tut">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">
	<img src="http://webformyself.com/wp-content/themes/default/images/andrey.png" width="100" height="100" alt="Бернацкий Андрей" align="left"  border="0" />
</td>
<td valign="top">
		<h2>Автор: Андрей Бернацкий</a></h2>
<p>
Один из авторов проекта «Основы Самостоятельного Сайтостроения». Адрес в сети — <a href="http://webformyself.com" target="_blank">WebForMyself.com</a>

Данный проект представляет собой подборку качественных материалов: обучающих статей, книг, курсов, видеоуроков — как зарубежных, так и отечественных специалистов в области сайтостроения.

Бернацкий Андрей свободно владеет такими техниками как: HTML, CSS, JavaScript, jQuery, AJAX, PHP&MySQL.
</td></tr>
</table>
</div> 
<p>Итак, приступим!</p>
<!-- Начало кода EcommTools.com -->
<a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium1month']);" href="http://www.ecommtools.com/buy/andreybern/premium1month/saler1month" target="_blank">
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium1month',action:'buy',payby:'',refid:'',channel:'page1month'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium1.png" alt="купить" border="0" />
</a>

<a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium3month']);" href="http://www.ecommtools.com/buy/andreybern/premium3month/saler3month" target="_blank">
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium3months',action:'buy',payby:'',refid:'',channel:'page3months'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium3.png" alt="купить" border="0" />
</a>
<!-- Конец кода EcommTools.com -->
<a href="http://webformyself.com/premium-kurs-po-css3-vypusk-2/">Продолжить чтение →</a><div class="exerpt_more_link"><a href="http://webformyself.com/premium-kurs-po-css3-vypusk-2/">Подробнее »»</a></div>]]></description>
			<content:encoded><![CDATA[<p><img class="webfor-img" src="http://webformyself.com/wp-content/uploads/premium/2012/css3series/2/100.jpg" alt="курс по css3" title="курс по css3" width="100" height="100" class="alignnone size-full wp-image-256" /></p>
<p><em><strong>От автора:</strong> из второго выпуска курса вы узнаете, как работать с прозрачностями в CSS 3. Научитесь управлять прозрачностью для элементов. Узнаете о новых способах задания цвета для фона, для текста, для теней блоков. Так же в уроке пойдет речь о задании линейного градиета для элементов, не используя изображения. Научитесь задавать наклонные градиеты, двух, трех, четырех и т.д. цветные и повторяющиеся градиенты.</em></p>
<p>Также из урока Вы узнаете о работе с полупрозрачностью, научитесь создавать реалистичные тени и многое другое.</p>
<p><strong>Из этого урока Вы узнаете:</strong></p>
<p>1. Как задавать прозрачность для блока, и с какими трудностями при этом сталкиваемся.</p>
<p>2. Как обходить трудности в указании прозрачности.</p>
<p>3. Новые форматы задания прозрачных цветов, их отличия и способы задания.</p>
<p>4. Как создавать градиенты не используя изображения.</p>
<p>5. Как заставить градиент &laquo;идти&raquo; под наклоном, то есть, например, от правого нижнего угла к левому верхнему.</p>
<p>6. Как оставить градиент в нужном месте элемента, затем продолжить основной фон, и закончить элемент опять градиентом</p>
<p>7. Старый и новый синтаксис задания градиентов для webkit (google  chrome, Safari) браузеров </p>
<h3>План урока:</h3>
<ol>
<p><span class="amazing">1. Изучаем свойство opacity</span></p>
<p><span class="amazing">2. Изучаем форматы rgba, rgb</span></p>
<p><span class="amazing">3. Изучаем форматы hsl, hsla</span></p>
<p><span class="amazing">4. Изучаем background-image: linear-gradient</span></p>
<p><span class="amazing">5. Изучаем  background-image: repeating-linear-gradient</span></p>
</ol>
<p><strong>Результат урока:</strong></p>
<p>Изучив данный урок, вы научитесь управлять прозрачностью, делать полупрозрачные цвета. Например, прозрачность для тени блока, делает ее еще более реалистичной. Научитесь задавать всевозможные градиенты. Вам больше не придется ругаться с дизайнером за то, что он нарисовал градиент от левого верхнего края к правому нижнему. </p>
<h3>Детали учебника</h3>
<div class="perechen">
<p><span class="amazing"><strong>Сложность:</strong> Средняя</span></p>
<p><span class="amazing"><strong>Урок:</strong> Видео версия (.mp4)</span></p>
<p><span class="amazing"><strong>Время:</strong> 01:08:06</span></p>
<p><span class="amazing"><strong>Размер архива:</strong> 207 Mb</span></p>
</div>
<div class="autor-tut">
<table border="0" cellspacing="0" cellpadding="0">
<tr>
<td valign="top">
	<img src="http://webformyself.com/wp-content/themes/default/images/andrey.png" width="100" height="100" alt="Бернацкий Андрей" align="left"  border="0" />
</td>
<td valign="top">
<h2>Автор: Андрей Бернацкий</a></h2>
<p>
Один из авторов проекта «Основы Самостоятельного Сайтостроения». Адрес в сети — <a href="http://webformyself.com" target="_blank">WebForMyself.com</a></p>
<p>Данный проект представляет собой подборку качественных материалов: обучающих статей, книг, курсов, видеоуроков — как зарубежных, так и отечественных специалистов в области сайтостроения.</p>
<p>Бернацкий Андрей свободно владеет такими техниками как: HTML, CSS, JavaScript, jQuery, AJAX, PHP&#038;MySQL.
</td>
</tr>
</table>
</div>
<p>Итак, приступим!</p>
<p><!-- Начало кода EcommTools.com --><br />
<a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium1month']);" href="http://www.ecommtools.com/buy/andreybern/premium1month/saler1month" target="_blank"><br />
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium1month',action:'buy',payby:'',refid:'',channel:'page1month'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium1.png" alt="купить" border="0" /><br />
</a></p>
<p><a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium3month']);" href="http://www.ecommtools.com/buy/andreybern/premium3month/saler3month" target="_blank"><br />
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium3months',action:'buy',payby:'',refid:'',channel:'page3months'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium3.png" alt="купить" border="0" /><br />
</a><br />
<!-- Конец кода EcommTools.com --><br />
<a href="http://webformyself.com/premium-kurs-po-css3-vypusk-2/">Продолжить чтение →</a>
<div><a href="http://webformyself.com/premium-kurs-po-css3-vypusk-2/"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://webformyself.com/premium-kurs-po-css3-vypusk-2/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Увеличиваем рейтинг сайта через наращивание ссылочной массы. Часть 2.</title>
		<link>http://webformyself.com/uvelichivaem-rejting-sajta-cherez-narashhivanie-ssylochnoj-massy-chast-2/</link>
		<comments>http://webformyself.com/uvelichivaem-rejting-sajta-cherez-narashhivanie-ssylochnoj-massy-chast-2/#comments</comments>
		<pubDate>Mon, 14 May 2012 07:15:34 +0000</pubDate>
		<dc:creator>Андрей Кудлай</dc:creator>
				<category><![CDATA[Статьи]]></category>
		<category><![CDATA[монетизация сайта]]></category>
		<category><![CDATA[траст сайта]]></category>

		<guid isPermaLink="false">http://webformyself.com/?p=7625</guid>
		<description><![CDATA[От автора: После несколько более долгого перерыва чем планировалось, я продолжу серию статей на тему &#171;Монетизация сайтов с помощью ссылочных бирж&#187;. Этого времени я думаю вполне хватило, чтобы сделать все рекомендации из прошлой статьи &#171;Увеличиваем рейтинг сайта через наращивание ссылочной &#8230; <a href="http://webformyself.com/uvelichivaem-rejting-sajta-cherez-narashhivanie-ssylochnoj-massy-chast-2/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="webfor-img" src="http://webformyself.com/wp-content/uploads/2012/19/100.png" alt="траст сайта" title="траст сайта" width="100" height="100" class="alignnone size-full wp-image-256" /></p>
<p><em><strong>От автора:</strong> После несколько более долгого перерыва чем планировалось, я продолжу серию статей на тему &laquo;<a href="http://webformyself.com/monetizaciya-sajta-s-pomoshhyu-ssylochnyx-birzh/" target="_blank">Монетизация сайтов с помощью ссылочных бирж</a>&raquo;. Этого времени я думаю вполне хватило, чтобы сделать все рекомендации из прошлой статьи &laquo;<a href="http://webformyself.com/na-puti-k-monetizacii-sajta-uvelichivaem-rejting-sajta-cherez-narashhivanie-ssylochnoj-massy/" target="_blank">Увеличиваем рейтинг сайта через наращивание ссылочной массы</a>&raquo;. Прежде всего хотел поинтересоваться результатами, которых вы добились, возникли ли трудности или какие-то вопросы? Как всегда вы можете их задать в комментариях.</em></p>
<p>В данной статье мы продолжим рассматривать способы увеличения траста. Сразу хочу сообщить &#8211; количество практических рекомендаций и вспомогательного материала сегодня будет на порядок больше. Поэтому опять вам советую добавить эту статью в закладки, скачать вспомогательные файлы и методически выполнять рекомендации. Такую наиболее полную информацию предоставленною в сжатой форме в одной статье вы врятли найдете в интернете. Поэтому не удивляйтесь, если у вас уйдет весьма значительное время (до месяца) для выполнения всех заданий.</p>
<p>Скептикам хочу сообщить, что во время последнего АП тИЦ (13.04.2012) параметры сайта, который продвигался ТОЛЬКО способами, описанными в моих статьях, вырос на тИЦ +20. Это вполне неплохие результаты для <strong>продвижения сайта без материальных затрат</strong>. Буду рад, если у вас будут такие же или еще лучше результаты &#8211; сообщайте об этом!</p>
<p>А теперь без лишних слов продолжим рассматривать методы наращивания ссылочной массы. </p>
<div class="autor-tut">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top"><img src="http://webformyself.com/wp-content/themes/default/images/sokolov.jpg" border="0" alt="автор" width="100" height="100" align="left" /></td>
<td valign="top">
<h2>Автор: Соколов Кирилл</h2>
<p>По образованию &#8211; магистр культурологии (специализация: информационные технологии). Лауреат Национальной интернет-премии Tibo. Опыт работы в разработке сайтов &laquo;от&raquo; и &laquo;до&raquo; с 2000 года. В настоящее время работаю Project Manager в компании AtStar.</p>
<table border="0" id="table1" cellpadding="2">
<tr>
<td width="10">Сайт:</td>
<td width="10"><img src="http://webformyself.com/wp-content/themes/default/images/doktor-ico.gif"></td>
<td><a href='http://SprosiDoktora.ru'>Спроси Доктора</a> &#8211; Сервис медицинских онлайн-консультаций, каталог медцентров.</td>
</tr>
</table>
</tr>
</tbody>
</table>
</div>
<p><span id="more-7625"></span></p>
<h2>4. Регистрация в каталогах</h2>
<p>В настоящее время эффективность регистрации сайта в каталогах (прогон по каталогам сайтов) существенно снизилась, относительно тех результатов, которых можно было добиться несколько лет назад. Но все же не стоит сбрасывать со счетов этот метод. К тому же результат во многом зависит от качества базы каталогов, в которые вы вносили ваш сайт. Наиболее эффективными в этом плане естественно являются каталоги самих поисковых систем (Яндекс.каталог, Каталог@Mail.ru, DMOZ и др.). </p>
<p>Попытка добавить ссылку (url) на свой сайт в каталоги поисковиков не гарантирует того, что ваш проект обязательно в них примут. Ориентировочно, после подачи заявки на регистрацию в DMOZ (содержимое этого DMOZ дублируется в поисковике Гугл) нужно ждать от 2 до 10 месяцев, а может получится, что и до полутора лет. При регистрации в ЯндексКаталога — от 1 месяца до года. Многое зависит не только от качества вашего ресурса, но и от того, насколько правильно вы введете информацию при регистрации. Так что рекомендую тщательно изучить правила добавления в различные каталоги поисковых систем.</p>
<p>Из-за сложностей при добавлении в каталоги поисковых систем следует не забывать о других, в которых более мягкие условия для добавления. Список популярных каталогов можно найти как в соответствующем разделе Яндекс.Каталога тут, либо используя поиск, задав запрос &laquo;каталог сайтов&raquo;.</p>
<p>Для регистрации в большом количестве каталогов (несколько тысяч каталогов) можно использовать специализированные интернет-сервисы, которые позволяют автоматизировать процесс регистрации в каталогах, а также предоставляют обширную базу каталогов сайтов различной тематики. Один из первых и наиболее популярных таких сервисов является 1PS.ru.</p>
<p><a href="http://go.1ps.ru/pr/p.php?165297" target="_blank">Регистрация в 1PS.ru</a></p>
<p>После регистрации вам будет предложено добавить новую заявку на регистрацию в каталоги. Вполне подойдет тарифный план &laquo;Профи&raquo;, который позволит всего за 100 рублей добавить сайт по более чем 5 тысячам каталогов (в демо режиме бесплатно ваш сайт можно добавить в 50 каталогов). Вам понадобится лишь заполнить форму  для каталогов (название вашего сайта, описание, ключевые слова, рубрики и т.п.) и приступить к постепенной отсылки данных по каталогам. Ниже привожу скриншот, как на 1 странице мы простым кликом можем добавить за 1 раз в 5-7-10 каталогов одновременно.</p>
<p><img class="aligncenter size-full wp-image-376" width="600" height="566" title="1PS.ru" alt="1PS.ru" src="http://webformyself.com/wp-content/uploads/2012/19/1.jpg"></p>
<p>Важный моменты при добавлении вашего сайта в каталоги:</p>
<p>1. Не следует стремиться добавить ваш сайт во все 5 000 каталогов. Подберите либо общие каталоги, или только те, которые подходят под вашу категорию. К примеру: не стоит добавлять сайт об автомобилях в каталог, посвященный медицинской тематике.</p>
<p>2. Не имеет особого смысла регистрироваться в каталогах, которые размещают ссылку на ваш сайт через редирект (не прямую), в этом случае эффекта увеличения тИЦ и PR не следует ожидать. Плюсом может быть то, что по этой ссылке могут переходить реальные пользователи, увеличивая аудиторию вашего сайта.</p>
<p>3. Регистрируйтесь в каталогах с не нулевыми параметрами тИЦ и PR. Я обычно применяю минимальную планку требований к каталогам тИЦ 10, PR 2.</p>
<p>4. Не добавляйте ваш сайт более чем ~300 каталогов в неделю. Связанно это с тем, что поисковые системы могут наложить на ваш сайт санкции за то, что он может принять резко увеличивавшуюся ссылочную массу за поисковый спам.</p>
<p>Еще очень важный момент по работе с 1PS.ru и подобным сервисам: поскольку многие каталоги требуют за размещение вашего сайта обратную ссылку &#8211; вам потребуется у себя на сайте разместить довольно большое количество внешних ссылок, что может негативно сказаться на параметрах вашего сайта. Решить эту проблему можно поместив страницу с обратными ссылками в какую-либо директорию на вашем сайте ( например /linkz/index.php) и закрыть этот раздел для индексацией поисковых систем через файл robots.txt (который нужно разместить в корне вашего сайта). в файле robots.txt нужно прописать в одну строку следующее Disallow: /linkz/</p>
<p>Конечно, с одной стороны это несколько некрасивый поступок к владельцам каталогов, с другой стороны вы не &laquo;загрязняете&raquo; ваш сайт лишними внешними ссылками <img src='http://webformyself.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' />  </p>
<h2>5. Регистрация на трастовых сайтах.</h2>
<p>Это неплохой способ нарастить ссылочную массу. Регистрация на трастовых сайтах позволяет оставлять ссылку на ваш сайт на раскрученных ресурсах, которые всегда будут ранжироваться в выдаче гораздо выше молодых сайтов.</p>
<p>Существует достаточное количество авторитетных в глазах поисковых систем сайтов, регистрируясь на которых дается возможность  оставить ссылку на сайт в своем профиле. К ним относятся:</p>
<p> &#8211; Социальные сети</p>
<p> &#8211; Системы интернет-блогов</p>
<p> &#8211; Интернет-СМИ</p>
<p> &#8211; Форумы и т.п.</p>
<p>Плюсами этого метода являются: прямые ссылки с высоким тИЦ и PR, они вечные и бесплатные. Для начала наращивания ссылочной массы ссылками из профилей скачайте <a href="http://webformyself.com/wp-content/uploads/2012/19/sites.txt" target="_blank">список трастовых сайтов</a> и начните регистрироваться на этих сайта, оставляя ссылки в профилях.</p>
<p>Общие рекомендации для размещения ссылок с профилей сайтов:</p>
<p>1. Оцените параметры тИЦ и PR сайта, а надо ли оно вам? Если вы боретесь не за трафик, то вряд ли стоит тратить драгоценных 5 минут и нервы на регистрации ради Тиц10 PR1, хотя если форум тематический , то будет не лишним.</p>
<p>2. Заполняйте так же следующие поля: О себе, Подпись, Хобби, Увлечения, все поля где текст может быть многострочным. Зачем? Это шанс сделать ваш профиль равным Тиц=1, если вы напишите тематический текст, то страница будет выглядеть как тематическая статья. Да, тут надо поработать. Но зато эффект от профиля будет ощутимее, и даже не важно что форум про Собак, а ваш сайт о рецептах блюд. Постарайтесь в описаниях связать эти 2 темы. Вроде того, что я очень люблю готовить и узнавать новые рецепты, и у меня есть собака, которая также неравнодушно относится к тому, чтобы вкусно поесть )). В дополнительные поля если есть возможность также вставляйте ссылки на другие страницы. Есть шанс, что они превратятся в ссылки. </p>
<p>3. Заполнив профиль, зайдите на форум и оставьте несколько хороших сообщений в горячих темах, и посмотрите как выглядят ссылки на ваши профили, все ли dofollow, где светятся подписи, работают ли в них ссылки.</p>
<p>4. На форумах дается возможность указать подпись к нашим сообщениям. Этим следует обязательно воспользуемся, поскольку в подписи можно проставить ссылку с анкором. В основном это BB код.</p>
<p>5. <strong>Ожидайте, когда ссылку с профиля проиндексирует поисковая система. Этот процесс можно ускорить используя аддурилки</strong> Яндекса (<a href="http://webmaster.yandex.ru/addurl.xml" target="_blank">линк</a>) и Google (<a href="https://www.google.com/webmasters/tools/submit-url" target="_blank">линк</a>).</p>
<h2>6. Социальные закладки и соцсети</h2>
<p>Сегодня создавать закладки страниц можно не только в браузере у себя на компьютере, но и в интернете на специальных сервисах хранения закладок. Их популярность сейчас весьма высока. Именно поэтому сервисы соцзакладок следует использовать  для продвижения сайтов, особенно по низко-конкурентным запросам. И главное преимущество такого продвижения для начинающих вебмастеров – это возможность получить ссылки бесплатно.</p>
<p>Для начала в сервисе необходимо скачать <a href="http://webformyself.com/wp-content/uploads/2012/19/sites.txt" target="_blank">список наиболее популярных соцзакладок</a> и зарегистрироваться в них. Регистрация аккаунта в одном сервисе социальных закладок занимает от 3 до 15 минут. После этого вы сможете размещать ссылки на свой сайт. На регистрацию по всем сервисам соцзакладок у вас уйдет один неполный рабочий день.</p>
<p>Для того чтобы использовать ссылки с социальных закладок для продвижения по ключевым словам, необходимо соблюдать несколько правил:</p>
<p>1. Прописать ключевые слова в заголовке закладки</p>
<p>2. Повторить ключевые слова в описании 1-3 раза</p>
<p>3. Прописать ключевые слова в метках (тегах)</p>
<p>Чтобы получить реальный трафик необходимо проявить немного фантазии и смекалки:</p>
<p>1. Заголовок должен привлекать внимание и вызывать интерес.</p>
<p>2. Описание должно убедить тех, кто не перешел на ваш сайт по заголовку. Опишите самые интересные, полезные или выгодные аспекты вашего сайта для посетителей.</p>
<p>3. Не поленитесь в подборе меток. Для того чтобы вас было легко найти необходимо добавить, как минимум, 5 меток (тегов).</p>
<p>Помимо соцзакладок важным источником обратных ссылок (правда в большей части для привлечения трафика, а не наращивания тИЦ и PR) играют социальные сети. Наименее простым способом взаимодействия с соцсетями является размещение кнопок &laquo;Share&raquo;, благодаря которым пользователи могут поделиться ссылкой со своими друзьями по соцсети. Разместить блок &laquo;Share&raquo; (поделиться) можно весьма просто, настроив и разместив код кнопок наиболее популярных соцсетей можно с помощью сервиса от Яндекса. Настроить внешний вид блока можно на специальной странице <a href="http://api.yandex.ru/share/" target="_blank">http://api.yandex.ru/share/</a>.</p>
<h2>7. Обмен/покупка статей (пресс-релизов).</h2>
<p>Этот метод считается одним из наиболее эффективных. Связанно это с тем, что ссылки можно разместить в окружении текста, который по смыслу и тематике соответствует вашему сайту. Такие ссылки воспринимаются более естественно (с точки зрения поисковых систем) и не только передают &laquo;вес&raquo; вашему сайту, но и способствуют тому, что ваш сайт будет выводится на более высоких позициях в поисковой выдаче. В то же время это и наиболее трудоемкий и требующий значительного времени метод увеличения ссылочной массы, поскольку:</p>
<p>1. Потребуется время для поиска сайтов, которые согласятся на размещение ваших статей. (далее будет ссылка на файл с базой сайтов, которых можно бесплатно разместить статьи)</p>
<p>2. Очень важным фактором для достижения положительных результатов является качество текста. Если у вас не получается грамотно составить статью, то лучше обратитесь к своим знакомым (конечно если среди них есть журналисты, филологи или другие гуманитарии, пусть даже и студенты), либо можно обратиться к профессиональным копирайтерам. Вероятность того, что неграмотный и логически запутанный пресс-релиз или статья будет опубликована ничтожно мала.</p>
<p>3. Не используйте один и тот же текст статьи/пресс-релиза для размещения на многих сайтах. Изменяйте его, перефразируйте предложения: ваша цель &#8211; чтобы каждая статья была с уникальным текстом. Если вы разместите одну и ту же статью на различных сайтах, поисковые системы сочтут оригиналом только одну статью, а остальные не будут учитывать, т.к. сочтут их просто ненужными дубликатами информации.</p>
<p>Итак, где можно бесплатно разместить статьи со ссылками?</p>
<p>1. Можно попробовать разослать пресс-релизы в редакции новостных сайтов и агрегаторов пресс-релизов. Вполне возможно, что если вашу новость/пресс-релиз сочтут интересной для аудитории сайта его разместят на бесплатной основе. Скачать <a href="http://webformyself.com/wp-content/uploads/2012/19/pr.txt" target="_blank">список сайтов, которые принимают для публикации пресс-релизы</a>.</p>
<p>2. Вступайте в переписку со знакомыми веб-мастерами, либо с сайтами схожей тематики с предложением обменяться статьями &#8211; вы пишите какую-либо статью для их сайта, а в ответ они должны предоставить вам свою статью. Конечно же эти статьи должны содержать ссылки на сайты, которые участвуют в обмене статьями.</p>
<p>3. Воспользуйтесь биржами по размещению статей. Этот метод потребует некоторых финансовых вложений. Но во первых эти деньги вы можете заработать размещая ссылки и статьи через эти же биржи, во вторых благодаря биржам вы сэкономите уйму времени для поиска подходящих сайтов.</p>
<p>Ниже приведу список наиболее популярных биржи статей, с которыми у меня есть опыт положительной работы, поэтому если вы их не использовали для продвижения своего сайта &#8211; смело регистрируйтесь и пользуйтесь.</p>
<p> &#8211; <a href="http://articles.sape.ru/r.2695e74fa7.php" target="_blank">Sape.ru</a> &#8211; биржа ссылок, статей.</p>
<p> &#8211; <a href="http://miralinks.ru/users/registration/from:131850" target="_blank">Miralinks.ru</a> &#8211; биржа статей.</p>
<p> &#8211; <a href="http://www.liex.ru/5368C585DAF333F1291C68EBB3CF2766.htm" target="_blank">Liex.ru</a> &#8211; биржа статей.</p>
<p> &#8211; <a href="http://www.mainlink.ru/?partnerid=11210" target="_blank">Mainlink.ru</a> &#8211; биржа ссылок и объявлений (лаконичный аналог статьи).</p>
<p>Более подробную информацию по работе с биржами статей, а также о том как используя их можно эффективно монетезировать сайт ждите в следующей статье &laquo;<strong>Монетизация сайта с помощью бирж статей и объявлений</strong>&laquo;.</p>
<h2>Заключение</h2>
<p>В данной статье мы завершили рассматривать основные методы наращивания ссылочной массы и увеличение трастовости сайта. Конечно, тематика этой статьи несколько сдвинулась в сторону поисковой оптимизации/раскрутке сайта. Но следует не забывать, что тематика серии данных статей была &laquo;Монетизация сайта&raquo; через продажу ссылок, цена которых (а соответственно и ваш заработок) во многом определяется параметрами тИЦ и PR вашего сайта. Работы конечно предстоит немало, чтобы прогнать ваш сайт по каталогам сайтов, зарегистрироваться на трастовых сайтах, разместить ссылки на сервисах соцзакладок и обменяться статьями. Надеюсь, что стимула в работе вам предаст тот факт, что вам не пришлось потратить много времени, читая обрывочные статьи и самим вручную собирать базы трастовых сайтов, интернет-СМИ для пресс-релизов, а также списки соцзакладок.</p>
<p>И напоследок, из рубрики &laquo;юмор&raquo; <img src='http://webformyself.com/wp-includes/images/smilies/icon_smile.gif' alt=':)' class='wp-smiley' /> </p>
<p align="center"><iframe width="420" height="315" src="http://www.youtube.com/embed/167-Udd-DRw" frameborder="0" allowfullscreen></iframe></p>
]]></content:encoded>
			<wfw:commentRss>http://webformyself.com/uvelichivaem-rejting-sajta-cherez-narashhivanie-ssylochnoj-massy-chast-2/feed/</wfw:commentRss>
		<slash:comments>27</slash:comments>
		</item>
		<item>
		<title>Премиум. Отправка писем с вложением с помощью скриптов PHP.</title>
		<link>http://webformyself.com/premium-otpravka-pisem-s-vlozheniem-s-pomoshhyu-skriptov-php/</link>
		<comments>http://webformyself.com/premium-otpravka-pisem-s-vlozheniem-s-pomoshhyu-skriptov-php/#comments</comments>
		<pubDate>Wed, 09 May 2012 06:58:37 +0000</pubDate>
		<dc:creator>Андрей Кудлай</dc:creator>
				<category><![CDATA[Премиум]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[отправка писем с вложением]]></category>

		<guid isPermaLink="false">http://webformyself.com/?p=7591</guid>
		<description><![CDATA[<img class="webfor-img" src="http://webformyself.com/wp-content/uploads/premium/2011/30/100.jpg" alt="Отправка писем с вложением с помощью скриптов PHP" title="Отправка писем с вложением с помощью скриптов PHP" width="100" height="100" class="alignnone size-full wp-image-256" />

<p><em><strong>От автора:</strong> формы являются неотъемлемым элементом практически любого сайта. При помощи форм можно передавать всевозможную информацию на сервер, отправить ее в базу данных или попросту отправить письмо из формы. В этом уроке мы будем заниматься как раз последним - научимся отправлять письма с сайта. Но это будут не просто письма, а письма с возможностью добавления вложений.</em></p>

<p>Кроме того, мы рассмотрим добавление изображений в тело письма, а также использование библиотек для реализации нашей задачи. Приступим...</p>

<p><strong>Из этого урока Вы узнаете:</strong></p>
<p>1. Как правильно отправлять письма с помощью скриптов PHP.</p>
<p>2. Как отправлять письма с одним вложением.</p>
<p>3. Как отправлять письма с несколькими вложениями.</p>
<p>4. Как отправлять письма с внедренными изображениями.</p>
<p>5. Как осуществлять отправку писем с вложениями с помощью внешних библиотек.</p>

<h3>План урока:</h3>
<ol>
<p><span class="amazing">1. Формат обычного письма.</span></p>
<p><span class="amazing">2. Кодирование заголовков.</span></p>
<p><span class="amazing">3. Формат письма с вложением.</span></p>
<p><span class="amazing">4. Кодирование письма.</span></p>
<p><span class="amazing">5. Использование библиотек.</span></p>
</ol>

<p><strong>Результат урока:</strong></p>
<p>По итогам урока мы научимся отправлять письма с контактной формы на странице сайта. Также мы научимся отправлять письма с вложениями, письма с изображениями в теле письма, а также рассмотрим использование библиотек для решения поставленной задачи.</p>

<h3>Детали учебника</h3>
<div class="perechen">
<p><span class="amazing"><strong>Раздел:</strong> PHP</span></p>
<p><span class="amazing"><strong>Сложность:</strong> Средняя</span></p>
<p><span class="amazing"><strong>Урок:</strong> Видео (.mp4)</span></p>
<p><span class="amazing"><strong>Время:</strong> 01:12:54</span></p>
<p><span class="amazing"><strong>Размер архива:</strong> 96 Mb</span></p>
</div>
<div class="autor-tut">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top"><img src="http://webformyself.com/wp-content/themes/default/images/oponasenko.jpg" alt="автор" width="100" height="100" align="left" border="0" /></td>
<td valign="top">
<h2>Автор: <a href="http://neverlex.com">Алексей Опанасенко</a></h2>
Алексей Опанасенко живёт на севере Украины в древнем городе Чернигове. Типичный вебмастер самоучка – занялся самообучением, бросил работу в офисе и стал работать в Сети. Сейчас занимается веб разработками на заказ и своими личными проектами. В очередной раз доказывает, что научиться делать сайты с нуля и без учителей МОЖНО.

Сайт: <a href="http://neverlex.com">http://neverlex.com</a> – «Заметки вебмастера самоучки»</td>
</tr>
</tbody>
</table>
</div>
<p>Итак, приступим!</p>
<!-- Начало кода EcommTools.com -->
<a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium1month']);" href="http://www.ecommtools.com/buy/andreybern/premium1month/saler1month" target="_blank">
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium1month',action:'buy',payby:'',refid:'',channel:'page1month'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium1.png" alt="купить" border="0" />
</a>

<a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium3month']);" href="http://www.ecommtools.com/buy/andreybern/premium3month/saler3month" target="_blank">
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium3months',action:'buy',payby:'',refid:'',channel:'page3months'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium3.png" alt="купить" border="0" />
</a>
<!-- Конец кода EcommTools.com -->
<a href="http://webformyself.com/premium-otpravka-pisem-s-vlozheniem-s-pomoshhyu-skriptov-php/">Продолжить чтение →</a><div class="exerpt_more_link"><a href="http://webformyself.com/premium-otpravka-pisem-s-vlozheniem-s-pomoshhyu-skriptov-php/">Подробнее »»</a></div>]]></description>
			<content:encoded><![CDATA[<p><img class="webfor-img" src="http://webformyself.com/wp-content/uploads/premium/2011/30/100.jpg" alt="Отправка писем с вложением с помощью скриптов PHP" title="Отправка писем с вложением с помощью скриптов PHP" width="100" height="100" class="alignnone size-full wp-image-256" /></p>
<p><em><strong>От автора:</strong> формы являются неотъемлемым элементом практически любого сайта. При помощи форм можно передавать всевозможную информацию на сервер, отправить ее в базу данных или попросту отправить письмо из формы. В этом уроке мы будем заниматься как раз последним &#8211; научимся отправлять письма с сайта. Но это будут не просто письма, а письма с возможностью добавления вложений.</em></p>
<p>Кроме того, мы рассмотрим добавление изображений в тело письма, а также использование библиотек для реализации нашей задачи. Приступим&#8230;</p>
<p><strong>Из этого урока Вы узнаете:</strong></p>
<p>1. Как правильно отправлять письма с помощью скриптов PHP.</p>
<p>2. Как отправлять письма с одним вложением.</p>
<p>3. Как отправлять письма с несколькими вложениями.</p>
<p>4. Как отправлять письма с внедренными изображениями.</p>
<p>5. Как осуществлять отправку писем с вложениями с помощью внешних библиотек.</p>
<h3>План урока:</h3>
<ol>
<p><span class="amazing">1. Формат обычного письма.</span></p>
<p><span class="amazing">2. Кодирование заголовков.</span></p>
<p><span class="amazing">3. Формат письма с вложением.</span></p>
<p><span class="amazing">4. Кодирование письма.</span></p>
<p><span class="amazing">5. Использование библиотек.</span></p>
</ol>
<p><strong>Результат урока:</strong></p>
<p>По итогам урока мы научимся отправлять письма с контактной формы на странице сайта. Также мы научимся отправлять письма с вложениями, письма с изображениями в теле письма, а также рассмотрим использование библиотек для решения поставленной задачи.</p>
<h3>Детали учебника</h3>
<div class="perechen">
<p><span class="amazing"><strong>Раздел:</strong> PHP</span></p>
<p><span class="amazing"><strong>Сложность:</strong> Средняя</span></p>
<p><span class="amazing"><strong>Урок:</strong> Видео (.mp4)</span></p>
<p><span class="amazing"><strong>Время:</strong> 01:12:54</span></p>
<p><span class="amazing"><strong>Размер архива:</strong> 96 Mb</span></p>
</div>
<div class="autor-tut">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top"><img src="http://webformyself.com/wp-content/themes/default/images/oponasenko.jpg" alt="автор" width="100" height="100" align="left" border="0" /></td>
<td valign="top">
<h2>Автор: <a href="http://neverlex.com">Алексей Опанасенко</a></h2>
<p>Алексей Опанасенко живёт на севере Украины в древнем городе Чернигове. Типичный вебмастер самоучка – занялся самообучением, бросил работу в офисе и стал работать в Сети. Сейчас занимается веб разработками на заказ и своими личными проектами. В очередной раз доказывает, что научиться делать сайты с нуля и без учителей МОЖНО.</p>
<p>Сайт: <a href="http://neverlex.com">http://neverlex.com</a> – «Заметки вебмастера самоучки»</td>
</tr>
</tbody>
</table>
</div>
<p>Итак, приступим!</p>
<p><!-- Начало кода EcommTools.com --><br />
<a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium1month']);" href="http://www.ecommtools.com/buy/andreybern/premium1month/saler1month" target="_blank"><br />
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium1month',action:'buy',payby:'',refid:'',channel:'page1month'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium1.png" alt="купить" border="0" /><br />
</a></p>
<p><a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium3month']);" href="http://www.ecommtools.com/buy/andreybern/premium3month/saler3month" target="_blank"><br />
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium3months',action:'buy',payby:'',refid:'',channel:'page3months'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium3.png" alt="купить" border="0" /><br />
</a><br />
<!-- Конец кода EcommTools.com --><br />
<a href="http://webformyself.com/premium-otpravka-pisem-s-vlozheniem-s-pomoshhyu-skriptov-php/">Продолжить чтение →</a>
<div><a href="http://webformyself.com/premium-otpravka-pisem-s-vlozheniem-s-pomoshhyu-skriptov-php/"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://webformyself.com/premium-otpravka-pisem-s-vlozheniem-s-pomoshhyu-skriptov-php/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Премиум. Создание административной части для флеш-галереи. Работа с XML. Часть3.</title>
		<link>http://webformyself.com/premium-sozdanie-administrativnoj-chasti-dlya-flesh-galerei-rabota-s-xml-chast3/</link>
		<comments>http://webformyself.com/premium-sozdanie-administrativnoj-chasti-dlya-flesh-galerei-rabota-s-xml-chast3/#comments</comments>
		<pubDate>Wed, 02 May 2012 07:17:09 +0000</pubDate>
		<dc:creator>Андрей Кудлай</dc:creator>
				<category><![CDATA[Премиум]]></category>
		<category><![CDATA[работа с XML]]></category>
		<category><![CDATA[флеш-галерея]]></category>

		<guid isPermaLink="false">http://webformyself.com/?p=7527</guid>
		<description><![CDATA[<img class="webfor-img" src="http://webformyself.com/wp-content/uploads/premium/2011/28/100.jpg" alt="Создание административной части для флеш-галереи. Работа с XML" title="Создание административной части для флеш-галереи. Работа с XML" width="100" height="100" class="alignnone size-full wp-image-256" />

<p><em><strong>От автора:</strong> итак, мы добрались до третьей части урока по созданию админки для галереи на флеше. Во второй части мы начали реализацию второго пункта меню, которым осуществляется добавление новой картинки в галерею. В этой части, которая будет заключительной, мы закончим с начатым пунктом меню.</em></p>

<p>Также мы реализуем последний пункт меню, посредством которого будет происходить удаление картинок из галереи. Приступим...</p>

<p><strong>Из этого урока Вы узнаете:</strong></p>
<p>1. Как добавлять данные в файл XML.</p>
<p>2. Как работать с методом addChild() класса SimpleXMLElement.</p>
<p>3. Как сохранять объекты как файл XML.</p>

<h3>План урока:</h3>
<ol>
<p><span class="amazing">1. Копирование загруженных файлов.</span></p>
<p><span class="amazing">2. Добавление записи в файл XML.</span></p>
<p><span class="amazing">3. Реализуем удаление.</span></p>
</ol>

<p><strong>Результат урока:</strong></p>
<p>По итогам урока мы закончим создание простейшей административной части, посредством которой можно управлять файлом XML, который, в свою очередь, управляет флеш-галереей. В уроке мы научимся как добавлять данные в файл XML и как сохранять эти данные.</p>

<h3>Детали учебника</h3>
<div class="perechen">
<p><span class="amazing"><strong>Раздел:</strong> PHP</span></p>
<p><span class="amazing"><strong>Сложность:</strong> Средняя</span></p>
<p><span class="amazing"><strong>Урок:</strong> Видео+текстовая версии (.mp4;.pdf)</span></p>
<p><span class="amazing"><strong>Время:</strong> 01:16:47</span></p>
<p><span class="amazing"><strong>Размер архива:</strong> 158 Mb</span></p>
</div>
<div class="autor-tut">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top"><img src="http://webformyself.com/wp-content/themes/default/images/kudlai.jpg" border="0" alt="автор" width="100" height="100" align="left" /></td>
<td valign="top">
<h2>Автор: Андрей Кудлай</h2>
Зовут меня Андрей Кудлай. Родом я из Украины, живу в Днепропетровске. Веб-программированию учился сам. Неплохо знаю HTML, CSS, PHP. Немного разбираюсь в JavaScript’e - в свободное время как раз занимаюсь его изучением.
</tr>
</tbody></table>
</div>
<p>Итак, приступим!</p>
<!-- Начало кода EcommTools.com -->
<a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium1month']);" href="http://www.ecommtools.com/buy/andreybern/premium1month/saler1month" target="_blank">
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium1month',action:'buy',payby:'',refid:'',channel:'page1month'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium1.png" alt="купить" border="0" />
</a>

<a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium3month']);" href="http://www.ecommtools.com/buy/andreybern/premium3month/saler3month" target="_blank">
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium3months',action:'buy',payby:'',refid:'',channel:'page3months'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium3.png" alt="купить" border="0" />
</a>
<!-- Конец кода EcommTools.com -->
<a href="http://webformyself.com/premium-sozdanie-administrativnoj-chasti-dlya-flesh-galerei-rabota-s-xml-chast3/">Продолжить чтение →</a><div class="exerpt_more_link"><a href="http://webformyself.com/premium-sozdanie-administrativnoj-chasti-dlya-flesh-galerei-rabota-s-xml-chast3/">Подробнее »»</a></div>]]></description>
			<content:encoded><![CDATA[<p><img class="webfor-img" src="http://webformyself.com/wp-content/uploads/premium/2011/28/100.jpg" alt="Создание административной части для флеш-галереи. Работа с XML" title="Создание административной части для флеш-галереи. Работа с XML" width="100" height="100" class="alignnone size-full wp-image-256" /></p>
<p><em><strong>От автора:</strong> итак, мы добрались до третьей части урока по созданию админки для галереи на флеше. Во второй части мы начали реализацию второго пункта меню, которым осуществляется добавление новой картинки в галерею. В этой части, которая будет заключительной, мы закончим с начатым пунктом меню.</em></p>
<p>Также мы реализуем последний пункт меню, посредством которого будет происходить удаление картинок из галереи. Приступим&#8230;</p>
<p><strong>Из этого урока Вы узнаете:</strong></p>
<p>1. Как добавлять данные в файл XML.</p>
<p>2. Как работать с методом addChild() класса SimpleXMLElement.</p>
<p>3. Как сохранять объекты как файл XML.</p>
<h3>План урока:</h3>
<ol>
<p><span class="amazing">1. Копирование загруженных файлов.</span></p>
<p><span class="amazing">2. Добавление записи в файл XML.</span></p>
<p><span class="amazing">3. Реализуем удаление.</span></p>
</ol>
<p><strong>Результат урока:</strong></p>
<p>По итогам урока мы закончим создание простейшей административной части, посредством которой можно управлять файлом XML, который, в свою очередь, управляет флеш-галереей. В уроке мы научимся как добавлять данные в файл XML и как сохранять эти данные.</p>
<h3>Детали учебника</h3>
<div class="perechen">
<p><span class="amazing"><strong>Раздел:</strong> PHP</span></p>
<p><span class="amazing"><strong>Сложность:</strong> Средняя</span></p>
<p><span class="amazing"><strong>Урок:</strong> Видео+текстовая версии (.mp4;.pdf)</span></p>
<p><span class="amazing"><strong>Время:</strong> 01:16:47</span></p>
<p><span class="amazing"><strong>Размер архива:</strong> 158 Mb</span></p>
</div>
<div class="autor-tut">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top"><img src="http://webformyself.com/wp-content/themes/default/images/kudlai.jpg" border="0" alt="автор" width="100" height="100" align="left" /></td>
<td valign="top">
<h2>Автор: Андрей Кудлай</h2>
<p>Зовут меня Андрей Кудлай. Родом я из Украины, живу в Днепропетровске. Веб-программированию учился сам. Неплохо знаю HTML, CSS, PHP. Немного разбираюсь в JavaScript’e &#8211; в свободное время как раз занимаюсь его изучением.<br />
</tr>
</tbody>
</table>
</div>
<p>Итак, приступим!</p>
<p><!-- Начало кода EcommTools.com --><br />
<a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium1month']);" href="http://www.ecommtools.com/buy/andreybern/premium1month/saler1month" target="_blank"><br />
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium1month',action:'buy',payby:'',refid:'',channel:'page1month'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium1.png" alt="купить" border="0" /><br />
</a></p>
<p><a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium3month']);" href="http://www.ecommtools.com/buy/andreybern/premium3month/saler3month" target="_blank"><br />
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium3months',action:'buy',payby:'',refid:'',channel:'page3months'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium3.png" alt="купить" border="0" /><br />
</a><br />
<!-- Конец кода EcommTools.com --><br />
<a href="http://webformyself.com/premium-sozdanie-administrativnoj-chasti-dlya-flesh-galerei-rabota-s-xml-chast3/">Продолжить чтение →</a>
<div><a href="http://webformyself.com/premium-sozdanie-administrativnoj-chasti-dlya-flesh-galerei-rabota-s-xml-chast3/"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://webformyself.com/premium-sozdanie-administrativnoj-chasti-dlya-flesh-galerei-rabota-s-xml-chast3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Практическое применение виджета slider библиотеки jQuery UI.</title>
		<link>http://webformyself.com/prakticheskoe-primenenie-vidzheta-slider-biblioteki-jquery-ui/</link>
		<comments>http://webformyself.com/prakticheskoe-primenenie-vidzheta-slider-biblioteki-jquery-ui/#comments</comments>
		<pubDate>Mon, 30 Apr 2012 09:34:05 +0000</pubDate>
		<dc:creator>Андрей Кудлай</dc:creator>
				<category><![CDATA[Javascript&Ajax]]></category>
		<category><![CDATA[Видео уроки]]></category>
		<category><![CDATA[Обучение]]></category>
		<category><![CDATA[jquery ui slider]]></category>

		<guid isPermaLink="false">http://webformyself.com/?p=7506</guid>
		<description><![CDATA[От автора: многие из Вас, при посещении интернет магазинов, встречали такую вещь, как сортировку товаров по цене. При этом в некоторых случаях эта сортировка выполнена в виде горизонтальной полосы прокрутки, с двумя ползунками, двигая которые можно указывать диапазон интересующих Вас &#8230; <a href="http://webformyself.com/prakticheskoe-primenenie-vidzheta-slider-biblioteki-jquery-ui/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="webfor-img" src="http://webformyself.com/wp-content/uploads/2012/18/100.jpg" alt="jquery ui slider" title="jquery ui slider" width="100" height="100" class="alignnone size-full wp-image-256" /></p>
<p><em><strong>От автора:</strong> многие из Вас, при посещении интернет магазинов, встречали такую вещь, как сортировку товаров по цене.  При этом в некоторых случаях эта сортировка выполнена в виде горизонтальной полосы прокрутки, с двумя ползунками, двигая которые можно указывать диапазон интересующих Вас цен. В сегодняшнем уроке мы с Вами рассмотрим практическое применение одного из виджетов библиотеки jQuery UI – slider.</em></p>
<p>В уроке мы реализуем виджет сортировки по цене с горизонтальной полосой прокрутки, а также создадим небольшую простенькую фотогалерею на основе указанного виджета библиотеки jQuery UI.</p>
<h3>Детали учебника</h3>
<div class="perechen">
<p><span class="amazing"><strong>Тема:</strong> jQuery</span></p>
<p><span class="amazing"><strong>Сложность:</strong> Средняя</span></p>
<p><span class="amazing"><strong>Урок:</strong> Видео (.mp4)</span></p>
<p><span class="amazing"><strong>Время:</strong> 01:38:51</span></p>
<p><span class="amazing"><strong>Размер архива:</strong> 156 Mb</span></p>
</div>
<div class="autor-tut">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top"><img src="http://webformyself.com/wp-content/themes/default/images/gavrilenko.jpg" border="0" alt="автор" width="100" height="100" align="left" /></td>
<td valign="top">
<h2>Автор: Виктор Гавриленко</h2>
<p>Меня зовут Виктор Гавриленко, по образованию я инженер электромеханик. Еще учась в институте, начал увлекаться компьютерными технологиями и программированием, на протяжении двух лет усиленно занимаюсь разработкой интернет сайтов и веб-программированием. Увлекаюсь написанием небольших скриптов на языке PHP, в связке базами данных MySQL, SQLite, неплохо знаю такие движки как WordPress, Drupal, Joomla.<br />
</tr>
</tbody>
</table>
</div>
<p><span id="more-7506"></span></p>
<div class="down-demo">
<p align="center"><a href="http://narod.ru/disk/47599644001.69c4d024edd15fa85006d85aa843e486/wwwsliderless.zip.html" target="_blank"><img src="/wp-content/themes/web4my/images/download.jpg" alt="скачать исходники" /></a><a href="http://webformyself.com/wp-content/uploads/2012/18/demo/" target="_blank"><img src="/wp-content/themes/web4my/images/demo.jpg" alt="демо" /></a><a href="http://narod.ru/disk/47602363001.4fe9d2c7cdbeedaf57895daba4769eb4/sliderlessvideo.zip.html" target="_blank"><img src="/wp-content/themes/web4my/images/download-lesson.jpg" alt="скачать урок" /></a>
</p>
</div>
<p align="center"><iframe width="550" height="403" src="http://www.youtube.com/embed/LVnoWHHusyQ?hd=1" frameborder="0" allowfullscreen></iframe></p>
<h3>1. Создание виджета сортировки по цене.</h3>
<h3>1.1. Создаем html разметку.</h3>
<p>Для начала, давайте реализуем слайдер, с помощью которого можно задавать диапазон цен в интернет магазине. Для этого создадим текстовый файл с обычной html разметкой (файл price.html) :</p>
<pre class="brush: html">
&lt;!DOCTYPE html&gt;
&lt;html lang=&quot;en&quot;&gt;
	&lt;head&gt;
		&lt;title&gt;&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;

	&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Теперь нам необходимо создать форму и два текстовых поля: первое для минимальной цены, второе для максимальной цены. При этом заключим форму в контейнер div с идентификатором id=&#8217;options&#8217;(для удобства, как бы с имитируем то, что обычно такие текстовые поля находятся в сайдбарах интернет магазинов).</p>
<p>Итак между тегами body вставляем следующий код:</p>
<pre class="brush: html">
&lt;div id=&#039;options&#039;&gt;
	&lt;h3&gt;Цена:&lt;/h3&gt;
	&lt;form method=&#039;post&#039;&gt;
		&lt;label for=&#039;price&#039;&gt;
		От:
			&lt;input type=&quot;text&quot; name=&quot;price&quot; id=&quot;price&quot; maxlength=&quot;10&quot;&gt;
		&lt;/label&gt;
		&lt;label for=&#039;price2&#039;&gt;
		До:
			&lt;input type=&quot;text&quot; name=&quot;price&quot; id=&quot;price2&quot; maxlength=&quot;10&quot;&gt;
		&lt;/label&gt;
	&lt;/form&gt;
&lt;/div&gt;
</pre>
<p>Как видите стандартная форма, только я не создавал кнопку submit (отправки формы). Так отправлять данные мы не будем, потому что нам главное научиться добавлять слайдер, а отправка формы то уже стандартные вещи, которые все известны.</p>
<p>Далее необходимо создать пустой контейнер div в котором у нас будет располагаться слайдер. Добавим этот контейнер после закрывающего  тега формы:</p>
<pre class="brush: html">
&lt;div id=&quot;slider_price&quot;&gt;&lt;/div&gt;
</pre>
<h3>1.2. Создаем и подключаем файл стилей.</h3>
<p>Далее давайте создадим таблицу стилей и немного приукрасим нашу форму. Я создал файл style.css в папке css, с таким содержимым:</p>
<pre class="brush: css">
#price,#price2 {
	border:1px solid #074776;
	padding:5px;
	width:80px;
}
#options {
	width:300px;
	padding:10px;
	border:1px solid #074776;
}
#slider_price {
	margin-top:10px;
}
</pre>
<p>Далее осталось просто подключить данный файл между тегами head:</p>
<pre class="brush: html">
&lt;link rel=&quot;stylesheet&quot; href=&quot;css/style.css&quot;&gt;
</pre>
<p>Давайте посмотрим предварительные результаты нашей работы в браузере:</p>
<p><img src="http://webformyself.com/wp-content/uploads/2012/18/img1.jpg" alt="jquery ui slider" title="jquery ui slider" width="600" height="277" class="aligncenter size-full wp-image-376" /></p>
<h3>1.3. Скачиваем и подключаем библиотеки jQuery и jQuery UI.</h3>
<p>Теперь переходим к кодированию на javascript.</p>
<p>Первым делом скачиваем библиотеку jquery и подключаем к нашему скрипту (напомню, что скачать библиотеку можно с официального сайта http://jquery.com) :</p>
<pre class="brush: html">
&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.7.2.min.js&quot;&gt;&lt;/script&gt;
</pre>
<p>Далее необходимо скачать и подключить библиотеку jquery UI. С помощью этой библиотеки мы и реализуем слайдер для изменения цен. А точнее мы используем стандартный виджет библиотеки  jquery UI  &#8211; slider, который позволяет реализовывать различные слайдеры для сайтов. Напомню, что скачать библиотеку можно на официальном сайте http://jqueryui.com, перейдя по ссылке Download. Далее выбрать режим скачивания, то есть либо Вы скачиваете полную версию библиотеки с полным набором виджетов функций и эффектов, либо скачиваете только то, что Вам нужно (галочками отмечаете требуемые компоненты библиотеки). Я предпочитаю лишнего не качать, поэтому для скачивания я выбрал только виджет slider, полный набор эффектов и, конечно же, ядро библиотеки. Далее напомню, что Вы можете перед скачиванием выбрать цветовую схему отображаемых элементов библиотеки, для этого либо выбрать из выпадающего списка конкретный стандартный стиль, либо же можно сгенерировать цветовой стиль самому, перейдя по ссылке design a custom theme.</p>
<p>Итак, подключаем библиотеку:</p>
<pre class="brush: html">
&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-ui-1.8.19.custom.min.js&quot;&gt;&lt;/script&gt;
</pre>
<p>И теперь, последнее, что нам необходимо подключить — это файл со стилями для нашей библиотеки, поэтому подключаем и его:</p>
<pre class="brush: html">
&lt;link rel=&quot;stylesheet&quot; href=&quot;css/jquery-ui-1.8.19.custom.css&quot;&gt;
</pre>
<h3>1.4. Кодируем на javascript.</h3>
<p>После того как все необходимые библиотеки подключены, давайте вернемся на официальный сайт библиотеки  jquery UI. Далее перейдем в раздел Demos &#038; Documentation, затем кликаем мышью по виджету — slider. И как Вы видите, справа в колонке нам представлены для выбора различные варианты использования виджета, а в центре показано как будет отображаться на экране выбранный виджет.</p>
<p>Посмотрите на пример Range slider, как видите  &#8211; это и  есть тот слайдер, который мы хотим реализовать. Ниже под примером есть ссылка View Sourcе, нажав на которую мы сможем посмотреть как данный пример сделан (то есть посмотреть исходный код примера).</p>
<p>Если внимательно посмотреть, то можно увидеть, что исходный код состоит из двух частей: первая часть это обычная html разметка, которая у нас уже выполнена, а вторая — это код на javascript, который нам и нужно скопировать и вставить себе в файл. </p>
<p>Поэтому из исходного кода копируем код заключенный в теги script. Вот код, который необходимо скопировать:</p>
<pre class="brush: js">
&lt;script&gt;
	$(function() {
		$( &quot;#slider-range&quot; ).slider({
			range: true,
			min: 0,
			max: 500,
			values: [ 75, 300 ],
			slide: function( event, ui ) {
				$( &quot;#amount&quot; ).val( &quot;$&quot; + ui.values[ 0 ] + &quot; - $&quot; + ui.values[ 1 ] );
			}
		});
		$( &quot;#amount&quot; ).val( &quot;$&quot; + $( &quot;#slider-range&quot; ).slider( &quot;values&quot;, 0 ) +
			&quot; - $&quot; + $( &quot;#slider-range&quot; ).slider( &quot;values&quot;, 1 ) );
	});
	&lt;/script&gt;
</pre>
<p>Далее вставляем его в файл с нашим скриптом, но обратите внимание, что в данном коде необходимо изменить селекторы по которым с помощью  jquery выбираются элементы.</p>
<p>Смотрите, вначале выбирается элемент с идентификатором slider-range и к нему применяется виджет  slider. В нашем же случае, слайдер будет в  блоке с идентификатором slider_price, который как Вы помните, мы создали под формой. Поэтому изменяем селектор выбора с #slider-range на #slider_price. Далее обратите внимание, что в примере минимальная и максимальная цена записываются в одно текстовое поле, а нам необходимо что бы минимальная цена записывалась в первое текстовое поле, а максимальная — во второе. Поэтому, необходимо внести небольшие изменения в код.</p>
<p>Далее я приведу уже исправленный код, который необходимо вставить в наш скрипт (а ниже поясню все изменения).</p>
<pre class="brush: js">
&lt;script&gt;
	$(function() {
		$( &quot;#slider_price&quot; ).slider({
			range: true,
			min: 0,
			max: 500,
			values: [ 75, 300 ],
			slide: function( event, ui ) {
				//Поле минимального значения
				$( &quot;#price&quot; ).val(ui.values[ 0 ]);
				//Поле максимального значения
				$(&quot;#price2&quot;).val(ui.values[1]);			}
		});
		//Записываем значения ползунков в момент загрузки страницы
		//То есть значения по умолчанию
		$( &quot;#price&quot; ).val($( &quot;#slider_price&quot; ).slider( &quot;values&quot;, 0 ));
		$(&quot;#price2&quot;).val($(&quot;#slider_price&quot;).slider( &quot;values&quot;, 1 ));
	});
&lt;/script&gt;
</pre>
<p>Как Вы видите, код состоит из двух частей: первая  это описание самого слайдера, а вторая — это запись в текстовые поля значений по умолчанию.</p>
<p>Итак, вначале, мы выбираем блок с идентификатором  slider_price и применяем к нему виджет  slider, с такими параметрами:</p>
<p> &#8211; range: true — если установлено в  true, то между минимальным и максимальным значением на слайдере подсвечивается область, тем самым показывает нам, что выбран диапазон значений;<br />
- min: 0 — минимальное значение на слайдере;<br />
- max: 500 — максимальное значение на слайдере;<br />
- values: [ 75, 300 ] &#8211; значения по умолчанию, которые будут установлены изначально на слайдере (то есть ползунки будут установлены в значения 75 и 300);<br />
- slide: &#8211; в этом параметре можно описать функцию которая выполнится, когда пользователь начнет двигать ползунки. В нашем случае мы описываем функцию, которая считывает значения ползунков и передает их в значение атрибута value текстовых полей минимума и максимума.</p>
<p>Функция работает следующим образом: в начале с помощью jquery производим выборку по идентификатору &laquo;#price&raquo; текстового поля, затем вызываем метод val() и параметром передаем ему считанное значение с левого (минимального значения) ползунка на слайдере.</p>
<p>Напомню, что метод  val(), если вызван без параметров, позволяет получить значение атрибута value выбранного элемента, если же передать ему какое то значение, то мы не получим значение а наоборот запишем это значение в атрибут value.</p>
<p>Считываем значение с ползунка следующим образом: производим выборку по идентификатору &laquo;#slider_price&raquo; блока div в котором находится слайдер, затем обращаемся к слайдеру и вызываем у него метод values, с  индексом (номером) ползунка. Так как нас интересует в данный момент левый ползунок (минимального значения), то указываем его индекс 0.</p>
<p>Для текстового поля максимального значения все действия аналогичны только указываем индекс ползунка 1.</p>
<p>Далее записываем значения ползунков в момент загрузки страницы, для этого производим выборку по идентификатору &laquo;#price&raquo; поля минимального значения цены, далее вызываем метод val(), и параметром передаем ему значение, считанное с ползунка минимального значения. Это значение можно получить выбрав по идентификатору &laquo;#slider_price&raquo; блок в котором находится слайдер, затем обратится к его методу &laquo;values&raquo; (обратите внимание как записан метод — в скобках и в кавычках пишем имя метода, как параметр) и как и раньше передаем индекс (номер) ползунка. Для текстового поля максимального значения цены действия аналогичны.</p>
<p>Как Вы уже поняли метод   slider( &laquo;values&raquo;, 0 ) &#8211; возвращает значение ползунка с индексом 0, если же передать третьим параметром какое ни буть значение (slider( &laquo;values&raquo;, 0 , 400)), то метод установит значение ползунка в то значение, которое передано третьим параметром (то есть значение ползунка будет 400).</p>
<p>Перейдем в браузер и посмотрим, что у нас получилось.</p>
<p><img src="http://webformyself.com/wp-content/uploads/2012/18/img2.jpg" alt="jquery ui slider" title="jquery ui slider" width="600" height="248" class="aligncenter size-full wp-image-376" /></p>
<p>Как Вы видите, слайдер нормально работает и при перетаскивании ползунков значения текстовых полей изменяется.</p>
<p>Если добавить к свойствам вызова слайдера свойство:	orientation: &laquo;vertical&raquo;, то слайдер будет располагаться вертикально:</p>
<p><img src="http://webformyself.com/wp-content/uploads/2012/18/img3.jpg" alt="jquery ui slider" title="jquery ui slider" width="600" height="313" class="aligncenter size-full wp-image-376" /></p>
<p>Теперь давайте реализуем возможность того что если пользователь вводит значение цены непосредственно в текстовое поле, то что бы после ввода ползунок слайдера передвигался на указанное в поле значение.</p>
<p>Для текстового поля минимального значение эта возможность реализуется с помощью в таких строк кода:</p>
<pre class="brush: js">
$(&#039;#price&#039;).change(function() {
			var val = $(this).val();
			$(&#039;#slider_price&#039;).slider(&quot;values&quot;,0,val);
		});
</pre>
<p>Здесь все просто: вначале производим выборку по идентификатору &#8216;#price&#8217;, затем вызываем обработчик события  change (он сработает когда пользователь изменит значение тестового поля) и в обработчике описываем функцию, которая получает с помощью метода val() значение текстового поля и затем с помощью метода слайдера slider(&laquo;values&raquo;,0,val) изменяет значения ползунка (тем самым, передвигая ползунок на указанное значение).</p>
<p>Для текстового поля максимального значения все аналогично:</p>
<pre class="brush: js">
$(&#039;#price2&#039;).change(function() {
			var val1 = $(this).val();
			$(&#039;#slider_price&#039;).slider(&quot;values&quot;,1,val1);
		});
</pre>
<p>Теперь давайте проверим в браузере отработку скрипта. Итак все работает нормально, при изменении значений в текстовых полях, ползунки перемещаются на введенное значение.</p>
<p>Итак, давайте еще раз посмотрим на результат нашей работы, смотрите, как быстро и просто, используя виджет slider, мы с Вами создали очень удобную сортировку по цене, которая пригодится для любого интернет магазина.</p>
<p>Хочу еще обратить Ваше внимание на то, что в том месте, где мы с Вами копировали исходный код примера, немножко ниже имеется небольшая документация по данному виджету.  Где описаны все свойства и методы данного виджета, поэтому рекомендую Вам посмотреть, может найдете для себя что то полезное, хотя главные свойства и методы мы с Вами рассмотрели.</p>
<h3>2. Создание фотогалереи.</h3>
<h3>2.1. Создаем html разметку.</h3>
<p>Теперь давайте посмотрим (на официальном сайте jquery UI раздел Demos&#038;Documentation пункт  slider) на еще один очень интересный пример реализации виджета слайдер – это Simple scrollbar.</p>
<p><img src="http://webformyself.com/wp-content/uploads/2012/18/img4.jpg" alt="jquery ui slider" title="jquery ui slider" width="600" height="326" class="aligncenter size-full wp-image-376" /></p>
<p>Как вы видите с помощью этого виджета можно реализовать, как бы скроллер каких то объектов, к примеру картинок. Можно поместить в каждую ячейку по картинке и с помощью ползунка прокрутки листать изображения.</p>
<p>Давайте реализуем этот пример, то есть сделаем маленькую очень простую галерею картинок. Для этого, что бы не терять время скопируем из файла price.html весь код кроме кода расположенного между script и body и сохраним под именем slider.html (вот его код):</p>
<pre class="brush: html">
&lt;html lang=&quot;en&quot;&gt;
	&lt;head&gt;
		&lt;link rel=&quot;stylesheet&quot; href=&quot;css/style.css&quot;&gt;
		&lt;link rel=&quot;stylesheet&quot; href=&quot;css/jquery-ui-1.8.19.custom.css&quot;&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-1.7.2.min.js&quot;&gt;&lt;/script&gt;
		&lt;script type=&quot;text/javascript&quot; src=&quot;js/jquery-ui-1.8.19.custom.min.js&quot;&gt;&lt;/script&gt;
		&lt;title&gt;&lt;/title&gt;
&lt;/head&gt;
	&lt;body&gt;
&lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Далее, я заготовил папку с изображениями images, в ней 10 изображений маленького размера и 10 этих же изображений, но большого размера, которые имеют такие же имена, но располагаются в папке big. Скопируем папку в корень нашего скрипта.</p>
<p>Теперь откроем исходный код примера реализации Simple scrollbar, давайте начнем его рассматривать снизу. Как Вы видите, внизу у нас идет обычная html разметка. Давайте скопируем этот участок кода (он содержится между тегами body). Затем внесем в него некоторые изменения, а именно добавим стиль style=&raquo;width:800px&raquo; в блок div с классом class=&raquo;scroll-pane&raquo;, вставим картинки в каждую ячейку будущей галереи, и добавим блок div с классом class=&raquo;results&raquo;, в котором будут отображаться увеличенные изображения (в момент загрузки будет отображено первое изображение).</p>
<p>Итак, в итоге получился вот такой код  html разметки:</p>
<pre class="brush: html">
&lt;div class=&quot;demo&quot; style=&quot;padding:10px;width:850px;height:450px;border:1px solid #074776; position:relative&quot;&gt;
	&lt;div class=&quot;results&quot; style=&quot;clear:both;width:320px;height:200px;border:1px solid #074776;padding:10px;margin:0px auto 0px auto&quot;&gt;
		&lt;img src=&quot;images/big/1.jpg&quot;&gt;
	&lt;/div&gt;
&lt;div class=&quot;scroll-pane ui-widget ui-widget-header ui-corner-all&quot; style=&quot;width:800px&quot;&gt;
	&lt;div class=&quot;scroll-content&quot;&gt;
		&lt;div class=&quot;scroll-content-item ui-widget-header&quot;&gt;&lt;img src=&quot;images/1.jpg&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;scroll-content-item ui-widget-header&quot;&gt;&lt;img src=&quot;images/2.jpg&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;scroll-content-item ui-widget-header&quot;&gt;&lt;img src=&quot;images/3.jpg&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;scroll-content-item ui-widget-header&quot;&gt;&lt;img src=&quot;images/4.jpg&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;scroll-content-item ui-widget-header&quot;&gt;&lt;img src=&quot;images/5.jpg&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;scroll-content-item ui-widget-header&quot;&gt;&lt;img src=&quot;images/6.jpg&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;scroll-content-item ui-widget-header&quot;&gt;&lt;img src=&quot;images/7.jpg&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;scroll-content-item ui-widget-header&quot;&gt;&lt;img src=&quot;images/8.jpg&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;scroll-content-item ui-widget-header&quot;&gt;&lt;img src=&quot;images/9.jpg&quot;&gt;&lt;/div&gt;
		&lt;div class=&quot;scroll-content-item ui-widget-header&quot;&gt;&lt;img src=&quot;images/10.jpg&quot;&gt;&lt;/div&gt;
	&lt;/div&gt;
	&lt;div class=&quot;scroll-bar-wrap ui-widget-content ui-corner-bottom&quot;&gt;
		&lt;div class=&quot;scroll-bar&quot;&gt;&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;

&lt;/div&gt;&lt;!-- End demo --&gt;
</pre>
<h3>2.2. Пишем логическую часть фотогалереи.</h3>
<p>Дальше опять возвращаемся к исходному коду и скопируем код расположенный между тегами script. Я удалил из него две функции, которые для нашего примера не нужны, эти функции отвечали за поведение слайдера при изменении размеров окна. Вот такой вид имеет код, который необходимо вставить между тегами head:</p>
<pre class="brush: js">
&lt;script&gt;
$(function() {
		//scrollpane parts
		var scrollPane = $( &quot;.scroll-pane&quot; ),
			scrollContent = $( &quot;.scroll-content&quot; );

		//build slider
		var scrollbar = $( &quot;.scroll-bar&quot; ).slider({
			slide: function( event, ui ) {
				if ( scrollContent.width() &gt; scrollPane.width() ) {
					scrollContent.css( &quot;margin-left&quot;, Math.round(
						ui.value / 100 * ( scrollPane.width() - scrollContent.width() )
					) + &quot;px&quot; );
					//alert(Math.round(
						//ui.value / 100 * ( scrollPane.width() - scrollContent.width())));
				} else {
					scrollContent.css( &quot;margin-left&quot;, 0 );
				}
			}
		});
		//рассчитывается ширина ползунка слдайдера в зависимости от ширины
		//блока с классом scroll-content
		//append icon to handle
		var handleHelper = scrollbar.find( &quot;.ui-slider-handle&quot; )
		.mousedown(function() {
			scrollbar.width( handleHelper.width() );
		})
		.mouseup(function() {
			scrollbar.width( &quot;100%&quot; );
		})
		.append( &quot;&lt;span class=&#039;ui-icon ui-icon-grip-dotted-vertical&#039;&gt;&lt;/span&gt;&quot; )
		.wrap( &quot;&lt;div class=&#039;ui-handle-helper-parent&#039;&gt;&lt;/div&gt;&quot; ).parent();

		//change overflow to hidden now that slider handles the scrolling
		scrollPane.css( &quot;overflow&quot;, &quot;hidden&quot; );

		//size scrollbar and handle proportionally to scroll distance
		function sizeScrollbar() {
			var remainder = scrollContent.width() - scrollPane.width();
			var proportion = remainder / scrollContent.width();
			var handleSize = scrollPane.width() - ( proportion * scrollPane.width() );
			scrollbar.find( &quot;.ui-slider-handle&quot; ).css({
				width: handleSize,
				&quot;margin-left&quot;: -handleSize / 2
			});
			handleHelper.width( &quot;&quot; ).width( scrollbar.width() - handleSize );
		}

		//init scrollbar size
		setTimeout( sizeScrollbar, 10 );//safari wants a timeout
	});
&lt;/script&gt;
</pre>
<p>Здесь, конечно, все сложнее, чем в нашем первом примере, но это на первый взгляд. Смотрите, вначале производим выборку по классу $( &laquo;.scroll-bar&raquo; ) пустого блока div, в котором будет располагаться слайдер (полоса прокрутки). Затем сравниваем по ширине два блока первый с классом scroll-content, второй с классом  scroll-pane. Блок с классом  scroll-content изначально намного шире блока scroll-pane, так как в нем располагаются изображения и если посмотреть стили этого блока (в исходном коде, мы чуть позже добавим их к скрипту), то можно увидеть, что там выставлена огромная ширина width: 2440px. Поэтому выполнится условие if и при движении ползунка слайдера, наш блок с классом  scroll-content будет получать отрицательный левый отступ пропорционально движению ползунка, тем самым смещаясь влево. Далее описывается функция sizeScrollbar(), которая рассчитывает длину ползунка сладера в зависимости от ширины блока с классом scroll-content (тоесть размер ползунка пропорционален контенту который он перемещает — чем больше контент тем меньше ползунок).</p>
<p>И последнее перед просмотром в браузере давайте скопируем из исходного кода стили и вставим в наш файл, только я их немного подкорректировал в соответствии с нашим примером (немного изменил ширину блока с изображениями и добавил стилей для изображений ), вот смотрите:</p>
<pre class="brush: html">
&lt;style&gt;
	#demo-frame &gt; div.demo { padding: 10px !important; }
	.scroll-pane { overflow: auto; width: 99%; float:left; }
	.scroll-content { width: 1720px; float: left; }
	.scroll-content-item { width: 150px; height: 94px; float: left; margin: 10px; font-size: 3em; line-height: 96px; text-align: center; }
	* html .scroll-content-item { display: inline; } /* IE6 float double margin bug */
	.scroll-bar-wrap { clear: left; padding: 0 4px 0 2px; margin: 0 -1px -1px -1px; }
	.scroll-bar-wrap .ui-slider { background: none; border:0; height: 2em; margin: 0 auto;  }
	.scroll-bar-wrap .ui-handle-helper-parent { position: relative; width: 100%; height: 100%; margin: 0 auto; }
	.scroll-bar-wrap .ui-slider-handle { top:.2em; height: 1.5em; }
	.scroll-bar-wrap .ui-slider-handle .ui-icon { margin: -8px auto 0; position: relative; top: 50%;}
	.results img {width:320px;height:200px;}

&lt;/style&gt;
</pre>
<p>Теперь давайте перейдем в браузер и посмотрим на результат нашей работы:</p>
<p><img src="http://webformyself.com/wp-content/uploads/2012/18/img5.jpg" alt="jquery ui slider" title="jquery ui slider" width="600" height="324" class="aligncenter size-full wp-image-376" /></p>
<p>Итак, получился вот такой вот скроллер картинок, теперь необходимо реализовать возможность, что бы при клике по маленькому изображению,  в центральном блоке появлялась увеличенная копия этого изображения. Давайте этим и займемся.</p>
<p>Вот код, который необходимо добавить, перед, или после, кода слайдера (а ниже я приведу описание его работы):</p>
<pre class="brush: js">
$(&#039;.scroll-content-item img&#039;).each(function () {
		$(this).click(function() {
			var url = $(this).attr(&#039;src&#039;);
			var path = &#039;images/big/&#039; + url.substring(url.indexOf(&#039;/&#039;) + 1);
			$(&#039;.results&#039;).html(&#039;&lt;img src=&quot;&#039; + path +&#039;&quot;&#039; + &#039;&gt;&#039; ).hide();
			$(&#039;.results&#039;).fadeIn(1000);
		});
	});
</pre>
<p>Для начала сделаем выборку всех изображений в блоке с классом scroll-content-item, затем применим метод each. Этот метод позволяет нам создавать циклы, для последовательно прохода по каждому элементу выборки. Так как изображений у нас десять, а значит и в выборку попадет десять элементов, поэтому с помощью метода  each мы можем работать с каждым элементом выборки. Внутри этого метода описываем функцию, которая будет отрабатывать для каждого элемента выборки. Далее для каждого элемента выборки вызываем обработчик события  click. Этот обработчик сработает, когда по элементу кликнуть мышью, и как только это произойдет – выполнится функция, которая описана в обработчике.  В этой функции мы получаем значение атрибута  src, для изображения, с помощью метода attr() (в скобках указываем имя атрибута, значение которого хотим получить). То есть в переменную url  запишется строка images/1.jpg (для первой картинки).</p>
<p>Далее формируем переменную path в которой будет хранится путь к изображению большого размера. Делаем это следующим образом: вначале вырезаем имя файла с помощью методов substring() и indexOf(), а затем прибавляем строку   &#8216;images/big/&#8217;. И в конце производим выборку блока с классом results, вставляем в этот блок новую картинку (при помощи метода html()) с адресом, записанным в переменной path, далее мгновенно скрываем этот блок (при помощи метода hide()). Затем показываем блок, используя анимацию при помощи метода fadeIn(), со скоростью в 1 секунду(1000 миллисекунд).</p>
<p>Давайте перейдем в браузер и посмотрим:</p>
<p><img src="http://webformyself.com/wp-content/uploads/2012/18/img6.jpg" alt="jquery ui slider" title="jquery ui slider" width="600" height="328" class="aligncenter size-full wp-image-376" /></p>
<p>Как Вы видите, теперь, если кликнуть мышью по маленькому изображению, в центральном блоке появляется увеличенная копия этого изображения (то есть как бы предварительный просмотр).</p>
<p>Теперь давайте сделаем так, что бы при клике по изображению в центре – это изображение увеличивалось до своего исходного размера, а при последующем клике – возвращалось обратно в исходное положение.</p>
<p>Итак, вначале как обычно код, а затем пояснения:</p>
<pre class="brush: js">
$(&#039;.results&#039;).toggle(
	//первый клик
	function() {
		$(&#039;.results img&#039;).css({
							&#039;z-index&#039;:&#039;100&#039;,
							&#039;position&#039;:&#039;absolute&#039;,
							&#039;border&#039;:&#039;10px solid #ffffff&#039;

							});
		$(&#039;.results img&#039;).animate({
							&#039;width&#039;:&#039;800px&#039;,
							&#039;height&#039;:&#039;500px&#039;,
							&#039;marginLeft&#039;:&#039;-240px&#039;,
							&#039;marginTop&#039;:&#039;100px&#039;

							});

	},
	//второй клик
	function() {
		$(&#039;.results img&#039;).css({
							&#039;border&#039;:&#039;0&#039;

							});
		$(&#039;.results img&#039;).animate({
							&#039;width&#039;:&#039;320px&#039;,
							&#039;height&#039;:&#039;200px&#039;,
							&#039;marginLeft&#039;:&#039;0px&#039;,
							&#039;marginTop&#039;:&#039;0px&#039;

							});

	});
</pre>
<p>Первым делом производим выборку блока с классом results и применяем к нему метод toggle(). Этот метод позволяет реализовать своего рода переключатель, то есть в этом методе мы описываем две функции: первая выполнится при первом клике мыши, вторая – при втором клике мыши.</p>
<p>Итак, функция для первого клика: производим выборку изображений в блоке с классом results и с помощью метода css() (метод позволяет задать выбранному элементу произвольные css-стили) зададим несколько правил css-стилей, а именно рамку, позицию и свойство z-index то есть вынесем изображение на первый план. Далее к этому блоку применяем метод animate() (данная функция предназначена для создания пользовательской анимации, то есть она принимает параметрами css правила, и если они отличны от существующих правил элемента, то происходит анимированное изменение этих правил, к примеру, если ширина элемента 100 пикселей и мы передаем методу animate()  ширину в 200 пикселей то ширина элемента плавно увеличится до 200 пикселей) и передаем новые правила css-стилей, а именно исходные ширину и высоту изображения, а также верхний и левый отступы, чтобы изображение не смещалось в сторону, и при увеличении располагалось по центру.</p>
<p>Далее аналогично описываем функцию для второго клика, только при этом меняем правила css-стилей, которые передаем в методы css() и animate().</p>
<p>Итак, переходим в браузер и посмотрим, что у нас получилось:</p>
<p><img src="http://webformyself.com/wp-content/uploads/2012/18/img7.jpg" alt="jquery ui slider" title="jquery ui slider" width="600" height="437" class="aligncenter size-full wp-image-376" /></p>
<p>Вот, что у меня получилось при клике по центральному изображению, соответственно при втором клике изображение возвращается на место, и обратите внимание, что с довольно неплохой анимацией.</p>
<p>На этом наша небольшая и простенькая галерея изображений завершена, она получилась, на мой взгляд, очень даже неплохой и удобной. Галерея не занимает много места, притом, что картинок в ней можно расположить сколько угодно, очень удобно листать изображения, используя при этом предварительный просмотр, а также очень красиво отображается исходная величина изображения.</p>
<p>Итак, на этом урок можно заканчивать,  надеюсь, урок был Вам интересен, и вы подчеркнули для себя много нового и полезного. Если Вам понравился данный виджет используйте его по своему усмотрению, он очень полезен, и на его основе можно реализовать много интересных вещей. А у меня пока все, будут вопросы, пишите – постараемся на них ответить.</p>
<p>Удачного Вам кодирования и до новых встреч!</p>
]]></content:encoded>
			<wfw:commentRss>http://webformyself.com/prakticheskoe-primenenie-vidzheta-slider-biblioteki-jquery-ui/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Создаем навигационную панель-липучку с помощью Waypoints от jQuery.</title>
		<link>http://webformyself.com/sozdaem-navigacionnuyu-panel-lipuchku-s-pomoshhyu-waypoints-ot-jquery/</link>
		<comments>http://webformyself.com/sozdaem-navigacionnuyu-panel-lipuchku-s-pomoshhyu-waypoints-ot-jquery/#comments</comments>
		<pubDate>Fri, 27 Apr 2012 14:28:35 +0000</pubDate>
		<dc:creator>Андрей Кудлай</dc:creator>
				<category><![CDATA[Javascript&Ajax]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[jquery]]></category>
		<category><![CDATA[навигационная панель]]></category>

		<guid isPermaLink="false">http://webformyself.com/?p=7469</guid>
		<description><![CDATA[От автора: в этом учебнике мы создадим панель навигации, которая при прокрутке всегда остается с вами — а еще отполируем ее одним-двумя хитрыми приемами &#171;до блеска&#187;. &#171;Ленточки нравятся всем&#187;, говорит Крис Койер (Chris Coyier) при обсуждении преимуществ псевдоэлементов :before и &#8230; <a href="http://webformyself.com/sozdaem-navigacionnuyu-panel-lipuchku-s-pomoshhyu-waypoints-ot-jquery/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="webfor-img" title="навигационная панель-липучка с помощью Waypoints от jQuery" src="http://webformyself.com/wp-content/uploads/2012/17/100.jpg" alt="навигационная панель-липучка с помощью Waypoints от jQuery" width="100" height="100" /></p>
<p><em><strong>От автора:</strong> в этом учебнике мы создадим панель навигации, которая при прокрутке всегда остается с вами — а еще отполируем ее одним-двумя хитрыми приемами &laquo;до блеска&raquo;.</em></p>
<p>&laquo;Ленточки нравятся всем&raquo;, говорит Крис Койер (Chris Coyier) при обсуждении преимуществ псевдоэлементов :before и :after. Я видел, как эти стилизованные, с треугольными краями ленты так и бросаются в глаза по всему Интернету (один из видных примеров – страница Facebook’а Introducing Timeline) и, хотя они обладают некоторой привлекательностью, должен заметить, что мне не очень нравится создаваемый ими объемный эффект.</p>
<div class="down-demo">
<p align="center"><a href="http://narod.ru/disk/47434592001.f33e82790095feddd79e2954cb211ddd/demostickynavigation.zip.html" target="_blank"><img src="/wp-content/themes/web4my/images/download.jpg" alt="скачать исходники" /></a><a href="http://webdesigntutsplus.s3.amazonaws.com/tuts/313_waypoints/demo/index.html" target="_blank"><img src="/wp-content/themes/web4my/images/demo.jpg" alt="демо" /></a> </p>
</div>
<p><span id="more-7469"></span></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/17/1.jpg" title="" alt="" width="600" height="400" /></p>
<p>Однако ленты любят по важной причине — они разрушают принцип плоскости дизайна, которому мы традиционно привержены, и являются одним из немногих зрительных эффектов, позволяющих сделать это, не привлекая лишнего внимания. Но, как говорится, ко всякому делу можно подойти творчески и с разных сторон — так что в этом учебнике я предложу для подобных элементов альтернативный визуальный стиль, который нахожу гораздо более естественным и эстетически привлекательным. Надеюсь, он вам понравится и очень пригодится!</p>
<h2>Что мы сделаем</h2>
<p>В этом учебнике мы применим один из новых элементов HTML5, тэг nav, в качестве контейнера для горизонтального списка ссылок. Я вкратце объясню, как сделать его привлекательным с помощью CSS.</p>
<p>Гораздо важнее то, что вы познакомитесь с основами плагина jQuery под названием <a href="http://imakewebthings.com/jquery-waypoints/" target="_blank">Waypoints</a>, который обеспечит улучшение функциональности: когда пользователь делает прокрутку вниз, панель навигации «прилипает» к верху демонстрационного окна, а также меняется, обозначая текущий раздел. Как дополнительный штрих, мы применим другой плагин, <a href="http://flesler.blogspot.com/2007/10/jqueryscrollto.html" target="_blank">ScrollTo</a>, чтобы гарантировать легкую прокрутку и удобное расположение при щелчках пользователя на ссылки навигации.</p>
<h2>Шаг 1: Блок</h2>
<p>Уверен, что вы уже знакомы с различными <a href="http://html5doctor.com/element-index/" target="_blank">новыми элементами</a>, представленными в HTML5. В этом примере мы воспользуемся двумя из них: &lt;nav&gt; и &lt;section&gt;. Начнем со следующего:</p>
<pre class="brush: html">
&lt;!DOCTYPE html&gt;
&lt;html&gt;
  &lt;head&gt;
    &lt;meta charset=&quot;UTF-8&quot; /&gt;
    &lt;link rel=&quot;stylesheet&quot; href=&quot;styles.css&quot; /&gt;
  &lt;/head&gt;
  &lt;body&gt;
    &lt;div class=wrapper&gt;
      &lt;h1&gt;A reasonably large heading.&lt;/h1&gt;
      &lt;nav&gt;&lt;!-- Navigation. --&gt;&lt;/nav&gt;
      &lt;section id=&quot;section-1&quot;&gt;Lorem ipsum ...&lt;/section&gt;
      &lt;!-- Type in some longer sections of sample text here. --&gt;
    &lt;/div&gt;
    &lt;!-- Scripts will go here. --&gt;
  &lt;/body&gt;
&lt;/html&gt;
</pre>
<p>Мы собираемся назначить своей навигационной панели  точную ширину. Сделайте ее на 28px шире основного div-a и задайте отрицательный левый отступ. Еще давайте с помощью border-*-radius сделаем слегка закругленные верхние края, а также небольшой произвольный отступ.</p>
<pre class="brush: css">
nav {
  position: relative;
  width: 928px;
  padding: 2em;
  margin-left: -14px;
  border-top-left-radius: 14px 7px;
  border-top-right-radius: 14px 7px;
}
</pre>
<p>Далее нам нужно добавить внутрь навигационной панели неупорядоченный список ссылок и установить его элементы на display: inline-block для того, чтобы выстроить их все в одну линию. Маркеры нам не нужны, поэтому внесем сюда еще list-style: none.</p>
<pre class="brush: html">
&lt;nav&gt;
  &lt;ul&gt;
    &lt;li&gt;&lt;a class=nav-link href=#section-1&gt;Section 1&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a class=nav-link href=#section-2&gt;Section 2&lt;/a&gt;&lt;/li&gt;
    ...some more list items...
  &lt;/ul&gt;
&lt;/nav&gt;
</pre>
<pre class="brush: css">
nav li {
  display: inline-block;
  list-style: none;
}
</pre>
<p>К этому моменту у вас должно получиться нечто такое:</p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/17/2.jpg" title="" alt="" width="600" height="124" /></p>
<h2>Шаг 2: Края</h2>
<p>Теперь, если бы CSS позволил нам применить множественные псевдоэлементы (напр. ::after::after), можно было бы легко выполнить закругленные края панели навигации семантически «чистым» способом. Но мы не можем этого сделать, поэтому в конец nav’а нам понадобится добавить два несемантических div’а. Назначьте им классы nav-left и nav-right (или назвали бы их с фантазией, типа Кастор и Поллукс (<a href="http://en.wikipedia.org/wiki/Gemini_(constellation)" target="_blank">Castor and Pollux</a>). Они в 14px шириной и 14px высотой и позиционированы абсолютно (absolute) в 14px от нижнего края nav’а.</p>
<p>Как видно из вышеприведенного, семейство свойств border-radius может принимать по два значения для каждого угла. Они могут быть в процентах от ширины элемента, что очень удобно — такой подход позволяет радиусу угла автоматически подстраиваться к изменению размеров блока.</p>
<p>Маленькие «тени», дополняющие ленту панели навигации, выглядят созданными с помощью псевдоэлементов ::after. Их ширина и высота, как и радиусы углов, также установлены в процентах.</p>
<pre class="brush: css">
/* swap ‘left’ with ‘right’ for the other two */

.nav-left {
  position: absolute;
  left: 0;  bottom: -14px;
  width: 14px;  height: 14px;
  background: #848a6a;
  border-bottom-left-radius: 100% 50%;
}

.nav-left::after {
  content: &#039;&#039;;
  position: absolute;
  right: 0;
  width: 66%;  height: 66%;
  background: #000;
  border-top-left-radius: 100% 50%;
  border-bottom-left-radius: 100% 50%;
}
</pre>
<p>И здесь мы уже закончили!</p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/17/3.jpg" title="" alt="" width="600" height="92" /></p>
<p>Избавившись по большей части от невозможной геометрии прямоугольных лент, давайте продолжать дальше.</p>
<h2>Шаг 3: Скрипт</h2>
<p>Для достижения эффекта «плавающего» заголовка мы воспользуемся плагином jQuery под названием <a href="http://imakewebthings.com/jquery-waypoints/" target="_blank">Waypoints</a> от Калеба Тротона (Caleb Troughton). Его единственная задача – запускать события, когда пользователь прокручивает до определенного элемента. Как вы увидите, он чрезвычайно прост, однако предполагает большую гибкость — на домашней странице можно взглянуть на <a href="http://imakewebthings.com/jquery-waypoints/#examples" target="_blank">несколько примеров</a>.</p>
<p>Подключите на свою страницу jQuery и Waypoints и давайте начнем!</p>
<p>Первое, что вам понадобится сделать – это объявить вейпойнт (букв. промежуточная точка маршрута – прим. переводчика), вызвав для элемента метод .waypoint(). Конечно, сам по себе он ничего не делает — вам придется назначить событию функцию обработчика. Проще всего это сделать, передав эту функцию как параметр для .waypoint().</p>
<p>Попробуйте сделать это сейчас: добавьте в свой скрипт следующее и посмотрите, как выскочит сообщение, когда прокрутка будет происходить мимо панели навигации.</p>
<pre class="brush: js">
$(function() {                     // When the page has loaded,
  $(&#039;nav&#039;).waypoint(               // create a waypoint
    function() {
      alert(&quot;Waypoint reached.&quot;);
    }
  )
});
</pre>
<p>Теперь для достижения нужного эффекта все обязано немного усложниться. Во-первых, нужно заключить свою навигационную панель в контейнер, который станет нашим фактическим вэйпойнтом, и послужит в качестве удобного места хранения (об этом ниже).</p>
<pre class="brush: html">
&lt;div class=&quot;nav-container&quot;&gt;
  &lt;nav&gt;
    ...
  &lt;/nav&gt;
&lt;/div&gt;
</pre>
<p>Создайте в CSS следующее правило.</p>
<pre class="brush: css">
.sticky {
  position: fixed;
  top: 0;
}
</pre>
<p>Все уже подготовлено к самому приятному! Измените содержимое своего скрипта на следующее:</p>
<pre class="brush: js">
$(function() {

  // Do our DOM lookups beforehand
  var nav_container = $(&quot;.nav-container&quot;);
  var nav = $(&quot;nav&quot;);

  nav_container.waypoint({
    handler: function(event, direction) {
        nav.toggleClass(&#039;sticky&#039;, direction==&#039;down&#039;);
    }
  });

});
</pre>
<p>Ага, какого черта, откуда все это взялось, задаете вы правомерный вопрос. Возможно, вы догадались, что мы прикрепляем вейпойнт к nav-container; только теперь делаем это по-другому. Вместо прямой передачи функции обработчика к .waypoint(), мы заключаем его в объект. Само по себе это роли не играет: оба способа – это полностью надежные методы. Передаваемый нами объект, однако, может содержать несколько прочих значений опции — так что применение его сейчас позже приводит к более последовательному коду.</p>
<p>Назначенная нами функция обработчика получает два параметра: первый – это стандартный объект jQuery event, который нам здесь неинтересен. Второй – особый Waypoints’а: это строка, чье значение равно ‘down’ либо ‘up’, в зависимости от направления, в котором пользователь делал прокрутку в момент достижения вейпойнта.</p>
<p>Сейчас знать, куда движется пользователь, очень важно, просто оттого, что это позволяет нам осуществить в каждом из направлений разную модель поведения. В теле функции обработчика мы применяем сравнительно малоизвестный вариант метода jQuery .toggleClass(), который ведет к удобной стенографии: в этом синтаксисе второй параметр определяет, будет ли класс добавлен к нужному элементу или удален из него. Когда пользователь делает прокрутку вниз, выражение direction===&#8217;down&#8217; вычисляется до true, и так наша навигационная панель получает класс sticky и &laquo;прилипает&raquo; к верху демонстрационного окна. Как только пользователь снова прокручивает вверх, класс удаляется из панели навигации, которая возвращается на свое место. Сейчас попробуйте это сделать.</p>
<p>Здорово, а? Однако, если вы медленно прокрутите мимо только что созданного вейпойнта, то, возможно, заметите, что при движении контент слегка «подпрыгивает» из-за того, что навигационная панель удаляется из &laquo;течения&raquo; контента. Помимо очень неряшливого вида, такое поведение, возможно, закрывает часть содержимого и ухудшает юзабилити. К счастью, все поддается простой починке — добавление следующего кода в функцию обработчика убирает &laquo;прыжки&raquo;.</p>
<pre class="brush: js">
if (direction == &#039;down&#039;)
  nav_container.css({ &#039;height&#039;:nav.outerHeight() });
else
  nav_container.css({ &#039;height&#039;:&#039;auto&#039; });
</pre>
<p>Происходящее здесь весьма очевидно: мы используем nav-container в качестве «заполнителя», как упоминалось выше. При прокрутке вниз мы растягиваем его высоту, а содержимое ниже остается на месте. Хотя здесь есть подвох – для его нормальной работы любые вертикальные поля, которые вы можете пожелать вокруг панели навигации, нужно применять к nav-container, а не к nav.</p>
<p>Вот так вот! У нас получилась красивая фиксированная навигационная панель, как на многих других сайтах. Представление закончено, ребята…</p>
<p>…или нет? Ну, вы, может быть, захотите увидеть еще парочку приемов, которые приведут вас в авангард масс. Если это ваш случай, то читаем дальше.</p>
<h2>Шаг 4: Вертикальные смещения</h2>
<p>Если подумать, существует множество случаев, где запуск события при достижении элементом края демонстрационного окна браузера не совсем то, что нужно. К счастью, Waypoints обеспечивает для этого удобную опцию: offset. Вот как это выглядит:</p>
<pre class="brush: css">
nav.waypoint( {
  handler: …,
  offset: 50
} )
</pre>
<p>offset позволяет создать фактический вейпойнт на варьируемом расстоянии от верха элемента. Положительное значение запускает вейпойнт, когда верх элемента находится на определенном расстоянии от верха демонстрационного окна, а отрицательное значение запускает его, когда элемент далеко выше верха демонстрационного окна (напр., пользователь прокрутил далеко за него).</p>
<p>Значение офсета может выражаться числом (представляющим фиксированное количество пикселей), строкой, содержащей процентное отношение (интерпретируемое как процент от высоты демонстрационного окна), или функцией, возвращающей количество пикселей. Последний случай может обеспечить серьезную гибкость, и попозже мы собираемся извлечь из этого пользу. Сейчас же давайте станем придерживаться фиксированных значений и посмотрим, на что они способны.</p>
<p>Первое, что приходит в голову – добавление пространства над элементом-&raquo;липучкой&raquo;. Это легко сделать с помощью переменной offset: для создания сверху офсета в 15px добавьте offset:15px в опции .waypoint(), и измените top:0px на top:15px в правиле CSS .sticky.</p>
<p>Если того требует дизайн проекта, то хорошо выйдет, если создать над панелью навигации небольшой градиент. Это легко выполнимо путем добавления внутрь nav еще одного div’а и небольшого количества CSS:</p>
<pre class="brush: css">
.sticky .nav-above {
  position: absolute;
  top:-15px;
  left:1em;
  right:1em;
  height:15px;
  background: linear-gradient(top, rgba(255,255,255,1) 0%,rgba(255,255,255,0) 100%);
  /* add cross-browser gradient code as needed */
}
</pre>
<p>В минималистских дизайнах этот лакомый визуальный кусочек будет отлично работать.</p>
<h2>Шаг 5: Функции офсета</h2>
<p>Калеб предусмотрительно добавил в Waypoints способность генерировать офсет вейпойнта динамически, как тут:</p>
<pre class="brush: js">
nav.waypoint( {
  handler: …,
  offset: function() {
    return —(nav.outerHeight()+50);
  }
} )
</pre>
<p>Это дает нам возможность получить обработчик, который станет запускаться, когда пользователь уже прокрутил 50px мимо низа элемента, без необходимости заранее знать его высоту.</p>
<p><em><b>Примечание:</b> такие процедурно генерируемые офсеты (а также те, которые определяются в процентном соотношении) пересчитываются каждый раз при изменении размера окна, добавляются новые вейпойнты или модифицируются опции вейпойнта. Если делать что-нибудь еще, что может повлиять на расположение вейпойнтов (такое, как изменение DOM’а или разметки страницы),обязательно впоследствии вызывайте $.waypoints(&#8216;refresh&#8217;) для тех позиций, которые нужно пересчитать.</em></p>
<p>В контексте нашего учебника одним из употреблений этой функциональности стало гладкое скольжение навигационной панели сверху. Готовьтесь — далее следует самая большая порция кода из всех. Тем не менее, тут нет ничего неизвестного вам ранее, так что вот она:</p>
<pre class="brush: js">
var top_spacing = 15;
var waypoint_offset = 50;

nav_container.waypoint({

  handler: function(event, direction) {

    if (direction == &#039;down&#039;) {

      nav_container.css({ &#039;height&#039; : nav.outerHeight() });
      nav.addClass(&quot;sticky&quot;)
         .stop()
         .css(&quot;top&quot;, -nav.outerHeight())
         .animate({&quot;top&quot; : top_spacing});

    } else {

      nav_container.css({ &#039;height&#039; : &#039;auto&#039; });
      nav.removeClass(&quot;sticky&quot;)
         .stop()
         .css(&quot;top&quot;, nav.outerHeight() + waypoint_offset)
         .animate({&quot;top&quot; : &quot;&quot;});

    }

  },

  offset: function() {
    return &amp;mdash;(nav.outerHeight() + waypoint_offset);
  }

});
</pre>
<p>Не слишком-то плохо! Довольно стандартная раскладка jQuery: как только мы добавляем или удаляем класс sticky в nav, то подменяем вертикальное расположение элемента с помощью .css(), а затем как следует анимируем .animate() его. .stop() служит для предотвращения возможных ошибок путем очистки очереди события jQuery.</p>
<p>Здесь, однако, имеется небольшой побочный эффект — так как код при фиксировании эффективно контролирует вертикальную позицию элемента навигации, вы могли бы выпустить top:15px из своего CSS. Если вы участвуете в большом проекте, где над дизайном и сценарием внешнего интерфейса работают отдельные люди, это может вызвать проблему, так как следы подобного хака легко теряются. Просто чтобы вы знали – существуют такие плагины, как великолепный <a href="http://flesler.blogspot.fr/2007/11/jqueryrule.html" target="_blank">jQuery.Rule</a> Эриела Флеслера (Ariel Flesler), которые можно применять для покрытия разрыва между скриптами и таблицами стилей. Вам нужно самому решить, нужно ли вам что-то подобное.</p>
<p>Скорее всего, еще подобного эффекта можно достичь с помощью @keyframes из CSS, но они гораздо меньше поддерживаются (и требуется множество префиксов производителей) и менее гибкие, и анимация подъема верх может оказаться большим разочарованием. Так как мы не сходим с пути прогрессивного улучшения, то у нас отсутствуют причины не придерживаться солидной функциональности jQuery.</p>
<h2>Шаг 6: Выделение и гладкая прокрутка</h2>
<p>Вы можете оказаться перед необходимостью смены выделяемого элемента во время продвижения читателя мимо различных разделов вашей страницы. С помощью Waypoints этого легко добиться. Вам понадобится добавить в свой скрипт следующее:</p>
<pre class="brush: js">
$(function() {
  …
  // copy from here…

  var sections = $(&#039;section&#039;);
  var navigation_links = $(&#039;nav a&#039;);

  sections.waypoint({
    handler: function(event, direction) {
      // handler code
    },
    offset: &#039;35%&#039;
  });

  // …to here
});
</pre>
<p>На этот раз мы применяем офсет, выраженный в процентном отношении к высоте окна. В сущности, это означает, что воображаемая линия, которая говорит нашему скрипту, какой из разделов в данный момент просматривается, расположена примерно в трети расстояния от верха демонстрационного окна — как раз примерно там, куда будет смотреть зритель при чтении длинного текста. Более добротное решение – применить функцию адаптации изменения высоты навигационной панели.</p>
<p>Однако код, который мы собираемся использовать в функции своего обработчика, не очень говорит за себя. Вот он:</p>
<pre class="brush: js">
var active_section;
active_section = $(this);
if (direction === &quot;up&quot;) active_section = active_section.prev();

var active_link = $(&#039;nav a[href=&quot;#&#039; + active_section.attr(&quot;id&quot;) + &#039;&quot;]&#039;);
navigation_links.removeClass(&quot;selected&quot;);
active_link.addClass(&quot;selected&quot;);
</pre>
<p>Во-первых, нам нужно знать, какой раздел в данный момент просматривается. Если прокрутить вниз, то раздел, к которому принадлежит вейпойнт – тот же, который активируется. Прокрутка вверх мимо вейпойнта, тем не менее, означает, что в поле зрения оказался предыдущий раздел — так что для его выбора мы применим .prev(). Затем удаляем класс selected  из всех ссылок навигационной панели до его применения заново к тому классу, чей атрибут href соответствует id текущего активного раздела.</p>
<p>Это достаточно хорошо работает; если вы предпочитаете зайти дальше добавления и удаления классов, вам можно рассмотреть такие плагины, как <a href="http://www.gmarwaha.com/blog/2007/08/23/lavalamp-for-jquery-lovers/" target="_blank">LavaLamp</a>.</p>
<p>На каком-то этапе вы, может быть, заметили, что щелчок по ссылкам панели навигации помещает верх раздела на самую верхушку демонстрационного окна браузера. Весьма неожиданно, когда ничто не заслоняет эту часть экрана; теперь, когда у нас там находится навигационная панель, она становится сильным раздражителем. Вот где приходит на помощь <a href="http://flesler.blogspot.com/2007/10/jqueryscrollto.html" target="_blank">ScrollTo</a> от Эриела Флеслера (Ariel Flesler). Включите его в свою страницу, а затем вставьте следующий код:</p>
<pre class="brush: js">
navigation_links.click( function(event) {

  $.scrollTo(
    $(this).attr(&quot;href&quot;),
    {
      duration: 200,
      offset: { &#039;left&#039;:0, &#039;top&#039;:-0.15*$(window).height() }
    }
  );

});
</pre>
<p><em>(конечно, этот код ставится над последней фигурной скобкой!)</em></p>
<p>Хотя существуют лучшие способы привязать функцию к событиям щелчка, мы собираемся придерживаться самого простого: .click(). Метод .scrollTo() вызывается способом, очень похожим на .waypoint(). Он принимает два параметра — цель прокрутки и объект, содержащие различные опции, которые в данном случае говорят сами за себя. Атрибут href нажатой ссылки отлично работает в качестве адресата прокрутки, а выражение, использованное как верхний офсет, размещает цель на 15% от высоты демонстрационного окна.</p>
<h2>Заключение</h2>
<p>Похоже, мы закончили. Я представил вам удобный небольшой плагин Waypoints, мы пробежались по нескольким случаям его применения, который должны были дать вам представление о множестве вещей, которые можно сделать с его помощью. Мы также выполнили более интуитивное поведение прокрутки, подходящее к навигации. Добавьте в смесь немного Ajax’а и окажетесь на пути к созданию некоего плавного, создающего эффект присутствия, впечатления от Сети, за которым будущее… ну, скорее всего это станет на какое-то время модной тенденцией, а затем будет общеупотребительным, заставляющим ветеранов Сети ностальгировать о прошлом. Эй, мир так устроен!</p>
<p>Что касается ленточек, их основной недостаток вот в чем: они просто иллюзия. Края ленты на самом деле не загибаются за края контейнера; они просто таковыми кажутся, что становится вполне ясно, когда лента проходит над элементом, выступающим за край страницы.</p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/17/3.jpg" title="" alt="" width="600" height="208" /></p>
<p>По причине того, как работает <a href="http://dev.opera.com/articles/view/37-css-absolute-and-fixed-positioning/#zindex" target="_blank">z-index</a>, похоже, простых путей разрешения этого конфликта не существует, кроме избегания его. Однако с помощью воображения, а также знания основ jQuery можно спроектировать для этих элементов способ сдвигаться с пути ленты по мере ее приближения. Хотя этот прием сильно выходит за грань этого учебника; надеюсь, что рано или поздно смогу показать вам его в виде небольшой подсказки, здесь или на Nettuts+. Оставайтесь на связи!</p>
<p><strong>Автор: </strong>Adam Avramov</p>
<p><strong>Источник: </strong><a href="http://webdesign.tutsplus.com/tutorials/javascript-tutorials/create-a-sticky-navigation-header-using-jquery-waypoints/">http://webdesign.tutsplus.com/</a></p>
<p><strong>Редакция:</strong> Команда webformyself.</p>
]]></content:encoded>
			<wfw:commentRss>http://webformyself.com/sozdaem-navigacionnuyu-panel-lipuchku-s-pomoshhyu-waypoints-ot-jquery/feed/</wfw:commentRss>
		<slash:comments>15</slash:comments>
		</item>
		<item>
		<title>Премиум. Создание административной части для флеш-галереи. Работа с XML. Часть2.</title>
		<link>http://webformyself.com/premium-sozdanie-administrativnoj-chasti-dlya-flesh-galerei-rabota-s-xml-chast2/</link>
		<comments>http://webformyself.com/premium-sozdanie-administrativnoj-chasti-dlya-flesh-galerei-rabota-s-xml-chast2/#comments</comments>
		<pubDate>Wed, 25 Apr 2012 12:26:11 +0000</pubDate>
		<dc:creator>Андрей Кудлай</dc:creator>
				<category><![CDATA[Премиум]]></category>
		<category><![CDATA[работа с XML]]></category>
		<category><![CDATA[флеш-галерея]]></category>

		<guid isPermaLink="false">http://webformyself.com/?p=7435</guid>
		<description><![CDATA[<img class="webfor-img" src="http://webformyself.com/wp-content/uploads/premium/2011/28/100.jpg" alt="Создание административной части для флеш-галереи. Работа с XML" title="Создание административной части для флеш-галереи. Работа с XML" width="100" height="100" class="alignnone size-full wp-image-256" />

<p><em><strong>От автора:</strong> вторую часть можно назвать в некотором роде подготовительным этапом к реализации двух оставшихся пунктов админки. В этой части мы оговорим алгоритм реализации пункта Добавить фото, напишем функцию генерирования уникальных имен для добавляемых картинок и начнем написание обработчика для формы добавления новых картинок. Ну а третья часть, соответственно, будет финальной - в ней мы закончим написание нашей админки.</em></p>
<p>Напоминаем, что в первой части мы создали пункт Редактировать и уже можем изменять название и описание картинок в галерее. Также, по ходу написанию кода этого пункта, мы вспомнили массивы, циклы, познакомились с основами ООП, а именно - работа с готовым классом SimpleXMLElement.</p>

<p><strong>Из этого урока Вы узнаете:</strong></p>
<p>1. Как правильно загружать новые файлы в каталог, не боясь перезаписать прежние.</p>
<p>2. Как читать содержимое каталога и получать массив файлов в каталоге.</p>
<p>3. Как создать простейший загрузчик файлов.</p>

<h3>План урока:</h3>
<ol>
<p><span class="amazing">1. Создаем форму добавления нового фото.</span></p>
<p><span class="amazing">2. Пишем функцию генерирования имени картинок.</span></p>
<p><span class="amazing">3. Обработчик формы. Определяем переменные.</span></p>
<p><span class="amazing">4. Обработчик формы. Проверяем тип загруженных файлов.</span></p>
<p><span class="amazing">5. Обработчик формы. Проверяем размеры загруженных картинок.</span></p>
<p><span class="amazing">6. Обработчик формы. Получаем необходимые переменные.</span></p>
</ol>

<p><strong>Результат урока:</strong></p>
<p>По итогам урока мы создадим функцию генерирования имен загружаемых картинок, решая, таким образом, проблему уникальности имен. Также мы создадим простейший загрузчик файлов, получая через него новые картинки для галереи.</p>

<h3>Детали учебника</h3>
<div class="perechen">
<p><span class="amazing"><strong>Раздел:</strong> PHP</span></p>
<p><span class="amazing"><strong>Сложность:</strong> Средняя</span></p>
<p><span class="amazing"><strong>Урок:</strong> Видео+текстовая версии (.mp4;.pdf)</span></p>
<p><span class="amazing"><strong>Время:</strong> 01:29:47</span></p>
<p><span class="amazing"><strong>Размер архива:</strong> 176 Mb</span></p>
</div>
<div class="autor-tut">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top"><img src="http://webformyself.com/wp-content/themes/default/images/kudlai.jpg" border="0" alt="автор" width="100" height="100" align="left" /></td>
<td valign="top">
<h2>Автор: Андрей Кудлай</h2>
Зовут меня Андрей Кудлай. Родом я из Украины, живу в Днепропетровске. Веб-программированию учился сам. Неплохо знаю HTML, CSS, PHP. Немного разбираюсь в JavaScript’e - в свободное время как раз занимаюсь его изучением.
</tr>
</tbody></table>
</div>
<p>Итак, приступим!</p>
<!-- Начало кода EcommTools.com -->
<a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium1month']);" href="http://www.ecommtools.com/buy/andreybern/premium1month/saler1month" target="_blank">
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium1month',action:'buy',payby:'',refid:'',channel:'page1month'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium1.png" alt="купить" border="0" />
</a>

<a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium3month']);" href="http://www.ecommtools.com/buy/andreybern/premium3month/saler3month" target="_blank">
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium3months',action:'buy',payby:'',refid:'',channel:'page3months'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium3.png" alt="купить" border="0" />
</a>
<!-- Конец кода EcommTools.com -->
<a href="http://webformyself.com/premium-sozdanie-administrativnoj-chasti-dlya-flesh-galerei-rabota-s-xml-chast2/">Продолжить чтение →</a><div class="exerpt_more_link"><a href="http://webformyself.com/premium-sozdanie-administrativnoj-chasti-dlya-flesh-galerei-rabota-s-xml-chast2/">Подробнее »»</a></div>]]></description>
			<content:encoded><![CDATA[<p><img class="webfor-img" src="http://webformyself.com/wp-content/uploads/premium/2011/28/100.jpg" alt="Создание административной части для флеш-галереи. Работа с XML" title="Создание административной части для флеш-галереи. Работа с XML" width="100" height="100" class="alignnone size-full wp-image-256" /></p>
<p><em><strong>От автора:</strong> вторую часть можно назвать в некотором роде подготовительным этапом к реализации двух оставшихся пунктов админки. В этой части мы оговорим алгоритм реализации пункта Добавить фото, напишем функцию генерирования уникальных имен для добавляемых картинок и начнем написание обработчика для формы добавления новых картинок. Ну а третья часть, соответственно, будет финальной &#8211; в ней мы закончим написание нашей админки.</em></p>
<p>Напоминаем, что в первой части мы создали пункт Редактировать и уже можем изменять название и описание картинок в галерее. Также, по ходу написанию кода этого пункта, мы вспомнили массивы, циклы, познакомились с основами ООП, а именно &#8211; работа с готовым классом SimpleXMLElement.</p>
<p><strong>Из этого урока Вы узнаете:</strong></p>
<p>1. Как правильно загружать новые файлы в каталог, не боясь перезаписать прежние.</p>
<p>2. Как читать содержимое каталога и получать массив файлов в каталоге.</p>
<p>3. Как создать простейший загрузчик файлов.</p>
<h3>План урока:</h3>
<ol>
<p><span class="amazing">1. Создаем форму добавления нового фото.</span></p>
<p><span class="amazing">2. Пишем функцию генерирования имени картинок.</span></p>
<p><span class="amazing">3. Обработчик формы. Определяем переменные.</span></p>
<p><span class="amazing">4. Обработчик формы. Проверяем тип загруженных файлов.</span></p>
<p><span class="amazing">5. Обработчик формы. Проверяем размеры загруженных картинок.</span></p>
<p><span class="amazing">6. Обработчик формы. Получаем необходимые переменные.</span></p>
</ol>
<p><strong>Результат урока:</strong></p>
<p>По итогам урока мы создадим функцию генерирования имен загружаемых картинок, решая, таким образом, проблему уникальности имен. Также мы создадим простейший загрузчик файлов, получая через него новые картинки для галереи.</p>
<h3>Детали учебника</h3>
<div class="perechen">
<p><span class="amazing"><strong>Раздел:</strong> PHP</span></p>
<p><span class="amazing"><strong>Сложность:</strong> Средняя</span></p>
<p><span class="amazing"><strong>Урок:</strong> Видео+текстовая версии (.mp4;.pdf)</span></p>
<p><span class="amazing"><strong>Время:</strong> 01:29:47</span></p>
<p><span class="amazing"><strong>Размер архива:</strong> 176 Mb</span></p>
</div>
<div class="autor-tut">
<table border="0" cellspacing="0" cellpadding="0">
<tbody>
<tr>
<td valign="top"><img src="http://webformyself.com/wp-content/themes/default/images/kudlai.jpg" border="0" alt="автор" width="100" height="100" align="left" /></td>
<td valign="top">
<h2>Автор: Андрей Кудлай</h2>
<p>Зовут меня Андрей Кудлай. Родом я из Украины, живу в Днепропетровске. Веб-программированию учился сам. Неплохо знаю HTML, CSS, PHP. Немного разбираюсь в JavaScript’e &#8211; в свободное время как раз занимаюсь его изучением.<br />
</tr>
</tbody>
</table>
</div>
<p>Итак, приступим!</p>
<p><!-- Начало кода EcommTools.com --><br />
<a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium1month']);" href="http://www.ecommtools.com/buy/andreybern/premium1month/saler1month" target="_blank"><br />
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium1month',action:'buy',payby:'',refid:'',channel:'page1month'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium1.png" alt="купить" border="0" /><br />
</a></p>
<p><a onclick="_gaq.push(['_trackPageview', '/ps/buy_premium3month']);" href="http://www.ecommtools.com/buy/andreybern/premium3month/saler3month" target="_blank"><br />
<img onclick="EcommTools.AddtoCart({user:'andreybern',id:'premium3months',action:'buy',payby:'',refid:'',channel:'page3months'}); return false" src="http://webformyself.com/wp-content/themes/web4my/images/sale-premium3.png" alt="купить" border="0" /><br />
</a><br />
<!-- Конец кода EcommTools.com --><br />
<a href="http://webformyself.com/premium-sozdanie-administrativnoj-chasti-dlya-flesh-galerei-rabota-s-xml-chast2/">Продолжить чтение →</a>
<div><a href="http://webformyself.com/premium-sozdanie-administrativnoj-chasti-dlya-flesh-galerei-rabota-s-xml-chast2/"></a></div>
]]></content:encoded>
			<wfw:commentRss>http://webformyself.com/premium-sozdanie-administrativnoj-chasti-dlya-flesh-galerei-rabota-s-xml-chast2/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>50 креативных портфолио сайтов.</title>
		<link>http://webformyself.com/50-kreativnyx-portfolio-sajtov/</link>
		<comments>http://webformyself.com/50-kreativnyx-portfolio-sajtov/#comments</comments>
		<pubDate>Mon, 23 Apr 2012 18:32:37 +0000</pubDate>
		<dc:creator>Андрей Кудлай</dc:creator>
				<category><![CDATA[Веб-дизайн]]></category>
		<category><![CDATA[дизайн сайтов портфолио]]></category>

		<guid isPermaLink="false">http://webformyself.com/?p=7410</guid>
		<description><![CDATA[Создание своего личного портфолио сайта, возможно, одно из самых сложных заданий, которое вам придется делать. Вы сами себя критикуете и, что бы ни было сделано, вы всегда хотите это изменить и сделать еще лучше. Для вдохновения взгляните на эти портфолио &#8230; <a href="http://webformyself.com/50-kreativnyx-portfolio-sajtov/">Продолжить чтение <span class="meta-nav">&#8594;</span></a>]]></description>
			<content:encoded><![CDATA[<p><img class="webfor-img" title="50 Креативных портфолио сайтов" src="http://webformyself.com/wp-content/uploads/2012/16/100.jpg" alt="50 Креативных портфолио сайтов" width="100" height="100" /></p>
<p><em>Создание своего личного портфолио сайта, возможно, одно из самых сложных заданий, которое вам придется делать. Вы сами себя критикуете и, что бы ни было сделано, вы всегда хотите это изменить и сделать еще лучше.</em></p>
<p>Для вдохновения взгляните на эти портфолио сайты. Они различные для разработчиков (для них, как правило, дизайны очень точные), для дизайнеров (красочные и яркие) и фотографов.</p>
<p><span id="more-7410"></span></p>
<p><a href="http://www.gummisig.com/" target="_blank">Gummisig</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign1.jpg" title="Gummisig" alt="Gummisig" width="615" height="450" /></p>
<p><a href="http://www.albertobeloni.com/" target="_blank">Alberto Beloni</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign2.jpg" title="Alberto Beloni" alt="Alberto Beloni" width="615" height="450" /></p>
<p><a href="http://lisamoseley.com/" target="_blank">Lisa Moseley</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign3.jpg" title="Lisa Moseley" alt="Lisa Moseley" width="615" height="450" /></p>
<p><a href="http://designspasm.net/" target="_blank">Sean Geng</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign4.jpg" title="Sean Geng" alt="Sean Geng" width="615" height="272" /></p>
<p><a href="http://markoprljic.iz.hr/" target="_blank">Marko Prljic</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign5.jpg" title="Marko Prljic" alt="Marko Prljic" width="615" height="450" /></p>
<p><a href="http://www.colazionedamichy.it/" target="_blank">Michela Chiucini</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign6.jpg" title="Michela Chiucini" alt="Michela Chiucini" width="615" height="450" /></p>
<p><a href="http://www.lpcreative.net/#port/sax.jpg" target="_blank">LP – Creative Designer</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign7.jpg" title="LP – Creative Designer" alt="LP – Creative Designer" width="615" height="450" /></p>
<p><a href="http://www.peter-pearson.com/" target="_blank">Peter Pearson</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign8.jpg" title="Peter Pearson" alt="Peter Pearson" width="615" height="450" /></p>
<p><a href="http://www.colourpixel.com/" target="_blank">Colourpixel</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign9.jpg" title="Colourpixel" alt="Colourpixel" width="615" height="450" /></p>
<p><a href="http://www.mattdempsey.com/" target="_blank">Matt Dempsey</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign10.jpg" title="Matt Dempsey" alt="Matt Dempsey" width="615" height="450" /></p>
<p><a href="http://www.jayhafling.com/" target="_blank">Jay Hafling</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign11.jpg" title="Jay Hafling" alt="Jay Hafling" width="615" height="450" /></p>
<p><a href="http://milesdowsett.com/" target="_blank">Miles Dowsett</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign12.jpg" title="Miles Dowsett" alt="Miles Dowsett" width="615" height="450" /></p>
<p><a href="http://www.noeldesign.net/" target="_blank">Noel Design</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign13.jpg" title="Noel Design" alt="Noel Design" width="615" height="450" /></p>
<p><a href="http://jps2606.cias.rit.edu/" target="_blank">Jae Salavarrieta</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign14.jpg" title="Jae Salavarrieta" alt="Jae Salavarrieta" width="615" height="450" /></p>
<p><a href="http://www.ilove2design.at/" target="_blank">ilove2design</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign15.jpg" title="ilove2design" alt="ilove2design" width="615" height="450" /></p>
<p><a href="http://alexarts.ru/en/index.html" target="_blank">Alexey Abramov</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign16.jpg" title="Alexey Abramov" alt="Alexey Abramov" width="615" height="450" /></p>
<p><a href="http://www.pampaneo.es/" target="_blank">Pampaneo</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign17.jpg" title="Pampaneo" alt="Pampaneo" width="615" height="450" /></p>
<p><a href="http://www.leihu.com/" target="_blank">Love the Septapus &#038; He Shall Love Unto You</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign18.jpg" title="Love the Septapus &#038; He Shall Love Unto You" alt="Love the Septapus &#038; He Shall Love Unto You" width="615" height="450" /></p>
<p><a href="http://www.ths.nu/ths.php" target="_blank">{ths}</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign19.jpg" title="{ths}" alt="{ths}" width="615" height="450" /></p>
<p><a href="http://www.arqandgraph.com/" target="_blank">arqandgraph</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign20.jpg" title="arqandgraph" alt="arqandgraph" width="615" height="450" /></p>
<p><a href="http://www.jasonsantamaria.com/" target="_blank">Jason Santa Maria</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign21.jpg" title="Jason Santa Maria" alt="Jason Santa Maria" width="615" height="450" /></p>
<p><a href="http://jonwhitestudio.com/" target="_blank">Jon White Studio</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign22.jpg" title="Jon White Studio" alt="Jon White Studio" width="615" height="450" /></p>
<p><a href="http://www.coma.sg/" target="_blank">COMA</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign23.jpg" title="COMA" alt="COMA" width="615" height="450" /></p>
<p><a href="http://www.glingadesign.com/" target="_blank">Daniele Volpin</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign24.jpg" title="Daniele Volpin" alt="Daniele Volpin" width="615" height="450" /></p>
<p><a href="http://joelongstreet.com/" target="_blank">Joe Longstreet</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign25.jpg" title="Joe Longstreet" alt="Joe Longstreet" width="615" height="450" /></p>
<p><a href="http://www.davyvandenbremt.be/" target="_blank">Davy Van Den Bremt</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign26.jpg" title="Davy Van Den Bremt" alt="Davy Van Den Bremt" width="615" height="450" /></p>
<p><a href="http://www.hugsformonsters.com/" target="_blank">Hugs For Monsters</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign27.jpg" title="Hugs For Monsters" alt="Hugs For Monsters" width="615" height="450" /></p>
<p><a href="http://www.brandwood.com/" target="_blank">Andrew Brandwood</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign28.jpg" title="Andrew Brandwood" alt="Andrew Brandwood" width="615" height="450" /></p>
<p><a href="http://bridinel.com/" target="_blank">Catalin Bridinel</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign29.jpg" title="Catalin Bridinel" alt="Catalin Bridinel" width="615" height="450" /></p>
<p><a href="http://nathan-sanders.com/" target="_blank">Nathan Sanders</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign30.jpg" title="Nathan Sanders" alt="Nathan Sanders" width="615" height="450" /></p>
<p><a href="http://ma.tt/" target="_blank">Matt Mullenweg</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign31.jpg" title="Matt Mullenweg" alt="Matt Mullenweg" width="615" height="450" /></p>
<p><a href="http://www.stuarthobday.co.uk/" target="_blank">Stuart Hobday</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign32.jpg" title="Stuart Hobday" alt="Stuart Hobday" width="615" height="450" /></p>
<p><a href="http://www.form-function.ca/" target="_blank">Form + Function</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign33.jpg" title="Form + Function" alt="Form + Function" width="615" height="450" /></p>
<p><a href="http://www.triplux.com/" target="_blank">Triplux</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign34.jpg" title="Triplux" alt="Triplux" width="615" height="450" /></p>
<p><a href="http://www.julianandrade.com/reel.htm" target="_blank">Julian Andrade</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign35.jpg" title="Julian Andrade" alt="Julian Andrade" width="615" height="450" /></p>
<p><a href="http://www.jeffdoedesign.com/wordpress/" target="_blank">Jeffdoe</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign36.jpg" title="Jeffdoe" alt="Jeffdoe" width="615" height="450" /></p>
<p><a href="http://www.jasonjulien.com/" target="_blank">Jason Julien</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign37.jpg" title="Jason Julien" alt="Jason Julien" width="615" height="450" /></p>
<p><a href="http://www.kitfolio.com/" target="_blank">Kitfolio</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign38.jpg" title="Kitfolio" alt="Kitfolio" width="615" height="450" /></p>
<p><a href="http://www.magnivate.com/flash_us.html" target="_blank">Magnivate</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign39.jpg" title="Magnivate" alt="Magnivate" width="615" height="450" /></p>
<p><a href="http://www.flyosity.com/" target="_blank">Mike Rundle</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign40.jpg" title="Mike Rundle" alt="Mike Rundle" width="615" height="450" /></p>
<p><a href="http://www.michaelpaulyoung.com/" target="_blank">Michael Paul Young</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign41.jpg" title="Michael Paul Young" alt="Michael Paul Young" width="615" height="450" /></p>
<p><a href="http://www.pngised.net/" target="_blank">Pngised</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign42.jpg" title="Pngised" alt="Pngised" width="615" height="450" /></p>
<p><a href="http://www.jefffinley.org/" target="_blank">Jeff Finley</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign43.jpg" title="Jeff Finley" alt="Jeff Finley" width="615" height="450" /></p>
<p><a href="http://www.matcheck.cz/" target="_blank">Pavel Macek</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign44.jpg" title="Pavel Macek" alt="Pavel Macek" width="615" height="450" /></p>
<p><a href="http://www.cerity.se/" target="_blank">Cerity</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign45.jpg" title="Cerity" alt="Cerity" width="615" height="450" /></p>
<p><a href="http://www.giancarlo-fajardo.com/" target="_blank">Giancarlo Fajardo</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign46.jpg" title="Giancarlo Fajardo" alt="Giancarlo Fajardo" width="615" height="450" /></p>
<p><a href="http://www.dreamerlines.lv/" target="_blank">DREAMER LINES</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign47.jpg" title="DREAMER LINES" alt="DREAMER LINES" width="615" height="450" /></p>
<p><a href="http://www.flushinc.com/" target="_blank">Flush</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign48.jpg" title="Flush" alt="Flush" width="615" height="450" /></p>
<p><a href="http://www.deadtrendy.co.uk/" target="_blank">Callum Rimmer</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign49.jpg" title="Callum Rimmer" alt="Callum Rimmer" width="615" height="450" /></p>
<p><a href="http://adf.lt/" target="_blank">Svetainiu Kurimas</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign50.jpg" title="Svetainiu Kurimas" alt="Svetainiu Kurimas" width="615" height="450" /></p>
<p><a href="http://blog.jandk.fr/" target="_blank">Jackson &#038; Kent</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign51.jpg" title="Jackson &#038; Kent" alt="Jackson &#038; Kent" width="615" height="450" /></p>
<p><a href="http://www.velagapati.com/myself.html" target="_blank">Krishna Chaitanya</a></p>
<p><img class="aligncenter size-full wp-image-376"  src="http://webformyself.com/wp-content/uploads/2012/16/portfoliodesign52.jpg" title="Krishna Chaitanya" alt="Krishna Chaitanya" width="615" height="450" /></p>
<p><strong>Автор: </strong>Paul Andrew</p>
<p><strong>Источник: </strong><a href="http://speckyboy.com/2009/07/07/50-creative-and-inspirational-personal-portfolio-websites/">http://speckyboy.com/</a></p>
<p><strong>Редакция:</strong> Команда webformyself.</p>
<div class="clearing"></div>
<div class="ads centerads" style="width:373px; margin:20px auto;">
<h2>Рисовать Дизайн Сайтов -<br /> ПРОЩЕ, Чем Вы Думаете!</h2>
<p></p>
<p>    <img class="adsdisc" src="/wp-content/themes/web4my/images/masterweb.png" /><br /> <br />
    <a href="http://webformyself.com/masterwebdesign/" target="_blank"><img class="adspodr" src="/wp-content/themes/web4my/images/masterweb-btn.png" alt="" /></a><br />
<br /> 
   </div>
]]></content:encoded>
			<wfw:commentRss>http://webformyself.com/50-kreativnyx-portfolio-sajtov/feed/</wfw:commentRss>
		<slash:comments>29</slash:comments>
		</item>
	</channel>
</rss>

