<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
        <channel>
        <title>Русский клуб Joomla/Верстка</title>
        <link>http://joomclub.net/en/blog/verstka/</link>
        <description><![CDATA[Блог о верстке шаблонов Joomla, компонентов и других расширениях.]]></description>
        <language>ru</language>
        <managingEditor>vadim@joomline.ru</managingEditor>
        <webMaster>tena2000@mail.ru</webMaster>
        <generator>Alto CMS v.1.1.13</generator>
                    <item>
                <title>SLogin - всплывающая форма авторизации.</title>
                <guid isPermaLink="true">http://joomclub.net/en/t/99/</guid>
                <link>http://joomclub.net/en/blog/verstka/99.html</link>
                <author>tena2000@mail.ru</author>
                <description><![CDATA[<p>Часто спрашивают можно ли стандартные поля формы входа Joomla вывести во всплывающем окне, ответ — да, можно, но для этого потребуется сделать ряд доработок. Для модификации используем шаблон вывода — compact.php</p><p>Для вывода формы авторизации в lightbox применяем тот же принцип, что и в статье — <a href="http://joomclub.net/blog/verstka/7.html" target="_blank" rel="nofollow">Вывод модуля «Login» во всплывающем окне</a>, т.е. для вывода используем mootools. <a name="cut" rel="nofollow"></a> </p><p>Начнем с того, что добавим ссылку, активирующую вызов lightbox:</p><p><pre class="prettyprint"><code>&lt;a class=&quot;modal&quot; href=&quot;#joomla-login-form&quot; rel=&quot;{size:{x:300,y:250}}&quot;&gt;&lt;span class=&quot;joomlaslogin&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/a&gt;</code></pre></p><p><pre class="prettyprint"><code>&lt;div id=&quot;slogin-buttons&quot; class=&quot;slogin-buttons &lt;?php echo $moduleclass_sfx?&gt;&quot;&gt;<br />&nbsp; &lt;?php if (count($plugins)): ?&gt;<br />&nbsp;&nbsp;&nbsp; &lt;?php foreach($plugins as $link): ?&gt;<br />&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &lt;a href=&quot;&lt;?php echo JRoute::_($link['link']);?&gt;&quot; class=&quot;sl_boxed&quot;&gt;&lt;span class=&quot;&lt;?php echo $link['class'];?&gt;&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/a&gt;<br />&nbsp;&nbsp;&nbsp; &lt;?php endforeach; ?&gt;<br />&nbsp; &lt;?php endif; ?&gt;<br />&nbsp; &lt;a class=&quot;modal&quot; href=&quot;#joomla-login-form&quot; rel=&quot;{size:{x:300,y:250}}&quot;&gt;&lt;span class=&quot;joomlaslogin&quot;&gt;&amp;nbsp;&lt;/span&gt;&lt;/a&gt;<br />&lt;/div&gt;</code></pre></p><p>Т.к. скрипт открытия окон авторизации привязан к тегу <i>&lt;a&gt;</i>, то при клике на кнопку вызова бокса будет открываться и сайт, чтобы этого не происходило добавляем к тегу вызова окон авторизации класс <i>sl_boxed</i>, к которому и будет обращаться скрипт.</p><p>Теперь нам требуется доработать скрипт открытия окон авторизации — <i>mod_slogin/media/slogin.js </i>, заменив обращение по имени тега, на обращение по классу (строка 6):</p><p><pre class="prettyprint"><code>var elements = block.getElementsByClassName('sl_boxed');</code></pre></p><p>Далее оборачиваем форуму авторизации в блок вывода lightbox и добавляем вызов плагина:<br>
</p><p><pre class="prettyprint"><code>&lt;?php if ($params-&gt;get('show_login_form')): ?&gt;<br />&lt;?php JHTML::_('behavior.modal'); ?&gt;<br />&lt;div id=&quot;joomla-login-form&quot;&gt;<br />&nbsp; &lt;form action=&quot;&lt;?php echo JRoute::_('index.php', true, $params-&gt;get('usesecure')); ?&gt;&quot; method=&quot;post&quot; id=&quot;login-form&quot; &gt;<br />&nbsp;&nbsp;&nbsp; ...<br />&nbsp; &lt;/form&gt;<br />&lt;/div&gt;<br />&lt;?php endif; ?&gt;</code></pre></p><p>Дорабатываем css (<i>mod_slogin/tmpl/compact/slogin.css</i>):</p><p><pre class="prettyprint"><code>#joomla-login-form { display: none } /* скрываем блок с формой входа */<br />.slogin-buttons .joomlaslogin { background-position: -203px 0; }&nbsp; /* указываем смещение для фона с пиктограммами *</code></pre></p><p>Остается доработать внешний вид формы и нарисовать иконку.</p><p>В качестве образца прикрепляю архив с работающим модулем.</p><p><a href="http://joomclub.net/uploads/files/nightguard//mod_slogin.zip" rel="nofollow">mod_slogin</a></p><br>
]]></description>
                <pubDate>Sun, 24 Feb 2013 03:17:35 +0400</pubDate>
                            </item>
                    <item>
                <title>Что делать если Bootstrap и jQuery не нужен в Joomla 3?</title>
                <guid isPermaLink="true">http://joomclub.net/en/t/97/</guid>
                <link>http://joomclub.net/en/blog/verstka/97.html</link>
                <author>idm.box@gmail.com</author>
                <description><![CDATA[<p>На днях столкнулся с проблемой, при верстке шаблона для Joomla 3. Я не использовал Bootstrap, а jQuery хотел подгружать с CDN Яндекса. При начальной верстке все шло гладко, но потом стал замечать, что в секцию &#60;head  начали залезать джумловские jQuery и Bootstrap. По <a href="http://joomlaforum.ru/index.php/topic,253684.0.html" target="_blank" rel="nofollow">подсказке</a> коллег с JF я начал копать в сторону модулей и выявил этих лазутчиков. Они находятся в модулях и компонентов и прячутся за коротенькой строчкой:</p>
<br>
<pre class="prettyprint"><code>JHtml::_(&#39;bootstrap.tooltip&#39;);</code></pre><br>
<br>
<p>Я нашел эту строчку в модуле mod_breadcrumbs.</p>
<br>
<p>Сделал свой шаблон модуля, закомментировав эту строку. И вроде все хорошо, но после установки JoomShopping-а, меня опять встречали эти «незванные гости». Полазив по файлам нашел подобную строчку в файле components/com_jshopping/lib/factory.php на 167 строке и опять закомментировал.</p>
<br>
<pre class="prettyprint"><code>JHtml::_(&#39;bootstrap.framework&#39;);</code></pre><br>
<br>
<p>Правда в ситуации с модулем я переопределил шаблон, но как быть с JS пока не знаю. Возможно при обновлении (а у меня версия 4.1.0) файл перепишется. Так что если к вам лезут гости — ищем в модулях, компонентах строку: JHtml::_(&#39;bootstrap.</p>]]></description>
                <pubDate>Thu, 14 Feb 2013 12:19:24 +0400</pubDate>
                            </item>
                    <item>
                <title>Bootstrap c CDN Yandex</title>
                <guid isPermaLink="true">http://joomclub.net/en/t/96/</guid>
                <link>http://joomclub.net/en/blog/verstka/96.html</link>
                <author>idm.box@gmail.com</author>
                <description><![CDATA[<p>Недавно зашел на JS хостинг Яндекса (CDN) и увидел там Bootstrap.</p><p>Естественно, т.к. мы делаем в основном сайты для русскоязычного населения, то есть в России, то нам удобно использовать эту CDN для наших проектов. Ведь скорость работы серверов яндекса в большинстве случаев быстрее, чем скорость работы, наших с вами хостингов. Я думаю вы все сами знаете про это, и про кэширование, поэтому пропущу этот шаг.</p><p>Итак, заходим на CDN Яндекса и видим там… только JS бутстрапа (на момент написания статьи они уже добавили CSS). Но я ж дотошный — и начал вручную в адресную строку вбивать остальные составляющие бутстрапа, в итоге там присутствуют все составляющие, кроме LESS. Тоесть там есть и 2 файла CSS и 2 файла PNG с белыми и черными иконками.</p><p>Кстати, на момент написания поста я вставил код бутстрапа 2.2.2… но зайдя на бутстрап, увидел, что там уже 2.3.0 — исправил в коде — все работает.</p> <a name="cut" rel="nofollow"></a> <pre class="prettyprint"><code>&lt;script src=&quot;http://yandex.st/jquery/1.8.3/jquery.min.js&quot;&gt;&lt;/script&gt;<br /> &lt;script src=&quot;http://yandex.st/bootstrap/2.3.0/js/bootstrap.min.js&quot;&gt;&lt;/script&gt;<br /> &lt;link rel=&quot;stylesheet&quot; href=&quot;http://yandex.st/bootstrap/2.3.0/css/bootstrap.min.css&quot;&gt;<br /> &lt;link rel=&quot;stylesheet&quot; href=&quot;http://yandex.st/bootstrap/2.3.0/css/bootstrap-responsive.min.css&quot;&gt;</code></pre><p>Да… еще забыл упомянуть про иконки — они полноценно работают.</p><p>Основные плюсы: при обновлении бутстрапа — просто меняем циферки, например сейчас обновил 2.2.2 на 2.3.0 и не надо качать новый бутстрап и перезаливать файлы. Если пользователь до вас уже был на подобном сайте с бутстрапом от яндекса — то он вообще ничего качать не будет — все в кэше.</p>]]></description>
                <pubDate>Mon, 11 Feb 2013 12:25:34 +0400</pubDate>
                            </item>
                    <item>
                <title>Косячим: Главная страница</title>
                <guid isPermaLink="true">http://joomclub.net/en/t/80/</guid>
                <link>http://joomclub.net/en/blog/verstka/80.html</link>
                <author>idm.box@gmail.com</author>
                <description><![CDATA[<p>Добрый день. В данном топике я хочу рассказать вам об основных «косяках» при создании главной страницы вашего сайта. А именно, хочу предостеречь вас от создания очередного унылого сайта, которых с каждым днем становится все больше и больше.</p><p>Почему именно главная страница — да потому, что это главная страница, стартовая, начальная. Вообщем откуда посетитель входит на ваш сайт. Есть исключения, когда посетитель пришел по ссылке с сайта или поисковой системы на конкретную страницу, но все-равно в большинстве случаев он перейдет на главную.</p><p>Шапка сайта</p><p>В шапке сайта укажите название вашего ресурса. Если название абстрактное, например<br>
«Стуслов и сотоварищи», то постарайтесь написать небольшую аннотацию к названию вашего ресурса, например:</p> <pre class="prettyprint"><code>«Стуслов и&nbsp;сотоварищи»<br />
Меховое ателье</code></pre> <p>Это сразу даст вашему посетителю понятие о том, чем занимается г-н Стуслов <a name="cut" rel="nofollow"></a> и его друзья. Но этого недостаточно. Если данный коллектив работает в г.Пенза, а посетитель сайта живет в г. Сыктывкар, то не надо заставлять его просмотреть пару страниц (или более) сайта… и затем открыв страничку «контакты» — плюнуть и грязно выругаться на то, что оказывается, все что надо, но, блин, в другом городе. Не поедет же он за шапкой за тыщу триста километров.</p><p>Напишите в шапке город, к которому «привязан» сайт. Если род деятельности компании позволяет работать с клиентами из разных городов, например посылки почтой, доставка и т.д., то в этом случае можно и не говорить сразу, что шапки-то делаются в Пензе. В этом случае необходимо сделать акцент на доставку.</p><p>Телефон в шапке — он нужен. Как удобно, когда я открыл страничку каталога с фетровой шляпой в синюю клеточку — посмотрел наверх, набрал телефонный номер и говорю «Алло… это Стуслов и сотоварищи?… да… да… я бы хотел у вас заказать фетровую шляпу… что?… а… артикул ФШ-033… дада ...». Если телефон указывать только в разделе «контакты», то прийдется сначала открывать эту страничку, потом возвращатся на предыдущую. А пользователь компьютера, который не разбирается в «этих ваших интернетах» не умеет смотреть «назад» и ему это обернется такой морокой, что возможно он превратится из потенциального покупателя в недовольного посетителя.</p><p>Поэтому телефон должен быть на главной и остальных страницах. Всегда на виду.</p><p>Поле поиска по сайту — желательно на главной в шапке справа, т.к. это привычно. Если сайт небольшой, то поиск не нужен.</p><p>Что еще нужно в шапке? — ничего! Тут я хочу акцентировать ваше внимание… ничего больше не надо, не стоит болеть этой толи «жадностью», толи «булемией». Если у вас стоит вопрос: «что еще впихнуть?» — то я на него уже ответил. У меня, при создании сайтов всегда стоит вопрос — «что еще выкинуть из шапки, что неважно?» А большинство клиентов хотят туда запихать слайдер, карту, скидки и акции, все контакты (2 стационарных телефона, 3 мобильных, скайп, аська, группа в вконтакте и твитерр с 5 последними твитами), 18 пунктов меню и герб с флагом нашей страны.</p><p>Так все-таки, что оставить из всего того, что я перечислил? У нас есть название фирмы (или логотип), описание рода деятельности. 1 телефоный номер. Город.… ну… правильно «Скидки и акции» можно оставить — остальное ни в коем случае не пихать туда. Клиент всегда неправ, а если прав, то вы скоро проснетесь и все станет на свои места.</p><p>Итог:</p> <pre class="prettyprint"><code>«Стуслов и&nbsp;сотоварищи» &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;(48431)3-28-99 г.Пенза<br />
Меховое ателье &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;Доставка во&nbsp;все регионы России
</code></pre> <p>Далее у нас, под шапкой, будет горизонтальное меню или контент. В данном примере у меня будет горизонтальное меню, а уже после него контент. В горизонтальном меню у меня будет всего <nobr>3-5</nobr> пунктов меню, это:</p>   <pre class="prettyprint"><code>«Главная», «Каталог продукции», «Доставка и&nbsp;оплата», «Контактная информация»</code></pre> <p>Хватит. Зачастую в меню пихают столько пунктов, что посетитель не дошел глазами до контента, а уже прочитал 1000 символов. Больше он читать не будет, поверьте мне на слово. Будьте лаконичны. Дав выбор из данных мною 4 пунктов (а на самом деле <nobr>3-х,</nobr> т.к. главная уже открыта) посетитель без сомнения выберет только тот раздел, который ему нужен.</p><p>Область контента.</p><p>Тут обычно все еще хуже, чем в захламленной шапке и <nobr>12-ти</nobr> пунктовом меню. Что там мы видим, это абсолютно бесполезные вещи:</p><ul><li>Погоду</li> <li>Мировое время</li> <li>Курсы валют</li> <li>Калькулятор</li> <li>Облако тегов</li> <li>Случайное фото</li> <li>Анекдоты</li> <li>ТОП 10 товаров &gt;&gt; Самое покупаемое &gt;&gt; Выбор покупателей &gt;&gt; Новинки</li> <li>Форма авторизации</li> <li>Наши плюсы (ну не менее 10 обычно)</li></ul><p>Это не нужно. На главной странице надо сразу «зацепить» человека, а не давать ему думать и выбирать. Как зацепить? Это зависит от рода деятельности. В нашем примере есть несколько вариантов, например:</p> <pre class="prettyprint"><code>3&nbsp;шляпа в&nbsp;подарок (акция длится еще месяц)<br />
Почему Д.Билан покупает шляпы только у&nbsp;нас? 3&nbsp;причины.<br />
Эти дамские шляпки продаются в&nbsp;единственном экзэмпляре ...<br />
Новая коллекция шляп. Тренд сезона. (старая коллекция со&nbsp;скидкой 25%)
</code></pre> <p>Вообщем все зависит от фантазии, но главное «зацепить». Почему я пишу про три шляпы, три причины — да потому что больше не надо. Это болезнь. Если вы хотите на главной расписать плюсы вашей компании, то напишите 3 плюса. Настоящих, что действительно является плюсами, относительно конкурентов. Я часто, общаясь с заказчиками (перед встречей всегда смотрел на их конкурентов) спрашивал о их плюсах — так вот вам секрет — ни у кого настоящих плюсов нет. Все продают одинаковые товары по одинаковым ценам, одинаково просирают сроки выполнения работ, одинаково косячат и так до бесконечности. Поэтому найдите только 3 настоящих плюса. Я всегда находил. Например, недавно у одной компании выяснил один плюс и сделал из него три. Плюс был в том, что экспортная продукция всегда есть на складе, и поэтому доставка делается в день заказа. Поэтому отсюда я выделил: У нас самая быстрая доставка. У нас самый быстрый возврат по гарантии, вам не прийдется ждать. У нас дешевле, т.к. транспортные расходы минимальны. Читал сайт конкурентов — стотыщмильон плюсов 1. Мы внимательны 2. Спросите — ответим 3. Качество 4. Гарантия 5. Цены 6. ну и тд. Когда узнал у своего клиента, про основной критерий при выборе фирмы-поставщика продукции, то оказалось, что 80% его клиентов больше всего интересует сроки поставки (средние сроки месяц, у него неделя). Цены — вторичный вопрос, т.к. разница небольшая, а ждать долго. Да вы наверно сами знаете, что обычно на вопрос «К какому сроку вы хотите, чтобы мы сделали работу» всегда один ответ «Вчера».</p><p>От я заболтался. Что далее. Позле «зацепки» по идее посетитель уже перейдет на целевую страницу, а уж там вы его как хотите привлекайте. </p><p>Ниже этих цеплялок я советую дать информацию о вашей фирме, роде ее деятельности. Как никак — но продвигать главную страницу сайта в ПС надо и поэтому в тот текст можете хоть бред напичканный ключевыми словами написать (только первый абзац напишите нормальным, скучным текстом аля «наша компания была образована ...»)… вообщем как из анекдота про сеошников «Зашли 2 сеошника в бар выпить после работы, алкоголь, развлечения, спиртные напитки, круглосуточно, рядом с метро». Почему так? Да потому что этот текст никто читать не будет. Вся эта ваша писанина для поисковиков, а люди питаются картинками и малюсенькими заголовками и коротенькими абзацами.</p><p>Вот собственно и все. Хотите еще? — Это болезнь. Вы всегда хотите больше, чем нужно.</p><p>P.S. Данная статья носит рекомендательный характер для сайтов-каталогов фирм, деятельность которых заключается в предоставлении услуг или продаже товаров населению. Рекомендации для сайтов-портфолио, знакомств, социального характера и т.д. отличаются от вышеупомянутых.</p>]]></description>
                <pubDate>Thu, 25 Oct 2012 13:12:22 +0400</pubDate>
                            </item>
                    <item>
                <title>Косячим: Изображения</title>
                <guid isPermaLink="true">http://joomclub.net/en/t/78/</guid>
                <link>http://joomclub.net/en/blog/verstka/78.html</link>
                <author>idm.box@gmail.com</author>
                <description><![CDATA[<p>Я обращаю внимание, что зачастую вебмастера и контент-менеджеры очень наплевательски относятся к изображениям на сайте. Это заключается в том, что они берут фотографию и вставляют ее на сайт в исходном варианте. Потом ставят ширину (или высоту или и то и другое) и всё. Фотография на сайте вроде небольшая по размеру, но «вес» значителен, что неблагоприятно сказывается на скорости загрузки страницы.</p><p>Попытаюсь поставить таких людей на путь истинный.</p><p>Для примера я взял одну из своих фотографий. Оригинальный размер: 2816 × 2112, размер файла 2.6 MB. Много, не правла-ли? Попробуем вставить ее на сайт вышеупомянутым «рукотазым» методом.</p><pre class="prettyprint"><code>&lt;img src=&quot;original_photo.jpg&quot; width=&quot;640&quot; height=&quot;480&quot;&gt;</code></pre><p>Все нормально, фото небольшое, но весит так-же как и раньше — 2.6 MB. Этого доспускать нельзя. Открываем графический редактор и меняем размер фото, потом сохраняем как JPG.</p><p><img src="https://dl.dropbox.com/u/35693018/img_optimization/color_640x480_nocompressJPG.jpg"></p><p><i>Размер изображения 640x480, размер файла 603 kb.</i></p><p>Возможно вы обратили внимание, что эта картинка открылась не сразу. Это потому, что размер файла все-равно велик. Уменьшаем дальше <a name="cut" rel="nofollow"></a> с потерей качества:</p><p><img src="https://dl.dropbox.com/u/35693018/img_optimization/color_640x480_compressJPG_40.jpg"></p><p><i>Размер изображения 640x480, размер файла 79 kb (качество JPG: 40).</i></p><p>Многие скажут, что это таже-самая фотография, но размер файла тут гораздо меньше, но я попробую еще уменьшить:</p><p><img src="https://dl.dropbox.com/u/35693018/img_optimization/color_640x480_compressJPG_10.jpg"></p><p><i>Размер изображения 640x480, размер файла 49 kb (качество JPG: 10).</i></p><p>Неважный результат, много артефактов, размер файла небольшой, а может попробовать формат GIF а не JPG:</p><p><img src="https://dl.dropbox.com/u/35693018/img_optimization/color_640x480_compressGIF_256.gif"></p><p><i>Размер изображения 640x480, размер файла 288 kb (256 цветов).</i></p><p>Хороший результат, качество нормальное, но размер файла бОльший, нежели мы делали JPG с таким-же качеством изображения, попробую… нет, пробовать не буду, а просто вам покажу пример в GIF, чтобы размер файла был не выше 100 kB:</p><p><img src="https://dl.dropbox.com/u/35693018/img_optimization/color_640x480_compressGIF_16.gif"></p><p><i>Размер изображения 640x480, размер файла 105 kb (16 цветов).</i></p><p>Плохо. Качество никудышное, и размер файла все-равно больше 100 kB, но хуже уже только нецветное фото.</p><p><strong>Вывод: уменьшаем размер фоток, далее экспортируем их в формат JPG и выбираем удовлетворительное качестро при минимальном размере.</strong></p><p>Вроде пора и закончить, но возьмем не фотографию, а табличку, схему и т.д.</p><p><img src="https://dl.dropbox.com/u/35693018/img_optimization/graph_480x640_nocompressJPG.jpg"></p><p><i>Размер изображения 480x640, размер файла 126 kb.</i></p><p>Уменьшаем с потерей качества:</p><p><img src="https://dl.dropbox.com/u/35693018/img_optimization/graph_480x640_compressJPG_50.jpg"></p><p><i>Размер изображения 480x640, размер файла 52 kb (качество JPG: 50).</i></p><p>Отлично. А можно еще меньше?</p><p><img src="https://dl.dropbox.com/u/35693018/img_optimization/graph_480x640_compressJPG_10.jpg"></p><p><i>Размер изображения 480x640, размер файла 39 kb (качество JPG: 10).</i></p><p>Плохо, много артефактов, буквы размытые. Исходя из примера с цветным фото, GIF уже не стоит пробовать, но не в данном случае:</p><p><img src="https://dl.dropbox.com/u/35693018/img_optimization/graph_480x640_compressGIF_256.gif"></p><p><i>Размер изображения 480x640, размер файла 32 kb (256 цветов).</i></p><p>Отлично, это лучшее качество GIF 256 цветов, и при этом размер файла меньше чем самый плохой JPG. Пробуем уменьшить кол-во цветов:</p><p><img src="https://dl.dropbox.com/u/35693018/img_optimization/graph_480x640_compressGIF_64.gif"></p><p><i>Размер изображения 480x640, размер файла 25 kb (64 цвета).</i></p><p>Отлично. Пробуем еще уменьшить:</p><p><img src="https://dl.dropbox.com/u/35693018/img_optimization/graph_480x640_compressGIF_2.gif"></p><p><i>Размер изображения 480x640, размер файла 11 kb (2 цвета).</i></p><p>Ерунда. Предыдущий вариант идеален.</p><p><strong>Вывод: уменьшаем размер схем, таблиц, графиков, далее экспортируем их в формат GIF и выбираем удовлетворительное качестро при минимальном размере.</strong></p><p>Ниже таблица промежуточных данных оптимизации фотографий. Жирным я выделил оптимальные настройки для данных изображений.</p><strong>Цветная картинка</strong><table class="table table-bordered table-condensed"><thead><tr><th>Качество</th><th>Размер файла</th><th>Оптимизация</th> </tr> </thead> <tbody><tr><td colspan="3"><strong>JPG (Качественный показатель — коэффициент сжатия)</strong></td></tr> <tr><td>90</td><td>189 kB</td><td>-60%</td></tr>  <tr><td>80</td><td>132 kB</td><td>-72%</td></tr>  <tr><td>70</td><td>108 kB</td><td>-77%</td></tr>  <tr><td>60</td><td>94.6 kB</td><td>-80%</td></tr>  <tr><td>50</td><td>85.7 kB</td><td>-82%</td></tr>  <tr><td><strong>40</strong> Лучший результат </td><td><strong>77.3 kB</strong></td><td><strong>-83%</strong></td></tr>  <tr><td>30</td><td>68.7 kB</td><td>-85%</td></tr>  <tr><td>20</td><td>58.9 kB</td><td>-87%</td></tr>  <tr><td>10</td><td>47.5 kB</td><td>-90%</td></tr> <tr><td colspan="3"><strong>GIF (Качественный показатель — кол-во цветов)</strong></td></tr> <tr><td>256</td><td>281 kB</td><td>-41%</td></tr>  <tr><td>192</td><td>257 kB</td><td>-46%</td></tr>  <tr><td>160</td><td>245 kB</td><td>-48%</td></tr>  <tr><td>128</td><td>227 kB</td><td>-52%</td></tr>  <tr><td>96</td><td>206 kB</td><td>-56%</td></tr>  <tr><td>64</td><td>172 kB</td><td>-64%</td></tr>  <tr><td>32</td><td>138 kB</td><td>-71%</td></tr>  <tr><td>16</td><td>102 kB</td><td>-78%</td></tr>  <tr><td>8</td><td>69.1 kB</td><td>-85%</td></tr>  <tr><td>4</td><td>43.8 kB</td><td>-90%</td></tr>  <tr><td>2</td><td>24.2 kB</td><td>-94%</td></tr> </tbody></table><strong>Схема</strong><table class="table table-bordered table-condensed"><thead><tr><th>Качество</th><th>Размер файла</th><th>Оптимизация</th> </tr> </thead> <tbody><tr><td colspan="3"><strong>JPG (Качественный показатель — коэффициент сжатия)</strong></td></tr> <tr><td>90</td><td>71.5 kB</td><td>-29%</td></tr> <tr><td>80</td><td>61.7 kB</td><td>-38%</td></tr> <tr><td>70</td><td>56.8 kB</td><td>-43%</td></tr> <tr><td>60</td><td>53.4 kB</td><td>-47%</td></tr> <tr><td>50</td><td>51.2 kB</td><td>-49%</td></tr> <tr><td>40</td><td>48.7 kB</td><td>-51%</td></tr> <tr><td>30</td><td>46.0 kB</td><td>-54%</td></tr> <tr><td>20</td><td>42.6 kB</td><td>-57%</td></tr> <tr><td>10</td><td>37.6 kB</td><td>-62%</td></tr> <tr><td colspan="3"><strong>GIF (Качественный показатель — кол-во цветов)</strong></td></tr> <tr><td>256</td><td>31.1 kB</td><td>-69%</td></tr> <tr><td>192</td><td>24.8 kB</td><td>-75%</td></tr> <tr><td>160</td><td>24.8 kB</td><td>-75%</td></tr> <tr><td>128</td><td>24.8 kB</td><td>-75%</td></tr> <tr><td>96</td><td>24.8 kB</td><td>-75%</td></tr> <tr><td><strong>64</strong> Лучший результат</td><td><strong>24.8 kB</strong></td><td><strong>-75%</strong></td></tr> <tr><td>32</td><td>20.1 kB</td><td>-80%</td></tr> <tr><td>16</td><td>20.1 kB</td><td>-80%</td></tr> <tr><td>8</td><td>15.4 kB</td><td>-84%</td></tr> <tr><td>4</td><td>15.4 kB</td><td>-84%</td></tr> <tr><td>2</td><td>10.2 kB</td><td>-89%</td></tr> </tbody></table><p>Общий вывод:</p><ul><li>Фотографии надо уменьшать в размерах (пиксели). Руками в фотошопе или автоматически в специальной утилите.</li> <li>Фотографии надо сжимать. Сжимать до такой степени, чтобы они выглядели еще хорошо, но размер был меньше. По опыту скажу, автоматические утилиты — дрянь, т.к. на одном фото сжатие наполовину дает отличный результат, а на другой — плохой. Поэтому если вам важно — то работайте индивидуально с каждой фотографией.</li> <li>Используем разные форматы GIF для таблиц, схем и т.д., JPG — для фотографий. (про PNG тут не говорил, но их используют если нужна прозрачность)</li> <li>Где можно обойтись без картинки (видел я сканы прайс-листов) — обходимся без картинки</li> <li>Если картинка изначально хреновая — то выкидываем ее. Всякие «улучшатели» — не более чем развод.</li> <li>Ну и читать всякие умные статьи дядек и тетек про подобное.</li></ul><p>В данном топике я рассказал вам об общих случаях. Бывают частные случаи, когда фотографии лучше сжать в GIF чем в JPG и наоборот со схемами, но это всего-лишь частные случаи.</p>]]></description>
                <pubDate>Mon, 22 Oct 2012 18:36:25 +0400</pubDate>
                            </item>
                    <item>
                <title>Косячим: Верстка текста.</title>
                <guid isPermaLink="true">http://joomclub.net/en/t/77/</guid>
                <link>http://joomclub.net/en/blog/verstka/77.html</link>
                <author>idm.box@gmail.com</author>
                <description><![CDATA[<p>Основные ошибки при верстке текста (контента) на сайте.</p>
<p><strong>Несемантическая верстка</strong></p>
<ul><li>Списки<br>
<p>Неверно:</p>
<pre class="prettyprint"><code> - Пункт один;&#38;lt;br&#38;gt;&#60;br /&#62; - Пункт два;&#38;lt;br&#38;gt;&#60;br /&#62; - Пункт три.&#38;lt;br&#38;gt;&#60;br /&#62; &#38;lt;br&#38;gt;&#60;br /&#62; 1. Пункт один;&#38;lt;br&#38;gt;&#60;br /&#62; 2. Пункт два;&#38;lt;br&#38;gt;&#60;br /&#62; 3. Пункт три. </code></pre><br>
<p>Верно:</p>
<ul> <li>Пункт один;</li> <li>Пункт два;</li> <li>Пункт три.</li></ul>
<ol><li>Пункт один;</li> <li>Пункт два;</li> <li>Пункт три.</li></ol>
</li><li>Параграфы<br>
<p>Неверно:</p>
<div>Параграф один. &#60;br&#62;&#60;br&#62;<br>
<br>
 Параграф два.</div><br>
<p>Верно:</p>
<p>Параграф один.</p>
<pre class="prettyprint"><code>&#60;code&#62;&#60;br /&#62;</code></pre></li><p>Параграф два.</p>
</ul>
Заголовки<br>
<p>Неверно:</p>
<pre class="prettyprint"><code>&#60;code&#62;&#60;span style=&#34;text-size: 24px;&#34;&#62;Заголовок&#60;/span&#62;&#60;br /&#62;</code></pre><br>
<p>Подзаголовок</p>
<pre class="prettyprint"><code>&#60;code&#62;&#60;br /&#62;</code></pre><br>
<h6>Подзаголовок</h6>
<p>Верно:</p>
Заголовок<br>
<pre class="prettyprint"><code>&#60;code&#62;&#60;br /&#62;</code></pre><br>
Подзаголовок<br>
<pre class="prettyprint"><code>&#60;code&#62;&#60;br /&#62;</code></pre><br>
Подзаголовок<br>
<br>
<br>
<p>Встречаются и другие ошибки, но эти зачастили. Советую загуглить запрос «семантическая верстка». Там конечно рассказано про CSS, но все те правила нужно использовать и при верстке текстов. Основной смысл такой — если делаем спискок, то делает его тегом списка, если делаем заголовок, то тегом заголовка и т.д.</p>
<hr><br>
<p><strong>Перенос предлогов<br>
на новую строчку</strong></p>
<ul><li>Используем непереносимый пробел<br>
<p>Ошибочно:</p>
<p>В чащах юга жил бы цитрус? да, но фальшивый экземпляр!</p>
<p>Грамотно:</p>
<p>В&#38;nbsр;чащах юга жил&#38;nbsр;бы цитрус? да, но&#38;nbsр;фальшивый экземпляр!</p>
</li></ul>
<p>Для этого есть специальные утилиты, например <a href="http://www.artlebedev.ru/tools/reformator/" rel="nofollow">«Реформатор»</a></p>
<hr><br>
<p><strong>Картинки без отступов</strong></p>
<p>У любой картинки в тексте должен быть отступ, поэтому нам необходимо создать всего-лишь одно правило на CSS. Если блок с вашим контентом имеет id=&#34;content&#34;, то правило будет выглядеть так:</p>
<ul><li>Отступы у картинки <pre class="prettyprint"><code> #content img {margin: 20px;} </code></pre></li></ul>
<hr><br>
<p><strong>Тег readmore в неположенном месте</strong></p>
<p>Если вы поставите тег readmore в случайном месте, то все открытые до него теги будут закрыты тегами верстки, что в свою очередь на 99% перекосит весь дизайн сайта, особненно если вы используете div в верстке текста.</p>
<ul><li>Тег readmore<br>
<p>Ошибочно:</p>
<div>В чащах юга жил бы цитрус?<hr>да, но фальшивый экземпляр!</div><br>
<p>Грамотно:</p>
<div>В чащах юга жил бы цитрус?</div><br>
<hr><br>
<div>да, но фальшивый экземпляр!</div><br>
</li></ul>
<hr><br>
<p>Делайте верно, и оно будет красивым.</p>
<p><strong>P.S. Скопировали — вставили текс из WORD</strong> — бросьте в себя камень, бейте себя по рукам, наймите здоровенного мужика с волосатыми руками, который будет стучать вам по голове, когда вы делаете это. Так делать нельзя ни в коем случае.</p>]]></description>
                <pubDate>Sat, 20 Oct 2012 15:26:15 +0400</pubDate>
                            </item>
                    <item>
                <title>Обработка изображений или фантазии дизайнера</title>
                <guid isPermaLink="true">http://joomclub.net/en/t/65/</guid>
                <link>http://joomclub.net/en/blog/verstka/65.html</link>
                <author>tena2000@mail.ru</author>
                <description><![CDATA[<img style="cursor: default; width: 250px; height: 194px; float: left; margin: 10px;" src="http://joomclub.net/uploads/images/nightguard/2012/10/linkor-1.jpg"><p>Недавно заказали верстку каталога недвижимости, ничего сложного, кроме одного момента — формирование превью изображений в категории, материале и модулях, т.к. в качестве каталога использовался FLEXIcontent, то описание сделаю именно для него, хотя для com_content схема действий будет аналогичная.</p><p>Для работы данного решения потребуется библиотека GD2, по этому рекомендую заранее узнать стоит она у хостера или нет.</p><p>Изначально у меня было три превью и по клику на первый итем нужно было выводить в модальном окне нормальное изображение, т.е. возможность обработки изображения, и приведения к требуемому виду, до загрузки на сайт невозможна, а т.к. фон неоднородный, то возможность наложить сверху другое изображение отсутствовала, следовательно средствами css нужный результат не получить (один способ есть, но решение сложное и не кроссбраузерное). В итоге после консультаций и раздумий (да-да, собрали целый консилиум из-за создания одной картинки ;) ) принято решение обрабатывать <a name="cut" rel="nofollow"></a> изображение с помощью GD2, а чтобы не грузить каждый раз сервер, то сохранять изображение в той же папке, что и превью сгенерированное плагином FLEXIcontent, но с добавлением суффикса к изображению, а при загрузке проверять, есть нужное превью или нет, если есть, то грузим превью, если нету, то создаем его и загружаем.</p><p>Перейдем непосредственно к решению (field26 — поле типа image, в котором хранится первое выводимое превью):</p><pre class="prettyprint"><code>&nbsp; &lt;?php<br />&nbsp; $field26 = explode('src=&quot;', $item-&gt;fields['field26']-&gt;display);<br />&nbsp; $field26_img = explode('&quot; alt', $field26[1]);<br />&nbsp; $field26_img_src = substr_replace($field26_img[0],&quot;-home.png&quot;,-4);<br /><br />&nbsp; if (file_exists($field26_img_src)) {<br />&nbsp; echo $field26[0].'src=&quot;'.$field26_img_src.'&quot; alt'.$field26_img[1];<br />&nbsp; } else {<br /><br />&nbsp;&nbsp;&nbsp; $res = imagecreatetruecolor(240,165);<br />&nbsp;&nbsp;&nbsp; $img = imagecreatefromjpeg($field26_img[0]);<br />&nbsp;&nbsp;&nbsp; $mask = imagecreatefrompng(&quot;templates/linkor/images/mask_small.png&quot;);<br /><br />&nbsp;&nbsp;&nbsp; imagecopy ($img,$mask,0,0,0,0,220,165);<br />&nbsp;&nbsp;&nbsp; $color = imagecolorallocate($img,0,0,0);<br />&nbsp;&nbsp;&nbsp; imagecolortransparent($img,$color);<br />&nbsp;&nbsp;&nbsp; header('Content-Type: image/png');<br />&nbsp;&nbsp;&nbsp; imagepng($img, $field26_img_src);<br />&nbsp;&nbsp;&nbsp; imagedestroy($img);<br />&nbsp;&nbsp;&nbsp; echo $field26[0].'src=&quot;'.$field26_img_src.'&quot; alt'.$field26_img[1];<br />&nbsp; }<br />&nbsp; ?&gt;</code></pre><p>Если описывать в двух словах, то происходит наложение одноцветной маски на изображение, с последующим удалением пикселей определенного цвета, да решение тоже не идеальное, т.к. помимо маски могут быть удалены пиксели и с самого изображения, но оно кроссбраузерное и работает всегда, что и требовалось сделать, кроме того можно повторно наложить изображение на инвертированную маску, тогда пиксели на изображении можно вернуть обратно (вот пока писал понял где совершил недочет, полезно иногда мануалы писать ;) ).</p><p>Приведу образцы: исходного изображения, маску и результат обработки:</p><p align="center"><img style="cursor: default;" src="http://joomclub.net/uploads/images/nightguard/2012/10/linkor-2.jpg"></p><p>Кстати, проверку делать настоятельно рекомендую, т.к. GD2 создает нагрузку при обработке, а если каталог достаточно большой, то и нагрузка будет не маленькой.</p><p><br>
</p><p>Документация:<br>
</p><ul><li><a href="http://php.net/manual/ru/book.image.php" target="_blank" rel="nofollow">Обработка изображений и GD (русский)</a> </li><li><a href="http://php.net/manual/en/book.image.php" target="_blank" rel="nofollow">Image Processing and GD (английский)</a> </li></ul>]]></description>
                <pubDate>Sat, 13 Oct 2012 09:00:19 +0400</pubDate>
                            </item>
                    <item>
                <title>Ликбез по созданию и расширению меню</title>
                <guid isPermaLink="true">http://joomclub.net/en/t/62/</guid>
                <link>http://joomclub.net/en/blog/verstka/62.html</link>
                <author>al-teen@inbox.ru</author>
                <description><![CDATA[<p><b><span style="color: blue;">1) Создание меню. </span></b></p>

<ul><li>Создаем меню через менеджер меню в панели администратора ( Крестик «Создать», заполняем все поля, «Сохранить»).</li><li>Выбираем в списке  созданное меню, жмем «Создать», из списка выбираем нужный пункт, пишем заголовок, псевдоним, сохраняем.</li><li>Создаем еще несколько пунктов.</li></ul><p>В панели администратора заходим в менеджер модулей ( Расширения =&gt; модули ), над списком модулей находим кнопку «Новый» ( Крестик ). На открывшейся странице находим пункт «Меню», жмем на него. 
Слева в верхней строчке пишем название модуля, оно же будет заголовком, выводящимся на странице. 
Варианты включить и выключить для отображения заголовка ( показать или скрыть его на странице сайта ), включить или отключить модуль. 
Выбыраем из списка позицию шаблона, в которой будет выведено меню (например «top» или «left»).
Ниже: выбор группы пользователей, для которых показывать меню, дополнительные стили для меню.</p>

<p>Справа видим выпадающий список со всеми меню, выбираем по <a name="cut" rel="nofollow"></a> названию созданное нами ранее. Ниже предоставляются варианты отображения, выбираем «Список». Можете поэкспериментировать с остальными вариантами. Разница в способах представления на уровне HTML разметки. Но чаще используется именно Список.Далее идут пункты «Начальный уровень» и «Последний уровень», «Всегда показывать подпункты» — это настройки уровней вложенности для пунктов меню, о них информация ниже. Расположение нового окна — параметры JavaScript — расположение всплывающего окна, например, </p>

<pre class="prettyprint"><code>top=50,left=50,width=200,height=300</code></pre>
<p>В дополнительных параметрах возможно указать интервал между пунктами горизонтального меню (показывать или нет), кэширование ( рекомендуется когда меню уже создано и отредактировано — кэширование позволяет оптимизировать работу сайта ).
Ниже располагаются настройки:
</p>

<ul><li>ID тега меню — CSS-идентификатор (id), назначенный для тега UL верхнего уровня (необязательный параметр).</li><li>CSS-суффикс класса меню (здесь можно задать особый класс CSS для визуальной организации меню).</li><li>CSS-суффикс класса модуля (здесь задается особый класс CSS для визуальной организации модуля (содержимого меню))</li></ul><p>Через них возможно привязывать к меню собственные CSS стили. Например указав для суффикса класса меню </p>

<p>Код:</p>

<pre class="prettyprint"><code>_main</code></pre>
. В коде нашего меню увидим 
<p>Код:</p>

<pre class="prettyprint"><code>&lt;ul class=&quot;menu_main&quot;&gt;</code></pre>
Вместо 
<p>Код:</p>

<pre class="prettyprint"><code>&lt;ul class=&quot;menu&quot;&gt;</code></pre>
<p>Максимальный уровень вложенности меню по умолчанию стоит 10. То есть меню может содержать максимум 10 уровней вложенных подменю. Уровни больше этого числа будут игнорироваться. Если не показываются подпункты некоторого уровня, то увеличьте это число.

В других настройках возможно настроить:
</p>

<ul><li>Показывать значки меню — включает отображение значков меню. Формат значков зависит от конкретного шаблона.</li><li>Расположение значков меню — задает расположение значков меню справа или слева.</li><li>Ссылка на значок меню — значок сам по себе является ссылкой.</li><li>Развернутое меню — задает, должен ли пункт меню всегда быть развернут, даже если нажатие происходит по другим меню.
Активировать родительский пункт - активная ссылка присваивается родительскому пункту при переходе по ссылке в дочернюю категорию.</li><li>Постоянная подсветка активных пунктов — выделение активной ссылки.</li><li>Изображение отступа — задает значки, которые будут отображаться в дереве меню уровнем ниже. Можно задать использование значков из шаблона, значки Joomla по умолчанию, не использовать вовсе или задать каждому уровню вложенности своё изображение.</li><li>Изображение отступа 1-6 — задает индивидуальный значок каждому уровню иерархии.</li><li>Разделитель — задает разделитель пунктов вертикального меню.</li><li>Разделитель по концам — задает разделитель пунктов в горизонтальных меню.</li></ul><p>Жмем «Сохранить». На странице сайта появляется соданное нами меню. Таким образом мы создали простое меню, без всяких эффектов.</p>

<p><b><span style="color: blue;">2) Расширяем меню.</span></b></p>

<p>Расширить свойства меню можно путем CSS, JavaScript и PHP. Существует множество готовых решений, но редко они соответсвуют требованиям конкретного сайта без необходимости их «допиливать». Эти решения мы не будем разбирать в данной теме, а разложим варианты, наиболее часто задаваемых вопросов в разделе.</p>

<p><span style="color: green;">Простое горизонтальное меню.</span></p>



<pre class="prettyprint"><code>&nbsp;ul.menu {
	padding:&lt;span&gt;0&lt;/span&gt;;
	margin:&lt;span&gt;0&lt;/span&gt;;
&nbsp;
}
 ul.menu li {
	float: left; /* выравниваем ссылки по горизонтали */
	list-style-type: none; /* убираем маркеры списка*/	
	padding-left:&lt;span&gt;10px&lt;/span&gt;; /* внутренний отступ слева */	
	padding-right:&lt;span&gt;10px&lt;/span&gt;; /* внутренний отступ справа */	
	padding-bottom:&lt;span&gt;0px&lt;/span&gt;; /* внутренний отступ снизу */	
	padding-top:&lt;span&gt;0px&lt;/span&gt;; /* внутренний отступ сверху */	
	background-image: url(../images/menu_sep&lt;span&gt;.gif&lt;/span&gt;) no-repeat right top; /* разделитель */	
	position:relative; /* позиционируем в блоке родителя */	
}
&nbsp;
 ul.menu a {
	display: block; /* делаем кликабельной всю кнопку */	
	height: 22px; /* высота кнопки*/	
	padding: 0 10px; /* внутренний отступ справа и слева */	
	overflow: hidden; /* запрещаем обтекание */	
	color: #7a7a7a; /* цвет ссылки */	
	font-family:Grotic; /* название шрифта */	
	font-style:bold; /* жирность шрифта */	
	font-size: 11px; /* размер шрифта */	
	text-decoration:none; /* убираем подчеркивание ссылки */	
	padding-top:&lt;span&gt;3px&lt;/span&gt;; /* внутренний отступ сверху */
}
 ul.menu li.active a, ul.menu li a:hover {
	color:#E8A03D; /* цвет ссылки при наведении и активной ссылки */	
}</code></pre>
<p>Так же можно вместо разделителя задать цвет кнопки, или присвоить ей графику.</p><p>Аналогично</p><pre class="prettyprint"><code>background-image: url(../images/menu_sep.gif) no-repeat right top;</code></pre><p>возможно присвоить к  </p><pre class="prettyprint"><code>ul.menu a </code></pre><p>и
</p><pre class="prettyprint"><code>ul.menu li.active a, ul.menu li a:hover</code></pre><p>Простое вертикальное меню делается аналогично, за исключением отсутствия в </p><pre class="prettyprint"><code>ul.menu li элемента float: left;</code></pre><p>Можем несколько расширить наше простое меню в визуальном плане при 
помощи средств стандартной для Joomla библиотеки mootools. Например 
добавить анимацию при наведении на ссылку 
</p><p>В поле между тэгами</p><pre class="prettyprint"><code>&lt;head&gt; &lt;/head&gt;</code></pre><p>Вашего шаблона, добавляем </p><pre class="prettyprint"><code>&lt;script type=&quot;text/javascript&quot;&gt;
window.addEvent('domready', function(){
 &nbsp; &nbsp;var el = $$('#my_menu li'),
	 color = el.getStyle('backgroundColor', '#333');
 &nbsp; &nbsp; &nbsp; $$('#my_menu li').set('margin', 0).addEvents({
	 &nbsp; &nbsp; mouseenter: function(){
		 this.morph({'margin-left': 5,'background-color': '#676768'});},
		 mouseleave: function(){
		 this.morph({margin: 0,backgroundColor: color});
	}});
});
&lt;/script&gt;</code></pre><p>В строках </p><pre class="prettyprint"><code>'background-color': '#...'</code></pre><p>Редактируем цвет кнопок.
</p><p>Ниже в шаблоне, позицию для модуля меню оборачиваем блоком </p><pre class="prettyprint"><code>&lt;div class=&quot;my_menu&quot;&gt;&lt;/div&gt;</code></pre><p>То есть выглядеть это будет примерно следующим образом
</p><pre class="prettyprint"><code>&lt;div id=&quot;my_menu&quot;&gt;
&nbsp; &nbsp; &lt;jdoc:include type=&quot;modules&quot; name=&quot;leftmenu&quot; /&gt;
&lt;/div&gt;</code></pre><p>За работоспособносьт примера ручаться не стану по ряду причин, но в 
общих чертах думаю понятно, каким образом возможно назначить различные 
эффекты для нашего меню.</p><p><span style="color: green;">Создание выпадающего меню средствами CSS.</span></p><ul><li>В менемжере меню создаем новые пункты меню и присваиваем им родительский пункт.</li><li>В настройках модуля меню Начальный уровень — 0, Последний уровень — 2 или более.</li></ul><p>На странице сайта должны появиться дочерние пункты меню рядом с родительским.</p><p>В файл template.css шаблона добавляем строчки:</p><pre class="prettyprint"><code>ul.menu {
	position: absolute;
	top: 78px;
	left: 172px;
	list-style-type: none;
	padding:&lt;span&gt;0&lt;/span&gt;;
	margin:&lt;span&gt;0&lt;/span&gt;;
&nbsp;
}
 ul.menu li {
	float: left;
	list-style-type: none;
	padding-left:&lt;span&gt;10px&lt;/span&gt;;
	padding-right:&lt;span&gt;10px&lt;/span&gt;;
	padding-bottom:&lt;span&gt;0px&lt;/span&gt;;
	padding-top:&lt;span&gt;0px&lt;/span&gt;;
	background-image: url(../images/menu_sep&lt;span&gt;.gif&lt;/span&gt;);
	background-position: right top;
	background-repeat: no-repeat;
	position:relative;
}
&nbsp;
 ul.menu a {
	display: block;
	height: 22px;
	padding: 0 10px;
	overflow: hidden;
	color: #7a7a7a;
	font-family:Grotic;
	font-style:bold;
	font-size: 11px;
	text-transform: uppercase;
	text-decoration:none;
	padding-top:&lt;span&gt;3px&lt;/span&gt;;
}
ul.menu li.active a, ul.menu li a:hover {
	color:#E8A03D;
}
ul.menu li a, ul.menu li.active ul li a &nbsp;{
	color:#7a7a7a;
}
&nbsp;
ul.menu li ul {
 &nbsp; &nbsp;display:none;
 &nbsp; &nbsp;position:absolute;
 &nbsp; &nbsp;top:&lt;span&gt;2em&lt;/span&gt;;
 &nbsp; &nbsp;left:&lt;span&gt;0&lt;/span&gt;;
 &nbsp; &nbsp;padding:&lt;span&gt;0px&lt;/span&gt; 0px 7px;
 &nbsp; &nbsp;margin:&lt;span&gt;0px&lt;/span&gt; 0px 7px;
 &nbsp; &nbsp;background-color:white;
 &nbsp; &nbsp;opacity:&lt;span&gt;0&lt;/span&gt;.&lt;span&gt;75&lt;/span&gt;;
}
ul.menu li:hover ul {
 &nbsp; &nbsp;display:block;
}
ul.menu li:hover ul li a{
 &nbsp; &nbsp;height:auto;
}</code></pre><p>Вертикальное это меню или горизонтальное, сторону, в которой отображаются подпункты при наведении можно настроить в каскаде </p><pre class="prettyprint"><code>ul.menu li ul</code></pre><p>оперируя свойствами</p><pre class="prettyprint"><code>&nbsp; top:2em;
&nbsp; &nbsp;left:0;
&nbsp; &nbsp;padding:0px 0px 7px;
&nbsp; &nbsp;margin:0px 0px 7px;</code></pre><p>Из минусов данного метода можно выделить сложности с IE6 — не воспринимает :hover, лечится костылями на JS,
Сложности
с восприятием 4го и более уровней. То есть подобным методом корректно 
можно обработать вложениея лишь до 3го уровня включительно. Если нужно 
обработать больше вложений, рекомендую использовать средства JS.</p><p><span style="color: green;">Выпадающее меню на JS+CSS.</span></p><p>Создаем отдельный файл menu.js, в него заносим код:</p><pre class="prettyprint"><code>window.addEvent('domready', function() {
&nbsp;
var Element = $$('.moduletable_shop ul.menu li.parent').set({
 &nbsp; &nbsp;'events': {
 &nbsp; &nbsp; &nbsp; &nbsp;'mouseover': function(){ this.addClass('hilite') },
 &nbsp; &nbsp; &nbsp; &nbsp;'mouseleave': function(){ this.removeClass('hilite') }
 &nbsp; &nbsp;}
});
});</code></pre><p>В CSS добавляем:</p><pre class="prettyprint"><code>ul.menu li ul{
ul.menu li ul{
 &nbsp;display:block;
&nbsp;
 &nbsp;z-index:&lt;span&gt;-2&lt;/span&gt;; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; /*Здесь прячем подпункты на нижние слои*/
 &nbsp;position:absolute;
 &nbsp;margin-left: 220px; &nbsp;/*Отступ справа = ширина родительского пункта меню*/
 &nbsp;margin-top: -93px; &nbsp; /*Отступ снизу = высота родительского пункта меню*/
&nbsp;
 }
 ul.menu li.hilite ul{
 &nbsp; z-index:&lt;span&gt;100&lt;/span&gt;; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;/*Вот здесь класс hilite наш - выводим меню в верхние слои*/
 }</code></pre><p>Оперируя свойствами</p><pre class="prettyprint"><code>margin-left: 220px;
&nbsp;margin-top: -93px;</code></pre><p>добиваемся четкого отображения раскрывающихся категорий.</p><p><b><span style="color: blue;">3) Устраняем недочеты.</span></b></p><p>В стандартном mod_mainmenu существуют несколько досадных недоработок.  
Если
на сайте используется несколько модулей меню на основе стандартного 
mod_mainmenu – мы получаем ошибку валидации – для каждого активного 
пункта меню UL LI создается id=«current» (в случае создания связанных 
меню, многоуровневых либо просто дублирование модуля)
Лечится просто
– в файле templates/шаблон/html/mod_mainmenu/default.php (что это такое
и что делать если такого файла нет – объяснять не буду, читаем 
документацию по шаблонизации движка) находим строку примерно 71</p><pre class="prettyprint"><code>$node-&gt;addAttribute('id', 'current');</code></pre><p>и заменяем на</p><pre class="prettyprint"><code>$node-&gt;addAttribute('id', 'current'.$id);</code></pre><p>Теперь у нас к каждому current добавляется идентификатор itemid.
</p><p>Для лучшей поисковой оптимизации к каждой ссылке на сайте рекомендуется 
добавлять атрибут title=&quot;&quot; с описанием. В стандартном модуле его нет, но
лечится весьма не сложно.</p><p>Копируем файл modules/mod_mainmenu/tmpl/default.php в папку шаблона, т.е. он должен размещаться по адресу
templates/название_шаблона/html/mod_mainmenu/default.php</p><p>Открываем файл, находим строку</p><pre class="prettyprint"><code>if (isset($path) &amp;amp;&amp;amp; $node-&gt;attributes('id') == $path[0]) {</code></pre><p>и перед ней вставляем код</p><pre class="prettyprint"><code>&nbsp; &nbsp;if ($node-&gt;name() == 'a') {
 &nbsp; &nbsp; &nbsp; &nbsp;$children = $node-&gt;children();
 &nbsp; &nbsp;foreach ($node-&gt;children() as $child)
 &nbsp; &nbsp;{
 &nbsp; &nbsp; &nbsp;if ($child-&gt;name() == 'span') {
 &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;$node-&gt;addAttribute('title', $child-&gt;_data);
 &nbsp; &nbsp; &nbsp;}
 &nbsp; &nbsp;}
 &nbsp; &nbsp;}</code></pre><p>Теперь у нас ссылки меню получают атрибут title=&quot;&quot;.</p>]]></description>
                <pubDate>Tue, 09 Oct 2012 02:50:14 +0400</pubDate>
                            </item>
                    <item>
                <title>Ликбез по CSS спрайтам</title>
                <guid isPermaLink="true">http://joomclub.net/en/t/61/</guid>
                <link>http://joomclub.net/en/blog/verstka/61.html</link>
                <author>al-teen@inbox.ru</author>
                <description><![CDATA[<p>CSS спрайты — это вывод отдельных элементов единого изображения на веб — странице. То есть одна большая картинка, либо несколько разных, но объединенных в один файл рядом друг с другом. Зачастую подобным образом группируют множество различных иконок. Разработчики называют подобный файл <b>мастер сеткой</b>. В качестве примера возьмем одну картинку, из которой нам нужно вывести в разных частях страницы различные ее элементы. Как вариант, порезать ее на куски и определять каждую часть отдельно, 1 элемент — 1 отдельный файл. Впрочем еще несколько лет назад именно так все и делали. Простейший вариант по своей сути. Но данный метод имеет один существенный недостаток, а именно — количество HTTP запросов, которые отсылает сервер браузеру. Одна картинка — это один запрос. Чем их больше, тем дольше будет загружаться страница. Посему CSS спрайты в первую очередь служат для сокращения количества этих самых запросов.Выше на картинке вполне четко показан принцип работы CSS спрайтов если представлять <a name="cut" rel="nofollow"></a> выделенную в кружок область в качестве области с изображением на нашей странице.Работает данная технология следующим образом. В нашей странице имеется блок:</p>

<p>Код</p>

<pre class="prettyprint"><code>&lt;a href=&quot;http://december.com/html/4/element/div.html&quot;&gt;&lt;span&gt;&lt;div&lt;/span&gt;&lt;/a&gt; id=&quot;mushroom&quot;&gt;&lt;span&gt;&lt;/div&gt;&lt;/span&gt;</code></pre>

В нем нам нужно вывести грибок с картинки выше. Открываем всю картинку в редакторе, например Paint.NET, там находим в самом низу шкалу координат. Средством выделения узнаем точный размер области с грибом, у меня получилось 18x18 пикселов. Записываем размеры. Затем опять же при помощи выделения узнаем расстояние до верха картинки от края мастер сетки, аналогично расстояние от левого края. У меня это 40px и 0px. Затем создаем в CSS описание класса mushroom такого типа:

<p>Код</p>

<pre class="prettyprint"><code>#mushroom{
 &nbsp; &nbsp;background: url(sprite&lt;span&gt;.gif&lt;/span&gt;) no-repeat -36px 0px;
 &nbsp; &nbsp;height: 18px;
 &nbsp; &nbsp;width: 18px;
}</code></pre>

Разберем пример. Свойством background выводим грибок в блок &lt;div id=«mushroom»&gt;&lt;/div&gt; в качестве фонового изображения, no-repeat запрещаем повторяться картинке, -36px и 0px это наши координаты X,Y, именно при помощи них мы и перемещаем по мастер сетке фокус к нужному нам элементу. height:18px и width:18px регулируем размер видимой на странице области. Как видно ничего сложного в этом всем нет, все гениальное — просто.

Для <b>потребленцев</b> людей выбирающих американский образ жизни, порекомендую <a rel="nofollow" href="http://ru.spritegen.website-performance.org/" target="_blank">он — лайн генератор CSS спрайтов
</a>

Для нормальных людей — читаем ниже.

<b>1.Простые спрайты.</b>

Для объединения изображений в спрайты рекомендую использовать не сложные графические редакторы. Такие как Paint.NET для Windows, Gnome Paint для Linux. Создаем в редакторе новый файл, на нем, посредством наложения слоев, размещаем нужные изображения для нашего спрайта. Ничего сложного. Таким образом создается мастер сетка.
После ее создания, рекомендую выполнить оптимизацию общего изображения, для уменьшения веса. Об оптимизации графики смотрим <a href="http://joomlaforum.ru/index.php/topic,169308.0.html" target="_blank" rel="nofollow">тут</a>.

Далее, как показано выше, создаем CSS классы для каждого нужного элемента и выводим их на страницу.

Примечание: для повторяющихся изображений, например для repeat-x (y) подобного рода мастер сетка не подойдет. Для горизонтального повторения (repeat-x) создается вертикальная тонкая полоска, в которой все элементы распологаются один над другим. Причем справа или слева пробелов быть не должно, иначе фон будет повторяться и с ними тоже. Аналогично и для вертикальной мастер сетки, только изображение соответственно будет горизонтальным и элементы располаться будут один рядом с другим по горизонтали.

<b>2.Спрайты через псевдо — элементы.</b>

Главное преимущество использования псевдо-элементов заключается в том, что дизайнеры смогут подрезать спрайты. В общем, ничего нового, так как многие сайты уже используют для этого дополнительные теги. Например, Yahoo! Search использует для этих целей пустой тег s, а Facebook — тег i. Но можно ведь создавать компактные CSS спрайты и без пустых вставок между изображениями в спрайте.

<img src="http://rghost.ru/12593771/private/73cf0b5d64e22891c5e13e37aa0b3243/image.png">
Два следующих изображения — второй элемент спрайта — сгенерированы с использованием каждой техники соответственно.

<ul><li>Метод Николаса Галагера, cтилизация псевдо-элемента фоновым изображением:</li></ul><p>Код</p>

<pre class="prettyprint"><code>#first:before { 
	content: &quot;&quot;; 
	float: left; 
	width: 15px; 
	height: 15px; 
	margin: 4px 5px 0 0; 
	background: url(sprite&lt;span&gt;.png&lt;/span&gt;) -15px 0; 
}</code></pre>

<ul><li>Метод нового url()/clip, использование свойства content для вставки спрайта, подрезанного с помощью свойства clip:</li></ul><p>Код</p>

<pre class="prettyprint"><code>#second { 
	position: relative; 
	padding-left: 20px; 
	background-image: expression(this.runtimeStyle.backgroundImage=&quot;none&quot;,this.innerHTML = '&lt;img alt=&quot;&quot; src=&quot;sprite.png&quot;&gt;'+this.innerHTML); 
} 
&nbsp;
#second:before, 
#second img { 
	content: url(sprite&lt;span&gt;.png&lt;/span&gt;); 
	position: absolute; 
	top: 3px; 
	clip: rect(0 30px 15px 15px); 
	left: -15px;
	_left: -35px;
}</code></pre>

Как это работает.

Вместо того, чтобы стилизовать псевдо-элемент как фон, мы используем его для вставки изображения (через content)
С помощью clip мы подрезаем его, чтобы отображалась только та часть, которая нужна. Это значит, что не нужно вставлять пустые теги в изображения, чтобы не отображать другие части изображения (обычно используется как фоновое изображение больших элементов)
Мы смещаем значения clip с помощью свойства left и/или top.

Если не подрезать спрайты, изображения в нем должны выровняться по левому или правому краю, чтобы соответствовать контексту RTL/LTR (background-position: | [vertical value]). Проблемы также возникают при создании спрайтов, где изображения следуют одно за другим (так как другие изображения тоже смогут отображаться). Если же подрезать спрайт, то изображения просто налезут друг на дружку.

Пример:

<img src="http://rghost.ru/12594081/private/66997346e7f8e8e7b7191b30375fb468/image.png">
Преимущества этой техники по сравнению с другими:

<ul><li>Отображение при печати. В отличие от фоновых изображений, при печати они распечатаются в документе.</li><li>Доступность. В отличие от фоновых изображений, они будут отображать в режиме high contrast или при контрастных CSS стилях.</li><li>Работает в IE. Метод подходит для Internet Explorer 6 и 7.</li></ul>Отметьте также, что может быть использована схема data URI для игнорирования HTTP запросов. IE 6/7 не поддерживает данную схему, но можно воспользоваться MHTML для IE6/7.

<b>3.Стилизация ссылок с помощью псевдо-элементов.</b>

Николас Галагер показал много интересных фишек, касающихся псевдо-элементов. Единственное, чтобы я добавил, так это пример использования :after для стилизации ссылок типа «читать дальше», например:

<p>Код</p>

<pre class="prettyprint"><code>.more:after { 
	white-space:nowrap; 
	content: &quot; &lt;span&gt;\00BB; /* » */
} 
.more { 
	white-space:nowrap; 
	background-image: expression(this.runtimeStyle.backgroundImage=&quot;&lt;/span&gt;none&quot;,this.innerHTML = this.innerHTML+' »'); 
}</code></pre>

Слово о доступности.

Имейте в виду, что генерируемый контент читается скрин-ридерами, и так как нет механизмов, которые предоставляли бы соответствующий текст изображению через свойство content, мы должны быть уверены, что эти изображения используются только для стилизации, так как пользователи со скрин-ридерами не смогут достучаться до той информации.

Оригиналы материалов:
<a rel="nofollow" href="http://coding.smashingmagazine.com/2011/03/19/styling-elements-with-glyphs-sprites-and-pseudo-elements/" target="_blank">http://coding.smashingmagazine.com/2011/03/19/styling-elements-with-glyphs-sprites-and-pseudo-elements/</a>]]></description>
                <pubDate>Tue, 09 Oct 2012 02:12:25 +0400</pubDate>
                            </item>
                    <item>
                <title>Иконки для сайта посредством Font Awesome</title>
                <guid isPermaLink="true">http://joomclub.net/en/t/57/</guid>
                <link>http://joomclub.net/en/blog/verstka/57.html</link>
                <author>al-teen@inbox.ru</author>
                <description><![CDATA[<p><a href="http://fortawesome.github.com/Font-Awesome/#overview" target="_blank" rel="nofollow"><b>Font Awesome: бесплатный иконочный шрифт в стиле Twitter Bootstrap.</b></a></p>

<p><span>Каждому разработчику шаблонов периодически приходится сталкиваться с нудной работой над детализацией интерфейса создаваемого шаблона — иконками. Это могут быть, как иконки социальных сетей, так и интуитивная графика для обозначения времени создания материала, полей ввода логина и пароля, оформления кнопок визуального редактора и т.д. Сайт может содержать в себе несколько десятков подобных изображений. Которые нужно правильно оптимизировать, собрать в спрайт-сетку, затем </span><span>вычислить положение каждого изображения сетки, затем спозиционировать его в качестве фонового изображения к каждому элементу. Зачастую эта кропотливая и нудная работа занимает больше времени, чем верстка всего шаблона в целом. </span><a name="cut" rel="nofollow"></a> </p>

<p><img alt="растр VS вектор" style="cursor: default; float: left; margin: 0px 0px 10px 10px; width: 231.356px; height: 139px;" src="http://s53.radikal.ru/i141/1210/08/250186fde8d2.png">Работа с иконочными шрифтами технически напоминает работу с глифами. По сути это и есть глифы, но выполненные в едином современном стиле. Графические иконки сайта обычно выполнены в растровых форматах (.png, .gif, .jpg), которые сами по себе ограничены. Достаточно сложно сменить размер крупного растрового изображения до миниатюрости иконки так, чтобы картинка не потеряла своего качества. Пикселизация, ступеньки градиентов, смешение пиксекей и т.д. — это все растровые форматы. Но здесь нам на помощь приходит векторная графика. Шрифты — это вектор в чистом виде. Который можно увеличивать и уменьшать бесконечно, но при этом векторная картинка не потеряет своего качества и цветов.</p>

<p>Font Awesome, разработанный Дэйвом Ганди (Dave Gandy), выполнен в стиле глифов<a href="http://twitter.github.com/bootstrap/" rel="nofollow"><b>Twitter Bootstrap.</b></a> На сегодняшний день коллекция Awesome содержит уже 220 иконок и постоянно пополняется новыми элементами. Из особенностей:</p>

<ul><li>Скриншот и описание элементов в PDF.<img alt="awesome" style="cursor: default; width: 434.17px; height: 171px; float: right; margin: 0px 0px 10px 10px;" src="http://s019.radikal.ru/i615/1210/d1/8d6649ae963e.jpg"></li><li>Пиктография, применяемая в web.</li><li>Обратная совместимость с Twitter Bootstrap 2.0.</li><li>Сообщество на <a href="https://github.com/FortAwesome/Font-Awesome" target="_blank" rel="nofollow">Font Awesome GitHub project</a>. </li><li><span>Бесплатен для коммерческого использования.</span></li><li><span>Управление через CSS.</span></li><li><span>Поддержка IE 7+.</span></li><li><span>Поддерживает мобильные браузеры.</span></li><li><span>Неограниченная масштабируемость.</span></li></ul><p><img alt="111" style="cursor: default; width: 482.221px; height: 199px; margin: 0px;" src="http://s42.radikal.ru/i096/1210/29/bb2aa76348b5.jpg"></p>

<p>Шрифт содержит большинство часто используемых элементов: иконки социальных закладок, иконки для текстового редактора, видео/аудиоплейера, и конечно же, большой ассортимент иконок для веб-приложений. Выполненные в современном стиле и с применением новейших технологий, они могут значительно облегчить труд разработчику и сэкомить время. В виду своей простоты и доступности через CSS подходят к любому дизайну.
</p>

<p>Работать с Font Awesome достаточно просто:</p>

<ol><li>Качаем <a href="https://github.com/FortAwesome/Font-Awesome/zipball/master" target="_blank" rel="nofollow">архив</a>.</li><li>Копируем шрифты из архива в проект.</li><li>Добавляем в наш css <span style="color: blue;">@import «font-awesome.css»;</span> и <span style="color: blue;">@import «font-awesome-ie7.css»;</span></li><li>Ниже:</li></ol> 

<pre class="prettyprint"><code>
@font-face {
    font-family: 'FontAwesome';
    src: url('../font/fontawesome-webfont.eot');
    src: url('../font/fontawesome-webfont.eot?#iefix') format('embedded-opentype'),
    url('../font/fontawesome-webfont.woff') format('woff'),
    url('../font/fontawesome-webfont.ttf') format('truetype'),
    url('../font/fontawesome-webfont.svg#FontAwesome') format('svg');
    font-weight: normal;
    font-style: normal;
    }
</code></pre>
<p>Далее добавляем к нужным нам элементом путем добавления класса css.</p>

<pre class="prettyprint"><code>&lt;i class=&quot;icon-glass&quot;&gt;&lt;/i&gt;</code></pre>
<p>Справится даже новичок. Все это дело работает на вполне обычных элементах CSS, которые мы  с Вами применяем практически в каждом проекте. 
</p>

<pre class="prettyprint"><code>[class^=&quot;icon-&quot;]:before, [class*=&quot; icon-&quot;]:before {
font-family: FontAwesome;
font-weight: normal;
font-style: normal;
display: inline-block;
text-decoration: inherit;
}
.icon-glass:before { content: &quot;\f000&quot;; }
</code></pre>
<p>И далее мы можем изменять внешний вид иконок средствами форматирования текста CSS: color, font-size, font-style и т.д., в зависимости от стилевых требований шаблона. 
</p>

<p>Сейчас Font Awesome взят на вооружение в демо-шаблоне <a href="http://www.gantry-framework.org/" rel="nofollow">Gantry</a>. Вполне можно быть, что данный иконочный шрифт в будущем будет использован <a href="http://kyleledbetter.com/jui/" target="_blank" rel="nofollow">JUI</a>. </p>]]></description>
                <pubDate>Sat, 06 Oct 2012 23:54:38 +0400</pubDate>
                            </item>
            </channel>
    </rss>
