<?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>Martin Pešout &#187; animace</title>
	<atom:link href="https://www.martinpesout.cz/tag/animace/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.martinpesout.cz</link>
	<description>Front-end vývojář</description>
	<lastBuildDate>Thu, 26 Jun 2025 22:12:07 +0000</lastBuildDate>
	<language>cs-CZ</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.6</generator>
		<item>
		<title>Animované barevné přechody v CSS</title>
		<link>https://www.martinpesout.cz/animovane-barevne-prechody-v-css/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=rss</link>
		<comments>https://www.martinpesout.cz/animovane-barevne-prechody-v-css/#comments</comments>
		<pubDate>Sat, 04 Jan 2014 13:27:42 +0000</pubDate>
		<dc:creator>Martin Pešout</dc:creator>
				<category><![CDATA[Kódování]]></category>
		<category><![CDATA[animace]]></category>
		<category><![CDATA[CSS3]]></category>
		<category><![CDATA[kódování]]></category>

		<guid isPermaLink="false">http://www.martinpesout.cz/?p=1958</guid>
		<description><![CDATA[Běžný front-end vývojář musí čas od času použít barevné přechody u různých prvků na webové stránce. Typickým příkladem může být třeba barevné talčítko. Jenže rozhodneme-li se přidat k takovému tlačítku animaci, např. při najetí myši ho budeme chtít plynule zesvětlit,]]></description>
				<content:encoded><![CDATA[<div class="l-submain"><div class="l-submain-h g-html i-cf"><p>Běžný front-end vývojář musí čas od času použít barevné přechody u různých prvků na webové stránce. Typickým příkladem může být třeba barevné talčítko. Jenže rozhodneme-li se přidat k takovému tlačítku animaci, např. při najetí myši ho budeme chtít plynule zesvětlit, tak narazíme na problém, protože prohlížeč naší animaci jednoduše ignoruje. V dnešním článku bych rád ukázal zajímavou techniku jen za použití CSS, která problém animovaných přechodů do určité míry řeší.</p>
<h2>Proč problém nastává?</h2>
<p>Aby bylo možné si udělat představu, jak funguje původní neopravené řešení, tak jsem připravil malou ukázku:</p>
<pre class="codepen"data-height="300"data-type="result"data-href="nxqby"data-user="martinpesout"data-safe="true"><code></code><a href="http://codepen.io/martinpesout/pen/nxqby">Check out this Pen!</a></pre><script async src="http://codepen.io/assets/embed/ei.js"></script>
<p>Důvod, proč nelze barevný přechod animovat, je jednoduchý. Podíváme-li se do <a href="http://www.w3.org/TR/css3-transitions/#animatable-properties">specifikace</a>, tak zde uvidíme celou řadu vlastností, na které lze animace použít. Barevné přechody musíme brát jako obrázky, které se renderují přímo v prohlížeči. A právě <code>background-image</code> není v seznamu podporovaných vlastností.</p>
<h2>Jednoduchý trik pro jednoduché animace</h2>
<p>Je sice pravda, že animaci nelze použít na vlastnost <code>background-image</code>, ale je zde stále řada jiných vlastností, které takové omezení nemají. Protože se jedná o jistý druh obrázku, tak máme k dispozici <code>background-size</code> a <code>background-position</code>. A právě <code>background-position</code> již animovat lze. Naleznete jí také v zmíněném <a href="http://www.w3.org/TR/css3-transitions/#animatable-properties">seznamu</a>.</p>
<p>Použijme tedy následující trik. Pozadí (barevný přechod) roztáhneme na výšku pomoci <code>background-size</code> na velikost rovnou dvojnásobku původní velikosti a po najetí myši posuneme celý obrázek o 100% nahoru (tzn. o celý původní rozměr). Zápis v CSS může vypadat následujícím způsobem:</p>
<pre class="brush: css; title: ; notranslate">
.btn {
  background: linear-gradient(#ffce25,#ff9201);
  background-size: auto 200%;
  background-position: 0 100%;
  background-repeat: repeat;
}
</pre>
<p>Nezapomeňte dodržet pořadí zápisu a definovat barevný přechod před změnou jeho velikosti na 200%. Pak už jen zbývá přidat zmíněnou animaci a efekt, který nastane při přejetí myší:</p>
<pre class="brush: css; title: ; notranslate">
.btn {
  transition-property: all;
  transition-duration: 0.25s;
  transition-timing-function: linear;
}

.btn:hover {
  background-position: 0 0;
}
</pre>
<p>Výsledek si můžete prohlédnout zde:</p>
<pre class="codepen"data-height="300"data-type="result"data-href="skAie"data-user="martinpesout"data-safe="true"><code></code><a href="http://codepen.io/martinpesout/pen/skAie">Check out this Pen!</a></pre><script async src="http://codepen.io/assets/embed/ei.js"></script>
<h2>Podpora běžných prohlížečů</h2>
<p>Toto řešení je podporováno u těch prohlížečů, kde je již implementována podpora CSS vlastnosti <code>linear-gradient</code>:</p>
<ul>
<li>Chrome 4+</li>
<li>Firefox 3.6+</li>
<li>Opera 11.1+</li>
<li>Safari 4+</li>
<li>Internet Explorer 10+</li>
</ul>
<p>Více informací naleznete zde <a href="http://caniuse.com/css-gradients">http://caniuse.com/css-gradients</a>.</p>
<p>I když v této ukázce nejsou podporovány starší verze prohlížečů Internet Explorer 8 a 9, tak nemusíme ještě házet flintu do žita. Toto řešení obsahuje jednoduchý fallback a při jejich použití se zobrazí se pouze čísté jednobarevné tlačítko s barvou definovanou u vlastnosti <code>background</code>. Přijdeme sice o animaci a barevný přechod, ale to je jediný rozdíl. Důležité je, že tlačítko neztratí rozměry a barevností zůstane také stejné.</p>
<h2>Závěrem</h2>
<p>Z ukázky lze vidět, že toto jednoduché řešení se hodí pouze na lineární tranformace. Nicméně tyto transformace bývají nejčastější a právě u prvků, jako jsou tlačítka, je využijeme nejvíce. Pokud však někdo z čtenářů objeví lepší a třeba i čistší řešení, budu velice rád, když se o něj podělí v komentářích.</p>
<div class="w-actionbox color_alternate controls_aside"><div class="w-actionbox-h"><div class="w-actionbox-text"><h3>Novinky ze světa front-endu</h3><p>Pokud vás zajímají další novinky ze světa front-endu, můžete sledovat můj profil na Twitteru</p></div><div class="w-actionbox-controls at_right"><a class="w-actionbox-button g-btn type_default" href="https://twitter.com/martinpesout"><span>@martinpesout</span></a></div></div></div>
</div></div>]]></content:encoded>
			<wfw:commentRss>https://www.martinpesout.cz/animovane-barevne-prechody-v-css/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
