SLEZSKÁ UNIVERZITA V OPAVĚ Filozoficko-přírodovědecká fakulta Ústav informatiky
DIPLOMOVÁ PRÁCE
Pavol Hudran
2007 OPAVA
SLEZSKÁ UNIVERZITA V OPAVĚ Filozoficko-přírodovědecká fakulta Ústav informatiky
Pavol Hudran Bakalářská diplomová práce
CSS v praxi (Practical Cascading Style Sheets)
vedoucí práce Mgr. Michaela Ačová
OPAVA 2007
Prohlášení studenta Prohlašuji, že jsem diplomovou práci včetně příloh vypracoval samostatně pod vedením vedoucí diplomové práce a uvedl jsem všechnu použitou literaturu.
V Opavě dne . . . . . . . . . . . . . . . . . . . . . . .
....................... Pavol Hudran
Poděkování Děkuji především Mgr. Ačové, vedoucí diplomové práce, za její odbornou pomoc a cenné připomínky při vypracování této diplomové práce. Pavol Hudran
1. Úvod
Tabulky kaskádových stylů (Cascading Style Sheets = CSS) jsou nadstavbou jazyků HTML, XHTML a XML. Slouží k popisu prezentace dokumentů, aniž by jakkoli ovlivňovali jejich obsah a strukturu. Vývoj spravuje a specifikaci jednotlivých verzí publikuje organizace World Wide Web Consorcium (= W3C) Původně formátování dokumentu HTML záviselo na výstupním zařízení. Kvůli rychle se vyvíjejícím potřebám uživatelů a „vylepšením“ výrobců prohlížečů bylo HTML „obohaceno“ příkazy (= tagy) nad rámec původního HTML standardu a jeho logické struktury, což přináší mnoho problémů: špatnou čitelnost kódu pro vyhledávače, ekonomickou zátěž – velké množství přenesených kB, špatnou čitelnost pro zařízení postižených lidí i ztrátu nezávislosti a přenositelnosti dokumentu mezi zařízeními. Řešením je návrat k standardizovanému HTML dokumentu s formátováním definovaným odděleně pomocí CSS stylů, čemuž se přizpůsobují i prohlížeče – s větší, či menší úspěšností. Prohlížeče rozeznávají několik druhů HTML dokumentů (např. HTML 4.0, HTML 4.0 Transitional, nebo XHTML 1.0) s významem, že dokumenty mohou být formátovány „starým“, „přechodovým“, nebo „novým“ způsobem. „Starý“ upřednostňuje formátování formátovacími příkazy jazyka HTML s obohacením formátovacích možností jazykem CSS, to však jen minimálně. Styly jsou často definované přímo v dokumentu tabulkou stylů, nebo přímými styly. Rozvržení layoutu a prvků na stránce je řešené pomocí tabulek - dochází k vnořování tabulek. „Přechodový“ toleruje většinu původních formátovacích příkazů a taktéž nabízí většinu možnosti formátování pomocí CSS s výjimkou rozvržení layoutu, který je stále řešený tabulkou. Styly můžou být do dokumentu začleněné připojením externího souboru. „Nový“ nepodporuje staré formátování, ale plně uplatňuje formátování CSS styly, včetně rozvržení stránky a pozicování jednotlivých prvků. „Nový“ přístup nevytváří HTML dokument jako důsledek navrženého vzhledu, ale postupuje se přesně opačně. Vychází se z obsahu, který má dokument sdělit. Snaží se o co nejlepší strukturování dokumentu: určí se pořadí jednotlivých částí, jejich hiarerchie a vzájemné vazby. Cílem je přehlednost dokumentu, aby začínal nejdůležitějšími informacemi a postupoval k méně důležitým a aby struktura odpovídala sdělovanému obsahu. To přináší výhody: − širší formátovací možnosti − snadná tvorba a údržba jednotného stylu celého webu (pro celý web stačí jediný soubor s tabulkou stylů) − oddělení struktury a stylu (důsledky: přehlednost; obsah a vzhled mohou tvořit různí lidé, což je v praxi často potřeba; tentýž obsah lze beze změny logické struktury naformátovat více
[1]
způsoby; stylové pravidla je možné tvořit pro obecnou strukturu obsahu ještě dříve, než skutečný obsah vznikne) − vyšší přístupnost dokumentů (pro osoby s různými hendikepy, libovolné koncové zařízení např. prohlížeč, tiskárna, zvukový styl pro čtecí zařízení, atd.) − dynamická práce se styly (různé efekty jako popup menu, atd.) − formátování XML dokumentů Až s takovýmto dokumentem pracuje grafik, který do něj zasahuje jen přidáváním neškodných příkazů “
“ a “<span>“, pro uzavření částí dokumentu do jednotlivých celků, které mu pomáhají realizovat grafický návrh. Ten by měl být navržen s ohledem na současné možnosti formátování, neboť ačkoli je v souhrnu „nový“ způsob formátování alespoň tak silný jako „tradiční“ způsoby, je natolik odlišný, že s tím musí grafik dopředu počítat.
Slovo autora Mým cílem bylo vytvořit příručku, která Vám pomůže svou stručností a přehledností v práci. Nejedná se tedy o obsáhlou kuchařku, určenou pro začátečníky, která by Vás vedla krok po kroku, naopak je určená pro mírně pokročilého čtenáře v oblasti webových technologií. Rozdělil jsem práci do několika kapitol, které postupně seznámí čtenáře s jazykem CSS - verzemi CSS1 a CSS2. V současné době je aktuálním tématem verze CSS3, ta je však prohlížeči podporována s obtížemi a jen částečně, proto se o ní v mé práci zmiňuji okrajově. Kapitola „3. Nutná teorie jazyka CSS“, jak už název napovídá, seznámí čtenáře s definicí jazyka CSS, tak aby byl schopen dál s jazykem pracovat s jasnou představou o jeho fungování, ale aby nebyl teorií přílišně zatěžován. V kapitole „4. Přehled funkcí a vlastností CSS“ uvádím seznam vlastností jazyka CSS se základními sledovanými parametry. Podrobnější popis k jednotlivým vlastnostem by však byl nad rámec této práce, proto odkazuji čtenáře na použitou literaturu. Kapitolou „5. CSS v praxi“ dovršuji svou práci a předkládám čtenáři řešení pokročilých formátovacích situací – větší část této kapitoly obsahuje příloha č. 1 na CD ve formátu HTML a CSS pro snadnější manipulaci.
2
2. Obsah
1. ÚVOD ........................................................................................................................... 1 2. OBSAH ........................................................................................................................ 3 3. NUTNÁ TEORIE JAZYKA CSS ................................................................................... 5 3.1. PODPORA CSS PROHLÍŽEČI ...................................................................................................5 3.2. VAZBA CSS NA (X)HTML A XML DOKUMENTY .................................................................6 3.2.1. Vazba na HTML dokumenty .........................................................................................6 3.2.2. Vazba na XHTML dokumenty ......................................................................................7 3.2.3. Vazba na XML dokumenty............................................................................................7 3.3. SYNTAXE CSS .......................................................................................................................8 3.3.1. Symbolický popis syntaxe .............................................................................................8 3.3.1.1. Speciální znaky ........................................................................................................8 3.3.1.2. Symboly v zápisu syntaxe ........................................................................................8 3.3.2. Definice CSS .................................................................................................................9 3.3.3. Hodnoty a jednotky.......................................................................................................9 3.3.4. Média ..........................................................................................................................12 3.3.4.1. Použití médií v tabulkách stylů ..............................................................................12 3.3.5. Strom dokumentu ........................................................................................................13 3.3.5.1. Vztahy mezi prvky: ................................................................................................13 3.3.6. Selektory v tabulkách stylů .........................................................................................13 3.3.6.1. Kombinování selektorů ..........................................................................................15 3.3.6.2. Pseudo-prvky a pseudo-třídy ..................................................................................15 3.3.7. Dědičnost a kaskáda CSS ...........................................................................................16 3.3.7.1. Postup hledání optimální hodnoty ..........................................................................17 3.3.7.2. Dědičnost ................................................................................................................17 3.3.7.3. Kaskádování ...........................................................................................................17 3.3.7.4. Hodnota inherit a pravidla @import a !important ..................................................18 3.3.8. Vizuální formátovací model .......................................................................................19 3.3.8.1. Koncepce boxů .......................................................................................................19 3.3.8.2. Generování boxů ....................................................................................................20 3.3.8.3. Poziční schéma .......................................................................................................21 3.3.8.4. Výpočet rozměrů prvků ..........................................................................................25 3.4. KRÁTCE O CSS3..................................................................................................................27 4. PŘEHLED FUNKCÍ A VLASTNOSTÍ CSS ................................................................ 30 5. CSS V PRAXI............................................................................................................. 45 5.1. 5.2. 5.3. 5.4. 5.5. 5.6.
OBECNÉ POSTUPY ................................................................................................................45 CHYBY PROHLÍŽEČŮ ............................................................................................................45 USPOŘÁDÁNÍ STRÁNKY .......................................................................................................46 SEZNAMY ............................................................................................................................46 FORMULÁŘE A TABULKY .....................................................................................................46 FORMÁTOVÁNÍ TEXTU .........................................................................................................46 3
5.7. 5.8.
VIZUÁLNÍ EFEKTY ...............................................................................................................47 UŽITEČNÉ RADY ..................................................................................................................47
6. ZÁVĚR ....................................................................................................................... 48 7. LITERATURA ............................................................................................................ 49 8. PŘÍLOHY ................................................................................................................... 51
4
3. Nutná teorie jazyka CSS
3.1. Podpora CSS prohlížeči Jazyk CSS je v jednotlivých prohlížečích implementován v rozdílném rozsahu, nebo různým způsobem. To znamená, že ne všechny definice a vlastnosti (popř. jejich hodnoty) jsou podporovány jednotlivými prohlížeči podle W3C specifikace jazyka a jeho verzí. Některé vlastnosti buďto nejsou podporované vůbec, nebo je prohlížeče pojímají po svém a tím se odklánějí od W3C spefifikace. Většinou je oním problémovým prohlížečem MS InternetExplorer1. Naštěstí, řešit tyto problémy bude čím dál míň potřeba, protože současné prohlížeče se čím dál víc přibližují specifikacím. Stále však přetrvává nutnost mít znalost, které definice a vlastnosti (popř. jejich hodnoty) jsou podporované jakým prohlížečem.2
1 2
Více v kapitole 5.2. Chyby prohlížečů. Více v kapitolách 3.3.6. Selektory v tabulkách stylů a 4. Přehled funkcí a vlastností CSS, popř. v použité literatuře.
5
3.2. Vazba CSS na (X)HTML a XML dokumenty 3.2.1. Vazba na HTML dokumenty a) Připojením externího souboru Připojení externího souboru k dokumentu s tabulkou stylů se provádí vložením příkazu „
“ do hlavičky dokumentu. K dokumentu může být takto připojeno více externích souborů. Tento způsob důsledně naplňuje ideu oddělení formátování od struktury dokumentu a přináší výhody s tím spojené (např. po prvním načtení dokumentu daného webového místa se stylový soubor ukládá do paměti a načítání dalších dokumentů se tím podstatně urychlí). Tabulka 1: popis vlastnosti „link“ [2, str. 24-25]
Příkaz „
“ má atributy: href: type: rel: media: title:
URL adresa k externímu souboru s tabulkou stylů Content-type, neboli typ obsahu – vždy „text/css“ typ vazby k externímu zdroji, vždy „stylesheet“ pro základní tabulky stylů, resp. „alternate stylesheet“ pro alternativní tabulky stylů druh média, pro který je tabulka stylů určena; nepovinný atribut; implicitní hodnota „all“, viz část Média titulek k tabulce stylů; praktický význam jen u „alternate stylesheet“
Příklad 1: [1, str. 37]
b) Tabulkou stylů v dokumentu Vložení tabulky stylů přímo do hlavičky dokumentu se provádí pomocí příkazu „<style>“. Je zřejmé, že se tabulka stylů načítá s každým načtením dokumentu – to vede ke zvýšení objemu přenesených dat (oproti předchozímu přístupu), také je náročnější přestylování webu. Ovšem hodí se tam, kde z nějakého důvodu potřebujeme definovat styly přímo v dokumentu. Tabulka stylů je určená seznamem pravidel (@pravidel) složených ze selektorů a k nim příslušných seznamu definic stylů, popř. doplněná komentáři. Stejného efektu předchozího přístupu docílíme pomocí vepsání příkazu „@import("URL");“ do tabulky stylů. Příkaz „<style>“ má atributy: „type“, „media“, „title“ viz. Připojením externího souboru.
6
Příklad 2: [1, str. 36] <style type="text/css">
c) Přímým stylem Styly lze přiřadit i jednotlivým prvkům dokumentu prostřednictvím atributu „style“. Hodnotou atributu je definice stylu (resp. seznamu definic stylu). Tento způsob je nevhodný a v novějších verzích XHTML dokonce nepřípustný. Často se používá pro testování vzhledu během vývoje webu. Příklad 3:
d) Dynamicky klientským skriptováním a DOM Načtené CSS definice jsou uloženy v poli „document.styleSheets[]“, kde každá položka v poli odpovídá jedné sekci „<STYLE>“, včetně externích souborů načtených direktivou „@import“, nebo pomocí příkazu „ “. Pořadí položek v poli pak odpovídá pořadí načítání CSS. Obecně podporovaná je pouze vlastnost „disabled“, která (de)aktivuje daný stylesheet. Příklad 4: [4)] document.styleSheets[n].disabled = true | false
3.2.2. Vazba na XHTML dokumenty Vložení stylů do dokumentu se provádí především připojením externího souboru jako u HTML dokumentu, nebo tabulkou stylů v dokumentu (od tohoto způsobu se upouští). Příklad 5: [1), str. 37] <style type="text/css"> /*
3.2.3. Vazba na XML dokumenty V jazyce XML se externí soubory s CSS načítají do dokumentu pomocí deklarace: Příklad 6: [1), str. 38]
7
3.3. Syntaxe CSS 3.3.1. Symbolický popis syntaxe Používají se znaky podle normy ISO 10646 - v českém prostředí jsou doporučené pouze znaky ASCII. U názvů prvků, jež jsou součástí jazyka CSS, nezáleží na velikosti písmen. Kdežto u názvů prvků dokumentu záleží na velikosti písmen v závislosti na specifikaci jazyka dokumentu. Např. pro HTML nezáleží, kdežto pro XML záleží na velikosti písmen. 3.3.1.1. Speciální znaky − uvozovky ( " = ASCII 34), ( ′ = 39), − mezera, tj. libovolně velká posloupnost mezer (mezera = 32, CR = 12, LF = 10, FF = 12, TAB = 9) − čárka ( , = 44) a středník ( ; = 59) pro oddělovaní seznamu Význam speciálních znaků může být změněn zpětným lomítkem „\“, který také slouží k zápisu znaku v dekadickém nebo hexadecimálním tvaru. 3.3.1.2. Symboly v zápisu syntaxe Tyto symboly se budou používat v příkladech pro jednodušší pochopení platnosti zápisu syntaxe: Tabulka 2: symboly v zápisu syntaxe [1), str. 39]
symbol
Popis
[…]
hranaté závorky uzavírají položku pro následující varianty.
*
Výraz X se může vyskytovat v lib. počtu 0 až n-krát.
+
[X]
Výraz X se může vyskytovat v lib. počtu, ale alespoň jednou (1 až n-krát).
[X]?
Výraz X se může i nemusí vyskytovat (0 nebo 1-krát).
[X]{m,n}
Výraz X se opakuje nejméně m-krát a nejvýše n-krát.
[X|Y|Z]
Seznam alternativ, vyskytuje se právě jedna z uvedených položek.
[X||Y||Z]
Seznam alternativ, vyskytuje se jedna či více z uvedených položek v lib. pořadí.
mezera
Všude kde je mezera může být lib. prázdný prostor.
[X]
Některé znaky ( | , [ , ] , { , } , ? , * , + , mezera ) mají zvláštní význam - pokud se tento znak vyskytne v textu, bude uveden v uvozovkách.
8
3.3.2. Definice CSS Vlastnosti můžou být jednoduché nebo sdružené. Jednoduché vlastnosti mají definici stylu ve tvaru „vlastnost: hodnota;“, kde mezera je nepovinná a středník za hodnotou se zapisuje vždy, když existuje vlastnost ležící za uvažovanou vlastností v seznamu definic stylu. Sdružené vlastnosti umožňují v jedné definici stylu nastavit více vlastností najednou, zadáním seznamu hodnot oddělených mezerami a to: „sdružená_vlastnost: hodnota[ hodnota]*“. Kde při vynechání libovolné hodnoty seznamu se příslušná vlastnost nenastaví, ale zdědí z nejbližšího nadřízeného prvku. Definice stylu je přiřazením hodnoty (resp. seznamu hodnot) vlastnosti (resp. sdružené vlastnosti). Definice se mohou spojovat do seznamu definic stylu, který je ve tvaru „definice[; definice]* “, neboli „vlastnost: hodnota[; vlastnost: hodnota]*“. Tabulka stylů definuje styly pro celý dokument. Je určena seznamem pravidel a at-pravidel (např. „@import“, „@media“, atp. rozšiřující CSS o další funkce – viz dále v textu). pravidlo = „selektor { seznam_definic }“, kde selektor je symbolický popis prvku, či skupiny prvků. Rozvoj pravidla: „[@]?pravidlo“, „[@]?selektor { seznam_definic; }“, „[@]?selektor { definice[; definice]* }“, „[@]?selektor { vlastnost: hodnota[; vlastnost: hodnota]* }“, Popř. „[@]?selektor { sdružená_vlastnost: hodnota[; hodnota]* }“. Příklad 7: /* ukázka možných zápisů pravidel */ @import url("styly.css"); P { font-weight: bold; font-size: 12pt; } P { font: bold 12pt; }
komentář at-pravidlo pravidlo se seznamem definic pravidlo se sdruženými vlastnostmi
Samozřejmě je víc možností, jak zapisovat pravidla do tabulky stylů (viz dále v textu). Mezi jednotlivými pravidly píšeme mezeru. Identifikátory pravidel (názvy prvků) nemohou začínat pomlčkou nebo číslem.
3.3.3. Hodnoty a jednotky Tabulka 3: typy hodnot i jednotek a jejich charakteristika [1), str. 42-46; 2, str. 30-36]
popis
příklad
obvykle zastupuje jinou hodnotu, na níž se dané klíčové slovo převede; zapisujeme bez uvozovek
color: yellow
<číslo>
celé
hodnota
„[+|-]<číslo>“ přirozenému číslu může předcházet symbol „+“, „-“ (bez mezery)
9
kde yellow = rgb(100%,100%,0%)) 0, 1, 10, -156
reálné
0, 1, 10, -156, 3.141559, -2.1, .3
relativní jednotky
em
vypočítaná hodnota vlastnosti „fontsize“ aktuálního prvku; při použití v samotné vlastnosti „font-size“ se hodnota vztahuje k vlastnosti „fontsize“ rodičovského prvku
line-height: 1.2em font-size: 1.2em
ex
výška malého písmene „x“ zvoleného písma; často prohlížeče mylně interpretují jako 1ex = 0.5em
font-size: 1.2ex
px
obrazový bod, jehož velikost závisí na zobrazovacím zařízení: obrazovka, tiskárna, projektor, atp.
width: 780px
mm
milimetr
width: 100mm
cm
centimetr
width: 10cm
in
palec (angl. inch) 25,4mm
width: 3.94in
pt
typografický bod (angl. point) 1/72 in, především při výstup na tiskárnu
72pt = 1in, 1pt = 0.3528mm
pc
typografická jednotka pica 1pc = 12pt
1in = 6pc = 72pt
absolutní jednotky
„[+|-]<číslo>[.<číslo>]?“ jsou buď celá, nebo desetinná čísla; desetinná část se odděluje „.“
zapisujeme: „<číslo>%“ (bez mezery); procenta se vztahují k jiné hodnotě, kterou je nutno uvést - např. jiná hodnota stejného prvku, stejná hodnota předchůdce, nebo hodnota formátovacího kontextu
100%, 33.33%, -10%, .5%
platná adresa nějakého zdroje na webu; je uzavřená v ′, nebo "; zapisujeme absolutně (včetně názvu protokolu), nebo relativně (pokud se nacházíme v aktuálním nebo vnořeném adresáři); musí být kódována UTF-8
url("http://bouse. blbeckove.com/ ebook/css.pdf") url(../css.pdf) url(′../css.pdf′) url("../css.pdf") ′../css.pdf′ "../css.pdf "
číselně
<%>
hexadecimálně
„#[RRGGBB|RGB]“ kde R – červená, G – zelená, B – modrá
#B1F836 (kde R = B1, G = F8, B = 36 ), #BB5588 (resp. #B58)
dekadicky a procentuálně
pomocí funkce „rgb(R,G,B)“, kde R, G, B musí být uvedené buď shodně dekadicky, nebo shodně procentuálně.
rgb(127, 0, 255) tj. rgb(50%,0%,100%)
10
klíčová slova <úhel>
P.pozn:before { content: "citace ′odřádkovaného textu \n na výstupu′" } A[title="velmi dlou\ hý titulek] { ... }
„<číslo>[deg|rad|grad]“, kde číslo je kladné, „deg“ jsou stupně (v tom případě může být číslo i záporné – automaticky se přepočítává, rozmezí: 0º360º), „rad“ radiany, „grad“ grady (360º = 400gradů)
10deg = 350deg = 6.1087rad = 388.9grad
<čas>
reprezentuje nějaký text, který vpisujeme mezi ′, nebo "; možný zápis: "′"; výskyt znaků, jimiž je řetězec omezen: ′\′′, "\"", "\\", odřádkování: "\n", popř. rozepsání ve zdroji na více řádků: "...\..."
„<číslo>[s|ms]“, kde číslo je kladné a „s“ jsou sekundy, „ms“ milisekundy
120ms, 5s
<řetězec>
AliceBlue (#F0F8FF), AntiqueWhite (#FAEBD7), Aqua (#00FFFF), Aquamarine (#7FFFD4), Azure (#F0FFFF), Beige (#F5F5DC), Bisque (#FFE4C4), Black (#000000), BlanchedAlmond (#FFEBCD), Blue (#0000FF), BlueViolet (#8A2BE2), Brown (#A52A2A), BurlyWood (#DEB887), CadetBlue (#5F9EA0), Chartreuse (#7FFF00), Chocolate (#D2691E), Coral (#FF7F50), CornflowerBlue (#6495ED), Cornsilk (#FFF8DC), Crimson (#DC143C), Cyan (#00FFFF), DarkBlue (#00008B), DarkCyan (#008B8B), DarkGoldenRod (#B8860B), DarkGray (#A9A9A9), DarkGrey (#A9A9A9), DarkGreen (#006400), DarkKhaki (#BDB76B), DarkMagenta (#8B008B), DarkOliveGreen (#556B2F), Darkorange (#FF8C00), DarkOrchid (#9932CC), DarkRed (#8B0000), DarkSalmon (#E9967A), DarkSeaGreen (#8FBC8F), DarkSlateBlue (#483D8B), DarkSlateGray (#2F4F4F), DarkSlateGrey (#2F4F4F), DarkTurquoise (#00CED1), DarkViolet (#9400D3), DeepPink (#FF1493), DeepSkyBlue (#00BFFF), DimGray (#696969), DimGrey (#696969), DodgerBlue (#1E90FF), FireBrick (#B22222), FloralWhite (#FFFAF0), ForestGreen (#228B22), Fuchsia (#FF00FF), Gainsboro (#DCDCDC), GhostWhite (#F8F8FF), Gold (#FFD700), GoldenRod (#DAA520), Gray (#808080), Grey (#808080), Green (#008000), GreenYellow (#ADFF2F), HoneyDew (#F0FFF0), HotPink (#FF69B4), IndianRed (#CD5C5C), Indigo (#4B0082), Ivory (#FFFFF0), Khaki (#F0E68C), Lavender (#E6E6FA), LavenderBlush (#FFF0F5), LawnGreen (#7CFC00), LemonChiffon (#FFFACD), LightBlue (#ADD8E6), LightCoral (#F08080), LightCyan (#E0FFFF), LightGoldenRodYellow (#FAFAD2), LightGray (#D3D3D3), LightGrey (#D3D3D3), LightGreen (#90EE90), LightPink (#FFB6C1), LightSalmon (#FFA07A), LightSeaGreen (#20B2AA), LightSkyBlue (#87CEFA), LightSlateGray (#778899), LightSlateGrey (#778899), LightSteelBlue (#B0C4DE), LightYellow (#FFFFE0), Lime (#00FF00), LimeGreen (#32CD32), Linen (#FAF0E6), Magenta (#FF00FF), Maroon (#800000), MediumAquaMarine (#66CDAA), MediumBlue (#0000CD), MediumOrchid (#BA55D3), MediumPurple (#9370D8), MediumSeaGreen (#3CB371), MediumSlateBlue (#7B68EE), MediumSpringGreen (#00FA9A), MediumTurquoise (#48D1CC), MediumVioletRed (#C71585), MidnightBlue (#191970), MintCream (#F5FFFA), MistyRose (#FFE4E1), Moccasin (#FFE4B5), NavajoWhite (#FFDEAD), Navy (#000080), OldLace (#FDF5E6), Olive (#808000), OliveDrab (#6B8E23), Orange (#FFA500), OrangeRed (#FF4500), Orchid (#DA70D6), PaleGoldenRod (#EEE8AA), PaleGreen (#98FB98), PaleTurquoise (#AFEEEE), PaleVioletRed (#D87093), PapayaWhip (#FFEFD5), PeachPuff (#FFDAB9), Peru (#CD853F), Pink (#FFC0CB), Plum (#DDA0DD), PowderBlue (#B0E0E6), Purple (#800080), Red (#FF0000), RosyBrown (#BC8F8F), RoyalBlue (#4169E1), SaddleBrown (#8B4513), Salmon (#FA8072), SandyBrown (#F4A460), SeaGreen (#2E8B57), SeaShell (#FFF5EE), Sienna (#A0522D), Silver (#C0C0C0), SkyBlue (#87CEEB), SlateBlue (#6A5ACD), SlateGray (#708090), SlateGrey (#708090), Snow (#FFFAFA), SpringGreen (#00FF7F), SteelBlue (#4682B4), Tan (#D2B48C), Teal (#008080), Thistle (#D8BFD8), Tomato (#FF6347), Turquoise (#40E0D0), Violet (#EE82EE), Wheat (#F5DEB3), White (#FFFFFF), WhiteSmoke (#F5F5F5), Yellow (#FFFF00), YellowGreen (#9ACD32)
„<číslo>[Hz|kHz]“, kde číslo je kladné a „Hz“ jsou hertze, „kHz“ kilohertze
2400Hz, 4.2kHz
11
3.3.4. Média Jedním z hlavních úkolů CSS je určit, jakým způsobem se má zobrazit dokument na různých typech koncových zařízení (médiích), tj. definovat pro ně rozdílné styly prezentace dokumentu. Média jsou určené typem a mají přiřazenou minimálně jednu skupinu médií, do které náleží. Příslušnost ve skupině přiřazuje médiu množinu vlastností, definovanou pro tuto skupinu. Proto se jednotlivé typy médií vyznačují rozdílnou množinou vlastností (popř. hodnot těchto vlastností).
braillova dotyková zařízení
embossed
stránka zobrazená plastickým tiskem na braillově tiskárně
•
handheld
obrazovka kapesního počítače
print
náhled tisku, stránky tištěné na tiskárně
projeciton
promítané prezentace (např. projektory)
• • •
screen
obrazovka počítače
tty
neproporční znakový výstup (dálnopisy, terminály, atp.)
tv
televizní obrazovky a podobné zařízení
•
• •
•
•
•
•
•
•
•
•
• •
•
• • • •
•
•
•
•
•
statická
braille
• • •
interaktivní
zvukový výstup na klávesovém syntetizátoru
grafická
aural
•
znaková
všechny typy médií
hmatová
all
vizuální
popis
zvuková
typ média
plynulá
stránkovaná
Tabulka 4: typy médií a jejich charakteristika [1), str. 46-48; 2), str. 58-62]
• • •
• • • •
• • • •
• • •
• • • •
•
•
•
•
•
•
3.3.4.1. Použití médií v tabulkách stylů Připojení tabulky stylů do hlavičky dokumentu, která má platit pouze pro dané médium: Příklad 8: [1), str. 47-48] <style type="text/css" media="seznam_medií"> <style type="text/css"> @import url("URL"): seznam_medií;
kde seznam médií obsahuje názvy médií oddělené čárkou. Implicitně je nastaveno „all“. Pro definování médií přímo v tabulce stylů : Příklad 9: [1), str. 48] @media seznam_medií { /* pravidla platná pro tato média */ }
12
uvnitř bloku at-pravidla „@media“ nesmíme importovat další tabulky stylů příkazem „@import“.
3.3.5. Strom dokumentu HTML i XML popisují dokument pomocí stromové struktury. Kořenový prvek, který je jediný (př. „“), obsahuje všechny ostatní prvky. Ty jsou uzavřené do jednotlivých celků – větví, vytvářejících hierarchii dokumentu. Možné vztahy mezi prvky stromové struktury ilustruje příklad: Příklad 10: [1), str. 49] titulek stránky nadpis1 odstavcový text
položka seznamu1 položka seznamu2
3.3.5.1. Vztahy mezi prvky: Tabulka 5: demonstrace vztahů mezi prvky [1, str. 48-49]
Každý prvek kromě kořenového obsahuje právě jeden rodičovský prvek.
např. pro 4. je rodič 1.
Každý rodič má množinu potomků, tj. prvky, které bezprostředně obsahuje.
např. pro 4. jsou potomci 5.,6., 7.
Prvky, které rodič obsahuje, ale ne bezprostředně (jsou hlouběji vnořené), jsou jeho následovníci.
např. pro 4. jsou následovníci 8., 9.
Potomci stejného rodiče jsou sourozenci.
např. 5., 6., 7. jsou sourozenci
Předcházející sourozenec je prvek, který předchází uvažovanému prvku a je současně sourozenec.
např. pro 6. je předcházející sourozenec 5.
Obdobně následující sourozenec.
např. pro 6. je následující sourozenec 7.
Předcházející prvek je prvek, který je předcházející sourozenec nebo předek.
např. pro 6. jsou předcházející prvky 5., 4., 1.
Následující prvek je prvek, který je následující sourozenec nebo následovník.
např. pro 6 jsou následující prvky 7., 8., 9.
3.3.6. Selektory v tabulkách stylů Mějme: „pravidlo = selektor {seznam_definic}“ Selektor je přepínač pravidla – je to symbolický popis prvku nebo skupiny prvků, které se v dokumentu mohou vyskytovat. Pokud selektor vyhovuje prvku, potom se prvku přiřazuje seznam definic pravidla. Ovšem prvek může vyhovovat více pravidlům, což řeší kaskádování a dědičnost (viz dále). Selektorů je více druhů a existuje i několik operátorů. 13
Tabulka 6: typy selektorů a jejich charakteristika [1), str. 50-53; 2), str. 36-45]
skupina
typ selektoru popis
příklad
podpora
základní
univerzální
označuje se symbolem „*“ a vyhovují mu všechny prvky dokumentu
* {font-size: 10pt}
NN6.0 IE5.0 OP4.0 CSS1
typový
vyhovují mu všechny prvky daného typu značky
img {border: 1px solid #FF0000}
NN4.0 IE4.0 OP4.0 CSS1
označuje se „x[atribut]“ a vyhovují mu všechny prvky typu „x“ (i pro „*“), které mají (jakkoli) definovaný zvolený atribut
*[alt] { ... } img[title] { ... }
NN6.0 OP4.0 CSS2
atribut dané hodnoty
označuje se „x[atribut=hodn]“ a vyhovují mu prvky typu „x“ (i pro „*“), jejichž atribut má hodnotu přesně rovnu „hodn“. Hodnotami jsou buď id, nebo jméno třídy nebo řetězce
*[alt="popis1"] {...} img[title="titul1"] {...} p[id="odstavec1"] {...} div[class="box1"] {...}
NN6.0 CSS2
atribut obsahující danou hodnotu
označuje se „x[atribut~=hodn[ hodn]*]“ (ekvivalentně „x.hodn[.hodn]* “) a vyhovují mu prvky typu „x“ (i pro „*“), jejichž atribut je „atribut=hodn“ resp. „atribut=hodn[ hodn]*“ pro vícenásobné třídy
*[class~="nadpis"] {...}
NN6.0 OP5.0 CSS2
rozšířené s existence atributu atributy
pro
platí, kdežto pro
neplatí
vlastní
atribut obsahující danou podhodnotu
označuje se „x[atribut|=hodn]“ a[lang="en-us"] {...} a vyhovují mu prvky typu „x“ (i pro „*“), jejichž atribut obsahuje seznam hodnot oddělených spojovníkem (znak „-“), a první z nich je právě hodnota „hodn“
vícenásobné atributy
označuje se „x[atribut[=hodn]?]+“ a vyhovují mu prvky typu „x“ (i pro „*“), jež odkazuje na více atributů prvku, nebo na více možných hodnot jednoho atributu
a[lang="cs"][title] {...}
NN6.0 CSS2
třídy
označuje se „x[class~=hodn[ hodn]*]“ (ekvivalentně „x.hodn[.hodn]* “) a vyhovují mu prvky typu „x“ (i pro „*“), jejichž atribut je „class=hodn“, resp. „class=hodn[ hodn]*“ pro vícenásobné třídy
h1[class~="nadpis"] {...} h1[class~="cerveny nadpis kurzivou"] {...}
NN6.0 IE5.0 OP4.0 CSS2 resp. CSS1
14
ekvivalentně h1.nadpis {...} h1.cerveny.nadpis.k urzivou {...}
NN6.0 CSS2
id
h1#nadpis {...} označuje se „x[id~=hodn]“ (ekvivalentně „x#hodn“) a vyhovují *#nadpis {...} mu prvky typu „x“ (i pro „*“), jejichž #nadpis {...} atribut je „id=hodn“, „hodn“ musí nabývat unikátních hodnot
NN4.0 IE4.0 OP4.0 CSS2 resp. CSS1
Kdy použít atribut „id“ a kdy „class“: to vychází z povahy atributu „id“ – z jeho unikátnosti. Atribut „id“ tedy používáme u prvku, o němž víme, že se v dokumentu vyskytuje pouze jednou, a „class“ naopak u prvku, o němž víme, že se vyskytuje vícekrát. 3.3.6.1. Kombinování selektorů Selektory je možné vícenásobně kombinovat pomocí operátorů a podle jejich kontextu a vazeb na okolí ve stromu dokumentu, což umožňuje vytvářet velmi složité i podrobné selektory, a tím rozšířit jejich pole působnosti. Tabulka 7: relační operátory mezi selektory [1), str. 53-56; 2), str. 36-45]
příklad
podpora
slučování – umožňuje do jednoho pravidla sloučit více selektorů, které mají mít shodnou definici stylu; dál v kódu je možné pravidla samostatně (pře)definovat
h1, h2 {color: blue} h1 {font-size: 12pt}
NN4.0 IE4.0 OP4.0
mezera
následnictví – definice stylu pro potomka, nebo následníka uvažovaného prvku
h1 strong {color: blue} ... <strong>nadpis1
NN6.0 IE4.4 OP4.0 CSS1
>
potomek – definice stylu pro přímého potomka uvažovaného prvku
h1>strong {color: blue}
NN6.0 OP4.0 CSS2
operátor popis
,
CSS1
platí pro <strong> nadpis1
ale neplatí pro
<strong> nadpis1
+
li+li { border-top: 1px solid black }
sousední sourozenci – definice stylu pro následujícího sourozence uvažovaného prvku (časté využití pro oddělovače mezi stejnými prvky)
NN6.0, OP4.0 CSS2
3.3.6.2. Pseudo-prvky a pseudo-třídy Pseudo-prvky a pseudo-třídy umožňují formátování na základě informací existujících mimo strom dokumentu. Pseudo-prvky rozšiřují strom dokumentu o prvky, které v dokumentu neexistují. Pseudo-třídy umožňují rozlišit prvky podle jiných charakteristik, než je jméno a atribut - tedy takových, které nelze odvodit přímo ze stromu dokumentu. Mohou být i dynamické – prvky díky aktivitě uživatele do třídy střídavě patří nebo nepatří. Každý klient je interpretuje po svém, proto jimi není vhodné definovat důležité informace pro použití stránky. Pseudo-prvky a pseudo-třídy mohou být uvedeny jen za názvem selektoru. Na velikosti písmen v jejich názvech nezáleží. Některé z nich lze volně kombinovat, zatímco jiné se vylučují.
15
Tabulka 8: typy pseudo-prvků i pseudo-tříd a jejich charakteristika [1), str. 56-61; 2), str. 45-52]
prvky/třídy popis
příklad
podpora
:first-line
definice stylu pro první řádek odstavce (může být přiřazen pouze blokovému prvku)
p:first-line { font-variant: small-claps }
:first-letter
definice stylu pro první znak textu – iniciála (může být přiřazen pouze blokovému prvku; pokud není vlastnost „float: none“, tak se chová jako plovoucí prvek)
p:first-letter { float:left; fontsize: 18pt }
NN6.0 IE5.5 OP4.0 CSS1
:before
vkládání dat obsahu před prvek (pomocí vlastnosti „content“)
p:before { content: "hlavička"}
:after
vkládání dat obsahu za prvek (pomocí vlastnosti „content“)
p:after {content: "hlavička" }
:first-child
vztahuje se k prvku daného typu, který je prvním potomkem nějakého prvku
div>p:first-child {text-indent: 0px}
NN6.0 CSS2
hypertextové odkazy
:link
vztahuje se k dosud nenavštíveným odkazům
:visited
vztahuje se k navštíveným odkazům, s pseudo-třídou „:link“ se vylučuje
uvádíme pravidla ve vhodném pořadí od nejobecnějších k nejkonkrétnějším – tj. např. pro značku „a“:
NN6.0 IE4.0 OP5.0 CSS1
dynamické
:hover
vztahuje se k prvku, na něhož uživatel ukázal zařízením, ale neaktivoval jej (např. myší)
:active
vztahuje se k prvku, jenž byl aktivován (např. v době mezi stiskem a uvolněním tlačítka myši)
:focus
vztahuje se k prvku, jenž získal zaměření akcí uživatele (např. z klávesnice – tabulátor); většinou má uplatnění u formulářových prvků
je možné kombinovat pseudo-třídy:
definice jazyka prvku; za „jaz“ dosadíme zkratku zvoleného jazyka (pro stránku definujeme jazyk v „meta“ příkazu a hlavičce protokolu HTTP)
q:lang(en) {quotes: ′“′ ′”′} q:lang(cs) {quotes: ′„′ ′“′} q:lang(fr) {quotes: ′«′ ′»′}
pseudo-prvky
kategorie textové (blokové)
pseudo-třídy
vkládání nového obsahu
jazykové
:lang(jaz)
a:link {color: red} a:visited {color: green} a.externi:visited {color: purple} a:hover {color: yellow} a:active {color: lime}
NN6.0 OP5.0 CSS2
NN6.0 CSS1 NN6.0 IE4.0 OP5.0 CSS1
NN6.0 CSS2
input:focus:hover {...} CSS2
3.3.7. Dědičnost a kaskáda CSS Každý prvek dokumentu může vyhovovat více definicím stylu najednou definovaných (i) v několika tabulkách stylů, nebo jako důsledek dědičnosti. Při správném výběru hodnoty se uplatňuje základní princip CSS: kaskádování (viz dále).
16
3.3.7.1. Postup hledání optimální hodnoty Klient analyzuje dokument a zkonstruuje strom dokumentu, kdy všem prvkům přiřadí hodnoty všech vlastností, které se vztahují k cílovému médiu. Tyto hodnoty jsou výsledkem výpočtu o třech krocích: 1. určená hodnota: vezme se hodnota, která je ve stylovém předpisu explicitně nastavená. a) pokud existuje hodnota, která je výsledkem kaskádování (viz dále), vezme se tato hodnota b) nelze-li uplatnit pravidlo (a), ale daná vlastnost je dědičná, použije se hodnota rodiče; obecně se dědí vypočtená, nikoli určená hodnota c) nelze-li uplatnit pravidla (a) ani (b), použije se výchozí hodnota vlastnosti 2. vypočtená hodnota: je absolutní určená hodnota (např. „#000000“, „2cm“), nebo vznikne z relativní určené hodnoty (tj. hodnoty určené relativně vzhledem k jiné hodnotě: např. „1.5 em“, „150%“, „auto“; resp. klíčového slova: např. „smaller“, „bolder“, „inherit“) výpočtem její absolutní hodnoty. 3. skutečná hodnota: vznikne z vypočtené hodnoty transformací v závislosti na omezení konkrétního kontextu, resp. média. (např. rozměry uvedené v „px“ jsou zaokrouhleny na celá čísla, mají-li desetinný tvar; barvy jsou přizpůsobené možnostem tiskárny, atp.) 3.3.7.2. Dědičnost Dědičnost je schopnost přenosu vlastností rodiče na své potomky. Některé vlastnosti je možné dědit a jiné ne (tj. u každé vlastnosti uvedeno). Princip dědičnosti je názorně vidět na příkladu: Příklad 11: [1), str. 63] body: {font-size: 10pt} h1: {font-size: 120%} ... Toto je <em>důležitý nadpis!
Příkaz „<em>“ nemá nastavenou vlastnost „font-size“, ta je však dědičná, a proto se její hodnota dědí z rodičovského prvku „“. Vypočtená hodnota prvku „“ je „12pt“, neboť hodnota tohoto prvku je „120%“ ze zděděné hodnoty „10pt“ jeho rodičovského prvku „“.
3.3.7.3. Kaskádování Kaskádování je postup setřídění všech existujících tabulek a definic stylů platných pro zobrazovaný dokument a médium podle daných kritérií. Cílem je zjištění, zda má uvažovaný prvek pro konkrétní vlastnost definovanou nějakou hodnotu. A pokud takových hodnot existuje více, pak také výběr té správné. Postup kaskádování: 1. najdou se všechny definice vztahující se na prvek 2. tyto definice se setřídí podle váhy jejich původu - uvedené pořadí je od nejnižší po nejvyšší: a) pravidla z tabulek klienta (každý klient povinně používá vlastní výchozí tabulku stylů, postihující všechny strukturální prvky jazyka pro implicitní prezentaci dokumentů) b) pravidla z tabulek uživatele (vlastní tabulka stylů, popř. vygenerovaná pomocí nějakého rozhraní klienta s nastavením) 17
c) pravidla z tabulek autora stránky (včetně přímých stylů) d) pravidla s !important z tabulek autora e) pravidla s !important z tabulek uživatele 3. druhé setřídění je podle konkrétnosti – rozhodne o pořadí definic, které mají stejnou váhu, porovnáním jejich selektorů. Konkrétnější mají přednost před obecnějšími. Algoritmus: a = 1, pokud definice pochází z přímého stylu; a = 0, pokud z tabulky stylů b = počet ID v selektoru („#název“) c = počet atributů (včetně tříd a pseudo-tříd) v selektoru d = počet názvů prvků v selektoru (pseudo-prvky se ignorují) konkrétnost = a-b-c-d (spojení číslic) Příklad 12: [1), str. 67] * { ... } p { ... } *[id=neco] { ... } #neco { ... } style="..." #neco li.neco
/* /* /* /* /* /*
a=0 a=0 a=0 a=0 a=1 a=0
b=0 b=0 b=0 b=1 b=0 b=1
c=0 c=0 c=1 c=0 c=0 c=1
d=0 d=1 d=0 d=0 d=0 d=1
-> -> -> -> -> ->
konkrétnost=0000=0 */ konkrétnost=0001=1 */ konkrétnost=0010=10 */ konkrétnost=0100=100 */ konkrétnost=1000=1000 */ konkrétnost=111=111 */
4. poslední setřídění je podle pořadí definování – rozhodne o pořadí definic, které mají stejnou váhu i konkrétnost: přednost má ta, která byla definována později. Importované styly se považují za dříve definované než styly definované přímo v tabulce. Definice vzhledu nepocházející z CSS, jako např. „font“, „big“, „small“ apod., používané v HTML 4.0 Transitional a nižší, jsou skrytě prohlížečem převedené na CSS definice. V CSS2.1 je jim přiřazená váha výchozí tabulky klienta. V nižších verzích CSS měly váhu vyšší. 3.3.7.4. Hodnota inherit a pravidla @import a !important Tabulka 9: charakteristika hodnoty inherit a pravidel @import a !important [1), 63-65; 2), str. 54-57]
název
Popis
příklad
inherit
hodnota říká, že daný prvek převezme vypočítanou hodnotu dané vlastnosti svého rodiče – vynucené dědění; hodnota je použitelná pro jakoukoli vlastnost, a to i tu, která není dědičná.
div {padding-left: 10%} p {padding-left: inherit} ...
@import
pravidlo umožňuje importovat do dané tabulky stylů tabulku stylů z externího souboru; pravidlo musí předcházet všechny ostatní pravidla definovaná v dané tabulce stylů a má tvar: „@import URL [seznam_medií]“
@import url(styl1.css); @import url(′styl2.css′); @import url("styl3.css"); @import ′styl4.css′ print; @import "styl5.css" screen, handheld;
!important
příkaz dává přednost před všemi ostatními definicemi bez tohoto příkazu; na straně uživatele má větší váhu než na straně autora (platí v CSS2, v CSS1 naopak), u klienta se nepoužívá; lze jej uvést za libovolnou definicí
body { background: #ffffff
18
!important; color: #000000
}
!important
3.3.8. Vizuální formátovací model Vizuální formátovací model popisuje postup, kterým klient (prohlížeč) zpracovává správně ohodnocený strom dokumentu metodou kaskádování na vizuálních médiích – tedy těch, která zobrazují dokument. Dokument se vždy vykresluje na nějaké zobrazovací ploše. U stránkových médií (např. tiskárna, projektor) je to sada jednotlivých stránek, mezi které je dokument rozdělen. U plynulých médií (např. obrazovka) je k dispozici jediná zobrazovací plocha neomezené délky a šířky. Klient potom poskytuje průzor na tuto plochu (s možností rolování), zobrazující alespoň část dokumentu. Ve vizuálním formátovacím modelu se pro každý prvek stromu dokumentu generuje nula a více boxů – tj. obdélníkové orámování prvku specifických vlastností. Jejich vzhled a umístění na zobrazovací ploše závisí na rozměrech boxu, použitém pozicování, vztazích mezi prvky ve stromu dokumentu a dalších. 3.3.8.1. Koncepce boxů Každý box má oblast obsahu, kterou obklopuje oblast výplně (vlastnost „padding“), oblast orámování („border“) a oblast okrajů („margin“). Každá ze čtyř oblastí je vymezena svou hranou. Hrana oblasti okraje, resp. orámování, resp. výplně je totožná vždy s hranou její nejbližší vnitřní oblasti (obsahu), pokud má oblast okraje, resp. orámování, resp. výplně nulovou šířku. Oblasti i jejich hrany se dále dělí podle umístění na horní („top“), pravý („right“), dolní („bottom“) a levý („left“) segment. V kombinaci pak např. „paddingtop“. Více v kapitole 4. Šířka boxu je součtem levých i pravých okrajů, orámování a výplní a šířky obsahu. Výška boxu je součtem horních i dolních okrajů, orámování a výplní a výšky obsahu. Pozadí pro jednotlivé oblasti: pro oblast obsahu a výplně je pozadí Obrázek 1: koncepce boxu – box model [2), str. 62] určeno vlastností „background“, pro oblast orámování to je vlastnost „border“ a pro oblast okrajů je pozadí vždy průhledné. Splývání hran znamená, že sousedící hrany dvou či více boxů (sousedících i vnořených), které nerozděluje žádná výplň či orámování, se spojují a utvoří jednu hranu. Šířka vzniklé hrany je rovna nejširší kladné hraně (dále šh+) ze splývajících hran. Pokud je nějaká hrana se zápornou hodnotou, je výsledná_šířka = šh+ – abs(šh-), kde šh- je hrana s nejširší zápornou hodnotou. Pokud jsou všechny hrany se zápornou hodnotou, pak výsledná_šířka = 0 – abs(šh-). Vertikální okraje mezi plovoucím a jakýmkoli jiným boxem nesplývají. Okraje absolutně nebo relativně pozicovaných boxů nesplývají. 19
Hrana obsahu je omezující blok pro všechny potomky uvažovaného prvku, závisí na něm jejich rozměry („width“, „height“) i umístění. Výchozím omezujícím blokem dokumentu je prvek „“ i „“ – nemůže být pozicován ani plovoucí. Implicitní hodnoty pro něj jsou různé podle typu média. Absolutně pozicované prvky se zobrazují samostatně. Omezujícím blokem pro prvek je nejbližší absolutně pozicovaný předek, jeho hrana výplně. Pokud neexistuje, tak je jím výchozí omezující blok dokumentu. 3.3.8.2. Generování boxů V omezujícím bloku mohou být generovány v závislosti na hodnotě vlastnosti „display“ boxy dvojího typu: blokové (hodnoty „block“, „list-item“, „compact“, „run-in“ částečně a „table“) a řádkové („inline“, „inline-table“, „compact“, „run-in“). Blokové prvky jsou takové, které se zobrazují jako souvislé obdélníkové bloky (např. odstavec) – tedy generují blokové boxy. Blokový box může ve svém omezujícím boxu obsahovat pouze boxy stejného typu: buď blokové, nebo řádkové. Pokud i přesto obsahuje boxy obojího typu, sjednotí se tak, aby byl obsah tvořen pouze blokovými boxy. Tj. z řádkového boxu se vytvoří anonymní blokový box. Příklad 13: [1), str. 73] Text, který není blokovým prvkem.
Obsah uvnitř blokového prvku.
Řádkové prvky jsou takové, které se zobrazují v řádcích (např. „<em>“, „<strong>“) – tedy generují řádkové boxy. Pokud rodičovský blokový box obsahuje mimo řádkové boxy i volné segmenty textu, tak se pro ně vytvoří anonymní řádkové boxy.
Obrázek 2: blokový box [1), str. 73]
Příklad 14: [1), str. 74] Toto je <em>zvýrazněnýtext.
Prvku s vlastností „display: run-in“ říkáme run-in box a má specifické chování, na rozhraní mezi blokovým a řádkovým. Zobrazuje se podle následujícího obsahu: jestliže za run-in boxem následuje blokový box (který není plovoucí ani absolutně pozicován), stane se prvním řádkovým boxem blokového boxu, jinak se stane blokovým boxem.
Obrázek 3: řádkové boxy [1), str. 74]
Příklad 15: [1), str. 74] h4 { display: run-in } ... Toto je nadpis A zde pokračuje text v následujícím odstavci, který je blokem...
Obrázek 4: run-in boxy [1), str. 74]
Prvku s vlastností „display: compact“ říkáme kompaktní box. Funguje podobně jak runin box. V případě kdy se stal prvním řádkovým boxem, je rozdíl tento: pokud je okraj následujícího blokového boxu větší nebo roven velikosti kompaktního boxu, umístí se tento do okraje – pravého nebo levého (to určuje vlastnost „direction“ prvku, jenž je jeho omezujícím blokem). 20
Kompaktní a run-in boxy zatím nepodporuje žádný z běžných prohlížečů. 3.3.8.3. Poziční schéma Poziční schéma určuje umístění a způsob výpočtu rozměrů boxu. Na tom spolupůsobí dvě vlastnosti „position“ pro pozicování (s přidruženými vlastnostmi „top“, „right“, „bottom“, „left“) a vlastnost „float“ určující, zda je prvek plovoucí. Box může být v CSS2 umístěn jedním ze tří způsobů: 1. normální řazení: je výchozím schématem pro dokumenty a zahrnuje blokové formátování blokových boxů, řádkové formátování řádkových boxů, relativní pozicování blokových nebo řádkových boxů a pozicování kompaktních a run-in boxů s hodnotami vlastností: „position: static;“ (implicitně) nebo „position: relative;“ a současně „float: none;“ a) Blokové formátování: boxy jsou kladeny pod sebou od levé horní hrany omezujícího bloku, které se svou vnější hranou dotýkají (při formátování zleva doprava). Vertikální okraj mezi sousedními boxy je dán vlastnostmi „margin-top“ a „margin-bottom“. Platí, že se vertikální okraje slučují a výsledná hodnota odpovídá té, která je větší. A slučují se (pouze pro prvního a posledního blokového potomka) i s vertikálními okraji jejich omezujícího bloku, pokud mají jeho vlastnosti „padding“ a „border“ nulovou hodnotu.
Obrázek 5: blokové rámy v normálním toku a slučování okrajů [1), str. 75]
b) Řádkové formátování: boxy jsou kladeny vedle sebe od levé horní hrany omezujícího bloku. Horizontální okraje, orámování a výplně boxů se respektují. Pravoúhlá oblast obsahující řádkové boxy, tvořící jeden řádek, se nazývá celořádkový box. Šířka celořádkového boxu je určená omezujícím blokem (dotýká se jej po obou stranách). Pokud je jeho šířka kratší (= součet šířek řádkových boxů je menší než šířka omezujícího bloku) můžeme měnit horizontální zarovnání vlastností „text-align: [left|center|right|justify]“ jestliže zvolíme hodnotu „justify“, celořádkový box se roztáhne na šířku omezujícího bloku. Pokud je jeho šířka větší, je rozdělen do více celořádkových boxů, mezi nimiž nejsou žádné mezery a nikdy se nepřekrývají. Odstavec je tedy posloupností celořádkových boxů. Také řádkový box může být rozdělen na dva řádky, v místě řezu se nezobrazuje výplň, 21
rámeček ani okraj. Vertikální zarovnání vzhledem k omezujícímu bloku umožňuje vlastnost „vertical-align: [top|middle|bottom]“. Výška celořádkového boxu je taková, aby se do něj vešly všechny řádkové boxy, které obsahuje3. Mezi hranou celořádkového boxu a jeho omezujícího bloku se může nacházet plovoucí box.
Obrázek 6: řádkové rámy v normálním toku [1), str. 76]
2. Plovoucí boxy: plovoucí boxy jsou nejprve umístěny normálním řazením, pak jsou z řady vyjmuty mimo řazení dokumentu a posunuty co nejdále vpravo či vlevo. Obsah blokových boxů může obtékat okolo stran plovoucích boxů, bez vlivu na blokové boxy samotné. Hodnoty vlastností jsou nastaveny na: „position: static“ (implicitně), nebo „position: relative“ a současně „float: right“ nebo „float: left“ (u absolutně pozicovaných prvků se vlastnost „float“ ignoruje). Plovoucí box se dotýká levou (resp. pravou) hranou omezujícího bloku. Nastavením vlastnosti „clear: [left|right|both|none]“ můžeme zamezit obtékání. Platí, že každý plovoucí box musí mít nastavenou šířku - „width“, protože se automaticky stává blokem. Jeho horní a dolní okraje se už se sousedními okraji neslučují. Pro prvek v normálním řazení (1.) nebo plovoucí box (2.) můžeme použít relativní pozicování. Hodnota vlastnosti je nastavena na: „position: relative“. Prvek je nejprve naformátován v dokumentu, jakoby pozicován nebyl, a teprve potom je posunut ze své základní pozice o zadanou vzdálenost. Tzn., že relativní pozicování nemá vliv na vzhled a rozměry pozicovaného prvku a posun také nijak neovlivňuje formátování okolních prvků – tím může dojít k jejich překrytí.
3
Více v kapitole 3.3.8.4. Výpočet rozměrů prvků.
22
Obrázek 7: ukázka plovoucích prvků, obtékání a ukončení obtékání, relativní pozicování [1), str. 78-79]
3. Absolutní pozicování. Hodnota vlastnosti je nastavena na: „position: absolute“ nebo „position: fixed“. Prvek se stává automaticky blokem a je zcela vyjmut z normálního řazení dokumentu – tj. nemá žádný vliv na okolní prvky: neovlivňuje jejich formátování a nedochází k obtékání. Je mu určena nová pozice vzhledem k omezujícímu bloku – pozicovanému předchůdci (pokud neexistuje, tak je jím výchozí omezující blok dokumentu). Všechny prvky, které jsou obsaženy uvnitř tohoto boxu, se pozicují již vzhledem k němu. Absolutně pozicované boxy, které nejsou navzájem vnořené, spolu žádným způsobem neinteragují (např. jejich okraje se neslučují) a mohou se překrývat. Prvky dokumentu se překrývají podle toho, v jaké vrstvě dokumentu jsou. Vrstvy přidávají dokumentu třetí rozměr (osu Z). Rozlišujeme základní vrstvu pro prvky v normálním řazení dokumentu a nad ní jdou další vrstvy pro jednotlivé absolutně pozicované boxy. To, v jaké vrstvě se absolutně pozicovaný box nalézá (i jeho potomci), určuje vlastnost „z-index“. Potomci dále mohou vytvářet vlastní podvrstvy – platí zde stejná pravidla. Čím vyšší hodnota vlastnosti „z-index“, tím „blíže“ k pozorovateli se box nachází a překrývá boxy s nižšími hodnotami. Hodnoty mohou být i záporné. Pokud mají dva boxy stejnou hodnotu „z-index“, pořadí jejich vrstev se řídí jejich pořadím ve stromu dokumentu – pozdější boxy jsou umístěné výše. Výchozí hodnota pro prvky je „z-index: auto“ - boxy se vykreslují a překrývají tak, jak za sebou následují ve stromu dokumentu. Kořen dokumentu má hodnotu „0“.
23
Obrázek 8: vrstvy dokumentu [1), str. 80]
Fixní pozicování („position: fixed“) je zvláštní případ absolutního pozicování. Výchozím omezujícím blokem pro fixně pozicovaný box je průzor do dokumentu (např. okno dokumentu v prohlížeči). Fixně pozicovaný box je umístěn relativně k okrajům průzoru, a tedy posun průzoru po dokumentu neovlivňuje jejich pozici. U stránkových médií se zobrazí na stejném místě na každé stránce – vhodné pro vytváření záhlaví a zápatí. Vztahy mezi vlastnostmi „display“, „position“ a „float“, ovlivňující generování boxů: 1. Je-li vlastnost „display: none“, klient ignoruje vlastnosti „position“ a „float“. Prvek negeneruje žádný box. 2. Neplatí-li (1.) a vlastnost „position: [absolute|fixed]“ jsou vlastnosti automaticky nastaveny na „display: block“ a „float: none“. V tom případě bude umístění boxu určeno vlastnostmi „top“, „right“, „bottom“, „left“ a obsahujícím boxem bloku. 3. Neplatí-li (1.), (2.) a vlastnost má jinou hodnotu než „float: none“, potom je vlastnost automaticky nastavena na „display: block“ a vygenerovaný box je plovoucí. 4. V ostatních případech má vlastnost display hodnotu určenou autorem, nebo výchozí hodnotu.
24
3.3.8.4. Výpočet rozměrů prvků Tabulka 10: charakteristika výpočtu pro různé typy prvků [1), str. 81-84; 2), str. 91-97]
řádkové
třída
popis Šířka a výška: vlastnosti „width“ a „height“ se ignorují. Výška řádku je určená vlastností „line-height“. Hodnota „auto“ u vlastností „top“, „right“, „bottom“, „left“, „margin-top“, „margin-right“, „margin-bottom“, „margin-left“ je nahrazená hodnotou „0“. Šířka: hodnota „auto“ u vlastností „left“ a „right“ je nahrazena hodnotu „0“. Pro ostatní vlastnosti musí platit rovnice:
normálně řazené blokové
margin-left + border-left-width + padding-left + width + padding-right + border-right-width + margin-right = šířka omezujícího bloku
Řešení rovnice: 1. Je-li vlastnost „border-style: none“, je automaticky vlastnost „border-with: 0“. 2. Pokud všechny vlastnosti v rovnici mají jiné hodnoty než „auto“ (příliš mnoho definic), hodnota „margin-right“ se ignoruje a dosadí se vypočítaná hodnota tak, aby rovnice platila. To platí pokud „direction: ltr“, pokud „direction: rtl“, pracuje se naopak s „margin-left“. 3. Pokud má právě jedna vlastnost hodnotu „auto“, je nahrazená hodnotou spočítanou z rovnice. 4. Pokud je vlastnost „width: auto“, všechny ostatní hodnoty „auto“ jsou nahrazeny „0“ a skutečná hodnota „width“ se spočítá z rovnice. 5. Pokud jsou vlastnosti „margin-left: auto“ i „margin-right: auto“, jejich vypočítané hodnoty budou shodné.
plovoucí
Výška: hodnota „auto“ u vlastností „top“, „bottom“, „margin-top“, „margin-bottom“ je nahrazena hodnotou „0“. Výšku prvku tvoří výška jeho obsahu. Obsahuje-li pouze řádkové prvky, hodnotou „height“ bude vzdálenost horní hrany nejvyššího řádku ke spodní hraně nejspodnějšího řádku. Obsahuje-li blokové prvky (včetně anonymních bloků), hodnotou „height“ bude vzdálenost od horní hrany orámování nejvyššího blokového potomka ke spodní hraně orámování nejnižšího. Uvažují se pouze bloky v normálním toku - plovoucí a absolutně pozicované boxy se ignorují, relativně pozicované prvky se uvažují v původní pozici před jejich posunutím. Šířka: hodnota „auto“ u vlastností „left“, „right“, „width“, „margin-right“, nebo „margin-left“ je nahrazena hodnotou „0“. Výpočet výšky shodně jak pro: nenahrazované normálně řazené blokové prvky.
25
Šířka: platí tato rovnice:
absolutně pozicované
left + margin-left + border-left-width + padding-left + width + padding-right + border-right-width + margin-right + right = šířka omezujícího bloku
Řešení rovnice: 1. Pokud je vlastnost „left: auto“, nahraď ji vzdáleností levé hrany omezujícího bloku od levé hrany orámování hypotetického boxu, který by byl prvním boxem tohoto prvku, kdyby měl „position: static“ (tedy tak, jako by nebyl absolutně pozicován). Výsledná hodnota je záporná, pokud se onen hypotetický box nachází vlevo od omezujícího bloku. To platí, pokud „direction: ltr“, pokud „direction: rtl“ platí tato operace pro pravou stranu a vlastnost „right“. 2. Pokud je vlastnost „width: auto“, zbývající hodnotu „auto“ vlastností „left“ nebo „right“ nahraď hodnotou „0“. 3. Pokud je vlastnost „left“, „right“ nebo „width“ stále ještě „auto“, nahradí se všechny hodnoty „auto“ ve vlastnostech „margin-left“ a „margin-right“ hodnotou „0“. 4. Pokud mají stále vlastnosti „margin-left“ a „margin-right“ hodnotu „auto“, vyřeší se rovnice dodatečnou podmínkou, že obě vlastnosti musí mít stejnou velikost. 5. Pokud má stále některá vlastnost hodnotu „auto“, vypočítá se její hodnota z rovnice. 6. Pokud nyní rovnice neplatí, ignoruje se hodnota vlastnosti „left“ (pro „direction: rtl“), respektive „right“ (pro „direction: ltr“) a její hodnota se vypočítá z rovnice. Výška: platí tato rovnice: top + margin-top + border-top-width + padding-top + height + paddingbottom + border-bottom-width + margin-bottom + bottom = výška omezujícího bloku
normálně řazené blokové
nahrazované
řádkové
Řešení rovnice: 1. Pokud je vlastnost „top: auto“, nahraď ji vzdáleností horní hrany omezujícího bloku od horní hrany orámování hypotetického boxu, který by byl prvním boxem tohoto prvku, kdyby měl „position:static“ (tedy tak, jako by nebyl absolutně pozicován). Výsledná hodnota je záporná, pokud se onen hypotetický box nachází nad omezujícím blokem. 2. Pokud mají vlastnosti „height“ a „bottom“ hodnotu „auto“, bude „bottom: 0“. 3. Pokud je vlastnost „height“ nebo „width“ stále ještě „auto“, nahradí se všechny hodnoty „auto“ ve vlastnostech „margin-top“ a „margin-bottom“ hodnotou „0“. 4. Pokud mají stále vlastnosti „margin-top“ a „margin-bottom“ hodnotu „auto“, vyřeší se rovnice dodatečnou podmínkou, že obě vlastnosti musí mít stejnou velikost. 5. Pokud má stále některá vlastnost hodnotu „auto“, vypočítá se její hodnota z rovnice. 6. Pokud nyní rovnice neplatí, ignoruje se hodnota vlastnosti „bottom“ a vypočítá se znovu z rovnice. Šířka: hodnota „auto“ u vlastností „left“, „right“, „margin-left“ a „margin-right“ je nahrazena hodnotou „0“; je-li vlastnost „width: auto“, je její hodnota nahrazena přirozenou šířkou prvku. Výška: hodnota „auto“ u vlastností „top“, „bottom“, „margin-top“ a „margin-bottom“ je nahrazena hodnotou „0“; je-li vlastnost „height: auto“, je její hodnota nahrazena přirozenou výškou prvku. Šířka: hodnota „auto“ u vlastností „left“ a „right“ je nahrazena hodnotu „0“. Je-li vlastnost „width: auto“, je její hodnota nahrazena přirozenou šířkou prvku. Pokud má jedna z vlastností „margin-left“ a „margin-right“ hodnotu „auto“, vypočte se skutečná hodnota z rovnice (nenahrazované normálně řazené blokové prvky). Pokud mají obě vlastnosti hodnotu „auto“, jejich spočítané hodnoty budou shodné. Výpočet výšky shodně jak pro: nahrazované řádkové prvky.
26
absolutně plopozicované voucí
Výpočet šířky shodně jak pro: nahrazované řádkové prvky. Výpočet výšky shodně jak pro: nahrazované řádkové prvky. Výpočet šířky shodně jak pro: nenahrazované aboslutně pozicované prvky, pouze u vlastnosti „width“ se počítá s přirozenou šířkou prvku. Výpočet výšky shodně jak pro: nenahrazované aboslutně pozicované prvky, pouze u vlastnosti „height“ se počítá s přirozenou šířkou prvku.
3.4. Krátce o CSS3 Verze jazyka CSS3 se liší od verze CSS2, přidanými vlastnostmi a jejich možnostmi, ale také strukturou samotného standardu. Standard je rozdělen do dílčích dokumentů, tzv. modulů, pojednávajících odděleně o určité části jazyka CSS3. Toto řešení je výhodné pro čtecí zařízení a aplikace, které tak mohou definovat podporované i nepodporované moduly (např. čtečky XHTML stránek podporují specifikace týkající se mluvených stylů). CSS3 obsahuje tyto moduly: Úvod, Syntaxe, Selektory, Hodnoty, Kaskáda a dědičnost, Box model, Pozicování, Barvy, Pozadí a okraje, Řádkový modul, Text, Ruby, Fonty, Webové fonty, Generovaný obsah, Seznamy, Stránková média, Uživatelské rozhraní, Tabulky, Sloupce, Matematika, Řeč, Audio, Média, Objektový model CSS, Editovací objektový model CSS, Hyperlink, Prezentace, Atribut style, Čtečky, Gramatika, Pokročilé rozvržení. Jejich podrobný popis viz specifikace[3)]. Následuje letmé seznámení s některými moduly[5)]: Modul Selektory přináší nové selektory, pseudo-třídy a pseudo-elementy. Můžeme např. vybírat elementy, podle jejich obsahu, podle hodnot jejich atributů (podle toho, zda hodnota začíná, končí, resp. obsahuje řetězec). K původně jediné pseudo-třídě řídící se stromem dokumentu, byly přidány další pseudo-třídy, zaručující rozeznání a práci s libovolným elementem ve stromové struktuře dokumentu. Novinkou jsou i pseudo-třídy umožňující rozpoznat stavy komponent, zda jsou povolené, nebo zakázané, zaškrtnuté, či nikoli. Je definován také nový kombinátor pro zjištění, zda dva prvky mající stejného rodiče následují (ne nutně bezprostředně) za sebou. Také jsou zde drobné změny v syntaxi. Jedinou podstatnou novinkou modulu Kaskáda a dědičnost je možnost vynutit si u kterékoli vlastnosti, aby za její hodnotu byla dosazena výchozí (initial) hodnota. Kdežto v modulu Box model došlo ke změně ve fundamentální části CSS – box modelu. Nová verze se v určitých částech značně odklání od CSS2. Onou zásadní změnou je nahrazení vlastnosti „display“, dvěma novými vlastnostmi: „display-model“, která určuje, jakým způsobem bude daný element vykreslovat své potomky, a „display-role“ definující roli, kterou element hraje uvnitř svého rodičovského elementu. Vlastnost „display“ zůstává zachována pro zkrácený zápis obou nových vlastností. U nahrazovaných prvků přibyly další možnosti formátování, umožňující definovat velikost nahrazovaného prvku v poměru s objektem, kterým bude nahrazen (např. obrázkem). Můžeme určit 27
pozici objektu v nahrazovaném prvku, zda se má objekt roztáhnout, či zmenšit podle zadaných hodnot, nebo změnit v poměru při zadání jen jedné hodnoty. U plovoucích boxů je novinkou rozšíření boxu tak, aby končil až pod svým posledním plovoucím dítětem. Nově lze lépe přizpůsobit vzdálenost obtékání nebo zvolit zjednodušený model obtékání, ve kterém má obtékající box v celém obsahu jednotnou výšku a nebude tedy obtékat nad a pod plovoucím elementem. Modul Barvy přináší nové, dobře použitelné možnosti. Nejvýznamnější snad je větší podpora průhlednosti, umožňující definování jejího stupně, a to nejen pro elementy s vlastnostmi přijímající barevné hodnoty, ale i pro elementy samotné, ba dokonce pro všechny jejich potomky. Kromě klasického RGB modelu je možné pracovat i s HLS modelem. Modul Pozadí a okraje přináší taktéž změny. U pozadí můžeme definovat ne jeden, ale více obrázků, které se vykreslují na pozadí elementu v tom pořadí, v jakém byly uvedené a podle příslušných hodnot dalších vlastností. Můžeme také ovlivňovat velikost obrázku tvořícího pozadí elementu a i to, zda má pozadí zasahovat až po orámování „border“, tedy do oblasti odsazení „padding“ od obsahu. Dalšími novinkami jsou zarovnání k libovolnému rohu daného prvku a definice jak se má prvek chovat, pokud je element zalomen přes dvě stránky stránkového média. Nově můžeme nadefinovat zakulacené okraje a to buď vektorově, pomocí linky, nebo díky obrázku, který je rozdělen na čtyři rohy a výseče mezi nimi. Poslední novinkou je možnost nadefinovat elementu stín, který vrhá. Řádkový modul a modul Text se snaží přiblížit možnostem DTP sazby. U Řádkového modulu jsou rozšířené možnosti práce s výškou řádku i textu a vertikální zarovnání in-line obsahu řádky. Také lze kontrolovat posloupnost řádek - definovat pro daný blok i jednotlivé řádky různé metody řazení. Značně vylepšeny jsou možnosti formátování Iniciály. Textový modul je obohacen o možnosti dekorace textu, jako určení barvy, tloušťky a stylu podtržení. Nově je možný, při zarovnání „justify“, výběr algoritmu pro roztažení mezer mezi slovy i písmeny, a zarovnání poslední řádky. Více možností máme také při interpretaci mezer a konců řádků, či odsazení textu od levé hrany. Objevila se i velice užitečná vlastnost, určující zástupný řetězec, popř. obrázek v případě, že délka textu přesahuje omezující blok. Novinky modulu Fonty jsou: vyhlazování písma a efekty nad písmem, jako vykrytí, navýšení písma, nebo vykreslování pouze kontur jednotlivých znaků. Modul Generovaný obsah přidává k vlastnostem pro vkládání generovaného obsahu před a za element další možnosti. První je možnost řetězení těchto vlastností a tím nabalování obsahů na cílový element. Další možností je vytvořit pomocí stylů imaginární element, obalující svůj cíl. Jinou věc ocení zvláště autoři píšící o programování: automatické vkládání čísel řádků, před ukázkovou část kódu. Následující velice užitečná novinka umožňuje nahradit obsah elementu obsahem definovaným stylovým předpisem, a to i ze souboru. Nebo můžeme nahradit obsah jednoho elementu obsahem jiného elementu, vyskytujícího se na stránce – takto elegantně vytvoříme např. obsah, rejstřík, nebo seznamy, a to bez zápisu do zdroje dokumentu. Modul Seznamy je doplněn o několik nových stylů číslování a jsou upřesněny algoritmů číslování.
28
Modul Sloupce umožňuje sloupcové rozvržení v rámci elementu tak, aby jeho obsah plynule přecházel z jednoho sloupce do druhého. Jejich šířka je samozřejmě nastavitelná, mezera mezi sloupci taktéž a je možné vložit mezi sloupce oddělovací čáru. Při sazbě bývá potřeba, aby některý prvek nerespektoval sloupcové formátování a byl roztáhnut mezi dva a více sloupců - i toto je možné. Sloupcové formátování však není vhodné pro tvorbu layoutu, protože nelze nastavit sloupcům rozdílné šířky, a také proto, že nelze explicitně určit, aby se obsah sloupce na daném místě začal přelévat do dalšího sloupce. Modul Prezentace umožňuje definovat více pohledů na jeden dokument. Základem je premisa, že každý dokument i element se nachází v prezentační úrovni, reprezentované celým číslem. Elementy pak lze formátovat podle toho, v jaké relaci je jejich prezentační úroveň, vůči prezentační úrovni celého dokumentu – ta může být menší, rovná nebo větší. Tak je možné vytvořit např. seznam, který se chová jako jednoduchá prezentace, tím že měníme prezentační úroveň dokumentu. Modul Média přináší dotazy na médium, které rozšiřují možnosti výběru zařízení tím, že berou v potaz i parametry. V dotazu lze používat operátory průniku a sjednocení. V rámci dotazů budeme moci např. kontrolovat výšku a šířku zobrazovací plochy aj. Modul Stránková média podstatným způsobem rozšiřuje možnosti formátování dokumentu, prezentovaného stránkovými médii. Novinkou je podpora formátování pro orámování „border“ a odsazení „padding“. Oblast okrajů „margin“ je nově rozdělená na 16 částí, které lze využít pro záhlaví nebo zápatí dokumentu aj. Do jedné z oblastí můžeme vložit např. název dokumentu, celkový počet stránek nebo počítadlo stránek. Dále je nové, že stránka obsahuje speciální oblasti k ukotvení pro plovoucí prvky: nahoře, dole, vlevo, vpravo. Zvukovou stránku dokumentu pojímají hned tři moduly: Řeč, Čtečky a Audio. Modul Řeč je nástupce média Aural, které se považuje za překonané. Stejně tak umožňuje nastavit druh hlasu, hlasitost, mezery před a za elementy apod. Hlavním přínosem je však kompatibilita s jazykem SSML (Speech Synthesis Markup Language). Modul Čtečky umožňuje současné a synchronizované čtení a zvýrazňovaní textu. Funkce modulu Audio je umožnit přiřazení elementu libovolný zvuk, který se bude buďto přehrávat automaticky, nebo při určitém stavu (např. při přejetí myši). Modul Uživatelské rozhraní zavádí nové pseudo-selektory, resp. pseudo-elementy pro formulářové prvky, umožňující např. definování povoleného formátu a rozsahu hodnoty, nebo povinnost vyplnit daný prvek, resp. umožňující zadání implicitní hodnoty, voleb, opakování položek apod. Nyní je možné přiblížit vzhled formulářových prvků vzhledu odpovídající platformy v ještě větším rozsahu než v minulosti. Platformě můžeme přizpůsobit: vzhled kurzoru, zvýraznění aktivních prvků a dokonce můžeme převzít celý vzhled formulářového prvku. Dále již není podporováno přejímání systémových barev, avšak je paradoxně posíleno přejímání systémového nastavení písma. Užitečnou novinkou je možnost definovat pořadí prvků pro navigaci z klávesnice, a to jak klávesou „TAB“, tak směrovými šipkami. Modul Hyperlink zodpovídá za chování při výběru odkazu, tedy jestli se má dokument, na který je odkazováno, otevřít ve stávajícím, či novém okně, resp. nové záložce prohlížeče.
29
4. Přehled funkcí a vlastností CSS
Následující tabulky obsahují vlastnosti jazyka CSS - verze CSS1 a CSS2. Každá tabulka prezentuje jednu kategorii vlastností podle W3C specifikace. Ke každé vlastnosti uvádím její název; popis funkčnosti; možné hodnoty, které může vlastnost nabývat; implicitní hodnotu, kterou má vlastnost nastavenu, dokud jí není přiřazena hodnota jiná; množinu prvků, které ovlivňuje (pro něž je vlastnost použitelná); určení, zda hodnoty této vlastnosti zdědí potomci daného prvku; je-li použitelná procentní hodnota, uvádím, k čemu se procentní poměr vztahuje; média, pro něž je daná vlastnost platná a v posledním sloupci jsou uvedeny verze prohlížečů, které danou vlastnost podporují bez větších obtíží, a taky verze jazyka CSS vlastnost definující. Podrobnější popis vlastností není součástí této práce, k jeho dohledání nechť čtenář využije použité literatury. Tabulka 11: box model – vlastnosti okrajů a jejich charakteristika [1, str. 107-108; 2, str. 102; 7, str. 1]
Box model / Okraje vlastnost margin
margin-top
popis Sdružená vlastnost určující velikost všech čtyř okrajů prvku.
možné hodnoty <šířka_okraje>{1,4}| inherit
Určuje velikost horního okraje |<%>|auto| inherit prvku.
implici. ovlivňuje viz dílčí Všechny prvky. vlastnosti 0
(=<šířka_okraje>)
margin-right
Určuje velikost pravého okraje prvku.
dědí procenta
ne Vztahují se k šířce, resp. výšce omezujícího bloku. Vztahují se k výšce omezujícího bloku. Vztahují se k šířce omezujícího bloku.
30
média
podpora
vizuální NN6.0 IE5.5 OP4.0 CSS1
margin-bottom
Určuje velikost dolního okraje prvku.
Vztahují se k výšce omezujícího bloku.
margin-left
Určuje velikost levého okraje prvku.
Vztahují se k šířce omezujícího bloku.
Tabulka 12: box model – vlastnosti odsazení a jejich charakteristika [1, str. 108-109; 2, str. 100; 7, str. 1]
Box model / Odsazení vlastnost
popis
možné hodnoty <šířka_výplně>{1,4}| inherit
implici. ovlivňuje
padding
Sdružená vlastnost určující odsazení prvku na všech stranách současně.
―
padding-top
Určuje odsazení prvku nahoře. |<%>|inherit 0
padding-right
Určuje odsazení prvku vpravo.
padding-bottom
Určuje odsazení prvku dole.
padding-left
Určuje odsazení prvku vlevo.
Všechny prvky.
dědí procenta
média
podpora
ne Vztahují se vizuální NN6.0 IE5.5 k šířce omezujíOP4.0 cího bloku CSS1
(=<šířka_výplně>)
Tabulka 13: box model – vlastnosti orámování a jejich charakteristika [1, str. 109-112; 2, str. 101-102; 7, str. 1]
Box model / Orámování vlastnost border-top-width border-right-width
popis
možné hodnoty
Určuje sílu horního orámování thin|medium|thick| |inherit prvku. Určuje sílu pravostranného orámování prvku.
implici. ovlivňuje medium Všechny prvky.
(=<šířka_orámování>)
border-bottom-width Určuje sílu spodního orámování.
31
dědí procenta ne ―
média
podpora
vizuální NN6.0 IE5.5 OP4.0 CSS1
border-left-width
Určuje sílu levostranného orámování prvku.
border-width
<šířka_rámečku>{1,4}| Určuje sílu orámování na všech čtyřech stranách prvku. inherit
border-top-color
Určuje barvu horního orámování prvku.
border-right-color
Určuje barvu pravostranného orámování prvku.
viz dílčí vlastno.
NN4.0 IE4.0 OP4.0 CSS1
hodnota vlastnosti
NN6.0 IE5.5 OP4.0 CSS2
border-left-color
Určuje barvu levostranného orámování prvku.
border-color
{1,4} viz dílčí Určuje barvu orámování na vlastnovšech čtyřech stranách prvku. |transparent|inherit sti
NN6.0 IE4.0 OP4.0 CSS1
border-top-style
Určuje styl horního orámování none|hidden|dotted| dashed|solid|double| prvku.
border-right-style
Určuje styl pravostranného orámování prvku.
NN6.0 IE5.5 OP4.0 CSS2
|inherit (=)
border-bottom-color Určuje barvu spodního orámování.
none
groove|ridge|inset| outset|inherit (=<styl_orámování>)
border-bottom-style Určuje styl spodního orámování. border-left-style
Určuje styl levostranného orámování prvku.
border-style
<styl_orámování>{1,4}| viz dílčí Určuje styl orámování na vlastnovšech čtyřech stranách prvku. inherit sti
border-top
Sdružená vlastnost určující všechny vlastnosti horního orámování prvku.
[|| || ]| inherit
viz dílčí vlastnosti
32
NN4.0 IE4.0 OP4.0 CSS1 NN6.0 IE5.5 OP4.0
border-right
Sdružená vlastnost určující všechny vlastnosti pravostranného orámování prvku.
[|| || ]| inherit
border-bottom
Sdružená vlastnost určující všechny vlastnosti spodního orámování prvku.
[||||]|inherit
border-left
Sdružená vlastnost určující všechny vlastnosti levostranného orámování prvku.
[|| || ]| inherit
border
Sdružená vlastnost určující orámování prvku na všech čtyřech stranách současně.
[|| || ]| inherit
CSS1
NN4.0 IE4.0 OP4.0 CSS1
Tabulka 14: vlastnosti vizuálního formátovacího modelu a jejich charakteristika [1, str. 115-119; 2, str. 103-104, 106; 7, str. 1]
Vizuální formátovací model vlastnost
popis
možné hodnoty
implici. ovlivňuje
display
Určuje, zda a jak je prvek zobrazen.
inline|block|listinline item|run-in|compact| marker|table|inlinetable|table-row-group| table-header-group| table-footer-group| table-row|table-columngroup|table-column| table-cell|tablecaption|none|inherit
Všechny prvky.
position
Řídí umístění prvku.
static|relative| absolute|fixed|inherit
Všechny prvky kromě generovaného obsahu.
static
33
dědí procenta ne ―
média
podpora
všechna NN6.0 IE6.0 OP5.0 CSS1
vizuální NN6.0 IE5.5
top
Určuje vzdálenost horní hrany <%>||auto| inherit prvku od horní hrany rodičovského prvku.
bottom
Určuje vzdálenost dolní hrany prvku od dolní hrany rodičovského prvku.
left
Určuje vzdálenost levé hrany prvku od levé hrany rodičovského prvku.
right
Určuje vzdálenost pravé hrany prvku od pravé hrany rodičovského prvku.
float
Umožňuje prvku obtékat jiné prvky.
left|right|none| inherit
clear
Určuje stranu prvku, na které ho nesmí obtékat plovoucí prvky.
left|right|both|none| inherit
z-index
Určuje pořadí prvku na ose z (za sebou).
|auto| inherit
auto
Pozicované prvky.
direction
Určuje směr psaní písma.
ltr|rtl|inherit
ltr
Všechny prvky
unicode-bidi
Určená pro formátování jazyků psaných jiným způsobem než zleva doprava.
normal|embed|bidioverride|inherit
normal Všechny prvky s výjimkami uvedenými ve specifikaci.
auto
Pozicované prvky.
relativně k výšce omezujícího bloku
OP5.0 CSS2
relativně k šířce omezujícího bloku
none
Všechny prvky s výjimkou pozicovaných a generovaného obsahu.
―
Blokové prvky.
34
NN6.0 IE5.5 OP4.0 CSS1
NN4.0 IE4.0 OP4.0 CSS2
ano
CSS2
ne
CSS2
Tabulka 15: další detaily vizuálního formátovacího modelu a jejich charakteristika [1, str. 112-114; 2, str. 99, 104; 7, str. 1]
Vizuální formátovací model / Detaily vlastnost width
popis Určuje šířku prvku.
možné hodnoty |<%>|auto| inherit
implici. ovlivňuje auto
Všechny prvky kromě nenahraz. řádkových prvků, řádků tabulek a jejich skupin.
dědí procenta
média
podpora
ne Relativně k šířce vizuální NN6.0 IE5.5 omezujícího OP4.0 bloku CSS1
max-width
Určuje maximální šířku prvku. |<%>|none|
min-width
Určuje minimální šířku prvku. |<%>|inherit 0
height
Určuje výšku prvku.
|<%>|auto inherit
auto
Všechny prvky kromě nenahraz. řádkových prvků, sloupců tabulek a jejich skupin
max-height
Určuje maximální výšku prvku.
|<%>|none inherit
none
min-height
Určuje minimální výšku prvku. |<%>|inherit 0
Všechny prvky kromě nenahrazených řádkových prvků a prvků tabulek.
line-height
Určuje vzdálenost mezi řádky <číslo>||<%>| normal Všechny prvky normal|inherit (rozpal).
ano Z velikosti písma prvku.
NN4.0 IE4.0 OP4.0 CSS1
vertical-align
Určuje svislé zarovnání obsahu baseline|sub|super| top|text-top|middle| prvku.
ne Relativní k výšce řádku (lineheight) prvku samotného.
NN6.0 IE4.0 OP4.0 CSS1
inherit
bottom|text-bottom| |<%>|inherit
none
baseline řádkové prvky a buňky tabulek (table-cell)
35
NN6.0 OP5.0 CSS2
Všechny prvky kromě nenahrazených řádkových prvků a prvků tabulek. Relativně k výšce omezujícího bloku
NN6.0 IE4.0 OP4.0 CSS1 NN6.0 OP5.0 CSS2
Tabulka 16: vlastnosti vizuálních efektů a jejich charakteristika [1, str. 119-120; 2, str. 104, 109; 7, str. 1]
Vizuální efekty vlastnost
popis
možné hodnoty
implici. ovlivňuje
overflow
Určuje, co se stane, když obsah visible|hidden|scroll| auto|inherit prvku přesáhne jeho plochu.
clip
Určuje tvar prvku. Zobrazuje se průnik prvku a tvaru.
rect(|||| auto ||)|auto| inherit
visibility
Určuje viditelnost prvku.
visible|hidden|collapse visible |inherit
visible
Blokové a nahrazované prvky.
dědí procenta ne ―
média
podpora
vizuální NN6.0 IE4.0 OP4.0 CSS2
NN6.0 IE5.5 OP5.0 CSS2
Všechny prvky
NN4.0 IE4.0 OP4.0 CSS2
ano
Tabulka 17: vlastnosti generovaného obsahu, automatického číslování a seznamů a jejich charakteristika [1, str. 136-139; 2, str. 107-108; 7, str. 1]
Generovaný obsah, automatické číslovaní a seznamy vlastnost
popis
možné hodnoty
implici. ovlivňuje
content
Generuje obsah.
[<řetězec>|| „“ Pseudo-prvky „:before“ a |attr()|openřetězec quote|close-quote|noopen-quote|no-closequote ]+|inherit
quotes
Určuje vzhled uvozovek.
[<řetězec> <řetězec>]+ podle |none| inherit klienta
counter-reset
Určuje výchozí
none
counter-increment
Určuje, o kolik se zvýší čítač při každém výskytu selektoru.
[ ?]+ |none|inherit
marker-offset
Určuje vzdálenost odrážek od textu.
|auto| inherit
auto
36
Všechny prvky.
Prvky s vlastností „display: marker“
dědí procenta
média
podpora
ne ―
všechna NN6.0
ano
vizuální
ne
všechna OP5.0
OP5.0 CSS2
CSS2
vizuální CSS2
list-style-type
Určuje typ odrážek, resp. číslování seznamu.
disc|circle|square| disc decimal|decimalleading-zero|lowerroman|upper-roman| lower-greek|loweralpha|lower-latin| upper-alpha|upper-latin |hebrew|armenian| georgian|cjkideographic|hiragana| katakana|hiraganairoha|katakana-iroha| none|inherit
list-style-position
Určuje, zdali jsou odrážky zobrazeny vně či uvnitř seznamu.
inside|outside|inherit
list-style-image
|none|inherit Určuje obrázek, který má v seznamu sloužit jako odrážka.
list-style
Sdružená vlastnost určující všechny vlastnosti seznamu v jedné deklaraci.
[<list-style-type>|| <list-style-position> ||<list-style-image>] |inherit
NN6.0 IE4.0 OP4.0 CSS1
Prvky s vlastností „display: ano list-item“
outside
none viz dílčí vlastnosti
Tabulka 18: vlastnosti stránkových médií a jejich charakteristika [1, str. 143-144; 2, str. 109-110; 7, str. 1]
Stránkovaná média vlastnost
popis
size
Určuje rozměr a orientaci stránkového boxu.
marks
Umožňuje vložit ořezové „crop“ a soutiskové – „cross“ značky vně stránkového boxu.
možné hodnoty {1,2}|auto| portrait|landscape| inherit [crop||cross]|none| inherit
implici. ovlivňuje
dědí procenta
auto
Pozicované prvky
― ―
none
Stránkovaný kontext.
―
37
média
podpora
vizuální OP5.0 stranko- CSS2 vaná CSS2
auto|always|avoid|left auto |right|inherit
page-break-before
Řídí odstránkování před boxem, který je prvkem generován.
page-break-after
Řídí odstránkování za boxem, který je prvkem generován.
page-break-inside
Řídí odstránkování uvnitř boxu, který je prvkem generován.
avoid|auto|inherit
page
Určuje typ stránky, na které má být prvek zobrazen.
|auto
orphans
Určuje minimální počet řádků |inherit odstavce, který musí být ponechán na konci stránky.
widows
Určuje minimální počet řádků odstavce, který musí být ponechán nahoře na stránce.
Blokové prvky.
ne
IE6.0 OP5.0 CSS2
ano
OP5.0 CSS2
2
Tabulka 19: vlastnosti barvy a pozadí a jejich charakteristika [1, str. 132-135; 2, str. 103, 106; 7, str. 1]
Barvy a pozadí vlastnost
popis
možné hodnoty
implici. ovlivňuje
dědí procenta
color
Určuje barvu, kterou je zobrazen obsah prvku.
|inherit
podle klienta
background
Sdružená vlastnost určující všechny vlastnosti pozadí prvku v jedné deklaraci.
[|| || || ||]|inherit
viz dílčí vlastnosti
viz popis vlastností
Určuje, zda je obrázek na pozadí nezávislý na posunu stránky, nebo zda se posouvá spolu se stránkou.
scroll|fixed|inherit
scroll
―
backgroundattachment
38
Všechny prvky.
ne ―
média
podpora
vizuální NN4.0 IE4.0 OP3 CSS1
NN6.0 IE4.0 OP3 CSS1
background-color
Určuje barvu pozadí prvku.
|transparent| inherit
transparent
background-image
Určuje obrázek na pozadí prvku.
|none|inherit
none
background-position Určuje umístění obrázku na pozadí prvku. background-repeat
[<%>|]{1,2}| 0% 0% Blokové a nahrazované prvky. [[top|center|bottom]|| [left|center|right]]| inherit
Určuje, zda a jak se obrázek na repeat|repeat-x| repeat-y|no-repeat| pozadí prvku opakuje.
repeat
Všechny prvky.
Vztahují se k velikosti vlastního boxu. ―
inherit
Tabulka 20: vlastnosti fontu a jejich charakteristiky [1, str. 122-127; 2, str. 105-106; 7, str. 1-2]
Fonty vlastnost font-family
popis
možné hodnoty
implici. ovlivňuje
dědí procenta
média
Navrhuje možné rodiny písma [[|],]* [
závisí na klientovi
ano ―
vizuální NN6.0
normal
písma>|]| inherit
font-style
Určuje styl písma.
normal|italic|oblique| inherit
font-weight
Určuje sílu písma.
normal|bold|bolder| lighter|100|200|300|400| 500|600|700|800|900| inherit
font-stretch
Zhustí nebo roztáhne písmo.
normal|wider|narrower| ultra-condensed|extracondensed|condensed| semi-condensed|semiexpanded|expanded| extra-expanded|ultraexpanded|inherit
39
Všechny prvky.
podpora IE4.0 OP4.0 CSS1
CSS2
font-size
xx-small|x-small|small| medium Určuje velikost písma. (*) dědí se vypočítaná hodnota medium|large|x-large| xx-large|larger|smaller ||<%>| inherit
font-size-adjust
Určuje úpravu velikosti substituovaného písma.
<číslo>|none|inherit
font
Sdružená vlastnost určující všechny vlastnosti písma prvku v jedné deklaraci.
[[||||]? sti [/]? ]|caption| icon|menu|messagebox|small-caption |status-bar| inherit
none
ano Z velikosti písma (*) rodičovského prvku.
NN4.0 IE4.0 OP4.0 CSS1
ano ―
CSS2
NN6.0 IE4.0 OP4.0 CSS1
Tabulka 21: vlastnosti textu a jejich charakteristika [1, str. 127-131; 2, str. 106-107; 7, str. 2]
Text vlastnost
popis
možné hodnoty
implici. ovlivňuje
Určuje vodorovné odsazení první řádky textu v prvku.
|<%>|inherit 0
text-align
Zarovná text v prvku.
left|right|center| justify|<řetězec>| inherit
text-decoration
Určuje ozdobný text.
none|[underline|| none overline||line-through ||blink]|inherit
text-indent
Blokové prvky.
dědí procenta
média
podpora
ano Z šířky omezují- vizuální NN4.0 IE4.0 cího bloku OP4.0 CSS1
auto
40
― Všechny prvky
ne
NN6.0 IE4.0 OP4.0 CSS1
text-shadow
Určuje stínování textu.
none|[|| ? ,]* [|| ?]|inherit
letter-spacing
Zvětší či zmenší prostrkání (mezery mezi znaky).
normal|| inherit
word-spacing
Mění velikost mezer mezi slovy.
text-transform
Mění velikost písma.
none|capitalize| uppercase|lowercase| inherit
none
NN4.0 IE4.0 OP4.0 CSS1
white-space
Určuje zacházení s mezerovými znaky v textu.
normal|pre|nowrap| inherit
normal
NN6.0 IE6.0 OP4.0 CSS1
CSS2
normal
NN4.0 IE4.0 OP4.0 CSS1
ano
NN6.0 IE6.0 OP4.0 CSS1
Tabulka 22: vlastnosti tabulky a jejich charakteristiky [1, str. 142-143; 2, str. 108, 111; 7, str. 2]
Tabulky vlastnost
popis
možné hodnoty
implici. ovlivňuje
top|bottom|left|right| top inherit
caption-side
Určuje polohu popisku vzhledem k tabulce.
table-layout
Určuje algoritmus použitý pro auto|fixed|inherit rozvržení tabulky.
border-collapse
Určuje chování orámování v tabulce.
collapse|separate| inherit
auto collapse
41
dědí procenta
média
Prvky „table-caption“
ano ―
vizuální CSS2
Tabulky „table“ a řádkové tabulky „inline-table“
ne ano
podpora
NN6.0 IE5.5 OP5.0 CSS2
border-spacing
Určuje vzdálenost mezi orámováním protilehlých buněk (jen v případě odděleného orámování).
? 0 |inherit
empty-cells
Určuje, zda buňky bez viditelného obsahu mají orámování (jen v případě odděleného orámování).
show|hide|inherit
speak-header
once|always|inherit Určuje, zda má být záhlaví tabulky čteno pouze jednou, nebo před každou jeho buňkou (zvukové styly).
NN6.0 OP5.0 CSS2
show
Buňky tabulky „tablecell“
once
Prvky obsahující informaci o záhlaví tabulky.
zvuko- CSS2 vá
Tabulka 23: vlastnosti uživatelského rozhraní a jejich charakteristika [1, str. 139-141; 2, str. 104-105, 109; 7, str. 2]
Uživatelské rozhraní vlastnost
popis
možné hodnoty
implici. ovlivňuje
cursor
Určuje vzhled kursoru myši nad prvkem.
[[ ,]* [auto| auto crosshair|default| pointer|move|e-resize| ne-resize|nw-resize|nresize|se-resize|swresize|s-resize|wresize|text|wait|help]] |inherit
outline-color
Určuje barvu ohraničení prvku.
|invert|inherit invert
outline-style
Určuje styl ohraničení prvku.
none|hidden|dotted| dashed|solid|double| groove|ridge|inset| outset|inherit
none
outline-width
Určuje sílu ohraničení prvku.
thin|medium|thick| |inherit
medium
42
Všechny prvky.
dědí procenta
média
ano ―
vizuální NN6.0 IE4.0 interaktivní CSS2
ne
podpora
CSS2
outline
Sdružená vlastnost určující všechny vlastnosti ohraničení prvku v jedné deklaraci.
[|| || ]| inherit
viz dílčí vlastnosti
Tabulka 24: vlastnosti zvukových stylů [1, str. 144-149; 2, str. 110-111; 7, str. 2]
Zvukové styly vlastnost volume
popis
možné hodnoty
implici. ovlivňuje
Určuje hlasitost přehrávaného <číslo>|<%>|silent|x- medium Všechny prvky. soft|soft|medium|loud| zvuku. x-loud
speak
Určuje zda a jak bude čten textový obsah prvku.
normal|none|spell-out| normal inherit
pause-before
Určuje přestávku, před zahájením čtení textu.
<čas>|<%>|inherit
pause-after
Určuje přestávku, po skončení čtení textu.
pause
Určuje přestávku, před zahájením nebo po skončení čtení textu.
cue-before
Určuje zvukový soubor, který |none|inherit se má přehrát před obsahem prvku.
cue-after
Určuje zvukový soubor, který se má přehrát po obsahu prvku.
cue
Určuje zvukový soubor, který [<cue-before>||<cueafter>]|inherit se má přehrát před nebo po obsahu prvku.
podle zařízení
dědí procenta
média
ano Vztahují se ke zděděné hodnotě.
zvuko- CSS2 vá
― ne Vztahuje se k délce trvání slova.
[[<čas>|<%>]{1,2}]| inherit
none
43
―
podpora
play-during
Určuje zvuk, který se má přečíst současně s obsahem prvku.
mix? repeat?| none|inherit
auto
azimuth
Zdánlivě umístí zdroj zvuku do prostoru kolem posluchače. Určuje azimut (směr kolem svislé osy) zdroje zvuku.
<úhel>|[[leftside|far-left|left| center-left|center| center-right|right| far-right|right-side] ||behind]|leftwards| rightwards
center
elevation
Zdánlivě umístí zdroj zvuku |below|level| do prostoru kolem posluchače. above|higher|lower| inherit Určuje výškový úhel zdroje zvuku.
speech-rate
Určuje rychlost čtení hlasovým syntetizátorem.
<číslo>|x-slow|slow| medium|fast|x-fast| faster|slower|inherit
medium
voice-family
Určuje hlasovou rodinu (typ hlasu).
[[<specific-voice>| ],]* [<specific-voice>| ]| inherit
podle klienta
pitch
Určuje průměrnou výšku (frekvenci) hlasu.
|x-low|low| medium medium|high|x-high| inherit
pitch-range
Určuje výškové rozpětí hlasu (rozsah intonace).
<číslo>|inherit
50
richness
Určuje plnost, jas hlasu.
stress
Určuje sílu důrazů a přízvuku v hlase.
speak-numeral
Určuje způsob čtení čísel.
digits|continuous| inherit
continuous
speak-punctuation
Určuje způsob čtení interpunkce.
code|none|inherit
none
level
44
ano
5. CSS v praxi
Kapitola CSS v praxi mapuje pokročilé problémy CSS v základním rozsahu a může být zdrojem užitečných postupů a triků pro webdesignery. V jednotlivých podkapitolách uvádím pouze obecný úvod. Praktické příklady a jejich vysvětlení jsou obsahem přílohy na CD v podobě HTML stránek – příloha č. 1. Pro další studium uvádím na jednotlivých HTML stránkách přílohy a odkazy, kde čtenář najde více informací o problému.
5.1. Obecné postupy V této kapitole jsou čtenáři představeny obecné postupy při stylování dokumentů. Čtenář zde získá základní znalost rafinovanějšího využití CSS, než je definování vzhledu písma a podobných „problémů“. Především bude seznámen s postupy, jak pracovat s různými druhy prvků (blokové, řádkové prvky) a vzájemnými vztahy mezi nimi. Kapitola odpovídá stejnojmenné sekci v praktické části práce - příloha č. 1.
5.2. Chyby prohlížečů V této kapitole čtenář nalezne popis chyb prohlížečů, se kterými se běžně setká při definování formátování pomocí CSS, a způsoby jejich řešení. V prvé řadě si ukážeme, jak úplně odstřihnout staré prohlížeče, které mají problémy se zpracováním CSS stylů. Seznámíme se s odlišným pojetím různých částí CSS specifikací prohlížeči – především s rozdílným pojetím box modelu v Microsoft Internet Exploreru (dále jen IE) oproti jiným prohlížečům. Dál se čtenář dozví, které chyby (bugy) trápí IE (a tím také nás webdesignery), a jak je vyřešit pomocí tzv. hacků. Řeč bude také o podmíněných komentářích usnadňující ladění pro IE. Kapitola odpovídá stejnojmenné sekci v praktické části práce - příloha č. 1.
45
5.3. Uspořádání stránky V této kapitole jsou čtenáři představeny základní možnosti rozvržení obsahu na stránce (layoutu) a jeho částí. Po přečtení (čtenáři možná nových) zásad pro vytváření stránky, budou více zřejmé jejich výhody oproti dřívějším postupům. Platí tedy, že při vytváření designu stránky postupujeme od základního rozvržení obsahu do jednotlivých sekcí a jejich umístění na stránce k jejich detailnímu nadesignování. Čtenář si osvojí základní metody k vytváření dvou či více sloupců a způsob jak definovat jejich pozici vzhledem k ostatním prvkům obtékáním nebo pozicováním. Pak je už jenom krůček k vytvoření celého layoutu vhodnou kombinací těchto metod. Pro usnadnění další práce jsou zde uvedeny běžné řešení layoutů. Kapitola odpovídá stejnojmenné sekci v praktické části práce - příloha č. 1.
5.4. Seznamy V této kapitole jsou čtenáři odhaleny možnosti seznamů. Počínaje jednoduchými technikami jejich formátování až k úplné změně vzhledu, ale i funkce. Seznamy jsou totiž vhodné k vytváření menu i záložek. Tak, jako v předchozí kapitole, jsou i zde uvedeny příklady řešení. Kapitola odpovídá stejnojmenné sekci v praktické části práce - příloha č. 1.
5.5. Formuláře a tabulky V této kapitole čtenář zjistí, kdy a jak používat tabulky, a také jak vytvářet a stylovat formuláře. Kapitola odpovídá stejnojmenné sekci v praktické části práce - příloha č. 1.
5.6. Formátování textu V této kapitole čtenář nalezne mnoho praktických rad, jak naformátovat text. Text je stále nejdůležitějším nositelem informace a jeho vzhledu se věnuje nejvíce pozornosti. Kromě základních 46
dovedností, jakými jsou nastavení barvy, velikosti, dekorace a stylu písma se čtenář také naučí vytvářet iniciály a manipulovat s odstavcovým textem. Kapitola odpovídá stejnojmenné sekci v praktické části práce - příloha č. 1.
5.7. Vizuální efekty V této kapitole se čtenář dozví, jak vytvářet vizuální efekty na stránce. Např. obrázkový text, rollovery bez opětovného načítání, speciální rámečky bloku, poloprůhledné bloky, efektní nadpisy i jiné. Kapitola odpovídá stejnojmenné sekci v praktické části práce - příloha č. 1.
5.8. Užitečné rady V této závěrečné kapitole praktické části jsou čtenáři odhaleny triky, které mu pomohu usnadnit práci s kaskádovými styly, popř. v řešení různých problémů. Nejprve si ukážeme, které výchozí hodnoty vlastností je dobré mít nastaveny na stránce. Potom si ukážeme využití kaskády a její přínos. V další části si probereme příkaz „DOCTYPE“ - rozebereme si jeho syntaxi a zmíníme důležitost pro vykreslování v prohlížečích. A nakonec zmíníme pár rad pro ladění stránky. Kapitola odpovídá stejnojmenné sekci v praktické části práce - příloha č. 1.
47
6. Závěr
Ve své bakalářské práci jsem se snažil o co nejstručnější vysvětlení jazyka CSS se zachováním informační hodnoty a maximální použitelnosti v praxi. Pro přehlednost jsem některá data raději uváděl do tabulek, než je rozepisoval do odstavců. Čtenář může jen nalistovat příslušné téma a v rychlosti se dozvědět, jak co funguje, bez zbytečných slov navíc. Celá práce je rozdělená do dvou částí: teoretické a praktické. Praktická část by bez znalosti teorie byla jen knihovnou návodů, které by však čtenář nemusel umět uplatnit při rozdílném zadání od uvedených příkladů. Proto jsem vytvořil teoretickou část, která by mu měla dát schopnost rozpoznat, co se na kterém řádku příkladu děje, a dál tyto znalosti uplatnit v praxi. Osobně si myslím, že se mi podařilo vytýčených cílů dosáhnout, avšak jestli tomu tak opravdu je, se ukáže až při práci s touto příručkou samotnými čtenáři. Uvědomuji si, že téma jako takové nebylo složité, jistě se v oboru informatiky nalezne nespočet složitějších problémů, proto jsem se snažil celou práci zpracovat kvalitně a tak, aby byla k užitku. Dokončení této práce má pro mě ještě další význam: pronikl jsem do tématu, které mě zajímá již pár let, ještě hlouběji. Do této doby jsem s CSS pracoval na základě logické úvahy a zkušeností typu pokus - omyl. Sám jsem tak dospěl k metodám, které jsem si osvojil a které fungují, a také k vlastnímu významovému popisu jednotlivých vlastností a jejich hodnot, který rovněž většinou odpovídá. Avšak až nyní je dovedu pojmenovat a roztřídit. Znám přesně jejich možnosti použitelnosti a zaměnitelnosti. Byla tedy i pro mě přínosem.
48
7. Literatura
Literatura pro 3. a 4. kapitolu: 1) 2) 3) 4) 5)
STANÍČEK, Petr: CSS kaskádové styly (kompletní průvodce). 1. vyd. Praha: Computer press, 2003. 178 s. ISBN: 80-7226-872-4 PROKOP, Marek: CSS kaskádové styly pro webdesignéry. 2. vyd. Brno: CP Books, 2005. 288 s. ISBN: 80-251-0487-7 BOSS, Bert: Cascading Style Sheets [online]. © 2007, last version 07.03.2007 [cit. 2007-04-07], URL: STANÍČEK, Petr: Praktická příručka CSS [seriál online]. © 2002, poslední verze 06.06.2001 [cit. 2007-04-07], URL: DUDEK, Jan, CSS, [seriál online]. © Zoner software, s.r.o. 2007, poslední verze 8.3.2006 [cit. 2007-04-07], URL: , ISSN 1212-8651.
Literatura pro 4. kapitolu: 6)
Refsnes Data,W3Schools Online Web Tutorials [online]. © 1999-2007, last version December 1999 [cit. 2007-0407], URL: 7) JUNG, Benjamin: Cascading Style Sheets (CSS) level 1 [online]. © 17 December 1996, last version 11 January 1999 [cit. 2007-03-07], URL: 8) JUNG, Benjamin: Cascading Style Sheets (CSS) level 2 [online]. © 17 December 1996, last version 11 January 1999 [cit. 2007-04-07], URL: 9) STANÍČEK, Petr: Praktická příručka CSS – přehled všech vlastností CSS [seriál online]. © 2002, poslední verze 11.02.2002 [cit. 2007-04-07], URL: 10) STANÍČEK, Petr: Praktická příručka CSS – ostatní vlastnosti CSS [seriál online]. © 2002, poslední verze 04.02.2002 [cit. 2007-04-07], URL: 11) STANÍČEK, Petr: Praktická příručka CSS – přehled podpory CSS v prohlížečích [seriál online]. © 2002, poslední verze 11.07.2001 [cit. 2007-04-07], URL:
Literatura pro 5. kapitolu: 12) STANÍČEK, Petr: CSS hotová řešení (k okamžitému použití). 1. vyd. Praha: Computer press, 2006. 267 s. 13) ISBN: 80-251-1031-1 14) JAKEŠ, Martin: Knihovna kaskádových stylů [online]. © Zoner software, s.r.o. 2007, [cit. 2007-04-07], URL , ISSN 1212-8651 15) Dynamic Drive: Dynamic Drive CSS Library [online]. © 1998 - 2007, [cit. 2007-04-07], URL 16) A List Apart Magazine [online]. © 1998 - 2007 A List Apart Magazine and the authors, [cit. 2007-04-07], URL , ISSN: 1534-0295 17) SHEA, Dave: CSS Zen garden [online]. © 2001 – 2007, [cit. 2007-04-07], URL 18) NICHOLLS, Stu: CSS Play [online]. © 2005 – 2006, [cit. 2007-04-07], URL 19) MaxDesign: Tutorials [online]. © 2006, [cit. 2007-04-07], URL 20) TJKDesign: Articles [online]. © 2003-2006, [cit. 2007-04-07], URL 21) FRIEDMAN, Vitaly: Web-developer’s handbook 2.0, [online]. © 2005-2007, [cit. 2007-04-07], URL
49
22) STANÍČEK, Petr: Dílna dobrého stylu, [online seriál]. © 2004-2007, poslední verze 7. 4. 2007 [cit. 2007-04-07], URL 23) POLAKOVIČ, Jaroslav: IE brouci, [online seriál]. [cit. 2007-04-07], URL 24) GRUDL, David: Podmíněné komentáře [online]. © 2004-2007, poslední verze 14. 4. 2006 [cit. 2007-04-07], URL 25) SMITH, Kevin C.: CSS Hack [online]. © 2002-2005, [cit. 2007-04-07] , URL 26) Incutio Limited: CSS discuss [online]. © 2000-2007, last version 4. 12. 2006 [cit. 2007-04-07], URL 27) Holly and John: Position is everything [online]. © 2007, last version 7. 2. 2007 [cit. 2007-04-07], URL
50
8. Přílohy
Příloha č. 1: CD s praktickými ukázkami CSS kódů a jejich vysvětleními. Obsah CD: 1. Teoretická část bakalářské práce ve formátu DOC a PDF. 2. Praktická část bakalářské práce ve formátu HTML a CSS
51