Možná si někdo z vás pokládal otázku, zda lze pomocí CSS zprůhlednit obrázek, nebo text. Možná už se to někomu podařilo, možná ne. My se proletíme od základů CSS transparentnosti přes moře příkladů až po využití v praxi.
Jestli jste někdy překrývali vzorek na pozadí své stránky PNG obrázkem, abyste určitou plochu ztmavili, nebo zesvětlili, dělali jste to zbytečně – CSS práci průhledných PNG obrázků zastane. Stejně jako u PNG obrázků si můžete v CSS nastavit míru průhlednosti, velikost plochy, vzorek na pozadí, obrys… Možná se nyní ptáte, proč je lepší udělat průhlednost přes CSS, než přes grafický formát PNG. Odpověď je velice jednoduchá – starší verze IE vůbec nezvládají formát PNG, bohužel.
Základy CSS průhlednosti
Jak moc chceme mít obrázek průhledný? Chceme, aby byl z 50 % průhledný, nebo úplně neprůhledný? Abych vysvětlil pojmy „průhlednost“ a „neprůhlednost“ – když máme obrázek z 5 % průhledný, znamená to, že je z 95 % neprůhledný (tedy skoro v standardním zobrazení, standard je 100 %). Pokud tedy chceme mít obrázek úplně neprůhledný, potom použijeme CSS zápis opacity: 1.0;
. Naopak naprosto průhledný obrázek se bude reprezentovat zápisem opacity: 0.0;
.
Jak docílit průhlednosti ve všech prohlížečích?
Průhlednost je jedna z těch věcí, které každý prohlížeč zobrazí úplně jinak (popřípadě vůbec). Pro správné zobrazení ve všech prohlížečích potřebujeme čtyři CSS zápisy, které zajistí správné zobrazení v Internet Exploreru, Firefoxu, Opeře, Safari a Netscape Navigatoru. Zde jsou, všechny jsou nastaveny na průhlednost 50 %:
.pruhledne {
opacity: 0.5;
filter: alpha(opacity=50);
-moz-opacity: 0.5;
-khtml-opacity: 0.5;
}
- opacity: 0.5; – nejdůležitější zápis, protože je to standard v CSS. Tento zápis bude fungovat v nejnovějších verzích prohlížečů Firefox, Safari a Opera. Bylo by to vše, co k průhlednosti potřebujete, kdyby všechny prohlížeče podporovaly běžné standardy.
- filter: alpha(opacity=50); – tento zápis potřebujete pro správnou funkčnost v IE.
- -moz-opacity: 0.5; – aby průhlednost podporovaly i starší verze prohlížeče Netscape Navigator, použijete tento zápis.
- -khtml-opacity: 0.5; – tímto zápisem otevřete cestu k průhlednosti starším verzím prohlížeče Safari.
Příklady průhlednosti textu
Tento text má nastavenou průhlednost na 25 %. Tento text má nastavenou průhlednost na 50 %. Tento text má nastavenou průhlednost na 75 %. Tento text nemá nastavenou průhlednost.
Možná si nyní říkáte, proč takovýto „stupidní“ příklad vůbec uvádím – že je to jasné. Bohužel, není. Průhlednost textu je totiž ještě o něco komplikovanější, než průhlednost obrázků.
Ze zvědavosti jsem si zkusil malý pokus, který mě o průhlednosti textu mnoho naučil.
Pokus s průhledností textu
Nejspíš si myslíte, že když jde tak lehce zprůhlednit obrázek, že to bude s textem podobné (když jsem poprvé viděl průhlednost přes CSS, také jsem si to myslel). Tento pokus mě naučil, že to tak vůbec není.
.pokus_pruhledne {
width: 100%;
filter: alpha(opacity=50);
-moz-opacity: 0.5;
-khtml-opacity: 0.5;
opacity: 0.5;
}
Všimněte si, že jsme ke čtyřem zápisům transparentnosti přidali ještě zápis šířky (což jsme výše nedělali a vše fungovalo skvěle). To je proto, že průhlednost funguje pouze s přesně specifikovaným rozložením – v IE.
Výše uvedený příklad textu je uzavřen v DIV
u. Myslíte, že průhlednost textu bude fungovat, jestliže bude text uzavřen v tagu SPAN
?
Ano, avšak pouze se speciálním zápisem zobrazení. Kdybychom chtěli zprůhlednit text ve SPAN
u, museli bychom do stylů přidat zápis display: block;
.
Příklady průhlednosti obrázků
Už výše jsem se zmiňoval o zesvětlení a ztmavení (třeba jen části) obrázku pomocí CSS. Nyní si tento způsob ukážeme v akci.
Máme obrázek jako pozadí DIV
u a jeho horní část chceme zesvětlit o 50 % (pomocí CSS). Náš podklad bude mít rozměry 454×180 a bude mít zesvětlený pruh (50px) nahoře. Operovat budeme pouze se 2 DIV
y (podklad a DIV
, který část obrázku zesvětlí). Náš kód bude vypadat následovně:
<div class="podklad">
<div class="zesvetleni"></div>
</div>
A CSS zápis:
.podklad {
width: 454px;
height: 180px;
background-image: url(http://programujte.com/galerie/2008/04/200804291654_css_transparent.jpg);
}
.zesvetleni {
width: 454px;
height: 50px;
background-color: #FFFFFF;
filter: alpha(opacity=50);
-moz-opacity: 0.5;
-khtml-opacity: 0.5;
opacity: 0.5;
}
A takto bude vypadat naše dílo:
Naprosto stejně budeme postupovat, jestliže budeme chtít část obrázku ztmavit, nebo dokonce nabarvit (barvení již barevných obrázků nepovažuji za zrovna šťastné řešení):
Průhlednost a hover efekty
Dalším praktickým využitím CSS transparentnosti je hover efekt. Žádné scripty, pouze jeden obrázek (nadpis, tabulka…), který se při najetí myší změní.
Zápis do CSS je více než jednoduchý, protože jsme u tohoto příkladu pracovali pouze s průhledností.
a.svetlejsi img {
filter: alpha(opacity=50);
-moz-opacity: 0.5;
-khtml-opacity: 0.5;
opacity: 0.5;
}
a.svetlejsi:hover img {
filter: alpha(opacity=100);
-moz-opacity: 1.0;
-khtml-opacity: 1.0;
opacity: 1.0;
}
/*---*/
a.normal img {
filter: alpha(opacity=100);
-moz-opacity: 1.0;
-khtml-opacity: 1.0;
opacity: 1.0;
}
a.normal:hover img {
filter: alpha(opacity=50);
-moz-opacity: 0.5;
-khtml-opacity: 0.5;
opacity: 0.5;
}
A XHTML kód vypadá následovně:
<a href="#" class="svetlejsi"><img src="http://programujte.com/galerie/2008/04/200804301717_css_transparent3.jpg" width="177" height="132" border="0" /></a>
<a href="#" class="normal"><img src="http://programujte.com/galerie/2008/04/200804301717_css_transparent3.jpg" alt="" width="177" height="132" border="0" /></a>
Průhlednost a onmouseover a onmouseout efekty
Další možnost, kde se dá uplatnit CSS průhlednost, jsou onmouseover a onmouseout scripty.
XHTML kód pro tento příklad je:
<div class="vypnute" onmouseover="this.className='zapnute'" onmouseout="this.className='vypnute'">Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Etiam sit amet lorem et tellus consequat suscipit. Nunc condimentum facilisis risus.</div>
A CSS zápis:
div.vypnute {
width: 450px;
height: 65px;
margin: auto;
background-color: #CCCCCC;
border: 1px solid #666666;
color: #000000;
}
div.zapnute {
width: 450px;
height: 65px;
margin: auto;
background-color: #CCCCCC;
border: 1px solid #666666;
color: #000000;
filter: alpha(opacity=50);
-moz-opacity: 0.5;
-khtml-opacity: 0.5;
opacity: 0.5;
}
Příklad CSS průhlednosti v praxi
Představte si, že máte nádhernou hlavičku, ale název webu tam chcete napsat obyčejným textem. Jak to udělat, aby to nevypadalo blbě? Jak to udělat zajímavější?
Hezký efekt opět zastal poměrně jednoduchý CSS zápis:
div.text_header {
width: 454px;
height: 88px;
background-image: url(http://programujte.com/galerie/2008/04/200804291654_css_transparent.jpg);
}
div.pruhl_text_header {
width: 454px;
font-size: 68px;
color: #FFFFFF;
filter: alpha(opacity=75);
-moz-opacity: 0.75;
-khtml-opacity: 0.75;
opacity: 0.75;
}
A kód vypadá následovně:
<div class="text_header">
<div class="pruhl_text_header" align="center">AZ Sekačky</div>
</div>
Závěrem
Co jsme se naučili a co je důležité si pamatovat
- Poloprůhledné grafické formáty PNG je dobré nahrazovat CSS transparentností.
- Zápis průhlednosti vyjadřují čísla od 0.0 až po 1.0 (0.1, 0.8…).
- Aby bylo dílo průhledné ve věch prohlížečích, musíme použít čtyři CSS zápisy.
- V IE funguje průhlednost textu pouze s přesně stanovenými rozměry.