<?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>Mihalytch personal blog &#187; CSS</title>
	<atom:link href="http://mihalytch.org.ua/tag/css/feed" rel="self" type="application/rss+xml" />
	<link>http://mihalytch.org.ua</link>
	<description>Все о высоких технологиях</description>
	<lastBuildDate>Mon, 05 Dec 2011 16:05:14 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2.1</generator>
<xhtml:meta xmlns:xhtml="http://www.w3.org/1999/xhtml" name="robots" content="noindex" />
		<item>
		<title>Бегущая строка на JavaScript своими руками</title>
		<link>http://mihalytch.org.ua/programming/js/begushhaya-stroka-na-javascript-svoimi-rukami.html</link>
		<comments>http://mihalytch.org.ua/programming/js/begushhaya-stroka-na-javascript-svoimi-rukami.html#comments</comments>
		<pubDate>Tue, 28 Jul 2009 09:38:59 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/?p=177</guid>
		<description><![CDATA[Сегодня речь пойдет о создании простого скрипта для имитации эффекта бегущей строки. Для начала, придумаем, как это будет работать. По [...]]]></description>
			<content:encoded><![CDATA[<p>Сегодня речь пойдет о создании простого скрипта для имитации эффекта бегущей строки. Для начала, придумаем, как это будет работать. По идее должен быть внешний контейнер, который определит размеры блока бегущей строки и ее положение <span style="text-decoration: line-through;">в пространстве</span> на странице, назовем его <em>marquee_container</em>. Также должен существовать блок, содержащий &#8220;бегущий&#8221; текст, наречем его &#8211; <em>marquee_text</em>.</p>
<p>Теперь должно быть все просто, мы задаем родительскому блоку фиксированную ширину, position: relative (для того, чтобы мы могли абсолютно позиционировать блок с текстом относительно текущего), overflow: hidden (для того, чтобы &#8220;бегущий&#8221; текст скрывался за границами родительского блока). Далее пишем скрипт, который отодвигает текст вправо на ширину родительского блока (теперь он не видим) и потом перемещает его влево с заданной скоростью, пока текст не скроется полностью. И повторяем это действие снова и снова =).<span id="more-177"></span><br />
Для того, чтобы рассчитать момент, когда текст полностью скроется за левой границей, нам  нужно узнать настоящую ширину блока с текстом. Если наш текстовый блок будет содержаться  в <em>marquee_container</em> с заданной шириной, скрипт нам покажет ширину не больше нами заданной. Поэтому нам нужен еще один блок (<em>marquee_subcontainer</em>). Зададим ему ширину width:9999999px, и поместим в него текстовый блок. Теперь проблема с определением ширины решена.</p>
<p>Составим HTML код бегущей строки:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;marquee-container&quot; id=&quot;marquee_container&quot;&gt;
    &lt;div class=&quot;marquee-subcontainer&quot; id=&quot;marquee_subcontainer&quot;&gt;
        &lt;div class=&quot;marquee-text&quot; id=&quot;marquee_text&quot;&gt;
            Lorem ipsum dolor sit amet, consectetur adipiscing elit.
        &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;
</pre>
<p>Теперь составим таблицу CSS стилей в соответствии с нашими рассуждениями:</p>
<pre class="brush: css; title: ; notranslate">
.marquee-container {
    position: relative; /* см. UPD 1 */
    border-right:1px dotted #d8cfc2;
    height:30px;
    width:200px;
    overflow: hidden;
    border:2px solid #f00;
    margin:0px auto;
}

.marquee-subcontainer {
    position: relative;
    width:9999999px;
    height:30px;
    margin:0px;
}

.marquee-text {
    position: absolute;
    margin: 0px;
    top:0px;
    left:0px;
    height:30px;
    font: bold 16px Arial Georgia;
    color:#000;
}
</pre>
<p>Когда все предварительные приготовления сделали, можно приступить к написанию JS кода.</p>
<pre class="brush: jscript; title: ; notranslate">
// текущий сдвиг текста относительно левой границы блока бегущей строки
var craw_line_offset;

// функция инициализации бегущей строки
function enableCrawLine () {
    craw_line_offset = 0;

    // ширина текстового блока
    var craw_line_width = document.getElementById('marquee_text').offsetWidth;

    moveCrawLine (craw_line_width);
}

// функция пошагового сдвига
function moveCrawLine (w) {
    var lefttime;
    var container_width = document.getElementById('marquee_container').offsetWidth;
    // шаг (в пикселях), с которым будем перемещать текст
    var step = 1;
    // задержка между перемещениями на step пикселей
    var tdelay = 50;

    // ширина текстового блока
    w = parseInt(w);

    // если блок не &quot;заехал&quot; за левую границу
    if (craw_line_offset&lt;(w+container_width)) {
        // сдвигаем блок на шаг влево
        craw_line_offset = craw_line_offset + step;
    } else {
        // иначе начинаем все с начала
        craw_line_offset = 0;
    }

    // изменяем позицию текстового блока
    document.getElementById('marquee_text').style.left = parseInt(container_width-craw_line_offset)+'px';

    // рекурсивно вызываем функцию сдвига с заданной задержкой
    setTimeout('moveCrawLine ('+w+');', tdelay);
}

// вызов инициализирующей функции
enableCrawLine ();
</pre>
<p>Теперь можем ознакомиться с <a href="http://mihalytch.org.ua/example/marquee-javascript.html" >рабочим примером</a>.</p>
<p><a name="upd-1">UPD 1</a>: В IE6 не корректно срабатывал overlow: hidden для родительского блока. Дочерний див с position:absolute отображался полностью, не зависимо от границ родительского блока. Оказалось нужно просто добавить свойство position: relative и блоку с overflow:hidden.</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/js/begushhaya-stroka-na-javascript-svoimi-rukami.html/feed</wfw:commentRss>
		<slash:comments>24</slash:comments>
		</item>
		<item>
		<title>Стилизированный раскрывающийся список (select в html)</title>
		<link>http://mihalytch.org.ua/programming/js/styled-drop-down-list.html</link>
		<comments>http://mihalytch.org.ua/programming/js/styled-drop-down-list.html#comments</comments>
		<pubDate>Wed, 10 Sep 2008 08:21:34 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/js/styled-drop-down-list.html</guid>
		<description><![CDATA[Ниже представлено решение на JavaScript и CSS, с помощью которого можно было бы изменить внешний вид любой части выпадающего списка. [...]]]></description>
			<content:encoded><![CDATA[<p>Ниже представлено решение на JavaScript и CSS, с помощью которого можно было бы изменить внешний вид любой части выпадающего списка. При этом соблюдена кроссбраузерность, а также решена проблема, возникающая в IE 6 при перекрытии DIV`ом выпадающего списка select, который оказывался видимым при любом значении z-index.<span id="more-58"></span></p>
<p>Стилизация выпадающих списков основывается на замене стандартного элемента html &lt;select&gt;  на маркированный список&lt;ul&gt;, оформленный с помощью CSS необходимым нам образом.</p>
<p>JavaScript перехватывает все события onClick на странице и проверяет не &#8220;нажал&#8221; ли пользователь на ту или иную область выпадающего списка. Если произошло необходимое событие, и необходимо раскрыть, свернуть или выбрать необходимый элемент, скрипт применяет к элементам маркированного списка соответствующие стили и изменяет выбранное значение исходного выпадающего списка &lt;select&gt; (который был скрыт при загрузке страницы).</p>
<p>Ниже привожу результат стилизации (взят с реального проекта):</p>
<p style="text-align: center"><img width="454" src="/wp-content/drop-down.gif" alt="styled-drop-down" height="306" /></p>
<p>Чтобы не загромождать страницу кодом размещаю<a target="_blank" href="/wp-content/styled-drop-down.zip" title="Styled drop-down"> ссылку на архив с рабочим примером</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/js/styled-drop-down-list.html/feed</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Циклическая прокрутка содержимого в блоке div</title>
		<link>http://mihalytch.org.ua/programming/js/cyclic-scrolling-of-content-in-div.html</link>
		<comments>http://mihalytch.org.ua/programming/js/cyclic-scrolling-of-content-in-div.html#comments</comments>
		<pubDate>Tue, 05 Aug 2008 12:40:39 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/js/ciklicheskaya-prokrutka-soderzhimogo-v-bloke-div.html</guid>
		<description><![CDATA[Начнем с того, что снова возникла необходимость создать плавную автоматическую прокрутку текста в DIV`е и зациклить ее. Несложно догадаться, что [...]]]></description>
			<content:encoded><![CDATA[<p>Начнем с того, что снова возникла необходимость создать плавную автоматическую прокрутку текста в DIV`е и зациклить ее. Несложно догадаться, что для этого были выбраны следующие инструменты: CSS и JavaScript.<span id="more-52"></span></p>
<p>Для начала необходимо выделить в блок сам текст:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div class=&quot;frame&quot;&gt;&lt;div id=&quot;animation_div&quot;&gt;&lt;div id=&quot;animate_div&quot;&gt;
Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
Donec vestibulum metus et nulla. Etiam at elit.
Nullam id mi eget lorem hendrerit viverra.
Fusce mi pede, tempor vitae, tristique tempus, molestie id, sem.
Cras mauris dolor, accumsan vitae, gravida a, blandit nec, massa.
&lt;br /&gt;
Morbi metus libero, pellentesque sed, tristique et, ultrices quis, nunc.
Nunc interdum vulputate sem. Donec laoreet sagittis sapien.
In interdum. Nunc tempus purus faucibus lorem.
Proin fermentum tristique nisi. Proin sed nibh ut purus sollicitudin facilisis.
Fusce imperdiet tincidunt metus. Etiam tempor ante a eros.
Curabitur blandit erat a nisl. Sed elit.
&lt;/div&gt;&lt;/div&gt;&lt;/div&gt;
</pre>
<p>Затем оформим соответствующим образом с помощью каскадных таблиц стилей (CSS):</p>
<pre class="brush: css; title: ; notranslate">
div.frame {
padding: 0px;
margin: 0px;
width: 250px;     /* ширина блока */
border: 1px solid #fcc; /* рамка вокруг блока */
}

#animation_div {
position: relative;
padding: 0px;
margin: 0px;
height: 150px;    /* высота блока */
overflow: hidden;
}

#animate_div {
position: relative;
overflow: hidden;
margin:0px;
padding:3px;
/* стиль для текста внутри блока */
color: #000;
text-align: justify;
font: 10px Arial;
}
</pre>
<p>После блока в HTML коде необходимо вставить следующий JavaScript:</p>
<pre class="brush: jscript; title: ; notranslate">
var oText = document.getElementById(&quot;animate_div&quot;);
var oContainer = document.getElementById(&quot;animation_div&quot;);

var nHeight = oText.offsetHeight;
var nPos = oContainer.offsetHeight;

var bScrolling = true;

function OnScrollerMouseOver() {
bScrolling = false;
}

function OnScrollerMouseOut()  {
bScrolling = true;
}

function OnTimer() {
if(!bScrolling)
return;

oText.style.top = nPos.toString() + &quot;px&quot;;
if(--nPos &amp;lt; -nHeight)
nPos = oContainer.offsetHeight;
}

OnTimer();

oContainer.onmouseover = OnScrollerMouseOver;
oContainer.onmouseout  = OnScrollerMouseOut;

window.setInterval(OnTimer, 50); /* задержка перед каждым сдвигом */
</pre>
<p>Суть работы скрипта заключается в том, что он через заданный интервал времени сдвигает текст на 1 пиксель, потому чем больше значение задержки, тем медленнее будет прокручиваться текст.</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/js/cyclic-scrolling-of-content-in-div.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>Графический checkbox с помошью JavaScript</title>
		<link>http://mihalytch.org.ua/programming/js/graph-checkbox-javascript.html</link>
		<comments>http://mihalytch.org.ua/programming/js/graph-checkbox-javascript.html#comments</comments>
		<pubDate>Mon, 23 Jun 2008 16:05:34 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/js/graph-checkbox.html</guid>
		<description><![CDATA[Работая над последним проектом, возникла надобность изменить вид элементов формы: checkbox и select. Так как велосипед изобретать мне не свойственно, [...]]]></description>
			<content:encoded><![CDATA[<p>Работая над последним проектом, возникла надобность изменить вид элементов формы: checkbox и select. Так как велосипед изобретать мне не свойственно, я решил почитать немного умных мыслей, посоветоваться с духами в он-лайне. Потратив пару часов своего времени, я нашел следущее решение.<span id="more-32"></span> Для начала качаем скрипты: <a href="http://mihalytch.org.ua/wp-content/mootools.js" title="demo-moo" >mootools</a>, <a href="http://mihalytch.org.ua/wp-content/demo-moo.js" title="demo-moo" >demo-moo</a></p>
<p>Затем пишем в таблице стилей следующий код, отвечающий за оформление чекбоксов:</p>
<pre class="brush: css; title: ; notranslate">
.f_checkbox {
background-repeat:no-repeat;
background-position:0px center;
height:16px;display:block;
cursor:pointer;
cursor:hand;
width:20px;
height:20px;
}

.checked,.selected{
color:#ddd;
}

.f_checkbox{
padding:0px;
background-color:#ccc;
}

.unchecked{
background-image:url('img/checkbox_off.gif');
}

.checked{
background-image:url('img/checkbox_on.gif');
}
</pre>
<p>В коде страницы делаем следующую запись:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;!-- один из оформляемых чекбоксов --&gt;
&lt;label class=&quot;f_checkbox&quot;&gt;&lt;input type=&quot;checkbox&quot; /&gt;&lt;/label&gt;;
&lt;!-- подключаем скачанные java-скрипты --&gt;
&lt;script type='text/javascript' src='mootools.js'&gt;&lt;/script&gt;
&lt;script type='text/javascript' src='demo-moo.js'&gt;&lt;/script&gt;;
</pre>
<p>checkbox_on.gif и checkbox_off.gif изображения выбранного и не выбранного checkbox`а.</p>
<p>Теперь остается только экспериментировать =)</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/js/graph-checkbox-javascript.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Вертикальное меню</title>
		<link>http://mihalytch.org.ua/css/vertical-menu.html</link>
		<comments>http://mihalytch.org.ua/css/vertical-menu.html#comments</comments>
		<pubDate>Sat, 05 Apr 2008 13:32:08 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[JavaScript]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/web-design/css/vertical-menu.html</guid>
		<description><![CDATA[Существует множество способов создания вертикального меню. С помощью таблиц, блочной верстки, с JavaScript или без него &#8230; Ниже представлен наиболее [...]]]></description>
			<content:encoded><![CDATA[<p>Существует множество способов создания вертикального меню. С помощью таблиц, блочной верстки, с JavaScript или без него &#8230; Ниже представлен наиболее простой способ создания вертикального меню, используя списки и CSS.<span id="more-26"></span></p>
<p>Для начала создадим тело меню средствами HTML:</p>
<pre class="brush: xml; title: ; notranslate">
&lt;div id=&quot;v_menu&quot;&gt;
&lt;ul&gt;
	&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Menu item 1&lt;/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Menu item 2/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Menu item 3/a&gt;&lt;/li&gt;
	&lt;li&gt;&lt;a href=&quot;#&quot;&gt;Menu item 4/a&gt;&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
</pre>
<p>Следующим шагом определим размер всего блока меню, границы, внутренние и внешние отступы, тип шрифта, цвет фона и цвет текста.</p>
<pre class="brush: css; title: ; notranslate">
#v_menu  {
    width: 200px;
    border: 1px solid #000;
    padding: 0 0 0 0;
    margin: 10px 0 0 0;
    font:14px Arial;
    background-color: #90bade;
    color: #333;
}
</pre>
<p>Теперь определим стили самых списков меню, которые являются элементами списка.</p>
<p>Для всего списка зададим нулевые отступы, уберем границу и маркеры списка.</p>
<pre class="brush: css; title: ; notranslate">
#v_menu ul {
    list-style: none;
    margin: 0 0 0 0;
    padding: 0 0 0 0;
    border: none;
}
</pre>
<p>Для каждого из пунктов меню (элементов списка) зададим размер, тип и цвет нижней границы и нулевой отступ.</p>
<pre class="brush: css; title: ; notranslate">
#v_menu li {
    border-bottom: 1px solid #90bade;
    margin: 0 0 0 0; }
</pre>
<p>Следующим шагом оформим сами ссылки. Зададим блочный стиль отображения ссылок (для того чтобы блок самой ссылки растянулся по ширине и высоте пункта списка), внутренние отступы, нулевую границу, цвета фона и самих ссылок, уберем подчеркивание ссылок.</p>
<pre class="brush: css; title: ; notranslate">
#v_menu li a {
    display: block;
    padding: 5px 5px 5px 5px;
    border: 0px;
    background-color: #2175bc;
    color: #fff;
    text-decoration: none;
    width: 100%;
}
</pre>
<p>Следующий стиль существует исключительно потому, что свойство  display: block не срабатывает для браузера IE под Windows.</p>
<pre class="brush: css; title: ; notranslate">
html&gt;body #v_menu li a {
    width: auto;
}
</pre>
<p>Следующий стиль описывает поведение пунктов меню при наведении на них курсора мышки. В данном случае изменяется цвет фона.</p>
<pre class="brush: css; title: ; notranslate">
#v_menu li a:hover {
    border:0px;
    background-color: #2586d7;
    color: #fff;
}
</pre>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/css/vertical-menu.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Калькулятор средствами JavaScript</title>
		<link>http://mihalytch.org.ua/programming/js/javascript-calc.html</link>
		<comments>http://mihalytch.org.ua/programming/js/javascript-calc.html#comments</comments>
		<pubDate>Sat, 29 Mar 2008 15:12:58 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[JavaScript]]></category>
		<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>
		<category><![CDATA[PHP]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/programming/js/javascript-calc.html</guid>
		<description><![CDATA[Калькулятор предназначен, например, для расчета конечной стоимости продукта или услуги в соответствии с прайсом. Как правило, потребность в использовании on-line [...]]]></description>
			<content:encoded><![CDATA[<p> Калькулятор предназначен, например, для расчета конечной стоимости продукта или услуги в соответствии с прайсом. Как правило, потребность в использовании on-line калькулятора возникает в том случае, когда коммерческий(ие) продукт(ы) обладают несколькими динамическими свойствами (цвет, тип материала &#8230;)</p>
<p><span id="more-24"></span>Зачастую, при выборе инструмента для создания on-line калькулятора выбирают JavaScript. Естественно, используют совместно с CSS, HTML, иногда для генерации некоторых частей кода калькулятора используют PHP (или же другие языки, выполняющиеся на стороне сервера), а также технологию AJAX.</p>
<p>Создание калькулятора рассмотрим на примере расчета стоимости изготовления и печати баннера для наружной рекламы.</p>
<p>Для выбора значений из фиксированного списка используем  конструкцию:</p>
<pre id="line1">&lt;<span class="start-tag">select</span><span class="attribute-name"> size</span>=<span class="attribute-value">"1" </span><span class="attribute-name">name</span>=<span class="attribute-value">"list_id" </span><span class="attribute-name">id</span>=<span class="attribute-value">"list_id"</span><span class="attribute-name"></span>&gt;</pre>
<pre id="line1">   &lt;option value="1"&gt; Param 1 &lt;/option&gt;</pre>
<pre id="line1">       ...</pre>
<pre id="line1">   &lt;option value="N"&gt; Param N &lt;/option&gt;</pre>
<pre id="line1">&lt;/select&gt;</pre>
<p>Для ввода/вывода числовых значений, очевидно:</p>
<pre id="line30">&lt;<span class="start-tag">input</span><span class="attribute-name"> type</span>=<span class="attribute-value">"text" </span><span class="attribute-name">name</span>=<span class="attribute-value">"param_id" </span><span class="attribute-name">id</span>=<span class="attribute-value">"</span><span class="attribute-value">param_id</span><span class="attribute-value">" </span><span class="error"><span class="attribute-name">/</span></span>&gt;</pre>
<p>Естественно, должен быть элемент при нажатии на который будет производиться расчет. Предлагаю использовать:</p>
<pre>&lt;<span class="start-tag">input</span><span class="attribute-name"> type</span>=<span class="attribute-value">"button" </span><span class="attribute-name">onClick</span>=<span class="attribute-value">"calculate()" </span><span class="attribute-name">value</span>=<span class="attribute-value">"CALCULATE" </span><span class="error"><span class="attribute-name">/</span></span>&gt;</pre>
<p>Атрибут тега <em>input</em> &#8211;  <em>onClick</em> вызывает функцию <em>calculate ();</em> описанную на языке JavaScript. Далее эта функция производит расчет всех необходимых параметров и вывод данных в соответствующие поля.</p>
<p>Теперь опишем основные задачи, с решением которых придется столкнуться  при разработке данного программного продукта.</p>
<p>1. Извлечение данных из форм.</p>
<p>из полей <em>&lt;input type=&#8221;text&#8221; id=&#8221;element_id&#8221; &#8230; /&gt;, &lt;input type=&#8221;password&#8221;  id=&#8221;element_id&#8221; &#8230; /&gt;</em>, или <em>&lt;select  id=&#8221;element_id&#8221; &#8230;&gt; &#8230; &lt;/select&gt;</em></p>
<pre id="line64">var element_value = document.getElementById('element_id').value;</pre>
<pre id="line64">// в переменную возвращается текстовое или числовое значение</pre>
<p>из <em>&lt;<span class="start-tag">input</span><span class="attribute-name"> type</span>=<span class="attribute-value">&#8220;checkbox&#8221; </span> id=&#8221;<span class="attribute-value">checkbox_id</span>&#8221; &#8230; /&gt;</em></p>
<pre id="line64">var <span class="attribute-value">checkbox_value</span> = document.getElementById('<span class="attribute-value">checkbox_id</span>').checked;</pre>
<pre id="line64">// в переменную возвращается значение true либо false</pre>
<p>2. Обработка данных.</p>
<p>В рамках данной статьи считаю излишним описывать математические, строковые и другие операции допустимые в рамках JavaScript.</p>
<p>Возможно, возникнет сложность с преобразованием типов данных. Ниже приведу несколько полезных примеров.</p>
<pre id="line64">// Преобразование строкового типа в ...</pre>
<pre id="line64">int_ = parseInt(str_);      // ... целочисленный</pre>
<pre id="line64">float_ = parseFloat(str_)   // ... с плавающей точкой</pre>
<p>Для разделения числа на целую и дробную части в JavaScript используют точку. Для удобства конечных пользователей, было бы логичным сделать допустимым как точку, так и запятую.</p>
<pre id="line64">var element_value = document.getElementById('element_id').value;</pre>
<pre id="line64">element_value = parseFloat(element_value.replace(',','.'));</pre>
<p>Задача, с которой столкнулся автор. Имеем список материалов, для каждого типа материалов есть список допустимых разрешений печати. Для каждого разрешения печати и материала существует определенная стоимость.</p>
<p>Решение.  Создаем список материалов с помощью <em>&lt;select &#8230;&gt;</em>. Каждому материалу присваиваем уникальный номер (далее ID). Создаем массив, в котором каждому <em>ID</em> материала соответствует список доступных разрешений печати. В последнем списке, <em>ID</em> присваиваем каждому доступному разрешению начиная с нуля.</p>
<p>Далее необходимо организовать динамическое изменение списка допустимых разрешений печати при выборе конкретного материала. Пишем функцию ( <em>print_dpi_list ();</em> ), которая в зависимости от выбранного <em>ID</em> материала вставляет в блок на странице отмеченный <em>&lt;div id=&#8221;dpi_list&#8221;&gt;&lt;/div&gt;</em> код списка допустимых разрешений. Динамический импорт кода HTML в страницу производится следующим способом:</p>
<pre id="line64">document.all.dpi_list.innerHTML = list_arr[list_num];</pre>
<pre id="line64">// list_num - ID материала</pre>
<pre id="line64">// list_arr - массив списков допустимых разрешений печати</pre>
<pre id="line64">// dpi_list - имя блока, в который вставляем список.</pre>
<p>Также необходимо организовать вызов функции изменения списка допустимых разрешений печати. Используем атрибут <span class="attribute-name"><em>onChange</em>:</span></p>
<pre id="line1">&lt;<span class="start-tag">select</span><span class="attribute-name"> size</span>=<span class="attribute-value">"1" </span><span class="attribute-name">name</span>=<span class="attribute-value">"mat" </span><span class="attribute-name">id</span>=<span class="attribute-value">"mat" </span><span class="attribute-name">onChange</span>=<span class="attribute-value">"print_dpi_list();"</span>&gt;</pre>
<p>Теперь необходимо поставить в соответствие каждому материалу и разрешению цену за печать. Для этого создадим двумерный массив. 1е измерение  <em>ID</em> материала, 2е &#8211; <em>ID</em> разрешения печати. Массив будет выглядеть примерно так:</p>
<pre id="line64">	var price;
	price = new Array ();
	price[0] = new Array ();
	price[1] = new Array ();
   ...

	price[0][0] = 300;
	price[0][1] = 350;
	price[0][2] = 400;
	price[0][3] = 450;
	price[0][4] = 500;

	price[1][0] = 480;
	price[1][1] = 680;
	price[1][2] = 680;
	price[1][3] = 1200;</pre>
<pre id="line64">   ...</pre>
<p>Теперь для расчета цены необходимо всего лишь извлечь из списков <em>ID</em> выбранных значений и подставить в координаты элемента массива:</p>
<pre id="line64">var out_price = price[list_num][dpi_num];</pre>
<p>3. Вывод результатов.</p>
<p>Самый простой способ вывести результат с помощью сообщения <em>alert (&#8216;текст сообщения&#8217;);</em>. Я лично нахожу его неприемлемым. Этот метод допустим лишь в том случае, если необходимо возвратить пользователю одно значение. Как правило итоговых расчетных значений и промежуточных 2 или более&#8230; Поэтому необходимо создать поля, в которых будут выводиться значения.</p>
<p>Для текстовых полей формы, например: <em>&lt;input type=&#8221;text&#8221;  id=&#8221;out_price_inp&#8221; /&gt;</em></p>
<pre id="line64">document.getElementById('out_price_inp').value = out_price;</pre>
<p>Либо в текстовый блок, например обозначенный как <em>&lt;div id=&#8221;out_price_div&#8221;&gt;&lt;/div&gt;</em></p>
<pre id="line64">	// результат, который содержит код HTML</pre>
<pre id="line64">document.all.out_price_div.innerHTML = out_price;</pre>
<pre id="line64">	// результат, который содержит только текст без кода HTML</pre>
<pre id="line64">document.all.out_price_div.innerTEXT = out_price;</pre>
<p>Так же можно реализовать возможность пересчета данных при изменении параметров в каком либо поле (полях) ввода данных. Для этого добавляем в необходимые теги атрибут <em><span class="attribute-name">onChange=&#8221;</span>calculate ();</em><span class="attribute-name"><em>&#8220;</em> (который вызывают функцию расчета при изменении заданного поля) либо </span><em><span class="attribute-name">onClick=&#8221;</span>calculate ();</em><span class="attribute-name"><em>&#8220;</em> (функция будет вызвана после одиночного клика левой кнопки мыши на объект с данным атрибутом)</span></p>
<p>Еще совет. Скорее всего будут иметь место постоянные величины (например, цена резки баннера за метр и т.д.), которые могут меняться раз в месяц или более &#8230; Для удобства администратора сайта их следует сохранить в базу и управление величиной этих параметров сделать доступным из административной части сайта. А в месте генерации JavaScript кода калькулятора при определении переменных написать код примерно такого содержания:</p>
<pre id="line64">&lt;?php</pre>
<pre id="line64">  ...</pre>
<pre id="line64">	echo 'var price_porezka = '.$price_1.';';  // цена за порезку
	echo 'ar price_luvers = '.$price_2.';';    // цена за люверс
	echo 'ar karman_price = '.$price_3.';';    // цена за метр кармана</pre>
<pre id="line64">  ...</pre>
<pre id="line64">?&gt;</pre>
<p>Где <em>$price_1, $price_2, $price_3</em> &#8211; переменные заранее выбранные из базы.</p>
<p>Данная статья написана по мотивам разработки реального проекта =)</p>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/programming/js/javascript-calc.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Горизонтальное меню</title>
		<link>http://mihalytch.org.ua/css/horisontal-menu.html</link>
		<comments>http://mihalytch.org.ua/css/horisontal-menu.html#comments</comments>
		<pubDate>Thu, 28 Feb 2008 14:05:30 +0000</pubDate>
		<dc:creator>mihal</dc:creator>
				<category><![CDATA[CSS]]></category>
		<category><![CDATA[HTML]]></category>

		<guid isPermaLink="false">http://mihalytch.org.ua/web_design/css/%d0%b3%d0%be%d1%80%d0%b8%d0%b7%d0%be%d0%bd%d1%82%d0%b0%d0%bb%d1%8c%d0%bd%d0%be%d0%b5-%d0%bc%d0%b5%d0%bd%d1%8e.html</guid>
		<description><![CDATA[Меню сайта, которые мы видим на каждом сайте, могут быть оформлены как списки. По большому счету, меню сайта и является [...]]]></description>
			<content:encoded><![CDATA[<p>Меню сайта, которые мы видим на каждом сайте, могут быть оформлены как списки. По большому счету, меню сайта и является списком ссылок. Но для того чтобы список отображался не в том виде, в каком выводит браузер, следует воспользоваться каскадными таблицами стилей CSS. В данном случае, нам следует расположить элементы списка горизонтально и убрать маркеры.<br />
<span id="more-16"></span><br />
Создадим базовый блок DIV в котором разместим наше меню. Этот блок в дальнейшем нужно будет использовать для позиционирования горизонтального меню на сайте. Зададим для блока &lt;div id=&#8221;div_container&#8221;&gt; и пропишем для него стиль в CSS:</p>
<pre class="brush: css">#div_container {
    padding: 5px;
    border: 1px solid #000;
    margin-bottom: 25px;
}</pre>
<p>Теперь создадим стиль для списка.</p>
<pre class="brush: css">#div_container ul {
    margin-left: 0;
    padding-left: 0;
        /* задаем отображение списка в строку */
    display: inline;
}</pre>
<p>Создаем стиль отображения каждого элемента списка:</p>
<pre class="brush: css">#div_container ul li {
    margin-left: 0;
    padding: 2px 10px 0 0 ;
        /* задаем разделитель между пунктами меню */
    border-left: 1px solid #000;
        /* запрещаем отображение маркеров списка */
    list-style: none;
    display: inline;
}</pre>
<p>Следующий стиль создан для первого элемента списка, в котором не должно быть вертикального разделителя слева:</p>
<pre class="brush: css">#div_container ul li.first {
    margin-left: 0;
    border-left: none;
    list-style: none;
    display: inline;
}</pre>
<p>Теперь приведем пример кода меню:</p>
<pre class="brush: xml">&lt;div id="div_container"&gt;
    &lt;ul&gt;
    &lt;li&gt;&lt;a htef="#"&gt;Link 1&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a htef="#"&gt;Link 2&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a htef="#"&gt;Link 3&lt;/a&gt;&lt;/li&gt;
    &lt;li&gt;&lt;a htef="#"&gt;Link 4&lt;/a&gt;&lt;/li&gt;
    &lt;/ul&gt;</pre>
<pre class="sourcecode">&lt;/div&gt;</pre>
<p>В заключение следует создать стиль для ссылок. Например:</p>
<pre class="brush: css">#div_container ul li a, a:hover, a:link {
    text-decoration: none;
    font: 12px Tahoma;
}</pre>
]]></content:encoded>
			<wfw:commentRss>http://mihalytch.org.ua/css/horisontal-menu.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

