<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Блоги: заметки с тегом css</title>
<link>https://www.blogengine.me/blogs/tags/css/</link>
<description>Автоматически собираемая лента заметок, написанных в блогах на Эгее</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.0 (v4079e)</generator>

<itunes:subtitle>Автоматически собираемая лента заметок, написанных в блогах на Эгее</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit>no</itunes:explicit>

<item>
<title>Картинка на чистом CSS-2</title>
<guid isPermaLink="false">120274</guid>
<link>https://bolknote.ru/all/3478/</link>
<pubDate>Sat, 12 Nov 2011 01:24:00 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/3478/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;div class="e2-text-table"&gt;
&lt;table cellpadding="0" cellspacing="0" border="0"&gt;
&lt;tr&gt;
&lt;td&gt;&lt;img width="660" height="306" src="//bolknote.ru/imgs/2011.11.12.jpg" alt="Ещё картинка на чистом CSS (82.31КиБ)"&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/table&gt;
&lt;/div&gt;
&lt;p&gt;Я тут всё это время думал как дёшево улучшить свой &lt;a href="/2011/11/03/~3466"&gt;конвертор картинок в чистый CSS&lt;/a&gt; и придумал.&lt;/p&gt;
&lt;p&gt;Выкинул «radial-gradient» и стал использовать «linear-gradient». Картинка, которая в прошлой версии занимала 164КБ, сейчас занимает &lt;s&gt;89&lt;/s&gt; 79. Это уже неплохо, в сжатом (gzip) виде этот код занимает 19КБ, что всего в два с половиной раза больше, чем исходное изображение в PNG. Результат можно сильно улучшить, если отказаться от повтора цвета, но изображения с мелкими деталями (с текстом, например) пострадают.&lt;/p&gt;
&lt;p&gt;Кстати говоря, логотип студии Лебедева при конвертации из PNG (6,7КБ) уменьшился до &lt;s&gt;1,6КБ&lt;/s&gt; 1,3КБ. Это уже реальная экономия, если бы не префиксы браузеров.&lt;/p&gt;
&lt;p&gt;Отказ от радиального градиента в пользу линейного позволил мне кодировать целую строку изображения одной конструкцией, что, в свою очередь, позволило сильно экономить на повторяющихся байтах (кстати, можно попробовать группировать пиксели по вертикали и горизонтали, а потом выбирать лучший вариант).&lt;/p&gt;
&lt;p&gt;Кстати этот раз «Опера», увы, не смогла показать картинку, так как, похоже, не поддерживает позиционирование для линейных градиентов.&lt;/p&gt;
&lt;p&gt;&lt;b&gt;Добавлено позднее&lt;/b&gt;: сделал оптимизацию, теперь конвертор делает два прогона: один просматривает пиксели по горизонтали, второй по вертикали. Выбирается тот, который даёт наименьший результат.&lt;/p&gt;
&lt;p&gt;Ключи запуска те же.&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="php"&gt;&amp;lt;?
// ffccbb → fcb
// ff0000 → red
// abcdef → abcdef
function Bo_shortcolor($color) {
    static $shortnames = array(
        &amp;quot;c0c0c0&amp;quot; =&amp;gt; &amp;quot;silver&amp;quot;,
        &amp;quot;808080&amp;quot; =&amp;gt; &amp;quot;gray&amp;quot;,
        &amp;quot;800000&amp;quot; =&amp;gt; &amp;quot;maroon&amp;quot;,
        &amp;quot;ff0000&amp;quot; =&amp;gt; &amp;quot;red&amp;quot;,
        &amp;quot;800080&amp;quot; =&amp;gt; &amp;quot;purple&amp;quot;,
        &amp;quot;008000&amp;quot; =&amp;gt; &amp;quot;green&amp;quot;,
        &amp;quot;808000&amp;quot; =&amp;gt; &amp;quot;olive&amp;quot;,
        &amp;quot;000080&amp;quot; =&amp;gt; &amp;quot;navy&amp;quot;,
        &amp;quot;008080&amp;quot; =&amp;gt; &amp;quot;teal&amp;quot;,
        &amp;quot;f0ffff&amp;quot; =&amp;gt; &amp;quot;azure&amp;quot;,
        &amp;quot;f5f5dc&amp;quot; =&amp;gt; &amp;quot;beige&amp;quot;,
        &amp;quot;ffe4c4&amp;quot; =&amp;gt; &amp;quot;bisque&amp;quot;,
        &amp;quot;a52a2a&amp;quot; =&amp;gt; &amp;quot;brown&amp;quot;,
        &amp;quot;ff7f50&amp;quot; =&amp;gt; &amp;quot;coral&amp;quot;,
        &amp;quot;ffd700&amp;quot; =&amp;gt; &amp;quot;gold&amp;quot;,
        &amp;quot;808080&amp;quot; =&amp;gt; &amp;quot;gray&amp;quot;,
        &amp;quot;008000&amp;quot; =&amp;gt; &amp;quot;green&amp;quot;,
        &amp;quot;808080&amp;quot; =&amp;gt; &amp;quot;grey&amp;quot;,
        &amp;quot;4b0082&amp;quot; =&amp;gt; &amp;quot;indigo&amp;quot;,
        &amp;quot;fffff0&amp;quot; =&amp;gt; &amp;quot;ivory&amp;quot;,
        &amp;quot;f0e68c&amp;quot; =&amp;gt; &amp;quot;khaki&amp;quot;,
        &amp;quot;faf0e6&amp;quot; =&amp;gt; &amp;quot;linen&amp;quot;,
        &amp;quot;800000&amp;quot; =&amp;gt; &amp;quot;maroon&amp;quot;,
        &amp;quot;000080&amp;quot; =&amp;gt; &amp;quot;navy&amp;quot;,
        &amp;quot;808000&amp;quot; =&amp;gt; &amp;quot;olive&amp;quot;,
        &amp;quot;ffa500&amp;quot; =&amp;gt; &amp;quot;orange&amp;quot;,
        &amp;quot;da70d6&amp;quot; =&amp;gt; &amp;quot;orchid&amp;quot;,
        &amp;quot;cd853f&amp;quot; =&amp;gt; &amp;quot;peru&amp;quot;,
        &amp;quot;ffc0cb&amp;quot; =&amp;gt; &amp;quot;pink&amp;quot;,
        &amp;quot;dda0dd&amp;quot; =&amp;gt; &amp;quot;plum&amp;quot;,
        &amp;quot;800080&amp;quot; =&amp;gt; &amp;quot;purple&amp;quot;,
        &amp;quot;ff0000&amp;quot; =&amp;gt; &amp;quot;red&amp;quot;,
        &amp;quot;fa8072&amp;quot; =&amp;gt; &amp;quot;salmon&amp;quot;,
        &amp;quot;a0522d&amp;quot; =&amp;gt; &amp;quot;sienna&amp;quot;,
        &amp;quot;c0c0c0&amp;quot; =&amp;gt; &amp;quot;silver&amp;quot;,
        &amp;quot;fffafa&amp;quot; =&amp;gt; &amp;quot;snow&amp;quot;,
        &amp;quot;d2b48c&amp;quot; =&amp;gt; &amp;quot;tan&amp;quot;,
        &amp;quot;008080&amp;quot; =&amp;gt; &amp;quot;teal&amp;quot;,
        &amp;quot;ff6347&amp;quot; =&amp;gt; &amp;quot;tomato&amp;quot;,
        &amp;quot;ee82ee&amp;quot; =&amp;gt; &amp;quot;violet&amp;quot;,
        &amp;quot;f5deb3&amp;quot; =&amp;gt; &amp;quot;wheat&amp;quot;,
    );

    $c = strtolower($color);
    if (isset($shortnames[$c])) {
        return $shortnames[$c];
    }

    if ($c[0] == $c[1] &amp;amp;&amp;amp; $c[2] == $c[3] &amp;amp;&amp;amp; $c[4] == $c[5]) {
        return &amp;#039;#&amp;#039; . $c[1] . $c[3] . $c[5];
    }

    return &amp;#039;#&amp;#039; . $c;
}

class Bo {
    public function __get($num) {
        return $num ? $num . &amp;#039;px&amp;#039; : 0;
    }
}

function Bo_convert_helper($im, $lim1, $lim2, $getpix, $dotmask, $z) {
    $end  = $lim1 - 1;
    $dots = array();

    for ($o1 = 0; $o1&amp;lt;$lim2; $o1++) {
        $coll = array();
        $prev    = null;
        $start   = 0;

        for ($o2 = 0; $o2&amp;lt;$lim1; $o2++) {
            $pixel = $getpix($im, $o2, $o1);

            if ($prev !== null &amp;amp;&amp;amp; $prev !== $pixel || $o2 == $end) {
                if ($prev !== null) {
                    $color = Bo_shortcolor(vsprintf(&amp;#039;%02x%02x%02x&amp;#039;, $prev));

                    $coll[] = &amp;quot;$color {$z-&amp;gt;$start},$color {$z-&amp;gt;$o2}&amp;quot;;
                }

                if ($o2 == $end &amp;amp;&amp;amp; $prev != $pixel) {
                    $color = Bo_shortcolor(vsprintf(&amp;#039;%02x%02x%02x&amp;#039;, $pixel));
                    $cell[] = &amp;quot;$color {$z-&amp;gt;$o2}&amp;quot;;
                }

                $start = $o2;
            }

            $prev = $pixel;
        }

        $dots[] = sprintf($dotmask, implode(&amp;#039;,&amp;#039;, $coll), $z-&amp;gt;$o1);
    }

    return $dots;
}


function Bo_convert($filename, $prefix = &amp;#039;&amp;#039;) {
    $z = new Bo();

    if (!file_exists($filename) &amp;amp;&amp;amp; !is_readable($filename)) {
        throw new Exception(&amp;#039;File not found.&amp;#039;);
    }

    $types = array(
        IMAGETYPE_JPG =&amp;gt; &amp;#039;jpeg&amp;#039;,
        IMAGETYPE_PNG =&amp;gt; &amp;#039;png&amp;#039;,
        IMAGETYPE_GIF =&amp;gt; &amp;#039;gif&amp;#039;,
    );

    $imagedata = @getimagesize($filename);
    if (!is_array($imagedata) || !isset($imagedata[2]) || !isset($types[$imagedata[2]])) {
        throw new Exception(&amp;#039;Unknown image format&amp;#039;);
    }

    $im = call_user_func(&amp;quot;imagecreatefrom&amp;quot; . $types[$imagedata[2]], $filename);
    $sw = $w = imagesx($im);
    $sh = $h = imagesy($im);

    $hfunc = create_function(&amp;#039;$im, $x, $y&amp;#039;, &amp;#039;return imagecolorsforindex($im, imagecolorat($im, $x, $y));&amp;#039;);
    $hmask = &amp;quot;{$prefix}linear-gradient(0,%s) 0 %s&amp;quot;;

    $hdots = join(&amp;#039;,&amp;#039;, Bo_convert_helper($im, $w, $h, $hfunc, $hmask, $z));

    $vfunc = create_function(&amp;#039;$im, $y, $x&amp;#039;, &amp;#039;return imagecolorsforindex($im, imagecolorat($im, $x, $y));&amp;#039;);
    $vmask = &amp;quot;{$prefix}linear-gradient(90,%s) %s 0&amp;quot;;

    $vdots = join(&amp;#039;,&amp;#039;, Bo_convert_helper($im, $h, $w, $vfunc, $vmask, $z));

    if (strlen($hdots) &amp;gt; strlen($vdots)) {
        $dots = $vdots;
        $sw = 1;
    } else {
        $dots = $hdots;
        $sh = 1;
    }

    return &amp;lt;&amp;lt;&amp;lt;HTML
&amp;lt;head&amp;gt;
&amp;lt;title&amp;gt;$filename converted in background by Evgeny Stepanischev //bolknote.ru&amp;lt;/title&amp;gt;
&amp;lt;style text=&amp;quot;text/css&amp;quot;&amp;gt;
    div {
        background: $dots;
        background-repeat: no-repeat;
        {$prefix}background-size: {$sw}px {$sh}px;
        background-size: {$sw}px {$sh}px;
        width: {$w}px; height: {$h}px;
    }
&amp;lt;/style&amp;gt;
&amp;lt;body&amp;gt;
&amp;lt;div&amp;gt;&amp;lt;/div&amp;gt;
&amp;lt;/body&amp;gt;
HTML;
}

if ($_SERVER[&amp;#039;argc&amp;#039;] &amp;lt; 2) {
    echo &amp;lt;&amp;lt;&amp;lt;HELP
Image to background CSS convertor v2 by Evgeny Stepanischev. //bolknote.ru Nov 2011

Usage: {$_SERVER[&amp;#039;argv&amp;#039;][0]} filename [prefix]

filename  - image file name (PNG, JPEG or GIF)
prefix    - your browser name (Opera, IE, FF, Safari, Chrome)

HELP;
exit;
}

$browsers = array(
    &amp;#039;ie&amp;#039;     =&amp;gt; &amp;#039;-ms-&amp;#039;,
    &amp;#039;opera&amp;#039;  =&amp;gt; &amp;#039;-o-&amp;#039;,
    &amp;#039;safari&amp;#039; =&amp;gt; &amp;#039;-webkit-&amp;#039;,
    &amp;#039;chrome&amp;#039; =&amp;gt; &amp;#039;-webkit-&amp;#039;,
    &amp;#039;chromium&amp;#039; =&amp;gt; &amp;#039;-webkit-&amp;#039;,
    &amp;#039;ff&amp;#039; =&amp;gt; &amp;#039;-moz-&amp;#039;,
    &amp;#039;firefox&amp;#039; =&amp;gt; &amp;#039;-moz-&amp;#039;,
);

if (isset($_SERVER[&amp;#039;argv&amp;#039;][2])) {
    $type = strtolower($_SERVER[&amp;#039;argv&amp;#039;][2]);
    $prefix = isset($browsers[$type]) ? $browsers[$type] : &amp;#039;-&amp;#039; . $type . &amp;#039;-&amp;#039;;
} else {
    $prefix = &amp;#039;&amp;#039;;
}

try {
    echo Bo_convert($_SERVER[&amp;#039;argv&amp;#039;][1], $prefix);
} catch (Exception $e) {
    echo &amp;quot;Error: &amp;quot;, $e-&amp;gt;getMessage(), &amp;quot;\n&amp;quot;;
    exit(1);
};&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>Фокусы с GIF, прозрачность и hover</title>
<guid isPermaLink="false">130909</guid>
<link>https://bolknote.ru/all/1436/</link>
<pubDate>Thu, 01 Nov 2007 15:41:00 +0500</pubDate>
<author>Евгений Степанищев</author>
<comments>https://bolknote.ru/all/1436/</comments>
<description>
&lt;p&gt;&lt;a href="https://bolknote.ru/"&gt;Евгений Степанищев&lt;/a&gt;:&lt;/p&gt;
&lt;style type="text/css"&gt;
a.link-2007-11-01-gun { border: 0 }
a.link-2007-11-01-gun:hover img { background: black }
a.link-2007-11-01-gun img { margin: 0px; border-right: 2px solid black; background: white }
&lt;/style&gt;
&lt;div style="float: left; width: 115px; height: 29px; margin: 10px"&gt;&lt;p&gt;&lt;a href="#" class="link-2007-11-01-gun" align="left"&gt;&lt;img src="/imgs/2007.11.01.03.gif" border="0" width="115" height="29" alt="" align="center" /&gt;&lt;/a&gt;&lt;/p&gt;
&lt;/div&gt;&lt;p&gt;Самые внимательные, наверное, заметили, что в прошлых заметках у меня на картинке использовалась эмуляция эффекта наведения на ссылку — посмотрите, если навести на картинку мышку, «ссылка», выделенная синим, на картинке подчеркнётся. И это не JavaScript.&lt;/p&gt;
&lt;p&gt;Объяснение очень простое — картинка сделана с прозрачностью, далее при помощи CSS под неё подставлен белый фон, а при наведении (селектор «:hover») фон меняется на голубой. Такой же эффект использован на картинке с пистолетом слева (наведите мышку). Ссылка на картинке обязательна — без неё в Internet Explorer (версии ниже 7-й) фон менять не будет, «:hover» просто не сработает. Таблица стилей для этой картинки выглядит вот так:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;a.gun:hover img { background: black } /* стиль при наведении мышкой */
a.gun img { margin: 0px; background: white } /* убираем поля в Opera и подкладываем белый фон */&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;HTML, соотвественно:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;a href=&amp;quot;#&amp;quot; class=&amp;quot;gun&amp;quot;&amp;gt;&amp;lt;img src=&amp;quot;gun.gif&amp;quot; /&amp;gt;&amp;lt;/a&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;/pre&gt;&lt;p&gt;Если вам не ясно, почему пистолетик «стреляет» (т. е. почему изображение движется, когда наводишь мышку), то тут всё просто — прозрачная область движется (это animated GIF), на белом фоне этого не видно, когда фон меняется, создаётся эффект движущейся пули.&lt;/p&gt;
&lt;p&gt;Ещё интересные эффекты можно получить, если использовать альфа-канал (полупрозрачность) в формате PNG, но, к сожалению, об анимации тут придётся забыть.&lt;/p&gt;
</description>
</item>


</channel>
</rss>