<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>JSToolbox - все о JavaScript &#187; CSS</title>
	<atom:link href="http://www.jstoolbox.com/category/css/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.jstoolbox.com</link>
	<description>Блог о программировании вообще и о JavaScript в частности, уроки, статьи, заметки, база знаний.</description>
	<lastBuildDate>Wed, 28 Jul 2010 22:33:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.4</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Обесцвечивание элементов веб страниц</title>
		<link>http://www.jstoolbox.com/2009/05/29/obescvechivanie-elementov/</link>
		<comments>http://www.jstoolbox.com/2009/05/29/obescvechivanie-elementov/#comments</comments>
		<pubDate>Fri, 29 May 2009 20:59:52 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Canvas]]></category>
		<category><![CDATA[Эффекты]]></category>
		<category><![CDATA[javascript]]></category>
		<category><![CDATA[обесцвечивание]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/?p=456</guid>
		<description><![CDATA[<p>Недавно нашел <a href="http://james.padolsey.com/javascript/grayscaling-in-non-ie-browsers/" title="Grayscaling in non-IE browsers">интересный метод</a> обесцветить, т.е. сделать черно-белым любой элемент на веб странице, будь то изображение изображение, таблица, форма или что-либо еще.</p>
<p>Казалось бы, зачем это может понадобиться? Однако у меня сразу же появилась мысль о том, где такая возможность пригодиться. Довольно часто в моей практике встречались дизайны, в которых существовали элементы управления (различные кнопки, иконки) в двух видах - цветной, обозначающий что элемент активен, и серый, обозначающий что элемент не активен и нажимать на него не имеет смысла. Раньше я использовал два разных изображения - одно цветное, одно черно-белое, и если элемент деактивировался, то я подставлял нецветную картинку. Недостаток такого метода в том, что браузер должен подгружать дополнительную картинку, и представьте себе, что этих картинок может быть довольно много... Кроме того, нужно тратить время на то, чтобы создавать все эти нецветные изображения. При помощи предлагаемого здесь метода, обесцвечивание можно выполнить простой функцией <strong>grayscale()</strong>.</p>]]></description>
			<content:encoded><![CDATA[<p>Недавно нашел <a href="http://james.padolsey.com/javascript/grayscaling-in-non-ie-browsers/" title="Grayscaling in non-IE browsers">интересный метод</a> обесцветить, т.е. сделать черно-белым любой элемент на веб странице, будь то изображение, таблица, форма или что-либо еще.</p>
<p>Казалось бы, зачем это может понадобиться? Однако у меня сразу же появилась мысль о том, где такая возможность пригодиться. Довольно часто в моей практике встречались дизайны, в которых существовали элементы управления (различные кнопки, иконки) в двух видах &#8211; цветной, обозначающий что элемент активен, и серый, обозначающий что элемент не активен и нажимать на него не имеет смысла. Раньше я использовал два разных изображения &#8211; одно цветное, одно черно-белое, и если элемент деактивировался, то я подставлял нецветную картинку. Недостаток такого метода в том, что браузер должен подгружать дополнительную картинку, и хуже всего, что этих картинок может быть довольно много&#8230; Кроме того, нужно тратить время на то, чтобы создавать все эти нецветные изображения. При помощи предлагаемого здесь метода, обесцвечивание можно выполнить простой функцией <strong>grayscale()</strong>.</p>
<p>Чтобы вам была более понятна суть, посмотрите мой <a href="/demo/grayscale.php" title="Демо пример обесцвечивания элементов DOM">демо пример</a>. Однако здесь же замечу, что, хотя этот метод и тестировался в разных браузерах, все же пока это экспериментальное решение.</p>
<p><span id="more-456"></span></p>
<p>Теперь вкратце опишу принцип работы этого метода.</p>
<p>Хоть я частенько и ругаю IE за его огрехи, но в этом случае он справляется лучше всех, ибо в Internet Explorer существует специальный фильтр который позволяет сделать такое преобразование цвета:</p>
<pre class="prettyprint">
elem.style.filter = 'progid:DXImageTransform.Microsoft.BasicImage(grayscale=1)';
</pre>
<p>Фильтр может быть установлени и в CSS:</p>
<pre class="prettyprint">
elem {
    filter: progid:DXImageTransform.Microsoft.BasicImage(grayscale=1);
    /* Элемент должен иметь "hasLayout"! */
    zoom: 1;
}
</pre>
<p>Что касается остальных браузеров, то здесь все гораздо сложнее. Во первых обесцвечивание обычных элементов &#8211; параграфов, таблиц и т.п. В этом случае нужно просматривать значения &#8220;цветных&#8221; стилей: color, background-color, и изменять их цвет следующими фукнциями:</p>
<pre class="prettyprint">
// Уменьшение насыщенности
function RGBtoDesat(r,g,b) {
    var average = (r + g + b) / 3;
    return {
        r: average,
        g: average,
        b: average
    };
}

// Преобразование в черно-белый цвет
function RGBtoGrayscale(r,g,b) {
    var mono = parseInt( (0.2125 * r) + (0.7154 * g) + (0.0721 * b), 10 );
    return {
        r: mono,
        g: mono,
        b: mono
    };
}
</pre>
<p>Для обесцвечивания изображений используется другая технология &#8211; элемент <strong>&lt;canvas&gt;</strong> и его метод <strong>getImageData()</strong>, но при этом изображение должно находиться на том же домене, что и веб страница. По всей видимости метод <strong>getImageData()</strong> не поддерживается в <em>Chrome</em> и <em>Safari</em> меньше четвертой версии, поэтому для этих браузеров такой метод работать не будет.</p>
<h3>Использование</h3>
<p>Чтобы выполнить обесцвечивание, нужно вызвать функцию <strong>grayscale()</strong>, передав в качестве параметра элемент или коллекцию элементов:</p>
<pre class="prettyprint">
// один элемент
var el = document.getElementById( 'myEl' );
grayscale( el );

// Массив элементов DOM
grayscale( document.getElementsByTagName('div') );

// Также работает с коллекциями jQuery
grayscale( $('div') );
</pre>
<p>Чтобы вернуть элемент в первоначальное, цветное, состояние, нужно воспользоваться функцией <strong>grayscale.reset()</strong>:</p>
<pre class="prettyprint">
grayscale.reset( el );
grayscale.reset( $('div') );
</pre>
<p>При всем этом, я бы не советовал вам использовать такую методику для больших изображений, так как их использование в элементе <strong>canvas</strong> может поглотить много ресурсов, даже если вы используете предлагаемую автором фунцкию <strong>grayscale.prepare()</strong> работы с такими изображениями.</p>
<p>Больше информации можете узнать на <a href="http://james.padolsey.com/javascript/grayscaling-in-non-ie-browsers/" title="Grayscaling in non-IE browsers">здесь</a>. Там же можно <a href="http://james.padolsey.com/demos/grayscale/">скачать скрипт и посмотреть демо пример автора</a>.</p>
<p><a href="/demo/grayscale.php" class="demo" title="Демо пример">Смотреть демо</a></p>
<div class="postLinks"><strong>Спонсор статьи:</strong><br/><a href="http://www.domania.ru/">http://www.domania.ru/</a> &#8211; продажа квартир в Москве<br/><a href="http://www.automania.ru/">http://www.automania.ru/</a> &#8211; подержанные автомобили<br/><a href="http://www.job.ru/">http://www.job.ru/</a> &#8211; работа в москве</div>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2009/05/29/obescvechivanie-elementov/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
		</item>
		<item>
		<title>Как создать свой CSS селектор в MooTools</title>
		<link>http://www.jstoolbox.com/2008/11/11/mootools-pseudo-selector/</link>
		<comments>http://www.jstoolbox.com/2008/11/11/mootools-pseudo-selector/#comments</comments>
		<pubDate>Mon, 10 Nov 2008 22:29:56 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[MooTools]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[псевдоселектор]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/2008/11/11/mootools-pseudo-selector/</guid>
		<description><![CDATA[В библиотеке Mootools уже реализованы большинство псевдоселекторов CSS3: :nth-child, :contains, :not и др. Но у вас есть возможность не ограничиваться имеющимся выбором и создать свой собственный CSS селектор, который можно будет использовать в таких функциях Mootools, как $$ и getElement. Все, что нужно будет сделать, это добавить свою функцию к объекту Selectors.Pseudo. В функцию будут [...]]]></description>
			<content:encoded><![CDATA[<p>В библиотеке <a href="http://mootools.net" title="Библиотека Mootols">Mootools</a> уже реализованы большинство псевдоселекторов CSS3: <strong>:nth-child</strong>, <strong>:contains</strong>, <strong>:not</strong> и др. Но у вас есть возможность не ограничиваться имеющимся выбором и создать свой собственный CSS селектор, который можно будет использовать в таких функциях Mootools, как <strong>$$</strong> и <strong>getElement</strong>. Все, что нужно будет сделать, это добавить свою функцию к объекту <strong>Selectors.Pseudo</strong>. В функцию будут передаваться два аргумента &#8211; параметр, передаваемый селктору (<em>:pseudo(parameter)</em>) и объект, который может быть использован в качестве временного хранилища данных при последовательном проходе элементов. Последний аргумент используется к примеру в псевдоселекторе :nth-child. Функция должна возвращать <em>true</em> если элемент соответствует критериям выбора или <em>false</em> в обратном случае.</p>
<p><span id="more-238"></span></p>
<p>В качестве примера можно продемонстрировать псевдокласс :random, созданный <a href="http://blog.kassens.net/custom-pseudo-selectors" title="Jan Kassens blog">Яном Кассенсом</a>:</p>
<pre class="prettyprint">
Selectors.Pseudo.random = function(probability, local){
	return Math.random() < (probability || .5).toFloat();
};

// выбор примерно половины div-ов на странице
$$('div:random');

// выборка 20% заголовков h2 с классом article
$$('h2.article:random(.2)');
</pre>
<p>Такой псевдоселектор позволяет выбирать случайные элементы из DOM. В первом примере будут выбраны примерно половина элементов <em>div</em> на странице, а во втором будет произведена выборка всех загловков <em>h2</em> с классом <em>article</em>, а затем в случайном порядке будут выбраны 20% из их общего числа.</p>
<p>Еще один пример реализации псевдоселектора я подсмотрел на блоге у <a href="http://davidwalsh.name/create-custom-pseudo-selector-mootools-selected" title="David Walsh псевдоселекторы Mootools">Девида Уолша</a>:</p>
<pre class="prettyprint">
Selectors.Pseudo.selected = function(){
	return (this.selected &#038;&#038; this.get('tag') == 'option');
};
</pre>
<p>Это селектор <strong>:selected</strong>, который имеется в jQuery. Суть его заключается в том, что он выбирает выбранные элементы <em>option</em> из списка <em>select</em>:</p>
<pre class="prettyprint">
&lt;select name="mysel" id="mysel" multiple="multiple">
	&lt;option value="One">One&lt;/a>
	&lt;option value="Two">Two&lt;/a>
	&lt;option value="Three" selected="selected">Three&lt;/a>
	&lt;option value="Four" selected="selected">Four&lt;/a>
&lt;/select>
</pre>
<p>Удобная это вещь - псевдоселектор, не правда ли? Тем более если его можно легко создавать самому, под свои нужды.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2008/11/11/mootools-pseudo-selector/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Peppy &#8211; выборка элементов DOM по CSS3 селекторам</title>
		<link>http://www.jstoolbox.com/2008/11/02/peppy-css3/</link>
		<comments>http://www.jstoolbox.com/2008/11/02/peppy-css3/#comments</comments>
		<pubDate>Sun, 02 Nov 2008 21:02:32 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[DOM]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[javascript]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/2008/11/02/peppy-css3/</guid>
		<description><![CDATA[James Donaghue создал библиотеку Peppy для выборки элементов DOM, использую селекторы CSS3. Главные достоинства библиотеки это скорость и размер. При размере всего 10Кб, Peppy работает гораздо быстрее, чем соответствующие библиотеки всех основных фреймворков.



В доказательство своих слов, Джеймс приводит результаты сравнительных тестов, которые сравнивают скорость работы селекторов фреймворков Mootools, jQuery, YUI, Dojo, Prototype, Ext и Sizzle. [...]]]></description>
			<content:encoded><![CDATA[<p>James Donaghue <a href="http://jamesdonaghue.com/?p=40">создал библиотеку Peppy</a> для выборки элементов DOM, использую селекторы CSS3. Главные достоинства библиотеки это скорость и размер. При размере всего 10Кб, Peppy работает гораздо быстрее, чем соответствующие библиотеки всех основных фреймворков.</p>
<div class="entry_picture" style="width:429px">
<img src='http://www.jstoolbox.com/wp-content/uploads/2008/11/p.png' alt='Peppy - библиотека-селектор CSS3' />
</div>
<p>В доказательство своих слов, Джеймс приводит результаты сравнительных тестов, которые сравнивают скорость работы селекторов фреймворков Mootools, jQuery, YUI, Dojo, Prototype, Ext и Sizzle. Их можно посмотреть <a href="http://jamesdonaghue.com/static/peppy/profile/slickspeed/">здесь</a>.</p>
<p>Синтаксис селекторов ничем не отличается от синтаксиса jQuery (в том смысле, что и там и там используется знак доллара <strong>$</strong>):</p>
<pre class="prettyprint">
var elems = $('dt');
</pre>
<p>Так что, если вы используете фреймворки только из-за удобных селекторов, то думаю Peppy будет им прекрасной заменой. Скачать скрипт можно <a href="http://jamesdonaghue.com/static/peppy/">на этой странице</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2008/11/02/peppy-css3/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Пишем кроссбраузерный CSS при помощи JavaScript</title>
		<link>http://www.jstoolbox.com/2008/10/25/krossbrauzernij-css/</link>
		<comments>http://www.jstoolbox.com/2008/10/25/krossbrauzernij-css/#comments</comments>
		<pubDate>Sat, 25 Oct 2008 20:13:13 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Совместимость]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/2008/10/25/krossbrauzernij-css/</guid>
		<description><![CDATA[Для совместимости стилей в разных браузерах, часто приходится использовать разные хаки, вроде этих:

*width: 200px;
_width: 240px;

Таким образом, я указываю ширину для Internet Explorer (первая строка) и конкретно для IE 6 (вторая строка). Совсем недавно я нашел один замечательный скрипт &#8211; CSS Browser Selector, с помощью которого можно писать удобочитаемые хаки практически для всех браузеров и операционных [...]]]></description>
			<content:encoded><![CDATA[<p>Для совместимости стилей в разных браузерах, часто приходится использовать разные хаки, вроде этих:</p>
<pre class="prettyprint">
*width: 200px;
_width: 240px;
</pre>
<p>Таким образом, я указываю ширину для Internet Explorer (первая строка) и конкретно для IE 6 (вторая строка). Совсем недавно я нашел один замечательный скрипт &#8211; <a href="http://rafael.adm.br/css_browser_selector/" title="CSS Browser Selector">CSS Browser Selector</a>, с помощью которого можно писать удобочитаемые хаки практически для всех браузеров и операционных систем. Кроме того, можно также писать стили отдельно для сайтов, где разрешен JavaScript и где он выключен.</p>
<p><span id="more-231"></span></p>
<p>Пример:</p>
<pre class="prettyprint">
&lt;style type="text/css">
.ie .example {
  background-color: yellow
}
.ie7 .example {
  background-color: orange
}
.gecko .example {
  background-color: gray
}
.win.gecko .example {
  background-color: red
}
.linux.gecko .example {
  background-color: pink
}
.opera .example {
  background-color: green
}
.konqueror .example {
  background-color: blue
}
.webkit .example {
  background-color: black
}
.example {
  width: 100px;
  height: 100px;
}
.no_js { display: block }
.has_js { display: none }
.js .no_js { display: none }
.js .has_js { display: block }
&lt;/style>
</pre>
<p>Согласитесь, такие стили гораздо понятней, чем упомянутые мною в первом примере. В общем виде правило выглядит следующим образом:</p>
<pre class="prettyprint">
.[os].[browser] .mylink { font-weight: bold; }
</pre>
<p>В начале идет класс с названием операционной системы, за ним класс броузера без пробела, а потом уже ваш селектор.</p>
<p>Полный список классов операционных систем:</p>
<ul>
<li>win &#8211; Microsoft Windows</li>
<li>linux &#8211; Linux</li>
<li>mac &#8211; Mac OS</li>
</ul>
<p>Полный список поддерживаемых браузеров:</p>
<ul>
<li>ie &#8211; Internet Explorer (все версии)</li>
<li>ie8 &#8211; Internet Explorer 8.x</li>
<li>ie7 &#8211; Internet Explorer 7.x</li>
<li>ie6 &#8211; Internet Explorer 6.x</li>
<li>ie5 &#8211; Internet Explorer 5.x</li>
<li>gecko &#8211; Mozilla, Firefox (все версии), Camino</li>
<li>ff2 &#8211; Firefox 2</li>
<li>ff3 &#8211; Firefox 3</li>
<li>opera &#8211; Opera (все версии)</li>
<li>opera8 &#8211; Opera 8.x</li>
<li>opera9 &#8211; Opera 9.x</li>
<li>konqueror &#8211; Konqueror</li>
<li>webkit или safari &#8211; Safari, NetNewsWire, OmniWeb, Shiira, Google Chrome</li>
<li>chrome &#8211; Google Chrome</li>
</ul>
<p>Кроме того есть екстра класс <strong>.js</strong> &#8211; для указания отдельных стилей при включенном JavaScript.</p>
<p>Ну и конечно же, чтоб все это заработало, нужно подключить сам скрипт (весит меньше 1 килобайта):</p>
<pre class="prettyprint">
&lt;script src="css_browser_selector.js" type="text/javascript">&lt;/script>
</pre>
<p><a href="http://rafael.adm.br/css_browser_selector/" title="CSS Browser Selector" class="external">Страница проекта</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2008/10/25/krossbrauzernij-css/feed/</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Выборка элементов по CSS селектору</title>
		<link>http://www.jstoolbox.com/2008/08/01/vyborka-elementov-po-css-selektoru/</link>
		<comments>http://www.jstoolbox.com/2008/08/01/vyborka-elementov-po-css-selektoru/#comments</comments>
		<pubDate>Fri, 01 Aug 2008 19:21:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[DOM]]></category>

		<guid isPermaLink="false">http://www.jstoolbox.com/2008/08/01/vyborka-elementov-po-css-selektoru/</guid>
		<description><![CDATA[Я думаю большинство из нас привыкли к более продвинутому методу получения элементов DOM, чем простые document.getElementById() или document.getElementsByTagName(). В большинстве современных JavaScript фреймворков используются функции позволяющие получать коллекцию элементов по CSS селектору:

var elems = $('.list li a');

Такой метод более простой и удобный, однако и более медленный. К тому же функции, выполняющие такую выборку, довольно таки [...]]]></description>
			<content:encoded><![CDATA[<p>Я думаю большинство из нас привыкли к более продвинутому методу получения элементов DOM, чем простые <strong>document.getElementById()</strong> или <strong>document.getElementsByTagName()</strong>. В большинстве современных JavaScript фреймворков используются функции позволяющие получать коллекцию элементов по CSS селектору:</p>
<pre class="prettyprint">
var elems = $('.list li a');
</pre>
<p>Такой метод более простой и удобный, однако и более медленный. К тому же функции, выполняющие такую выборку, довольно таки громоздкие и их использование значительно увеличивает размер скриптов.</p>
<p>Однако, ничто не стоит на месте, и все меняется с приходом новых стандартов и новых браузеров. Так, в новом стандарте <a href="http://dev.w3.org/2006/webapi/selectors-api/" title="Selectors API">Selectors API</a> имеются функции <strong>document.querySelector()</strong> и <strong>document.querySelectorAll()</strong>, способные делать выборку элементов по CSS. Реализация этих функций на уровне браузера даст возможность избавиться от необходимости добавлять вышеупомянутые скрипты во фреймворки, значительно увеличит производительность и ёмкость скриптов.</p>
<p>До сих пор обе эти функции были реализованы в <a href="http://webkit.org/blog/156/queryselector-and-queryselectorall/" title="querySelector and querySelectorAll">Webkit</a> и <a href="http://msdn.microsoft.com/en-us/library/cc304114(VS.85).aspx">Internet Explorer 8 beta</a>, но буквально на днях вышла новая версия <a href="">Firefox 3.1 alpha</a>, где одним из новшеств являются CSS селекторы.</p>
<p>Типичное применение:</p>
<pre class="prettyprint">
var elem = document.querySelector('#myelem');
var elems = document.querySelectorAll('ul > li:not(".selected"):hover');
</pre>
<p>Дабы придать функциям более привычный вид, можно использовать следующий прием (об этом писал <a href="http://www.dustindiaz.com/firefox-31-brings-good-stuff/">Dustin Diaz</a>):</p>
<pre class="prettyprint">
var $$ = function(q, b) {
  if (b) {
    return document.querySelector(q);
  } else {
    return document.querySelectorAll(q);
  }
};
</pre>
<p>Если в качестве второго параметра передаем <strong>true</strong>, то используется <strong>querySelector</strong>, возвращающий единственный элемент, если этот параметр не указан, то тогда используется <strong>querySelectorAll</strong>, который в свою очередь возвращает коллекцию элементов <strong>nodeList</strong>. Чтобы преобразовать полученный nodeList в массив, можно использовать функцию <strong>slice()</strong>:</p>
<pre class="prettyprint">
var nodes = [].slice.call($$('ul > li:not(".selected"):hover'), 0);
</pre>
<p>Последним из наиболее популярных браузеров, где пока не реализованы эти функции, это Opera, но и там не все так плохо, ибо работы над этим уже <a href="http://my.opera.com/core/blog/selectors-api">ведутся</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.jstoolbox.com/2008/08/01/vyborka-elementov-po-css-selektoru/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
	</channel>
</rss>
