<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/rss2russianfull.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/" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" version="2.0">

<channel>
	<title>Очередной блог фрилансера</title>
	
	<link>http://dreamhelg.ru</link>
	<description>о моей работе в сети и не только</description>
	<lastBuildDate>Mon, 21 May 2012 14:37:47 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.2</generator>
		<atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="self" type="application/rss+xml" href="http://feeds.feedburner.com/dreamhelg" /><feedburner:info uri="dreamhelg" /><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com/" /><feedburner:feedFlare href="http://add.my.yahoo.com/rss?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://us.i1.yimg.com/us.yimg.com/i/us/my/addtomyyahoo4.gif">Subscribe with My Yahoo!</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsgator.com/ngs/subscriber/subext.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://www.newsgator.com/images/ngsub1.gif">Subscribe with NewsGator</feedburner:feedFlare><feedburner:feedFlare href="http://feeds.my.aol.com/add.jsp?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://o.aolcdn.com/favorites.my.aol.com/webmaster/ffclient/webroot/locale/en-US/images/myAOLButtonSmall.gif">Subscribe with My AOL</feedburner:feedFlare><feedburner:feedFlare href="http://www.bloglines.com/sub/http://feeds.feedburner.com/dreamhelg" src="http://www.bloglines.com/images/sub_modern11.gif">Subscribe with Bloglines</feedburner:feedFlare><feedburner:feedFlare href="http://www.netvibes.com/subscribe.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://www.netvibes.com/img/add2netvibes.gif">Subscribe with Netvibes</feedburner:feedFlare><feedburner:feedFlare href="http://fusion.google.com/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://buttons.googlesyndication.com/fusion/add.gif">Subscribe with Google</feedburner:feedFlare><feedburner:feedFlare href="http://www.pageflakes.com/subscribe.aspx?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://www.pageflakes.com/ImageFile.ashx?instanceId=Static_4&amp;fileName=ATP_blu_91x17.gif">Subscribe with Pageflakes</feedburner:feedFlare><feedburner:feedFlare href="http://lenta.yandex.ru/settings.xml?name=feed&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://lenta.yandex.ru/i/addfeed.gif">?????? ? ??????.?????</feedburner:feedFlare><feedburner:feedFlare href="http://www.plusmo.com/add?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://plusmo.com/res/graphics/fbplusmo.gif">Subscribe with Plusmo</feedburner:feedFlare><feedburner:feedFlare href="http://www.thefreedictionary.com/_/hp/AddRSS.aspx?http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://img.tfd.com/hp/addToTheFreeDictionary.gif">Subscribe with The Free Dictionary</feedburner:feedFlare><feedburner:feedFlare href="http://www.bitty.com/manual/?contenttype=rssfeed&amp;contentvalue=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://www.bitty.com/img/bittychicklet_91x17.gif">Subscribe with Bitty Browser</feedburner:feedFlare><feedburner:feedFlare href="http://www.newsalloy.com/?rss=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://www.newsalloy.com/subrss3.gif">Subscribe with NewsAlloy</feedburner:feedFlare><feedburner:feedFlare href="http://www.live.com/?add=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://tkfiles.storage.msn.com/x1piYkpqHC_35nIp1gLE68-wvzLZO8iXl_JMledmJQXP-XTBOLfmQv4zhj4MhcWEJh_GtoBIiAl1Mjh-ndp9k47If7hTaFno0mxW9_i3p_5qQw">Subscribe with Live.com</feedburner:feedFlare><feedburner:feedFlare href="http://mix.excite.eu/add?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://image.excite.co.uk/mix/addtomix.gif">Subscribe with Excite MIX</feedburner:feedFlare><feedburner:feedFlare href="http://www.yourminis.com/subscribe.aspx?u=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://www.yourminis.com/images/addtoyourminisbadge.gif">Subscribe with Yourminis.com</feedburner:feedFlare><feedburner:feedFlare href="http://download.attensa.com/app/get_attensa.html?feedurl=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://www.attensa.com/blogs/attensa/WindowsLiveWriter/BadgeredintoBadges_10C02/attensa_feed_button5.gif">Subscribe with Attensa for Outlook</feedburner:feedFlare><feedburner:feedFlare href="http://www.webwag.com/wwgthis.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://www.webwag.com/images/wwgthis.gif">Subscribe with Webwag</feedburner:feedFlare><feedburner:feedFlare href="http://hub.netomat.net/account/account.autoSubscribe.jspa?urls=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://www.netomat.net/blogger/images/icon_netomat_feedbutton.gif">Subscribe with netomat Hub</feedburner:feedFlare><feedburner:feedFlare href="http://www.podcastready.com/oneclick_bookmark.php?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://www.podcastready.com/images/podcastready_button.gif">Subscribe with Podcast Ready</feedburner:feedFlare><feedburner:feedFlare href="http://www.flurry.com/pushRssFeed.do?r=fb&amp;url=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://www.flurry.com/images/flurry_rss_logo2.gif">Subscribe with Flurry</feedburner:feedFlare><feedburner:feedFlare href="http://www.wikio.com/subscribe?url=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://www.wikio.com/shared/img/add2wikio.gif">Subscribe with Wikio</feedburner:feedFlare><feedburner:feedFlare href="http://www.dailyrotation.com/index.php?feed=http%3A%2F%2Ffeeds.feedburner.com%2Fdreamhelg" src="http://www.dailyrotation.com/rss-dr2.gif">Subscribe with Daily Rotation</feedburner:feedFlare><item>
		<title>7 полезных онлайн-инструментов для работы с изображениями</title>
		<link>http://feedproxy.google.com/~r/dreamhelg/~3/MZCgJekPJHE/</link>
		<comments>http://dreamhelg.ru/2012/05/7-useful-online-tools-for-images/#comments</comments>
		<pubDate>Thu, 17 May 2012 19:00:36 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[общая]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[изображения]]></category>
		<category><![CDATA[сервис]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2322</guid>
		<description><![CDATA[<p><img width="150" height="150" src="http://dreamhelg.ru/wp-content/uploads/2012/05/home.png" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>Любому разработчику или дизайнеру часто приходится работать с изображениями, поскольку они, несомненно, представляют собой значительную часть любого сайта. Конечно для этого обычно используются такие десктопные приложения как фотошоп или гимп, но кроме них существует целый ряд полезных онлайн-инструментов, предназначенных для хранения, ресайза и изменения картинок в онлайн-режиме. В сегодняшней статье мы рассмотрим самые лучшие из них.<span id="more-2322"></span>
<h2><a href="http://www.minus.com/">1. Minus</a></h2>
<img class="aligncenter size-full wp-image-2325" title="minus" src="http://dreamhelg.ru/wp-content/uploads/2012/05/minus.png" alt="" width="750" height="537" />

Вам, как разработчику (или дизайнеру), наверняка часто требуется выгружать изображения на какой-нибудь хостинг, чтобы поделиться ими с клиентами или коллегами по работе. Множество сайтов предоставляют такую услугу, но Minus выделяется среди них своей простотой и скоростью: просто перетащите изображение на их страничку, и оно будет загружено в сеть. После этого вы получите короткий url,  для расшаривания картинки. Регистрации не требуется. Единственное пожелание на будущее, иметь возможность ресайза картинок.
<h2><a href="http://www.smushit.com/ysmush.it/">2. Smush It</a></h2>
<img class="aligncenter size-full wp-image-2330" title="smushit" src="http://dreamhelg.ru/wp-content/uploads/2012/05/smushit.png" alt="" width="750" height="514" />

При использовании изображений в интернете, важно не забывать об их размере. При этом, желательно найти баланс между размером файла и качеством изображения. Smush It – это сервис, разработанный Yahoo!, позволяющий оптимизировать ваши картинки, без потери качества. Для пользователей WordPress есть готовый плагин.
<h2><a href="http://www.placehold.it/">3. Placehold It</a></h2>
<img class="aligncenter size-full wp-image-2328" title="placehold" src="http://dreamhelg.ru/wp-content/uploads/2012/05/placehold.png" alt="" width="750" height="512" />

Во время работы над макетом сайта, часто требуются заглушки картинок определенного размера. Placehold It – сервис, позволяющий динамически создавать заглушки изображений, для их использования достаточно просто указать в тэге img атрибут src, следующего вида &lt;img src=”http://placehold.it/350x150”&gt;, и на вашей страничке отобразится заглушка размером 350x150 пикселей.
<h2><a href="http://www.softorbits.com/resize-images-online/">4. Resize images online</a></h2>
<img class="aligncenter size-full wp-image-2329" title="resize" src="http://dreamhelg.ru/wp-content/uploads/2012/05/resize.png" alt="" width="750" height="546" />

Не хотите открывать фотошоп только для ресайза картинки? Этот сервис придет вам на помощь. Просто загрузите картинку, укажите требуемый размер, и все будет сделано.
<h2><a href="http://www.photoshop.com/tools">5. Photoshop online tools</a></h2>
<img class="aligncenter size-full wp-image-2326" title="photoshop" src="http://dreamhelg.ru/wp-content/uploads/2012/05/photoshop.png" alt="" width="750" height="539" />

Когда дело доходит до редактирования изображений, Adobe Photoshop является самым распространенным программным обеспечением. Компания Adobe, запустила облегченную версию Photoshop, доступную онлайн. Онлайн-приложение достаточно впечатляющее и содержит множество функций. К сожалению, для использования приложения требуется регистрация на сайте.
<h2><a href="http://pixlr.com/express/">6. Pixlr express</a></h2>
<img class="aligncenter size-full wp-image-2327" title="pixelr" src="http://dreamhelg.ru/wp-content/uploads/2012/05/pixelr.png" alt="" width="750" height="531" />

Pixlr express – это простое, но мощное приложение, позволяющее ресайзить изображения, добавлять эффекты, рамки, водяные знаки и т.д. Приложение бесплатное и не требует регистрации.
<h2><a href="http://advanced.aviary.com/tools/image-editor">7. Aviary Phoenix</a></h2>
<img class="aligncenter size-full wp-image-2324" title="aviary" src="http://dreamhelg.ru/wp-content/uploads/2012/05/aviary.png" alt="" width="750" height="544" />

Разработанный на флеше, Aviary Phoenix – это полноценный и бесплатный редактор изображений. Настоящий “облегченный фотошоп”, который вы можете использовать на любом компьютере, без регистрации на сайте.

Перевод статьи “<a href="http://www.catswhocode.com/blog/super-useful-online-tools-to-work-with-images">Super useful online tools to work with images</a>”, автор <strong>Jean-Baptiste Jung</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2012/05/7-useful-online-tools-for-images/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		<feedburner:origLink>http://dreamhelg.ru/2012/05/7-useful-online-tools-for-images/</feedburner:origLink></item>
		<item>
		<title>Псевдо-селектор :target</title>
		<link>http://feedproxy.google.com/~r/dreamhelg/~3/JcKfzw5V_EQ/</link>
		<comments>http://dreamhelg.ru/2012/05/pseudo-selector-target/#comments</comments>
		<pubDate>Sun, 13 May 2012 11:18:33 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[target]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2300</guid>
		<description><![CDATA[<p><img width="150" height="150" src="http://dreamhelg.ru/wp-content/uploads/2012/05/home.jpg" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>Псевдо-селектор <strong>:target</strong> срабатывает при совпадении хэша в URL и ID элемента на странице.<span id="more-2300"></span>

<img class="aligncenter size-full wp-image-2303" title="hash" src="http://dreamhelg.ru/wp-content/uploads/2012/05/hash.png" alt="" width="372" height="68" />

[html]
&lt;section id=&quot;voters&quot;&gt;
   Content
&lt;/section&gt;
[/html]

[css]
:target {
   background: yellow;
}
[/css]

Пока URL будет таким как на картинке, блок section будет иметь желтый фон.
<h2>Где это можно использовать?</h2>
Один из примеров использования – подсветка “состояний”. Когда URL страницы содержит некий хэш, страница находится в соответствующем состоянии.  Этот способ напоминает манипулирование именами классов, хотя и не является таким универсальным. Все то, что вы обычно делаете изменяя классы, можно использовать для изменения состояния элемента, когда к нему применяется псевдо-селектор <strong>:target.</strong> Например: изменение цвета, позиционирования, изменение картинок, отображение/скрытие различных элементов, и т.д.

Существует три признака оправданного использования псевдо-селектора <strong>:target</strong> :
<ol>
	<li>Когда необходимо подчеркнуть “состояние”</li>
	<li>Когда приемлемо резкое “перепрыгивание” страницы вниз</li>
	<li>Когда приемлемо влияние на историю браузера</li>
</ol>
Давайте рассмотрим это немного подробнее.

<h2>Как получить хэш в URL?</h2>
Самый распространенный способ – пользовательский клик по ссылке, включающей хэш. Ссылка может быть как внутренней (которая указывает на текущую страницу), так и полноценной, оканчивающейся хэш-тэгом и значением. Например:

[html]
&lt;a href=&quot;#voters&quot;&gt;Go To There&lt;/a&gt;

&lt;a href=&quot;http://example.com/#specific-part&quot;&gt;Go To There&lt;/a&gt;
[/html]
<br/>
<h2>“Перепрыгивание” страницы</h2>
Независимо от назначения ссылки, <strong>браузер всегда прокручивает страницу до тех пор, пока указанный элемент не окажется вверху</strong>. В случае если браузер не может прокрутить точно  до указанного элемента, он прокрутит страницу на максимально возможную длину. Такое поведение браузера, накладывает определенные ограничения при использовании <strong>:target</strong> для подсветки текущего состояния.

Например, однажды я (прим. я – Крис Койер, автор блога css-tricks.com) <a href="http://css-tricks.com/css3-tabs/">пробовал различные техники</a>, для имитации создания CSS-табов, и в конце-концов остановился на <a href="http://css-tricks.com/the-checkbox-hack/">чекбокс-хаке</a>, поскольку только он позволял обойти проблемы с перепрыгиванием страницы. Йен Хэнсон, создатель CSS Science, также реализовал <a href="http://csscience.com/css3-tabs/">несколько примеров табов</a>. Его третий пример использует<strong> :target</strong> и абсолютно позиционируемые элементы, спрятанные вверху страницы, для предотвращения “прыжка”. Это довольно умно, но все же не решение проблемы, поскольку страница прыгает вверх, табы должны располагаться ниже области прыжка.

<h2>Прекрасный пример: подсветка секций</h2>
<strong>Проблема</strong>: Клик по хэш-ссылке прокручивает страницу к указанной секции, которая по возможности будет удобно расположена в верхней части окна браузера. Но что если на странице немного контента, а скролл  и вовсе отсутствует?  В этом случае, секция останется в видимой области, но не будет прибита к верху страницы, что странно и не совсем удобно.
<p style="text-align: center;"><a href="http://dreamhelg.ru/wp-content/uploads/2012/05/scrolling-problem.jpg"><img class="aligncenter size-medium wp-image-2305" title="scrolling-problem" src="http://dreamhelg.ru/wp-content/uploads/2012/05/scrolling-problem-300x204.jpg" alt="" width="300" height="204" /></a></p>
Исходя из личного опыта могу заметить, что если клик по внутристраничной ссылке не прокручивает страницу к указанной секции, это безумно раздражает. Чаще всего эта проблема встречается на FAQ-страницах, содержащих большое количество коротких секций.

Давайте это исправим!

Один из самых знаменитых методов исправления этой проблемы, называется “<a href="http://37signals.com/svn/archives/000558.php">Yellow Fade Technique</a>” (Техника Желтого Затухания). Эта техника была разработана компанией 37 signals, специально для того чтобы обратить внимание пользователей на только что добавленный на страницу контент . Джонатан Снук <a href="http://snook.ca/archives/html_and_css/yellow-fade-technique-css-animations">портировал эту идею на CSS</a> и объединил ее с псевдо-селектором <strong>:target.</strong>

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

http://youtu.be/vqE1MZ0UlaM

HTML-структура представляет собой обычную навигацию, с привязкой ссылок к соответствующим секциями через ID:

[html]
&lt;nav&gt;
  &lt;a href=&quot;#one&quot;&gt;1&lt;/a&gt;
  &lt;a href=&quot;#two&quot;&gt;2&lt;/a&gt;
  &lt;a href=&quot;#three&quot;&gt;3&lt;/a&gt;
&lt;/nav&gt;

&lt;section&gt;
  &lt;div id=&quot;one&quot;&gt;&lt;h2&gt;One&lt;/h2&gt;Pellentesque habitant morbi ...&lt;/div&gt;
  &lt;div id=&quot;two&quot;&gt;&lt;h2&gt;Two&lt;/h2&gt;Pellentesque habitant morbi ...&lt;/div&gt;
  &lt;div id=&quot;three&quot;&gt;&lt;h2&gt;Three&lt;/h2&gt;Pellentesque habitant morbi ...&lt;/div&gt;
&lt;/section&gt;​
[/html]

При активации <strong>:target</strong>, секция немного сдвигается вправо, через трансформацию <strong>translateX</strong>, поскольку она предотвращает любые проблемы с отступами и странное выравнивание текста; также слева появляется красный маркер, выполненный с помощью кейфрейм-анимации.

[css]
:target {
  -webkit-animation: highlight 1s ease;
  -moz-animation: highlight 1s ease;
  -webkit-transform: translateX(20px);
  -moz-transform: translateX(20px);
  -ms-transform: translateX(20px);
  -o-transform: translateX(20px);
}
@-webkit-keyframes highlight {
  0% { border-left-color: red; }
  100% { border-left-color: white; }
}
@-moz-keyframes highlight {
  0% { border-left-color: red; }
  100% { border-left-color: white; }
}
section &gt; div {
  border-left: 40px solid white;
  padding: 10px;
  -webkit-transition: all 0.5s ease;
  -moz-transition: all 0.5s ease;
  -ms-transition: all 0.5s ease;
  -o-transition: all 0.5s ease;
  padding-right: 50px;
  margin-left: -20px;
}
[/css]

Вот и все. Код отвечает принципам прогрессивного улучшения, поэтому будет нормально выглядеть и работать во всех браузерах.

<a href="http://dreamhelg.ru/demo/target/">Демо-страница.</a>
<h2>Боремся с прыжками страницы</h2>
Предположим, вам понравилась идея использования <strong>:target</strong> для подсветки секций, но при этом хотелось бы избежать прыжков страницы, при клике по хэш-ссылкам. С помощью jQuery вы можете предотвратить дефолтное поведение  всех хэш-ссылок, а затем использовать метод <strong>pushState()</strong> (или <strong>replaceState()</strong>), для изменения URL без передвижения страницы.

[javascript]
$(&quot;a[href^=#]&quot;).on(&quot;click&quot;, function(e) {
  e.preventDefault();
  history.pushState({}, &quot;&quot;, this.href);
});
[/javascript]

Метод <strong>replaceState()</strong> отличается от <strong>pushState()</strong> тем, что не добавляет запись о смене URL в историю браузера. Так что, вы можете использовать любой из этих методов на свое усмотрение.

<h3>Плохие новости</h3>
При изменении хэша в URL через метод <strong>pushState()</strong>, предыдущая активная секция должна вернутся к исходному состоянию, а новая выделиться. Однако этого не произойдет (на момент написания статьи тестировалось в последних версиях WebKit и Firefox). <a href="https://bugs.webkit.org/show_bug.cgi?id=83490">Это баг</a>.

Теоретически вы можете измерить и сохранить текущую позицию скролла на странице, позволить ссылке передвинуть страницу естественным путем, а затем вернуть ее обратно на то место где она была. Но это выглядит настолько ужасно, что я не могу себя заставить сделать тестовую страницу с этим примером.

Перевод статьи <a href="http://css-tricks.com/on-target/">"On :target"</a>, автор <strong>Chris Coyier</strong>Псевдо-селектор ]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2012/05/pseudo-selector-target/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		<feedburner:origLink>http://dreamhelg.ru/2012/05/pseudo-selector-target/</feedburner:origLink></item>
		<item>
		<title>Обзор CSS-свойства vertical-align</title>
		<link>http://feedproxy.google.com/~r/dreamhelg/~3/hlcVCdZz8Mg/</link>
		<comments>http://dreamhelg.ru/2011/12/css-vertical-align/#comments</comments>
		<pubDate>Fri, 23 Dec 2011 06:27:55 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[vertical-align]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2284</guid>
		<description><![CDATA[<p><img width="184" height="184" src="http://dreamhelg.ru/wp-content/uploads/2011/12/css-vertical-align.jpg" class="attachment-200x200 wp-post-image" alt="css-vertical-align" title="css-vertical-align" /></p>Довольно часто от веб-разработчиков можно услышать возмущенный возглас: “vertical-align не работает!”.  Несмотря на то, что назначение этого свойства следует из его названия, на практике, начинающие разработчики, равно как и многие ветераны CSS, часто испытывают трудности с его применением.

В сегодняшней статье, я постараюсь раскрыть все непонятные моменты этого CSS-свойства.
<h2>Чего не делает vertical-align</h2>
Наиболее распространенное заблуждение относительно свойства <strong>vertical-align</strong> состоит в том, что оно влияет на вертикальное выравнивание всех дочерних элементов контейнера, к которому применяется. Например, если мы применим к контейнеру свойство <strong>vertical-align: top</strong>, предполагается, что все содержимое контейнера будет выровнено по верхнему краю контейнера.

Это напоминает мне старые, добрые времена табличной верстки:

[css]
    &lt;td valign=&quot;top&quot;&gt;  
      Содержимое ячейки..
    &lt;/td&gt;  
[/css]

В этом примере табличной ячейки, свойство <strong>valign</strong> (<a href="http://www.w3.org/TR/html5/obsolete.html#non-conforming-features">сейчас уже запрещенное в HTML5</a>), действительно прижмет все содержимое ячейки к верхнему краю. Возможно исходя из этого, CSS-разработчики ожидают похожего эффекта, от применения свойства <strong>vertical-align</strong>.

Но свойство <strong>vertical-align</strong> так не работает.
<h2>Как на самом деле работает vertical-align</h2>
Свойство <strong>vertical-align</strong> можно разделить на три простых правила:
<ol>
	<li>Оно применяется только к элементам со свойствами display: inline; и display: inline-block;</li>
	<li>Оно влияет на положение самого элемента, а не его содержимого (за исключением табличных ячеек)</li>
	<li>Когда оно применяется к табличной ячейке, то влияет на содержимое ячейки, а не на саму ячейку.</li>
</ol>
Другими словами, следующий код не будет иметь никакого эффекта:

[css]
    div {  
        vertical-align: middle; /* эта строка не будет работать */  
    }  
[/css]

Почему? Потому что &lt;div&gt;  - это блочный элемент. Конечно, если вы измените у дива свойство display, на inline, или inline-block, <strong>vertical-align</strong> сразу заработает.

Правильное использование свойства vertical-align, поможет выровнять строчный элемент относительно других строчных элементов на странице. Насколько высоко или низко расположится элемент по вертикали, будет зависеть от размера соседних строчных элементов, или от свойства line-height, заданного  для этой строки.

На картинке ниже, представлен пример того, как ведут себя строчные элементы, когда вы применяете свойство <strong>vertical-align</strong>:
<p style="text-align: center;"><a href="http://dreamhelg.ru/wp-content/uploads/2011/12/vertical-align-sheme.png"><img class="aligncenter size-medium wp-image-2290" title="vertical-align-sheme" src="http://dreamhelg.ru/wp-content/uploads/2011/12/vertical-align-sheme-300x210.png" alt="" width="300" height="210" /></a></p>

<h2>Значения свойства – ключевые слова</h2>
Свойство <strong>vertical-align</strong> может принимать следующие значения:
<ul>
	<li>baseline (значение по умолчанию)</li>
	<li>bottom</li>
	<li>middle</li>
	<li>sub</li>
	<li>super</li>
	<li>text-bottom</li>
	<li>text-top</li>
	<li>top</li>
</ul>
Большинство из них вам скорее всего не понадобятся, но всегда хорошо знать из чего можно выбрать. Например, на <a href="http://jsbin.com/isuvob/edit#html,live/">демо-странице</a>, текстовому полю назначено свойство <strong>vertical-align: top</strong>, благодаря чему, оно выровнено относительно самого высокого элемента в строке (большой картинки).

А если вы не хотите располагать элемент относительно изображений или других строчных элементов, можно использовать значения <strong>text-top</strong> или <strong>text-bottom</strong>, чтобы ваш элемент позиционировался относительно текста, расположенного в строке.
<h2>О значении “middle”</h2>
К сожалению, <strong>vertical-align: middle;</strong> не расположит строчный элемент по центру самого большого элемента в строке, как этого можно было бы ожидать. Вместо этого, значение <strong>middle</strong> расположит элемент относительно гипотетической строчной “x” (также называемой “x-высотой”). По-хорошему, это значение следовало бы назвать “text-middle”, для правильной идентификации его механизма.

На <a href="http://jsbin.com/apiqog/3/edit">этой демо-странице</a>, размер текста специально увеличен, чтобы вы могли посмотреть, как именно выравниваются элементы, при значении <strong>middle</strong>. По всему выходит, что это значение, вам будет нужно гораздо реже, чем остальные.
<h2>Цифровые значения свойства</h2>
Возможно вы не знали, но <strong>vertical-align</strong> в качестве значения может принимать абсолютные и процентные значения, все приведенные ниже примеры будут правильными:

[css]
    input {  
        vertical-align: 100px;  
    }  
      
    span {  
        vertical-align: 50%;  
    }  
      
    img {  
        vertical-align: -300px;  
    }  
[/css]

В чем разница между абсолютными значениями и ключевыми словами, можно почитать в <a href="http://www.w3.org/TR/CSS21/visudet.html#propdef-vertical-align">CSS-спецификации</a>, или (что на мой взгляд гораздо полезнее) самостоятельно попробовать различные варианты.

Перевод статьи “<a href="http://www.impressivewebs.com/css-vertical-align/">Understanding CSS’s vertical-align Property</a>”, автор <strong>Louis Lazaris</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2011/12/css-vertical-align/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://dreamhelg.ru/2011/12/css-vertical-align/</feedburner:origLink></item>
		<item>
		<title>10 отличных jQuery-сниппетов</title>
		<link>http://feedproxy.google.com/~r/dreamhelg/~3/8TVOLB1HOnA/</link>
		<comments>http://dreamhelg.ru/2011/11/10-awesome-jquery-snippets/#comments</comments>
		<pubDate>Tue, 22 Nov 2011 11:39:00 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[изучаем Jquery]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[jquery]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2207</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2011/11/home.jpg" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>jQuery вдохнул новую жизнь в JavaScript-программирование. Благодаря этому замечательному инструменту, появилась возможность с легкостью создавать мощные и интерактивные страницы. В сегодняшней статье собраны 10 полезных примеров jQuery-кода, которые обязательно вам пригодятся при разработке клиентской стороны сайта.<span id="more-2207"></span>

<h3>Предзагрузка изображений</h3>
Предзагрузка изображений весьма удобна: вместо того чтобы загружать картинку по запросу пользователя, мы предварительно подгружаем их в фоне, для того чтобы они сразу были готовы к показу. С помощью jQuery это делается очень просто, смотрите:

[javascript]
(function($) {
  var cache = [];
  // Аргументами являются пути картинок, относительно текущей страницы
  $.preLoadImages = function() {
    var args_len = arguments.length;
    for (var i = args_len; i--;) {
      var cacheImage = document.createElement('img');
      cacheImage.src = arguments[i];
      cache.push(cacheImage);
    }
  }

jQuery.preLoadImages(&quot;image1.gif&quot;, &quot;/path/to/image2.png&quot;);
[/javascript]

Источник: <a title="http://engineeredweb.com/blog/09/12/preloading-images-jquery-and-javascript" href="http://engineeredweb.com/blog/09/12/preloading-images-jquery-and-javascript">http://engineeredweb.com/blog/09/12/preloading-images-jquery-and-javascript</a>

<h3>Ссылки target=”blank”</h3>
Следующий фрагмент предназначен для того, чтобы все ссылки, имеющие атрибут <strong>rel=”external”, </strong>открывались в новом табе/окне. Код легко можно изменить, например открывать ссылки только с определенным классом.

[javascript]
$('a[@rel$='external']').click(function(){
     this.target = &quot;_blank&quot;;
});

/*
   Использование:
   &lt;a href=&quot;http://www.catswhocode.com&quot; rel=&quot;external&quot;&gt;catswhocode.com&lt;/a&gt;
*/
[/javascript]

Источник: <a title="http://snipplr.com/view/315/-jquery–target-blank-links/" href="http://snipplr.com/view/315/-jquery–target-blank-links">http://snipplr.com/view/315/-jquery–target-blank-links</a>
<h3>Добавление класса тэгу &lt;body&gt; при включенном ява-скрипте</h3>
Этот пример состоит всего из одной строчки, но он является самым простым способом определить включен ли ява-скрипт в клиентском браузере. Если ява-скрипт включен, класс <strong>hasJs</strong> будет добавлен к тегу <strong>&lt;body&gt;.</strong>

[javascript]
$('body').addClass('hasJS');
[/javascript]

Источник: <a title="http://eisabainyo.net/weblog/2010/09/01/10-useful-jquery-snippets/" href="http://eisabainyo.net/weblog/2010/09/01/10-useful-jquery-snippets">http://eisabainyo.net/weblog/2010/09/01/10-useful-jquery-snippets</a>

<h3>Плавная прокрутка по ссылке</h3>
jQuery хорошо известен своей возможностью легко создавать красивые визуальные эффекты. Одним из таких эффектов, является плавная прокрутка страницы, при нажатии на ссылку. Следующий пример демонстрирует пример такой прокрутки страницы, по клику на ссылку с классом <strong>topLink.</strong>

[javascript]
$(document).ready(function() {
	$(&quot;a.topLink&quot;).click(function() {
		$(&quot;html, body&quot;).animate({
			scrollTop: $($(this).attr(&quot;href&quot;)).offset().top + &quot;px&quot;
		}, {
			duration: 500,
			easing: &quot;swing&quot;
		});
		return false;
	});
});
[/javascript]

Источник: <a title="http://snipplr.com/view.php?codeview&amp;id=26739" href="http://snipplr.com/view.php?codeview&amp;id=26739">http://snipplr.com/view.php?codeview&amp;id=26739</a>

<h3>Изменение прозрачности при наведении</h3>
Еще один красивый эффект – очень популярный среди клиентов – эффект затухания элемента при движении мыши. Следующий пример кода, реализует плавное изменение прозрачности картинки при наведении/отведении мыши.

[javascript]
$(document).ready(function(){
    $(&quot;.thumbs img&quot;).fadeTo(&quot;slow&quot;, 0.6); // Эта строчка при загрузке страницы задает всем миниатюрам прозрачность равную 60% 
    
    $(&quot;.thumbs img&quot;).hover(function(){
        $(this).fadeTo(&quot;slow&quot;, 1.0);  // Делаем картинку непрозрачной, при наведении мыши
    },function(){
        $(this).fadeTo(&quot;slow&quot;, 0.6); // Снова возвращаем прозрачность 60%, при отведении мыши
    });
});
[/javascript]

Источник: <a title="http://snipplr.com/view/18606/" href="http://snipplr.com/view/18606">http://snipplr.com/view/18606</a>
<h3>Колонки одинаковой высоты</h3>
При создании сайта с колонками, очень часто требуется, чтобы все колонки были одинаковой высоты, как это можно было сделать в старых, добрых таблицах. Этот пример кода вычисляет высоту самой длинной колонки, и автоматически задает ту же высоту всем остальным.

[javascript]
var max_height = 0;
$(&quot;div.col&quot;).each(function(){
    if ($(this).height() &gt; max_height) { max_height = $(this).height(); }
});
$(&quot;div.col&quot;).height(max_height);
[/javascript]

Источник: <a title="http://web.enavu.com/tutorials/top-10-jquery-snippets-including-jquery-1-4/" href="http://web.enavu.com/tutorials/top-10-jquery-snippets-including-jquery-1-4">http://web.enavu.com/tutorials/top-10-jquery-snippets-including-jquery-1-4</a>

<h3>Включаем HTML5-разметку в старых браузерах</h3>
HTML5 – это будущее клиентской веб-разработки. К сожалению, некоторые старые браузеры не умеют распознавать новые теги, такие как <strong>header</strong> и <strong>section. </strong>Этот пример кода, научит старые браузеры распознавать новые HTML5-тэги.

[javascript]
(function(){if(!/*@cc_on!@*/0)return;var e = &quot;abbr,article,aside,audio,bb,canvas,datagrid,datalist,details,dialog,eventsource,figure,footer,header,hgroup,mark,menu,meter,nav,output,progress,section,time,video&quot;.split(','),i=e.length;while(i--){document.createElement(e[i])}})()
[/javascript]

Еще лучше будет, если вы подключите .js-файл в секции <strong>&lt;head&gt;</strong> вашей html-страницы.

[javascript]
&lt;!--[if lt IE 9]&gt;
&lt;script src=&quot;http://html5shim.googlecode.com/svn/trunk/html5.js&quot;&gt;&lt;/script&gt;
&lt;![endif]--&gt;
[/javascript]

Источник: <a title="http://remysharp.com/2009/01/07/html5-enabling-script/" href="http://remysharp.com/2009/01/07/html5-enabling-script/">http://remysharp.com/2009/01/07/html5-enabling-script/</a>

<h3>Проверяем поддерживает ли браузер определенное CSS3-свойство</h3>
Ниже представлена простая jQuery-функция, проверяющая, поддерживает ли браузер клиента определенное CSS3-свойство. В этом примере, мы проверяем свойство border-radius, но его конечно, легко можно изменить на любое другое.

Обратите внимание, что при указании свойства, вам нужно опустить дефис, чтобы предотвратить ошибку синтаксиса. Поэтому вместо border-radius, вам нужно написать “borderRadius” или “BorderRadius”.

[javascript]
var supports = (function() {
   var div = document.createElement('div'),
      vendors = 'Khtml Ms O Moz Webkit'.split(' '),
      len = vendors.length;

   return function(prop) {
      if ( prop in div.style ) return true;

      prop = prop.replace(/^[a-z]/, function(val) {
         return val.toUpperCase();
      });

      while(len--) {
         if ( vendors[len] + prop in div.style ) {
            // browser supports box-shadow. Do what you need.
            // Or use a bang (!) to test if the browser doesn't.
            return true;
         }
      }
      return false;
   };
})();

if ( supports('textShadow') ) {
   document.documentElement.className += ' textShadow';
[/javascript]

Источник:  <a title="http://snipplr.com/view/44079" href="http://snipplr.com/view/44079">http://snipplr.com/view/44079</a>
<h3>Получаем параметры url</h3>
Получение url-параметров с помощью jQuery – довольно простая задача. Следующий пример это продемонстрирует.

[javascript]
$.urlParam = function(name){
	var results = new RegExp('[\\?&amp;]' + name + '=([^&amp;#]*)').exec(window.location.href);
	if (!results) { return 0; }
	return results[1] || 0;
}
[/javascript]

Источник: <a title="http://snipplr.com/view/26662" href="http://snipplr.com/view/26662">http://snipplr.com/view/26662</a>
<h3>Отключаем клавишу “Enter” в формах</h3>
По умолчанию, форма отправляется на сервер при нажатии клавиши “Enter”. Но для некоторых форм, нажатие этой клавиши может вызвать проблемы. Следующий пример кода, поможет вам предотвратить нежелательную отправку формы, путем отключения клавиши “Enter”, с помощью jQuery.

[javascript]
$(&quot;#form&quot;).keypress(function(e) {
  if (e.which == 13) {
    return false;
  }
});
[/javascript]

Источник: <a title="http://snipplr.com/view/10943/disable-enter-via-jquery/" href="http://snipplr.com/view/10943/disable-enter-via-jquery">http://snipplr.com/view/10943/disable-enter-via-jquery</a>

Перевод статьи “<a href="http://www.catswhocode.com/blog/10-awesome-jquery-snippets">10 awesome jQuery snippets</a>”, автор  <strong>Jean-Baptiste Jung</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2011/11/10-awesome-jquery-snippets/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		<feedburner:origLink>http://dreamhelg.ru/2011/11/10-awesome-jquery-snippets/</feedburner:origLink></item>
		<item>
		<title>CSS-Transitions без использования :hover</title>
		<link>http://feedproxy.google.com/~r/dreamhelg/~3/SjBb0v-ViDM/</link>
		<comments>http://dreamhelg.ru/2011/11/css-transitions-whithout-using-hover/#comments</comments>
		<pubDate>Mon, 14 Nov 2011 13:08:23 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[css-transitions]]></category>
		<category><![CDATA[css3]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/2011/11/css-transitions-%d0%b1%d0%b5%d0%b7-%d0%b8%d1%81%d0%bf%d0%be%d0%bb%d1%8c%d0%b7%d0%be%d0%b2%d0%b0%d0%bd%d0%b8%d1%8f-hover/</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2011/11/css3-transitions-non-hover.jpg" class="attachment-200x200 wp-post-image" alt="css3-transitions-non-hover" title="css3-transitions-non-hover" /></p>До недавнего времени, наиболее распространенным вариантом использования <strong>CSS-transitions</strong> – было сочетание его с хорошо известным псевдо-классом CSS <strong>:hover</strong>.<span id="more-2192"></span>

Далее представлен наиболее простой пример изменения цвета ссылки, при наведении мыши, выполненный на чистом CSS:

[css]
a, a:link, a:visited {  
    color: lightblue;  
    -webkit-transition: color .4s linear;  
    -moz-transition: color .4s linear;  
    -o-transition: color .4s linear;  
    -ms-transition: color .4s linear;  
    transition: color .4s linear;  
}  
  
a:hover {  
    color: white;  
}  
[/css]

Этот код запустит анимацию свойства <strong>color</strong>, когда вы подведете мышь к ссылке. Наверняка этот простой пример не раз попадался вам на разных сайтах, но это не значит, что transitions ограничивается использованием псевдо-класса <strong>:hover</strong>.

С помощью <strong>transitions</strong>, вы можете анимировать различные CSS-свойства, используя определенные CSS-приемы. Некоторые из этих приемов, (включая демо-версию каждого) приведены в сегодняшней статье.
<h3>Transitions с использованием :active</h3>
Псевдо-класс <strong>:active</strong> <a href="http://reference.sitepoint.com/css/pseudoclass-active">применяется к любому элементу, находящемуся в процессе активации</a>. Основным способом “активации” элемента, является щелчок мышью или нажатие кнопки мыши.

Далее представлен CSS-пример, демонстрирующий использование <strong>:active</strong> совместно с CSS3-transitons, для имитации события <strong>mousedown</strong>:

[css]
.box {  
    width: 300px;  
    height: 300px;  
    background: #222;  
    -webkit-transition: width 2s ease, height 2s ease;  
    -moz-transition: width 2s ease, height 2s ease;  
    -o-transition: width 2s ease, height 2s ease;  
    -ms-transition: width 2s ease, height 2s ease;  
    transition: width 2s ease, height 2s ease;  
}  
  
.box:active {  
    width: 500px;  
    height: 500px;  
}  
[/css]

Подведите курсор мыши к блоку и нажмите кнопку, вы увидите как высота и ширина блока анимируются, становясь больше, пока вы держите кнопку нажатой. Стоит вам отпустить кнопку, и размеры блока плавно вернутся к исходному значению.

<a href="http://dreamhelg.ru/demo/transitions/">Пример</a>.
<h3>Transitions с использованием :focus</h3>
Вы можете использовать псевдо-класс <strong>:focus</strong>, для получения эффекта, описанного в предыдущем примере. В этот раз мы используем форму, и анимируем ширину любого элемента формы, получившего фокус:

[css]
input, textarea {  
    width: 280px;  
    -webkit-transition: width 1s ease;  
    -moz-transition: width 1s ease;  
    -o-transition: width 1s ease;  
    -ms-transition: width 1s ease;  
    transition: width 1s ease;  
}  
  
input:focus, textarea:focus {  
    width: 340px;  
}  
[/css]

<a href="http://dreamhelg.ru/demo/transitions/focus.html">Пример</a>.

<h3>Transitions с использованием :checked</h3>
Вы можете анимировать чекбоксы и радиобаттоны, когда они становятся отмеченными – хотя, тут есть некоторые ограничения, поскольку вы не можете изменить их родную стилизацию.

Поэтому, мы сделаем простое изменение ширины, которое будет появляться в качестве подтверждения отметки текущего элемента:

[css]
input {  
    height: 20px;  
    -webkit-transition: width 1s ease;  
    -moz-transition: width 1s ease;  
    -o-transition: width 1s ease;  
    -ms-transition: width 1s ease;  
    transition: width 1s ease;  
}  
  
input:checked {  
    width: 30px;  
}  
[/css]

<a href="http://dreamhelg.ru/demo/transitions/checked.html">Пример</a>.
<h3>Transitions с использованием :disabled</h3>
Продолжая тему стилизации веб-форм, в этот раз мы комбинируем css3-transitions с jQuery, для запуска анимации фонового цвета элементов формы, при их отключении через атрибут <strong>disabled</strong>:

[css]
input[type=&quot;text&quot;], textarea {  
    background: #e2e2e2;  
    -webkit-transition: background 1s ease;  
    -moz-transition: background 1s ease;  
    -o-transition: background 1s ease;  
    -ms-transition: background 1s ease;  
    transition: background 1s ease;  
}  
  
input:disabled, textarea:disabled {  
    background: #666666;  
}  
[/css]

И немного jQuery, чтобы удалять/добавлять атрибут <strong>disabled:</strong>

[javascript]
$(function() {  
    $('input[type=&quot;radio&quot;]').click(function() {  
        if ($(':checked').val() === &quot;other&quot;) {  
            $('input[type=&quot;text&quot;]').removeAttr(&quot;disabled&quot;);  
        } else {  
            $('input[type=&quot;text&quot;]').attr(&quot;disabled&quot;, &quot;disabled&quot;);  
        }  
    });  
});  
[/javascript]

Итак, если отмечен последний из радиобаттонов (тот, что со значением “Другое”), у текстового поля удаляется атрибут <strong>disabled</strong>, при отметке остальных радиобаттонов, атрибут <strong>disabled,</strong> заново применяется к текстовому полю.

Псевдо-класс <strong>:disabled </strong>применяется к элементу, имеющему одноименный атрибут, поэтому анимация будет срабатывать всякий раз при удалении или добавлении этого атрибута.

<a href="http://dreamhelg.ru/demo/transitions/disabled.html">Пример</a>.


<h3>Transitions с использованием Медиа-запросов</h3>
Последний пример, возможно, наименее полезный из всех, поскольку, давайте смотреть правде в глаза, единственные люди, изменяющие размер окна браузера, чтобы посмотреть что получится – это веб-разработчики.

Тем не менее, это еще один способ использования CSS3-transitions. Такой прием используется на сайте <a href="http://www.modernizr.com/">modernizr.com</a>.

[css]
.box {  
    width: 440px;  
    height: 440px;  
    background: #222;  
    margin: 0 auto;  
    -webkit-transition: width 2s ease, height 2s ease;  
    -moz-transition: width 2s ease, height 2s ease;  
    -o-transition: width 2s ease, height 2s ease;  
    -ms-transition: width 2s ease, height 2s ease;  
    transition: width 2s ease, height 2s ease;  
}  
  
@media only screen and (max-width : 960px) {  
    .box {  
        width: 300px;  
        height: 300px;  
    }  
} 
[/css]

Этот пример одновременно анимирует два свойства, разделенных запятой. Медиа-запрос велит блоку уменьшиться, если размер экрана становится меньше 961 пикселя.

Измените размер окна демонстрационной страницы, чтобы увидеть как это работает.

<a href="http://dreamhelg.ru/demo/transitions/media.html">Пример</a>.
<h3>Несколько замечаний относительно примеров кода</h3>
В каждом фрагменте кода, стандартное название css3-свойства включено последним, несмотря на то, что пока не один из известных мне браузеров не поддерживает его в этом виде.

Кроме того, добавлен префикс –ms, и хотя IE8 и IE9 не поддерживают transitions, но эта поддержка очевидно <a href="http://blogs.msdn.com/b/ie/archive/2011/04/12/native-html5-first-ie10-platform-preview-available-for-download.aspx">будет добавлена</a> в версии IE10.

А еще, примеры кода, которые вы видели в статье намеренно упрощены, в сравнении с теми, что используются на демо-страницах, для того чтобы сфокусироваться только на тех частях, которые мы обсуждали в статье.

Перевод статьи “<a href="http://www.impressivewebs.com/css3-transitions-without-hover/">CSS3 Transitions Without Using :hover</a>”, автор <strong>Louis Lazaris</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2011/11/css-transitions-whithout-using-hover/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		<feedburner:origLink>http://dreamhelg.ru/2011/11/css-transitions-whithout-using-hover/</feedburner:origLink></item>
		<item>
		<title>WordPress. Создаем блок «Интересные статьи»</title>
		<link>http://feedproxy.google.com/~r/dreamhelg/~3/bmKX3GGGL9U/</link>
		<comments>http://dreamhelg.ru/2011/07/wordpress-howto-create-block-feature-arcticles/#comments</comments>
		<pubDate>Wed, 20 Jul 2011 05:35:33 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[wordpress]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2163</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2011/07/home.png" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>Меня часто спрашивают читатели, как именно реализован блок «Интересные статьи» у меня на сайте. Никакого секрета тут нет, я использую бесплатный шаблон, и этот блок шел с ним в комплекте, так что любой желающий, может скачать тему и посмотреть.

Для того чтобы статья попала в блок, ее необходимо специально отметить, в моем шаблоне это реализовано с помощью плагина <a href="http://www.bioxd.com/featureme/">FeatureMe</a>. Затем происходит выборка отмеченных статей, и их отображение в блоке. Хочу заметить, что это далеко не единственный способ решения задачи, и сегодня я расскажу как сделать такой блок используя встроенные средства вордпресс.<span id="more-2163"></span>

Для примера, я выбрала простую и аккуратную тему <a href="http://tweaker.co.za/free-wordpress-themes/tweaker3/">tweaker3</a>, с минимальным дизайном.

<a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image1.jpg"><img class="aligncenter size-medium wp-image-2167" title="image1" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image1-300x170.jpg" alt="" width="300" height="170" /></a>
<h3>1. Создание отметок для записей</h3>
Прежде всего, нам необходимо иметь возможность отмечать нужные записи для вывода в блок. С этой задачей нам помогут справиться произвольные поля вордпресс. Использовать их очень просто, достаточно придумать название для своего поля, и указать его значение.

Произвольные поля находятся на странице редактирования записи, однако в новых версиях вордпресс они по умолчанию скрыты, так что если вдруг вы их не видите, нажмите на кнопку «Настройки экрана», и укажите соответствующую галочку:

<a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image2.jpg"><img class="aligncenter size-medium wp-image-2168" title="image2" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image2-300x233.jpg" alt="" width="300" height="233" /></a>

Вводим название нашего поля <strong>featrue</strong>, со значением <strong>on</strong>, поскольку наше поле будет в виде флажка, и нажимаем кнопку «Добавить произвольное поле». Соответственно, если featrue = on, значит статья выводится в блоке:

<a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image3.jpg"><img class="aligncenter size-medium wp-image-2169" title="image3" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image3-300x137.jpg" alt="" width="300" height="137" /></a>

После этой нехитрой процедуры, произвольное поле запишется в базу данных, и вы сможете использовать его в новых записях, просто выбрав из списка:

<a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image4.jpg"><img class="aligncenter size-medium wp-image-2170" title="image4" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image4-300x99.jpg" alt="" width="300" height="99" /></a>

В принципе, этого уже достаточно, чтобы выбирать статьи для блока. Но я считаю, что такой способ отметки статей не очень удобен, поэтому мы пойдем дальше и сделаем удобную обертку для нашего поля, в виде чекбокса.

Далее вся работа у нас пойдет в файле темы <em>functions.php</em>. Открывайте его, и вставляйте следующий код:

[php]
/*Feature Custom Field*/
function feature_customfield(){
}

function admin_init(){
   add_meta_box('feature', 'Интересные статьи', 'feature_customfield', 'post', 'normal', 'low');
}

add_action('admin_init', 'admin_init');
[/php]

Функция <em>feature_customfield()</em> отвечает за вывод значения поля, мы добавим ее содержимое на следующем этапе.

Функция <em>admin_init()</em> выступает в роли контейнера для функции <em>add_meta_box()</em>, которая в свою очередь добавляет блок <strong>feature</strong> на страницу редактирования записи. В двух словах опишу параметры функции:
<ul>
	<li><em>feature</em> – название выводимого блока</li>
	<li><em>"Интересные статьи"</em> - заголовок блока</li>
	<li><em>feature_customfield</em> – название функции, отвечающей за вывод блока</li>
	<li><em>post</em> – вид контента для которого будет выведен блок на странице редактирования, может быть записью, страницей, ссылкой, или пользовательским типом данных.</li>
	<li><em>normal</em> – место вывода блока, указав side можно вывести блок в боковой колонке</li>
	<li><em>low</em> – приоритет вывода блока на странице, поскольку у нас значение low, блок выводится в самом конце, после всех остальных.</li>
</ul>
Последняя строчка отвечает за выполнение функции добавления блока, при инициировании административной панели. Можете проверить страницу редактирования записи, если вы все сделали правильно, то должны увидеть вот такой блок:

<a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image5.jpg"><img class="aligncenter size-medium wp-image-2171" title="image5" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image5-300x166.jpg" alt="" width="300" height="166" /></a>Пока что у нас есть только заголовок блока, но мы сейчас это исправим. Помните пустую функцию <em>feature_customfield()</em>? Она как раз и будет отвечать за наполнение блока и отображение сохраненного значения. Вставьте внутри функции следующий код:

[php]
global $post;
$custom = get_post_custom($post-&amp;gt;ID);

if($custom['feature'][0] == 'on'){
   $value = 'checked';
}else{
   $value = '';
}

echo &quot;&lt;input type='checkbox' $value /&gt;&quot;;
echo &quot; Вывести запись в блоке интересных статей&quot;;
}
[/php]
Здесь мы сначала объявляем глобальную переменную <em>$post</em>, для доступа к нашей текущей записи, и получаем значение произвольного поля <strong>feature</strong> (если оно установлено). Далее проверяем его значение, если оно равно <strong>on</strong> (как в нашем примере), то присваиваем переменной <em>$value</em> значение <strong>checked</strong>. Все это делается для того, чтобы правильно отобразить в нашем поле, ранее сохраненное значение.

Последние две строчки выводят наше поле, с небольшим комментарием. Теперь наш блок выглядит вот так:

<a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image6.jpg"><img class="aligncenter size-medium wp-image-2172" title="image6" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image6-300x169.jpg" alt="" width="300" height="169" /></a>

Осталось совсем немного — сделать так, чтобы статус поля сохранялся после обновления записи. Для этого нам понадобится еще одна функция с экшеном:

[php]
function update_featurecustomfield(){
 global $post;
 update_post_meta($post-&amp;gt;ID, 'feature', $_POST['feature']);
}
add_action('save_post', 'update_featurecustomfield');
[/php]

Здесь просто обновляем значение произвольного поля на указанное в чекбоксе. Последняя строчка отвечает за выполнение этой функции при сохранении записи. Весь код полностью будет выглядеть вот так:

[php]
/*Feature Custom Field*/
function feature_customfield(){
  global $post;
  $custom = get_post_custom($post-&amp;gt;ID);
  
  if($custom['feature'][0] == 'on'){
      $value = 'checked';
  }else{
      $value = '';
}
  echo &quot;&amp;lt;input type='checkbox' name='feature' $value /&amp;gt;&quot;;
  echo &quot; Вывести запись в блоке интересных статей&quot;;
}

function admin_init(){
  add_meta_box('feature', 'Интересные статьи', 'feature_customfield', 'post', 'normal', 'low');
}

function update_featurecustomfield(){
  global $post;
  update_post_meta($post-&amp;gt;ID, 'feature', $_POST['feature']);
}
add_action('save_post', 'update_featurecustomfield');
add_action('admin_init', 'admin_init');
[/php]

Теперь произвольные поля можно спрятать за ненадобностью, и полюбоваться на наш полностью работающий блок:

<a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image7.jpg"><img class="aligncenter size-medium wp-image-2173" title="image7" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image7-300x258.jpg" alt="" width="300" height="258" /></a>

<h3>2. Вывод отмеченных записей в шаблон</h3>
После того, как у нас все заработало в админке, неплохо было бы иметь возможность вывести отмеченные записи в шаблон. С этой задачей легко справится отдельный цикл вывода записей. Отркываем <em>header.php</em> (или любой другой шаблон, в котором вы планируете разместить блок), и вставляем следующий код:

[html]
&lt;div id=&quot;feature-posts&quot;&gt;
   &lt;?php $feature_posts = new WP_Query('showposts=5&amp;meta_key=feature&amp;meta_value=on'); ?&gt;
   &lt;?php while($feature_posts-&gt;have_posts()): $feature_posts-&gt;the_post(); ?&gt;
      &lt;div class=&quot;feature-item&quot;&gt;
           &lt;a href=&quot;&lt;?php the_permalink(); ?&gt;&quot;&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;
           &lt;?php the_excerpt(); ?&gt;
           &lt;a class=&quot;more-link&quot; href=&quot;&lt;?php the_permalink(); ?&gt;&quot;&gt;Читать далее...&lt;/a&gt;
      &lt;/div&gt;
   &lt;?php endwhile; ?&gt;
&lt;/div&gt;
[/html]

Здесь мы создаем новый объект класса <em>WP_Query</em>, со следующими параметрами:
<ul>
	<li><em>showposts</em> – количество выводимых записей, в нашем случае 5</li>
	<li><em>meta_key</em> — название произвольного поля</li>
	<li><em>meta_value</em> – значение произвольного поля</li>
</ul>
В результате цикла у нас выводятся пять записей, с заголовком, цитатой и ссылкой «читать далее». Обратите внимание, что каждая запись обернута в индивидуальный блок с классом <em>feature-item,</em> а все эти блоки содержаться внутри блока <em>feature-posts</em>. Такая разметка необходима для правильной работы яваскрипт-слайдера.

<a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image8.jpg"><img class="aligncenter size-medium wp-image-2174" title="image8" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image8-300x179.jpg" alt="" width="300" height="179" /></a>

Осталось совсем немного — сделать для записей красивую обертку.
<h3>3. Выбор слайдера</h3>
Слайдеров на яваскрипте написано бесчисленное множество, можно выбрать на любой вкус. Я предпочитаю <a href="http://jquery.malsup.com/cycle/">jQuery Cycle Plugin</a>, поскольку он не требователен к разметке, а также имеет множество настроек.

Для начала необходимо убедиться, что к вашей теме <a title="Подключение JQuery в WordPress (правильный способ)" href="http://dreamhelg.ru/2009/06/include-jquery-in-wordpress/">подключен jQuery</a>, и если его еще нет, необходимо это исправить. В моей теме jQuery уже используется, поэтому мне остается только подключить сам плагин. Скачиваем полную версию плагина с официальной страницы, сохраняем в папку js внутри шаблона, и подключаем на страницу <em>header.php</em> сразу после функции <em>wp_head()</em>.

[php]
&lt;?php wp_head(); ?&gt;

&lt;script type=&quot;text/javascript&quot; src=&quot;&lt;?php bloginfo('template_url'); ?&gt;/js/cycle.js&quot;&gt;&lt;/script&gt;  
[/php]

Далее, здесь же вставляем вызов слайдера, перед тегом <em>body</em>

[javascript]
&lt;script type=&quot;text/javascript&quot;&gt;
    jQuery(document).ready(function(){
        jQuery(&quot;#feature-posts&quot;)
                .after('&lt;div id=&quot;nav&quot;&gt;') 
                .cycle({
                    fx:     'scrollLeft', 
                    speed:  'fast', 
                    timeout: 0, 
                    pager:  '#nav'         
                })
    })
&lt;/script&gt;    
[/javascript]

Теперь наш блок выглядит вот так:

<h3><a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image9.jpg"><img class="aligncenter size-medium wp-image-2175" title="image9" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image9-300x75.jpg" alt="" width="300" height="75" /></a></h3>

<h3>4. Настройка стилей</h3>
Я не буду подробно останавливаться на каждом стиле, думаю любой человек знакомый с CSS все поймет. Единственное, что следует отметить, html-разметка была немного изменена. В частности, был добавлен еще один оборачивающий контейнер и заголовок <em>h2</em>:

[html]
&lt;div id=&quot;feature-container&quot;&gt;
   &lt;h2&gt;Интересные статьи&lt;/h2&gt;
   &lt;div id=&quot;feature-posts&quot;&gt;
       &lt;?php $feature_posts = new WP_Query('showposts=5&amp;meta_key=feature&amp;meta_value=on'); ?&gt;
       &lt;?php while($feature_posts-&gt;have_posts()): $feature_posts-&gt;the_post(); ?&gt;
           &lt;div class=&quot;feature-item&quot;&gt;
               &lt;a href=&quot;&lt;?php the_permalink(); ?&gt;&quot;&gt;&lt;?php the_title(); ?&gt;&lt;/a&gt;
               &lt;?php the_excerpt(); ?&gt;
               &lt;a class=&quot;more-link&quot; href=&quot;&lt;?php the_permalink(); ?&gt;&quot;&gt;Читать далее...&lt;/a&gt;
           &lt;/div&gt;
      &lt;?php endwhile; ?&gt;
   &lt;/div&gt;
&lt;/div&gt;
[/html]

Это не обязательные дополнения, так что без них вполне можно обойтись. Вот такие стили я использовала для нашего слайдера:

[css]
*Feature Articles*/
#feature-container{
    margin-bottom: 15px;
    width: 620px;
    color: #fff;
    position: relative;
}


#feature-container a{
    color: #fff;
}


#feature-container h2{
    color: #90CACC;
    font-weight: normal;
    background: #444444;
    margin-bottom: 0;
    padding: 10px 20px;
    -webkit-border-top-left-radius: 15px;
    -webkit-border-top-right-radius: 15px;
    -moz-border-radius-topleft: 15px;
    -moz-border-radius-topright: 15px;
    border-top-left-radius: 15px;
    border-top-right-radius: 15px;
}

#feature-posts{
   width: 600px;
   height: 100px;
   padding: 10px;
   background: #444444;
}

.feature-item{
    padding: 0 20px;
    overflow: hidden;
}


#feature-container #nav{
    font-family: Verdana;
}

#feature-container #nav a{
    color: #fff;
    background: #666666;
    padding:  7px 10px;
    text-align: center;
    margin-right: 1px;
}

#feature-container #nav a.activeSlide{
    background: #444444;
}
[/css]

В результате блок выглядит вот так:

<a href="http://dreamhelg.ru/wp-content/uploads/2011/07/image10.jpg"><img class="aligncenter size-medium wp-image-2165" title="image10" src="http://dreamhelg.ru/wp-content/uploads/2011/07/image10-300x130.jpg" alt="" width="300" height="130" /></a>

<h3>5. Сокращение длины цитаты</h3>

Уже под конец написания статьи, я вспомнила об одной возможной проблеме. Дело в том, что анонс статьи в блоке выводится с помощью темлейтного тэга <em>the_excerpt()</em> (цитата). По умолчанию, если вы специально не указали отдельную цитату для записи, его длина равна 55 символам, что в моем примере не очень удобно, поскольку блок по высоте не рассчитан на такой объем текста. Решение довольно простое, можно изменить дефолтную длину цитаты, на нужное количество символов, для этого вставьте следующий код в <em>functions.php</em>:

[php]
function new_excerpt_length($length) {
   return 20;
}
add_filter('excerpt_length', 'new_excerpt_length');
[/php]

Строчка <em>return </em> возвращает количество символов цитаты, в моем случае 20.

Вот собственно и все, надеюсь приведенный пример будет вам полезен.
<a href="/dreamhelg.ru/wp-content/uploads/2011/07/tweaker3.zip">Архив с примером</a>.]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2011/07/wordpress-howto-create-block-feature-arcticles/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://dreamhelg.ru/2011/07/wordpress-howto-create-block-feature-arcticles/</feedburner:origLink></item>
		<item>
		<title>Кое-что интересное о CSS-свойстве border</title>
		<link>http://feedproxy.google.com/~r/dreamhelg/~3/tuThLCYabdw/</link>
		<comments>http://dreamhelg.ru/2011/04/something-interest-about-css-border/#comments</comments>
		<pubDate>Wed, 06 Apr 2011 07:57:11 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[border]]></category>
		<category><![CDATA[css]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2146</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2011/04/borderproperty.jpg" class="attachment-200x200 wp-post-image" alt="borderproperty" title="borderproperty" /></p>Несмотря на годы веб-разработки и чтения тематических блогов и книг по CSS, я по-прежнему сталкиваюсь с неизвестными возможностями давно знакомых CSS-свойств.<span id="more-2146"></span>

Возможно это моя вина, я человек привычки, и никогда не рассматирваю подробно вещи, которые мне давно знакомы.

Так, во время чтения книги <a href="https://shop.smashingmagazine.com/smashing-book-2-intl.html">Smashing Book 2</a>, в главе Кристиана Хейлмана был приведен пример следующего CSS-кода:

[css]
#pagetitle {  
    border-color: black white white black;  
}  
[/css]

Первое, о чем я подумал: «Это какая-то ошибка. С каких пор свойство border-color позволяет в сокращенной форме указывать цвет для каждой границы блока?». А затем, я вспомнил, что за 10 лет разработки, я использовал это свойство один или два раза, следовательно, что я могу о нем знать? Плюс, я думаю что Кристиан, как опытный разработчик, знает о чем говорит.

Фактически, каждый раз, когда мне нужно было указать цвет границы, я использовал сокращенную версию свойства <strong>border</strong>, вот так:

[css]
#pagetitle {  
    border: solid 1px black;  
}  
[/css]

Редко когда мне действительно приходится использовать свойства типа: <strong>border-color</strong>, <strong>border-style</strong>, <strong>border-left-style</strong> или любые другие версии этих длинных свойств. В 99% случаев, свойство <strong>border</strong> реализует все, что мне требуется.

В CSS-справочнике на sitepoint.com <a href="http://reference.sitepoint.com/css/border-color">сказано</a>:
<blockquote>Сокращенная запись свойства border-color, устанавливает цвет границы для всех четырех сторон элемента, используя от одного до четырех, указанных значений. Каждая граница может иметь собственное значение.</blockquote>
Следовательно, точно так же как для свойств <strong>margin</strong> и <strong>padding</strong>, цвет для каждой границы задается в следующем порядке: верхняя граница, правая граница, нижняя граница, левая граница (по часовой стрелке, начиная сверху).
<h3>Стиль и ширина границы</h3>
Это правило работает также для свойств <strong>border-style</strong> и <strong>border-width</strong>, так что вы можете указать разную толщину и стиль границы для каждой из сторон элемента.

Ну и конечно, вы можете сокращать свойства, при необходимости:

[css]
#pagetitle {  
    border-width: 2px 1px;  
    border-style: solid dashed;  
}  
[/css]


Снова, также как у <strong>margin</strong> и <strong>padding</strong>, мы указываем только первые два значения, а остальные просто наследуются от первых.
<h3>Запомните</h3>
Нельзя использовать эту технику мульти-объявления для сокращенного CSS-свойства <strong>border</strong> (несмотря на то, что это кажется вполне логичным). Оно применяется только к трем, указанным выше, свойствам, так что следующий код будет неправильным:

[css]
#pagetitle {  
    /* THIS IS INVALID! */  
    border: solid dashed 1px 2px black white white black;  
}  
[/css]

Еще, такой метод не получится применить к свойствам <strong>outline-width</strong>, <strong>outline-style</strong> и <strong>outline-color</strong>.

Перевод статьи «<a href="http://www.impressivewebs.com/interesting-css-border/">Here’s Something Interesting About CSS Borders</a>», автор<strong> Louis Lazaris</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2011/04/something-interest-about-css-border/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://dreamhelg.ru/2011/04/something-interest-about-css-border/</feedburner:origLink></item>
		<item>
		<title>Изучаем CSS-позиционирование за 10 шагов</title>
		<link>http://feedproxy.google.com/~r/dreamhelg/~3/aqDouUauJB0/</link>
		<comments>http://dreamhelg.ru/2011/02/css-position-in-10-steps/#comments</comments>
		<pubDate>Wed, 16 Feb 2011 13:56:56 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[позиционирование]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2114</guid>
		<description><![CDATA[Позиционирование &#8212; одно из ключевых понятий в блочной верстке. Разобравшись с ним, вам многое станет понятно, а верстка из шаманства превратится в осмысленный процесс. Итак, речь в статье пойдет о [...]]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2011/02/css-position-in-10-steps/feed/</wfw:commentRss>
		<slash:comments>24</slash:comments>
		<feedburner:origLink>http://dreamhelg.ru/2011/02/css-position-in-10-steps/</feedburner:origLink></item>
		<item>
		<title>WordPress. Функции базы данных</title>
		<link>http://feedproxy.google.com/~r/dreamhelg/~3/bkqxQo0IQOQ/</link>
		<comments>http://dreamhelg.ru/2010/12/wordpress-database-functions/#comments</comments>
		<pubDate>Tue, 07 Dec 2010 11:09:27 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[wordpress]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[php]]></category>
		<category><![CDATA[wpdb]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2104</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2010/12/home.jpg" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p><p>В wordpress существует достаточно обширный класс, предоставляющий набор методов для эффективной работы с базой данных. Вы можете найти описание этого класса а также всех его методов в файле /wp-includes/wp-db.php. В сегодняшней статье будут рассмотрены наиболее важные из этих методов, и небольшие примеры их использования. Важно умение использовать возможности класса $wpdb, для безопасной работы плагинов.</p><span id="more-2104"></span>  
<p>В статье будут приведены примеры использования следующих шести методов:</p>  
<ul>
<li><strong>insert($table, $data, $format)</strong> – вставляет строку в таблицу через массивы.</li>    <li><strong>update($table, $data, $where, $format, $where_format)</strong> – обновляет строку в таблице через массивы.</li>
<li><strong>get_var($query, $x, $y)</strong> – получает одиночную переменную из базы данных.</li>
<li><strong>query($query)</strong> — выполняет MySQL-запрос к базе данных, с текущим подключением.</li>
<li><strong>get_results($query, $output)</strong> – получает данные SQL-запроса из базы данных (одну или множество строк).</li>
<li><strong>escape($data)</strong> – Экранирует контент для вставки в базу данных, используя метод <strong>addslashes()</strong> для безопасности.</li>
</ul>  

<p>Кроме этого, есть еще несколько интересных методов:</p>  <ul>
<li><strong>set_prefix($prefix)</strong> – используется для установления префикса wordpress-таблиц, также может быть использован для переопределения префикса в любое время.</li>
<li><strong>prepare($query)</strong> – безопасно подготавливает SQL-запрос к выполнению, с помощью sprint()-подобного синтаксиса.</li>
<li><strong>get_row($query, $output, $y)</strong> – получает одиночную запись из базы данных.</li>    <li><strong>get_col($query, $x)</strong> – получает одиночную колонку из базы данных в формате массива.</li> 
</ul>  
[code lang="php"]
/**
 * insert
 */
$wpdb-&gt;insert( $wpdb-&gt;posts, array( 'post_title' =&gt; $mytitle ) );
 
$wpdb-&gt;insert( $wpdb-&gt;options, array(
            'option_name',
            'new_option_key',
            'option_value' =&gt; 'New Option Value',
            'autoload' =&gt; 'yes' )
            );
 
/**
 * update
 */
$wpdb-&gt;update( $wpdb-&gt;posts, array( 'post_title' =&gt; $mytitle ),
            array( 'ID' =&gt; $myid )
            );
 
$wpdb-&gt;update( $wpdb-&gt;options,
            array( 'option_value' =&gt; 'New Option Value' ),
            array( 'option_name' =&gt; 'new_option_value' )
            );
 
/**
 * get_var
 */
$post_id = $wpdb-&gt;get_var(
            $wpdb-&gt;prepare( &quot;SELECT post_id FROM
                    $wpdb-&gt;postmeta WHERE
                    post_id = %d AND
                    meta_key = 'enclosure' AND
                    meta_value LIKE (%s)&quot;, $post_ID, $url . '&amp;' )
            );
 
$content = $wpdb-&gt;get_var(
            $wpdb-&gt;prepare(&quot;SELECT post_content FROM &quot; .
                    &quot;$wpdb-&gt;posts WHERE &quot; .
                    &quot;post_title = %s AND &quot; .
                    &quot;ID = %d&quot;, $title, $id )
        );
 
/**
 * query
 */
$wpdb-&gt;query( &quot;DELETE FROM $wpdb-&gt;options WHERE option_name = '$name'&quot; );
 
$wpdb-&gt;query( &quot;UPDATE $wpdb-&gt;posts SET post_title = '$mytitle' WHERE ID = $myid&quot; );
 
/**
 * query and escape
 */
$mytitle = $wpdb-&gt;escape( $mytitle );
$myid    = absint( $myid );
$wpdb-&gt;query( &quot;UPDATE $wpdb-&gt;posts SET post_title = '$mytitle' WHERE ID = $myid&quot; );
 
/**
 * get_results
 */
$type = $wpdb-&gt;get_results( &quot;SELECT post_type FROM &quot; .
                &quot;$wpdb-&gt;posts WHERE ID=$id&quot; );
[/code]

<p>Перевод статьи “<a href="http://wpengineer.com/1746/wordpress-database-functions/">WordPress Database Functions”</a>.</p>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2010/12/wordpress-database-functions/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
		<feedburner:origLink>http://dreamhelg.ru/2010/12/wordpress-database-functions/</feedburner:origLink></item>
		<item>
		<title>23 полезных CSS-приема для разработчика</title>
		<link>http://feedproxy.google.com/~r/dreamhelg/~3/EG7EjxsP2Vc/</link>
		<comments>http://dreamhelg.ru/2010/08/25-useful-css-snippets-for-developer/#comments</comments>
		<pubDate>Thu, 12 Aug 2010 04:00:52 +0000</pubDate>
		<dc:creator>dreamhelg</dc:creator>
				<category><![CDATA[верстка]]></category>
		<category><![CDATA[переводы]]></category>
		<category><![CDATA[css]]></category>
		<category><![CDATA[css3]]></category>

		<guid isPermaLink="false">http://dreamhelg.ru/?p=2089</guid>
		<description><![CDATA[<p><img width="200" height="200" src="http://dreamhelg.ru/wp-content/uploads/2010/08/home.png" class="attachment-200x200 wp-post-image" alt="home" title="home" /></p>CSS, без сомнения, является одним из самых важных языков разметки, которые мы используем. И хотя HTML описывает структуру документа, ее поведение может быть непредсказуемым, в зависимости от версии браузера. CSS – это тот инструмент, который позволит нам исправить все несоответствия в отображении страницы, а также оформить ее внешний вид.<span id="more-2089"></span>

Далее приведен список из двадцати трех различных CSS-приемов, которые будут полезны как начинающим, так и опытным разработчикам.

<h3>Прячем текст с помощью абзаца</h3>
Такой прием будет весьма полезен для логотипа компании. Чаще всего, в качестве логотипа используется картинка, однако для SEO, было бы неплохо отобразить название компании в тегах <strong>h1</strong>. Данный пример – самый лучший способ это реализовать. Фактически, мы просто скрываем текст за пределами экрана, и вместо этого назначаем фоновую картинку.

[css]
h1 {
	text-indent:-9999px;
	margin:0 auto;
	width:400px;
	height:100px;
	background:transparent url(&quot;images/logo.jpg&quot;) no-repeat scroll;
}
[/css]

<h3>Стилизация ссылок в зависимости от формата файла</h3>
Этот пример направлен на улучшение пользовательского интерфейса. Зачастую в интернете, мы переходим по ссылкам, абсолютно не зная куда они ведут. Следующий фрагмент кода используется для отображения небольших иконок рядом со ссылками. Такие картинки будут подсказывать пользователю, что это внешняя ссылка, электронный адрес, pdf-файл, картинка и т.д.

[css]
/* внешняя ссылка */
a[href^=&quot;http://&quot;]{
	padding-right: 20px;
	background: url(external.gif) no-repeat center right;
}

/* электронная почта */
a[href^=&quot;mailto:&quot;]{
	padding-right: 20px;
	background: url(email.png) no-repeat center right;
}

/* pdfs */
a[href$=&quot;.pdf&quot;]{
	padding-right: 20px;
	background: url(pdf.png) no-repeat center right;
}
[/css]


<h3>Удаляем полосы прокрутки многострочного поля в IE</h3>
Internet Explorer имеет раздражающую привычку добавлять полосы прокрутки в многострочное поле, даже когда его содержимое не превышает заданный размер. Этот недостаток легко исправляется следующей строчкой кода:

[css]
textarea{
	overflow:auto;
}
[/css]

<h3>Буквица</h3>
На сегодняшний день очень распространенное явление в блогах и новостных сайтах. Вы удивитесь, насколько просто она реализовывается, а также прекрасно деградирует в старых браузерах.

[css]
p:first-letter{
	display:block;
	margin:5px 0 0 5px;
	float:left;
	color:#FF3366;
	font-size:60px;
	font-family:Georgia;
}
[/css]


<h3>CSS-прозрачность</h3>
Прозрачность – это свойство, которое разным браузерам, назначается по-разному. С помощью следующего фрагмента кода, вы сможете назначить прозрачность всем браузерам сразу.

[css]
.transparent {
	filter:alpha(opacity=50);
	-moz-opacity:0.5;
	-khtml-opacity: 0.5;
	opacity: 0.5;
}
[/css]

<h3>CSS Reset от Эрика Мейера</h3>
Фактически, <strong>css-reset</strong>, предложенный Эриком Мейером, уже стал повсеместным стандартом использования. Поскольку он был адаптирован многими известными разработчиками, вы можете не сомневаться в его качестве.

[css]
html, body, div, span, applet, object, iframe,
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
a, abbr, acronym, address, big, cite, code,
del, dfn, em, font, img, ins, kbd, q, s, samp,
small, strike, strong, sub, sup, tt, var,
b, u, i, center,
dl, dt, dd, ol, ul, li,
fieldset, form, label, legend,
table, caption, tbody, tfoot, thead, tr, th, td {
	margin: 0;
	padding: 0;
	border: 0;
	outline: 0;
	font-size: 100%;
	vertical-align: baseline;
	background: transparent;
}

body {
	line-height: 1;
}

ol, ul {
	list-style: none;
}

blockquote, q {
	quotes: none;
}

blockquote:before, blockquote:after,
q:before, q:after {
	content: '';
	content: none;
}

/* remember to define focus styles! */
:focus {
	outline: 0;
}

/* remember to highlight inserts somehow! */
ins {
	text-decoration: none;
}

del {
	text-decoration: line-through;
}

/* tables still need 'cellspacing=&quot;0&quot;' in the markup */
table {
	border-collapse: collapse;
	border-spacing: 0;
}
[/css]

<h3>Предзагрузчик картинок</h3>
Иногда бывает полезно предварительно загрузить ваши картинки, с тем чтобы исключить задержку и мерцание при доступе к нужному элементу.

[css]
div.loader{
	background:url(images/hover.gif) no-repeat;
	background:url(images/hover2.gif) no-repeat;
	background:url(images/hover3.gif) no-repeat;
	margin-left:-10000px;
}
[/css]

<h3>Простой css-спрайт для кнопки</h3>
Наличие кнопки или ссылки с фоновым изображением – обычное дело, кроме того, к таким элементам часто применяются дополнительные эффекты, улучшающие пользовательский интерфейс. Один из таких эффектов – индикатор наведения курсора мыши на кнопку. С помощью спрайта, мы можем реализовать такой эффект путем изменения свойства <strong>background-positon</strong>, на заданное значение, с тем, чтобы отобразить фоновую картинку при наведении мыши на кнопку. Простое, но эффективное решение.

[css]
a {
display: block;
background: url(sprite.png) no-repeat;
height: 30px;
width: 250px;
}

a:hover {
	background-position: 0 -30px;
}
[/css]


<h3>Google Font API</h3>
Не так давно, Google реализовал замечательный ресурс для веб-разработчиков, позволяющий загружать и использовать на странице новые, нестандартные шрифты. К загрузке доступны даже различные варианты шрифтов, жирный, курсив и т.д. Несмотря на то, что коллекция Google пока ограничена, в наличии достаточно большое количество шрифтов. Сначала подключите динамически составленный CSS-файл с названием шрифтов и необходимых вам вариантов, а затем просто используйте названия шрифтов в CSS, в обычном режиме. Дополнительную информацию по Google Font API можно прочитать <a href="http://code.google.com/apis/webfonts/">здесь</a>.

[css]
&lt;head&gt;
	Inconsolata:italic|Droid+Sans&quot;&gt;
&lt;/head&gt;
[/css]

[css]
body {
	font-family: 'Tangerine', 'Inconsolata', 'Droid Sans', serif; font-size: 48px;
}
[/css]

<h3>Хаки для различных браузеров</h3>
Иногда бывает полезно исправить баг у конкретного браузера, и условные комментарии не всегда являются лучшим решением для этого. Этот список браузерных хаков от Криса Койера, поможет вам назначить нужные свойства для определенных браузеров, посредством простого css.

[css]
/* IE 6 */
* html .yourclass { }

/* IE 7 */
*+html .yourclass{ }

/* IE 7 and modern browsers */
html&gt;body .yourclass { }

/* Modern browsers (not IE 7) */
html&gt;/**/body .yourclass { }

/* Opera 9.27 and below */
html:first-child .yourclass { }

/* Safari */
html[xmlns*=&quot;&quot;] body:last-child .yourclass { }

/* Safari 3+, Chrome 1+, Opera 9+, Fx 3.5+ */
body:nth-of-type(1) .yourclass { }

/* Safari 3+, Chrome 1+, Opera 9+, Fx 3.5+ */
body:first-of-type .yourclass {  }

/* Safari 3+, Chrome 1+ */
@media screen and (-webkit-min-device-pixel-ratio:0) {
 .yourclass  {  }
}
[/css]

<h3>Фиксированный подвал</h3>
Возможно, вы подумаете, что создать подвал, всегда приклеенный к низу экрана, это сложная задача. Однако, это совсем не сложно, если вам нужен простой подвал. Здесь нам придется использовать небольшой хак для IE6, но в остальном, это очень легко.

[css]
#footer {
	position:fixed;
	left:0px;
	bottom:0px;
	height:30px;
	width:100%;
	background:#999;
}

/* IE 6 */
* html #footer {
	position:absolute;
	top:expression((0-(footer.offsetHeight)+(document.documentElement.clientHeight ? document.documentElement.clientHeight : document.body.clientHeight)+(ignoreMe = document.documentElement.scrollTop ? document.documentElement.scrollTop : document.body.scrollTop))+'px');
}
[/css]

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

[css]
img.flip {
	-moz-transform: scaleX(-1);
	-o-transform: scaleX(-1);
	-webkit-transform: scaleX(-1);
	transform: scaleX(-1);
	filter: FlipH;
	-ms-filter: &quot;FlipH&quot;;
}
[/css]

<h3>Clearfix</h3>
Не так давно, кто-то решил, что пришло время очищать поток от флоатов, не добавляя дополнительной разметки к документу. В результате этого решения, был создан класс, который можно применять к контейнеру, содержащему плавающие элементы, для их очистки. Это очень удобный, и широко распространенный способ на сегодняшний день.

[css]
.clearfix:after {
	visibility: hidden;
	display: block;
	font-size: 0;
	content: &quot; &quot;;
	clear: both;
	height: 0;
}

.clearfix { display: inline-block; }

/* start commented backslash hack */
* html .clearfix { height: 1%; }
.clearfix { display: block; }
/* close commented backslash hack */
[/css]

<h3>Закругленные углы</h3>
С постепенным внедрением CSS3 в современных браузерах, создавать закругленные углы стало очень просто. К сожалению, пока нет поддержки CSS3 в IE, включая восьмую версию, но она будет добавлена в IE9.

[css]
.round{
	-moz-border-radius: 10px;
	-webkit-border-radius: 10px;
	border-radius: 10px; /* future proofing */
	-khtml-border-radius: 10px; /* for old Konqueror browsers */
}
[/css]

<h3>Переопределение стилей</h3>
Меня продолжают удивлять люди, незнающие об <strong>!important</strong> в CSS, поскольку это очень мощный и удобный в использовании инструмент. Очень просто, любое правило с <strong>!important</strong> на конце, будет переопределять такое же правило, примененное к этому элементу, в любом месте CSS-файла или в линейных стилях.

[css]
p{
	font-size:20px !important;
}
[/css]

<h3>Font face</h3>
Font-face не использовался широко до прошлого года, хотя он известен еще с тех времен, когда IE6 считался современным браузером. Сейчас это свойство неплохо поддерживается современными браузерами и предлагает отличный способ использования небезопасных шрифтов в своих проектах. Чтобы сэкономить время, можно воспользоваться специальным генератором <a href="http://www.fontsquirrel.com/fontface/generator">Font Squirrel Font Face</a>.

[css]
@font-face {
	font-family: 'Graublau Web';
	src: url('GraublauWeb.eot');
	src: local('☺'),
		url('GraublauWeb.woff') format('woff'), url('GraublauWeb.ttf') format('truetype');
}
[/css]

<h3>Центрирование сайта</h3>
Распространенный дизайнерский прием – горизонтальное центрирование сайта. Это реализуется очень просто.

[css]
.wrapper {
	width:960px;
	margin:0 auto;
}
[/css]

<h3>Min-height в IE</h3>
Этот пример исправляет простой, но досадный баг в IE, при установке минимальной высоты. Вообще, IE интерпретирует высоту в качестве минимальной высоты, так что, если в IE значение высоты не установлено в auto, следующий прием исправит этот баг.

[css]
.box {
	min-height:500px;
	height:auto !important;
	height:500px;
}
[/css]

<h3>Загрузка картинки</h3>
Этот эффект загрузки изображения, имитирует ajax-загрузку, отображая прелоудер, пока весь контент не будет загружен. Такое решение отлично подойдет для больших, медленно загружающихся картинок.

[css]
img {
	background: url(loader.gif) no−repeat 50% 50%;
}
[/css]

<h3>Вертикальное центрирование</h3>
Это небольшой фрагмент кода, позволит вам вертикально центрировать содержимое контейнера, без использования дополнительной разметки. Вам понадобится просто отобразить контейнер в качестве ячейки таблицы, а затем задать значение атрибуту <strong>vertical-align</strong>.

[css]
.container {
	min-height: 10em;
	display: table-cell;
	vertical-align: middle;
}
[/css]

<h3>Создаем врезы</h3>
Для начала, давайте разберемся, что же такое врез? Врезы обычно встречаются на новостных ресурсах и сайтах-журналах, в виде небольшого блока текста, расположенного внутри статьи, иногда в них размещаются мнения людей или цитаты. Вы будете рады узнать, что их очень легко сделать, и при правильном использовании, врезы могут значительно улучшить восприятие статьи пользователем.

[css]
.pullquote {
	width: 300px;
	float: right;
	margin: 5px;
	font-family: Georgia, &quot;Times New Roman&quot;, Times, serif;
	font: italic bold #ff0000 ;
}
[/css]

<h3>Выделение текста</h3>
Не все знают о том, что существует возможность изменить цвет выделенного в браузере текста. Для этого потребуется всего два селектора.

[css]
::selection {
color: #000000;
background-color: #FF0000;
}
::-moz-selection {
color: #000000;
background: #FF0000;
}
[/css]

<h3>Добавляем разрыв страницы</h3>
Этот пример, снова направлен на улучшения пользовательского интерфейса, при выводе на печать. Например, при печати статьи, возможно будет полезно отделить комментарии от текста статьи, и перенести их на отдельную страницу. Если добавить класс .page-break к блоку комментариев, то все комментарии, при печати, будут выведены на отдельной странице. И вообще, этот класс можно использовать в любом месте вашего сайта.

[css]
.page-break{
	page-break-before:always;
}
[/css]

Перевод статьи “<a href="http://www.1stwebdesigner.com/development/useful-css-snippets/?utm_source=feedburner&amp;utm_medium=feed&amp;utm_campaign=Feed%3A+1stwebdesigner+%281stwebdesigner%29">25 Incredibly Useful CSS Snippets for Developers</a>”, автор <strong>Matthew Corner</strong>]]></description>
		<wfw:commentRss>http://dreamhelg.ru/2010/08/25-useful-css-snippets-for-developer/feed/</wfw:commentRss>
		<slash:comments>39</slash:comments>
		<feedburner:origLink>http://dreamhelg.ru/2010/08/25-useful-css-snippets-for-developer/</feedburner:origLink></item>
	</channel>
</rss>

