<?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>Seleckis.lv :: журнал Никиты Селецкого &#187; Технологии</title>
	<atom:link href="http://seleckis.lv/category/journal/texnologii/feed" rel="self" type="application/rss+xml" />
	<link>http://seleckis.lv</link>
	<description></description>
	<lastBuildDate>Tue, 08 Feb 2011 13:52:50 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Закругленные углы без использования картинок</title>
		<link>http://seleckis.lv/journal/css/zakruglennyie-uglyi-bez-ispolzovaniya-kartinok</link>
		<comments>http://seleckis.lv/journal/css/zakruglennyie-uglyi-bez-ispolzovaniya-kartinok#comments</comments>
		<pubDate>Thu, 16 Oct 2008 10:44:53 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[Технологии]]></category>

		<guid isPermaLink="false">http://seleckis.lv/?p=1289</guid>
		<description><![CDATA[Не мне вам рассказывать какая это проблема для верстальщика. Начиная от соблюдения семантики в написании HTML кода, продолжая валидностью в CSS и заканчивая подгрузкой JavaScript, все спотыкается об него — об Тот, про который не хочется не просто говорить, но, самое главное, видеть и знать, что он существует. Но начнем с самого хорошего.
Картинки против CSS
Когда [...]]]></description>
			<content:encoded><![CDATA[<p>Не мне вам рассказывать какая это проблема для верстальщика. Начиная от соблюдения семантики в написании HTML кода, продолжая валидностью в CSS и заканчивая подгрузкой JavaScript, все спотыкается об него — об Тот, про который не хочется не просто говорить, но, самое главное, видеть и знать, что он существует. Но начнем с самого хорошего.</p>
<h3>Картинки против CSS</h3>
<p>Когда можно обойтись инструкцией CSS — это самый лучший вариант. Достаточно написать border-radius: 5px и получим закругленные уголки с радиусом 5 пикселей. Но эта инструкция доступна только в браузерах поддерживающих CSS3.</p>
<p>Еще раньше были созданны собственные свойства у браузеров Mozilla Firefox 2 (-moz-border-radius) и Safari 3 (-webkit-border-radius) с аналогичным действием. Еще были слухи о мистическом -khtml-border-radius для Konqueror, но говорят, что это не работает. Корректно поддерживал закругленные уголки только Safari, когда как в Мозиле эти уголки выглядят ужасно — пиксельные, без сглаживания, они могли быть использованы только если цвета не слишком контрастные.</p>
<p>В Firefox 3 была реализована более правильная поддержка таких уголков. Они стали красивые, сглаженные.</p>
<p>Опера и IE никогда и не пытались это реализовать. О них и о некрасивых уголках в FF2 и пойдет речь в этом посте.</p>
<h3>Opera и SVG</h3>
<p>Opera, первый и единственный браузер, в котором была реализована поддержка использования SVG в качестве фона блока. Делается это довольно просто.</p>
<p>В отдельный файл (например bg.svg) пишем SVG-код и сохраняем. Это обычный текстовой файл, только с раcширением svg. В CSS для нужного нам блока прописываем фон:</p>
<pre lang="css">.block {
   background: url(bg.svg);
}</pre>
<p>Чтобы это были именно закругленные уголки, нужно в SVG-файле написать что-то вроде такого:<br />
<code><br />
&lt;svg xmlns="http://www.w3.org/2000/svg"&gt;<br />
&lt;rect stroke="#000" fill="#DDD" stroke-width="4" width="100%" height="100%" rx="15" ry="15" /&gt;<br />
&lt;/svg&gt;<br />
</code><br />
Атрибуты тэга <strong>rect</strong> меняйте как вам нужно.</p>
<p>В принципе, код не обязательно писать вручную, можно воспользоваться любым векторным редактором, который поддерживает экспорт в SVG.</p>
<h3>Firefox 2</h3>
<p><em>Пиксели, пиксели, пиксели&#8230; Они повсюду, они атакуют&#8230; Они напоминают времена DOS-овских игр&#8230;</em></p>
<p>Исправить можно. Опять же через SVG. Но поскольку FF2 не поддерживает SVG в качестве фона, то придется хитрить и добавить пару лишних блоков, один из которых будет являться внедренным объектом, а в другой будет помещено нужное нам содержимое. Таким образом object будет играть роль подложки.</p>
<p>Добавим позиционирование.</p>
<pre lang="css">/* внешний блок */
.block {
position: relative;
}</pre>
<pre lang="css">/* объект */
.block > object {
position: absolute;
top: 0; left: 0;
width: 100%;
height: 100%;
}</pre>
<p>В результате .content будет наложен на object.</p>
<p>Осталось придумать как это показать только FF2 и скрыть от других браузеров. В вашем распоряжении наверное только хаки.</p>
<h3>IE</h3>
<p>Много пелось диферамбов языку VML. Сколько статей о том, на сколько он лучше SVG. А в нашем случае все в основном предлагают использовать код такого плана:</p>
<pre lang="html4strict"><!--[if vml]><v:roundrect class="block" strokecolor="#000" strokeweight="4px" arcsize="0.15"><![endif]-->
<!--[if !vml]>-->
<div class="block"><!--<![endif]-->
Content of the block
<!--[if !vml]>--></div>

<!--<![endif]-->
<!--[if vml]></v:roundrect><![endif]--></pre>
<p>Да, вариант не плох. Разве что писанины много. Но есть тут один очень неприятный подводный камень.</p>
<p>Как вы заметили радиус углов задается атрибутом arcsize, куда записывается или некое дробное число или число процентов. Как это понимать?</p>
<p>Оказывается неутомимые редмондовские индусы придумали динамичное решение описав его такой ремаркой:</p>
<blockquote><p>Defines the rounded corners of a rounded rectangle as a percentage of half the smaller dimension of the length and width of a rectangle. 0% would have square corners, and 100% would form circular corners. A square with an ArcSize value of 1.0 would be a circle. The default value is 0.2 (20%).</p></blockquote>
<p>Перевожу: Определяет закругленные углы у прямоугольника как проценты от половины меньшего размера длины или ширины прямоугольника. Т. е. берется ширина или высота (что из них меньше, то и берется), делится пополам и высчитываются проценты от этой величины.</p>
<p>А теперь внимание вопрос: с какого укура нужно было быть, чтобы такое придумать?</p>
<p>Если у вас блоки будут определенной высоты и ширины, то подобрать оптимальные проценты закругления можно. Но если блок динамический, то при его разных размерах будут вычисляться разные радиусы углов. Это совершенно неприемлимо.</p>
<h3>Решение</h3>
<p>Вставляем внутрь блока два VML-блока, выставляем высоту в два раза большую нужного нам радиуса, радиус прописывам 1, и размещаем с абсолютным позиционированием один прямоугольник наверх, другой — вниз.</p>
<p>Тупое, но все-таки решение.</p>
<h3>И на сладкое</h3>
<p>Все это замечательно, но в любом из решений, в моем или каком-нибудь другом будут проблемы с границами, сдвигами, интервалами и размерами.</p>
<p>Я попробовал все выровнять, но использовал очень много хакков, и проверял в браузерах FF2, FF3, Safari 3, IE 6, IE 7, Opera 9.5. Не знаю в каких условиях, но где-то обязательно даст сбой. Так что, мой материал несет учебно-ознакомительный характер, а не руководство к использованию.</p>
<p><a href="http://seleckis.lv/wp-content/uploads/2008/10/rounded.zip">Пример закругленных уголков без использования картинок</a></p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/css/zakruglennyie-uglyi-bez-ispolzovaniya-kartinok/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Silverlight и XML (XAML), как объектная модель приложения</title>
		<link>http://seleckis.lv/journal/cms/silverlight-i-xml-xaml-kak-ob-ektnaya-model-prilozheniya</link>
		<comments>http://seleckis.lv/journal/cms/silverlight-i-xml-xaml-kak-ob-ektnaya-model-prilozheniya#comments</comments>
		<pubDate>Sun, 06 Jan 2008 10:52:01 +0000</pubDate>
		<dc:creator>Никита</dc:creator>
				<category><![CDATA[CMS]]></category>
		<category><![CDATA[xhtml/xml]]></category>
		<category><![CDATA[Технологии]]></category>

		<guid isPermaLink="false">http://www.seleckis.lv/journal/texnologii/silverlight-i-xml-xaml-kak-ob-ektnaya-model-prilozheniya</guid>
		<description><![CDATA[В прошлом году был на презентационной лекции Microsoft. Тема презентации была связана с новыми продуктами и технологиями этой компании, а точнее с Software + Service и Silverlight. На первое я опоздал, поэтому ничего сказать не могу. А второе было весьма интересно.
Зацепило
О Silverlight 1.0 говорить нечего. Тот же Flash, только элементы в приложении описаны с помощью [...]]]></description>
			<content:encoded><![CDATA[<p>В прошлом году был на презентационной лекции Microsoft. Тема презентации была связана с новыми продуктами и технологиями этой компании, а точнее с Software + Service и Silverlight. На первое я опоздал, поэтому ничего сказать не могу. А второе было весьма интересно.</p>
<h3>Зацепило</h3>
<p>О Silverlight 1.0 говорить нечего. Тот же Flash, только элементы в приложении описаны с помощью XAML, что позволяет индексировать содержимое, и не имеет своего скрипта, а использует JavaScript. Зная, как IE обрабатывает JS можем предположить, на сколько может быть популярной эта версия.</p>
<p>Логично, что MS не стали оптимизировать обработку JS в своём браузере, а пошли другим путём. А точнее&#8230;</p>
<h3>Silverlight 1.1</h3>
<p>Эта версия может иметь программную составляющую написанную на любом .NET или web-языке (С#, Visual Basic, PHP, Ruby и др.). Т.е. получив доступ к элементам в приложении через описание XAML, можно забыть про JavaScript и писать на своём любимом языке. Потом это каким-то образом экспортируется в свой формат исполняемый маленьким фреймворком установленным на компьютере пользователя вместе с Silverlight-плагином для браузера. Я не буду вдаваться в подробности, о том как это всё работает, меня это не интересует.</p>
<p>Лектор озвучил плюсы:</p>
<ul>
<li>Очень маленький размер файла плагина</li>
<li>Быстрая обработка видео</li>
<li>Быстрая обработка скрипта</li>
</ul>
<p>Я не буду искать опровержений или подтверждений данным высказываниям. Скажу лишь, что для создания аналоговых часов, лектор скопировал около 200 строчек C# кода, и ещё около 100 XAML кода. Многовато что-то&#8230;</p>
<h3>XML based structure</h3>
<p>Так, всё-таки что же меня зацепило? А сам принцип. С принципом описания структуры элементов в XML языке и управления им через скрипт я столкнулся в TYPO3 в плагине TemplaVoila!. Плагин позволяет взять HTML шаблон, отметить на нём «горячие» тэги, дать им соответствующие уникальные имена для того, чтобы можно было ими управлять (помещать контент, настраивать внешний вид) в TypoScript.</p>
<p>К примеру:</p>
<ul>
<li>Отметим на сайте какой-то тэг, например &lt;div id=&#8221;sidebar&#8221;&gt;&#8230;&lt;/div&gt;.</li>
<li>Дадим ему уникальное имя: lib.sidebar (lib —глобальный  объект содержащий внутренние объекты на странице). </li>
<li>В XML структуре запишется (причём самому ничего не надо писать):
<pre lang="xml">
<field_sidebar type="array">
	<tx_templavoila type="array">

		<description>Just place some content in sidebar</description>
		<sample_data type="array">
			<numIndex index="0">[ ### Sidebar goes here ### ]</numIndex>
		</sample_data>
		<eType>TypoScriptObject</eType>
		<tags>div:inner</tags>
		<TypoScriptObjPath>lib.sidebar</TypoScriptObjPath>
	</tx_templavoila>
</field_sidebar></pre>
</li>
<li>А в TypoScript можем описать, какого типа это будет объект и что же он должен содержать:<br />
<code>lib.sidebar = TEXT<br />
lib.sidebar .value = Hello, world!</code>
</li>
</ul>
<p>Наверное, я мало изучал различные технологии, и не знаю, что такой способ описания объектной модели приложения используется давно, но ведь как, чёрт возьми, правильно.</p>
]]></content:encoded>
			<wfw:commentRss>http://seleckis.lv/journal/cms/silverlight-i-xml-xaml-kak-ob-ektnaya-model-prilozheniya/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
	</channel>
</rss>

