Úvod JavaScript Ukázky © Jiří Kosek
Dynamické HTML

Kaskádové styly

HTML je značkovací jazyk, ve kterém by se měl pomocí značek tagů vyznačovat význam jednotlivých částí textu. Víme však, že dnes v HTML existuje několik atributů a elementů, které ovlivňují pouze grafický vzhled. Použitím těchto atributů a elementů sice můžeme získat graficky atraktivní stránku, má to však řadu nevýhod.

Text stránky je mnohdy špatně strukturován, protože jednotlivé elementy jsou využívány účelově k dosažení určitých grafických efektů. Druhou velkou nevýhodou je velká pracnost -- většina z vizuálních atributů musí být nastavována opakovaně u všech elementů.

Obě tyto nevýhody odstraňují kaskádové styly -- Cascading Style Sheets (CSS). Styly umožňují definovat způsob zobrazení (druh a velikost písma, barvu, zarovnání apod.) každého elementu na stránce. Styl však není přímo součástí textu stránky a tak může být zápis stránky přehlednější a dobře strukturovaný. Navíc styly umožňují definovat jednotný vzhled určitého elementu v celém dokumentu jedním zápisem -- nemusíme jej opakovat u každého elementu.

Práce se styly byla poměrně podrobně rozebrána v seriálu Vytváříme si domovskou stránku, takže si zde jen zopakujeme nejdůležitější poznatky. Podrobněji se budeme zabývat pouze vlastnostmi umožňujícími řízení pozice elementů na stránce -- tyto vlastnosti byly do HTML přidány právě kvůli dynamickému HTML. Kromě toho se podíváme na používání filtrů v IE 4.0, protože s filtry se pracuje podobně jako s ostatními vlastnostmi stylů.

Doufám, že cennou pomůckou pro vás bude přehled všech vlastností stylů, který je součástí dnešního tématu týdne.

Malá rekapitulace základů práce se styly

Práce se styly je velmi jednoduchá. Ukážeme si ji na jednoduchém stylu, který zajistí, aby všechny nadpisy první až třetí úrovně byly zobrazeny bezpatkovým písmem a modře. Nadpisy první úrovně budou navíc ještě vycentrovány:
H1, H2, H3  { font-family: Arial, sans-serif;
              color: blue }
H1          { text-align: center }             
Tento jednoduchý styl se skládá ze dvou pravidel. Každé pravidlo má dvě části -- selektor (např. H1) a deklaraci (text-align: center). Všechny deklarace se skládají ze dvou částí -- z vlastnosti (např. text-align) a z její hodnoty (center). Pravidla i deklarace lze navzájem různě sdružovat.

Selektor nám zajišťuje vazbu na odpovídající HTML element. Jako selektor mohou být samozřejmě použity všechny elementy HTML. Selektory lze vytvářet i kontextové. Např. pravidlo se selektorem H1 EM se použije pouze na text elementu EM, který je uvnitř nadpisu první úrovně.

Vlastností, které je u každého elementu možno použít, je několik desítek. Všechny jsou uvedeny v připojených tabulkách.

Aby mohl při zobrazování stránky použít prohlížeč styl, musí o něm mít informaci. Nejčastěji se používají následující tři způsoby připojení stylu ke stránce.

<HTML>
  <HEAD>
    <TITLE>Titulek stránky</TITLE>
    <LINK REL=StyleSheet TYPE="text/css"
          HREF="http://style.com/super" TITLE="Super styl">
    <STYLE TYPE="text/css"><!--
        H1, H2, H3  { font-family: Arial, sans-serif;
                      color: blue }
        H1          { text-align: center }             
    -->    
    </STYLE>
  </HEAD>
  <BODY>
    <H1>Nadpis je krásně modrý a vycentrovaný</H1>
    <P STYLE="color: green">Ekologický paragraf je zelený.
  </BODY>
</HTML>

První způsob využívající element LINK připojí k dokumentu styl uložený v separátním souboru.

Styl může být definován i přímo v dokumentu mezi tagy <STYLE> a </STYLE>. Pomocí komentáře jsme definici stylu skryli před staršími prohlížeči, které CSS nepodporují.

Poslední možností je definice stylu pouze pro jeden konkrétní element. Toho lze dosáhnout použitím atributu STYLE, který můžeme použít u všech elementů. Tento způsob však poněkud odporuje samotné filosofii stylů -- míchá totiž obsah dokumentu s jeho grafickou prezentací. V dynamickém HTML nám však mnohdy prokáže neocenitelné služby.

Rozšíření stylů o řízení pozice elementů

Nyní se podrobněji podíváme na vlastnosti, které umožňují řídit umístění jednotlivých elementů na stránce. Toto rozšíření je dnes pracovním návrhem konsorcia W3C a podle mne se brzy stane doporučením W3C (a pro nás tedy i standardem). Toto rozšíření je dnes i integrální součástí návrhu nové verze kaskádových stylů CSS2.

Rozšíření přináší nové vlastnosti, které umožňují přesně řídit vzájemné umístění jednotlivých elementů na stránce. Mezi nejdůležitější nové vlastnosti patří left a top, které určují posunutí elementu. Jejich konkrétní interpretace však závisí na hodnotě vlastnosti position. Ta může nabývat dvou hodnot -- absolute a relative, které rozlišují mezi absolutním a relativním určením pozice.

Absolutní určení pozice

Pokud použijeme absolutní určení pozice elementu, je tento element zobrazen zcela nezávisle na svém původním umístění. Jeho levý horní roh se posune do místa zadaného pomocí left a top. Souřadnice se vztahují k souřadnému systému nadřazeného elementu a tím je nejčastěji celý dokument. Jeho levý horní roh má souřadnice (0,0).

Jako hodnotu vlastností left a top můžeme použít buď pixely (px) nebo procento, které se vztahuje k šířce resp. výšce rodičovského elementu:

<BODY>
<H1>Zkouška absolutního umístění</H1>
<SPAN STYLE="position: absolute; left: 50%; top: 50%">
<B>Computerworld</B> začíná přesně uprostřed obrazovky</SPAN>
</BODY>
Výsledek našeho prvního pokusu o změnu umístění elementu na stránce si můžeme prohlédnout na obrázku.

Stránka s absolutně umístěným textem

Šířku, do které se bude formátovat obsah elementu, můžeme určit pomocí vlastnosti width. Výška se pak upraví podle potřeby. I tu však můžeme nastavit pomocí vlastnosti height.

Absolutně umístěné elementy se mohou překrývat. O tom, který element bude vidět, rozhoduje vlastnost z-index. Element, který ji má nastavenu na větší hodnotu, překryje ty ostatní. Využití popsané vlastnosti demonstrujeme na následující malé ukázce:

<HTML>
<HEAD>
<TITLE>Absolutní umístění a z-index</TITLE>
<STYLE TYPE="text/css"><!--
  .nadpis { font-size: 80px;
            font-style: bold }
--></STYLE>
</HEAD>
<BODY>
<DIV CLASS=nadpis>
<SPAN STYLE="position: absolute; left: 1; top: 1;
 color: #001; z-index: 1">Computerworld</SPAN>
<SPAN STYLE="position: absolute; left: 2; top: 2;
 color: #003; z-index: 2">Computerworld</SPAN>
<SPAN STYLE="position: absolute; left: 3; top: 3;
 color: #005; z-index: 3">Computerworld</SPAN>
<SPAN STYLE="position: absolute; left: 4; top: 4;
 color: #007; z-index: 4">Computerworld</SPAN>
<SPAN STYLE="position: absolute; left: 5; top: 5;
 color: #009; z-index: 5">Computerworld</SPAN>
<SPAN STYLE="position: absolute; left: 6; top: 6;
 color: #00b; z-index: 6">Computerworld</SPAN>
<SPAN STYLE="position: absolute; left: 7; top: 7;
 color: #00d; z-index: 7">Computerworld</SPAN>
<SPAN STYLE="position: absolute; left: 8; top: 8;
 color: #00f; z-index: 8">Computerworld</SPAN>
<SPAN STYLE="position: absolute; left: 9; top: 9;
 color: #22f; z-index: 9">Computerworld</SPAN>
<SPAN STYLE="position: absolute; left: 10; top: 10;
 color: #44f; z-index: 10">Computerworld</SPAN>
<SPAN STYLE="position: absolute; left: 11; top: 11;
 color: #66f; z-index: 11">Computerworld</SPAN>
<SPAN STYLE="position: absolute; left: 12; top: 12;
 color: #88f; z-index: 12">Computerworld</SPAN>
<SPAN STYLE="position: absolute; left: 13; top: 13;
 color: #aaf; z-index: 13">Computerworld</SPAN>
<SPAN STYLE="position: absolute; left: 14; top: 14;
 color: #ccf; z-index: 14">Computerworld</SPAN>
<SPAN STYLE="position: absolute; left: 15; top: 15;
 color: #eef; z-index: 15">Computerworld</SPAN>
</DIV>
</BODY>
</HTML>

Relativní určení pozice

Pokud použijeme relativní určení pozice, element se pouze posune ze své přirozené pozice o délku určenou pomocí left a top. Jeho formátování přitom zůstane zachováno. Text v nadřazeném elementu zůstane zformátován tak, jako by posunutý element nebyl vůbec posunut. Malá ukázka:
Nějaký text
<SPAN STYLE="position: relative; left: 10px; top: 10px">
Relativní text</SPAN>
a zase původní text.

Element se stylem position: relative opět definuje nový souřadný systém s počátkem ve svém levém horním rohu. To lze využít například pro vytvoření stínu:

<DIV STYLE="font: bold 30px Arial">Ukázka
<SPAN STYLE="position: relative">stínovaného textu
<SPAN STYLE="position: absolute; left: 2px; top: 2px;
             color: green">stínovaného textu
</SPAN></SPAN>uvnitř jiného textu.</DIV>

Pro vytváření různých efektů je důležitou vlastností visibility. Může nabývat dvou hodnot -- visible a hidden. První z nich říká, že element bude vidět. Druhá, že vidět nebude.

Vlastnost visibility musíme odlišit od vlastnosti display. Deklarace display: none způsobí, že se element bude zcela ignorovat, jakoby na stránce vůbec nebyl. Oproti tomu visibility: hidden vynechá pro element místo, element pouze není viditelně zobrazen. To lze využít pro různé efekty, pokud máme několik elementů překrytých přes sebe a podle potřeby je zviditelňujeme a zneviditělňujeme.

Filtry v IE 4.0

Filtry jsou novinkou v Exploreru 4.0. Filtry umožňují modifikovat vzhled elementu -- lze např. přidat stín, nastavit elementu průhlednost apod. Kromě těchto filtrů jsou podporovány i přechodové filtry, které umožňují pomocí různých grafických efektů přejít od jednoho zobrazeného elementu k jinému. S filtry se do jisté míry pracuje stejně jako se styly a proto jsme je zařadili na toto místo.

Samotná deklarace filtru ve stylu je jednoduchá. Obecně ji můžeme zapsat jako

filter: jméno_filtru(parametry)
Jedna deklarace přitom může obsahovat několik filtrů najednou -- jednotlivé filtry se oddělí mezerou. Následující HTML kód vloží do stránky obrázek a pomocí filtrů u něj vytvoří stín a vertikálně ho otočí:
<IMG SRC="fotka.jpg"
     STYLE="filter: DropShadow(Color=#808080,OffX=4,OffY=4) FlipV()">
Filtry nelze používat u všech elementů, ale jen u některých. Obecně se dá říci, že jde o elementy, které po zobrazení vždy zaujímají obdélníkovou plochu konstantní velikosti. Jedná se o elementy BODY, BUTTON, IMG, INPUT, TABLE, TD, TEXTAREA, TFOOT, TH, THEAD, TR. Filtry lze aplikovat i na elementy DIV a SPAN, pokud mají definovánu výšku a šířku anebo jsou na stránce umístěny absolutně.

Podrobný přehled filtrů a všech jejich parametrů je uveden v tabulce. Praktickou práci s filtry a to včetně filtrů přechodových si předvedeme v části věnované ukázkám dynamického HTML.

Úvod | JavaScript | Ukázky | Přehled vlastností stylů | DHTML vs. Java


© Copyright 1998 Jiří Kosek, All Rights Reserved.
Stránka obsahuje plný text článku otištěného v týdeníku Computerworld dne 30. ledna 1998 (CW5/98).
Stránku připravil Jiří Kosek, jirka@kosek.cz
Poslední modifikace: 24-01-98