Kaskádové styly

(přesměrováno z Barvy CSS)
Na tento článek je přesměrováno heslo CSS. Tento článek je o jazyku v informatice. O ostatních významech pojednává článek CSS (rozcestník).

Kaskádové styly (v anglickém originále Cascading Style Sheets se zkratkou CSS) je v informatice jazyk pro popis způsobu zobrazení elementů na stránkách napsaných v jazycích HTML, XHTML nebo XML.

Logo
Přípona souboru.css
Typ internetového médiatext/css
Uniform Type Identifierpublic.css
TvůrceHåkon Wium Lie, Bert Bos, World Wide Web Consortium
První verze17. prosinec 1996
Typ formátukaskádové styly
Standard(y)https://www.w3.org/TR/2011/REC-CSS2-20110607/
Webhttps://www.w3.org/Style/CSS/

Jazyk byl navržen standardizační organizací W3C, autorem prvotního návrhu byl Håkon Wium Lie. Byly vydány CSS1, CSS2 a CSS3. Dne 7. června 2011 byla dokončena revize CSS 2.1[1] Hlavním smyslem je umožnit návrhářům oddělit vzhled dokumentu od jeho struktury a obsahu. Původně to měl umožnit už jazyk HTML, ale v důsledku nedostatečných standardů a konkurenčního boje výrobců prohlížečů se vyvinul jinak. Starší verze HTML obsahují celou řadu elementů, které nepopisují obsah a strukturu dokumentu, ale i způsob jeho zobrazení. Z hlediska zpracování dokumentů a vyhledávání informací není takový vývoj žádoucí.

Definice kaskádových stylů sestává z několika pravidel. Každé pravidlo obsahuje selektor a blok deklarací. Každý blok deklarací pak obsahuje deklarace oddělené středníky ; a každá deklarace sestává z identifikátoru vlastnosti, následuje dvojtečka : a hodnota vlastnosti. Nepovinně ještě může následovat označení !important, které zvýší sílu deklarace.[2][3]

Příklad pravidla:

body {
  background-color: white;
  color: black;
  padding: 10px !important;
}

Celý blok nazveme pravidlo, „body“ je selektor, část v závorkách je blok deklarací, řádek „background-color: white;“ je deklarace samotná, „background-color“ je identifikátor vlastnosti a „white“ její hodnota. Celý kód pak nastavuje barvu pozadí stránky na bílou, barvu textu na černou a okraj na 10 pixelů.

Selektory

editovat

CSS definuje mnoho různých selektorů, které obvykle můžeme kombinovat. Mezi základní patří:[4]

  • body – Tyto deklarace budou platit pro všechny výskyty elementu body.
  • body p – Tyto deklarace budou platit pro všechny elementy p, které se nachází v elementu body, v jakékoliv hloubce.
  • body>div – Tyto deklarace budou platit pro všechny elementy div, které jsou potomky elementu body. To znamená, že pokud bychom měli element div, který se nachází v <body><blockquote><div>…, tyto deklarace by pro něj neplatily, protože tento div není přímým potomkem elementu body.
  • .trida – Tyto deklarace budou platit pro všechny elementy, které mají v HTML nastavenou třídu trida. To se provádí pomocí HTML atributu class.
  • #id – Tyto deklarace budou platit pro všechny elementy, které mají v HTML nastavený identifikátor id. To se provádí pomocí HTML atributu id.
  • :link, :visited, :hover a :active – Tyto deklarace budou po řadě platit pro dosud nenavštívené odkazy, navštívené odkazy, část textu, na kterém stojí ukazatel myši, a aktivní odkaz.
  • sel1, sel2, sel3 – Selektory můžeme seskupovat pomocí čárek. Následující deklarace pak budou platit pro všechny selektory.

Připojení kaskádových stylů do HTML stránky

editovat

Existuje několik možných způsobů, jak aplikovat kaskádové styly v HTML dokumentu;[5] v praxi se nejčastěji používá odkaz na externí soubor.

  • Zápis stylů do elementu style. Takové styly se aplikují na celou stránku podle předepsaných selektorů. Příklad:
<style type="text/css">
#hlavicka{
  width: 200px;
  height: 450px;
}
</style>
  • Připojení externího souboru pomocí elementu link. Příklad:
<head>
  <link rel='stylesheet' href='styly.css' type='text/css'>
</head>
  • Připojení externího souboru pomocí http hlavičky link.[6][7] Příklad:
Link: <fancy.css>; rel=stylesheet
  • Přímý inline zápis stylu pomocí atributu style. Tato pravidla budou aplikována pouze na dotyčný element (tedy: chybí zde ona kaskádovost). Ukázka:
<p style="color: red; text-decoration: underline">Tento odstavec bude červený a podtržený.</p>
  • Připojením externího souboru pomocí elementu style a pravidla @import

přiklad:

<style>
    @import:url("stylesheet.css")
</style>

Přehled vlastností

editovat

První verze CSS zavedla syntax (používaný ve všech následujících verzích), způsob vybírání prvků přes selektory, několik pseudotříd, hodnoty a jejich jednotky.

Kategorie

editovat

Přizpůsobení vlastností hypertextových dokumentů umožnilo CSS 1 v následujících oblastech:

  • vlastnosti písma
  • barvy textu a pozadí
  • vlastnosti textu
  • vlastnosti blokových elementů
  • způsoby zobrazení prvků
  • řízení pozice

Hodnoty a jednotky

editovat

Hodnoty vlastností CSS verze 1 mohou mít následující jednotky:

jednotky délky
editovat
  • (žádné) – u bezrozměrných vlastností (např. line-height); u desetinných hodnot se používá desetinná tečka
  • % – procenta, jednotka relativní vůči implicitnímu rozměru, zapisována bez mezery, např. font-size:110% znamená velikost o 10 % větší než ta výchozí
  • pttypografický bod, výchozí jednotka je 1/72 palce
  • px – 0,75 pt[8]
  • pc – pica, 1 pc = 12 pt
  • cm – centimetr
  • mm – milimetr
  • inpalec
  • emčtverčík, je rovna základní výšce písma
  • ex – výška písmene „x“, je relativní k použitému písmu
Na tuto kapitolu je přesměrováno heslo barvy CSS.

Barvy v CSS se uvažují pro svítivá zobrazovací zařízení, tedy v gamutu RGB. Jejich hodnoty mohou být zapsány:

  • buď číselně #rrggbb, kde r, g a b jsou barevné složky, s tím, že každá je specifikovaná jako dvouciferná hexadecimální hodnota (00 až ff). Celkem jde o 256^3 = 16 777 216 barev. Fakticky jde o určení (v RGB), jak moc má daná barevná složka svítit: 00 – nesvítí, FF – svítí nejvíce.
    • #rgb, podobně jako výše, s tím, že hodnota každé barevné složky je zadána hexadecimálně jednociferně (0 až f) a na plnou hexadecimální hodnotu se doplňuje automaticky zdvojením zadané hexadecimální číslovky (a ne doplněním nuly). Jde tedy o podmnožinu jen tříciferných hodnot ze všech možných šesticiferných barev, jen o 16^3 = 4 096 barev.
      • jako bezpečné barvy, což je ještě užší podmnožina barev: Jde o jednociferné barvy (viz výše), jejichž hodnoty navíc nevzrůstají po jedné, nýbrž o 3. Jde tedy o kombinace šesti hodnot {0, 3, 6, 9, C, F}, celkově tedy o pouhých 6^3 = 216 barev.
    • rgb(r,g,b), podobně jako výše, ale hodnoty jsou zadávány v desítkové soustavě (0 až 255) a syntaxí jako funkce,
      • rgb(r%,g%,b%), podobně jako výše, ale hodnoty jsou v rozsahu (0 až 100). Protože se pak následně vnitřně přepočtené hodnoty netrefují přesně na hexadecimální škálu 256 hodnot, je potřeba zaokrouhlovat, což je ale lidským okem nerozlišitelné.
  • anebo přes některou z předdefinovaných konstant, pomocí textových názvů pojmenovaných barev, kterým jsou interně přiděleny číselné hodnoty. Např. aqua (jasná modrozelená), black (černá) = #000, blue (modrá), fuchsia (anilínová červeň), gray (šedivá), green (zelená), lime (citrónově zelená), maroon (kaštanová), navy (námořnická modř), olive (olivová), purple (purpurová), red (červená), silver (stříbrná), teal (tmavá modrozelená), white (bílá) = #FFF, yellow (žlutá). V CSS verze 4.0 je pojmenováno 148 barev.[9][10]

Pro specifikaci URL se v CSS používá konstrukce url(), kde se mezi závorky specifikuje adresa zdroje. Ta může být absolutní, např. url(http://www.example.com/images/logo.png), relativní vůči serveru, např. url(/images/logo.jpg) nebo relativní vůči aktuálnímu adresáři, např. url(images/logo.jpg). Obsahuje-li URL čárky, mezery, uvozovky nebo konec kulaté závorky, tyto znaky se dají eskapovat pomocí zpětného lomítka.

atributy písma
editovat

Umožňují zadat řez a další atributy písma; u všech atributů jsou možné hodnoty initial (původní) a inherit (zděděné od obklopující značky)

  • font-style: normal, italic (kurzíva), oblique (šikmá antikva)
  • font-size: medium; menší velikosti: xx-small, x-small, small; větší velikosti: large, x-large, xx-large, smaller, larger, velikost v procentech 100% je standardní velikost
  • font-weight: tučnost: normal, bold, bolder, thicker, lze zadat číslem: 100, 200 ... 900 (400=normal, 700=bold)
  • font-variant: small-caps (kapitálky), normal
  • font-decoration: underline (podtržené), overline (nadtržené), blink (blikající), line-through (přeškrtnuté), none (standardní)
obecné druhy písem
editovat

Při specifikaci písma lze použít více názvů oddělených čárkou. Prohlížeč při zobrazování stránky tato písma postupně prochází a nenajde-li na počítači klienta první z nich, pokračuje ve hledání následující uvedenou hodnotou. Doporučuje se jako poslední písmo uvést obecný typ písma. Nenajde-li totiž prohlížeč ani jedno specifikované písmo, použije implicitní písmo pro daný typ. Hodnoty jsou tyto:

CSS verze 2 rozšířila možnosti stylování několika dalšími parametry, např.:

  • outline – vnější ohraničení
  • max-height, max-width, min-height, min-width – minimální a maximální šířka nebo výška elementu
  • content – nastavitelný obsah elementu
  • counter – nástroj pro číslování kapitol
  • quotes – styl citací
  • clip – ořezávání
  • cursor – kurzor nad elementem
  • position – možnost pozicovat element v řádku, v bloku, absolutně, relativně, …
  • top, bottom, right, left – okrajové hodnoty pro position:absolute;
  • overflow – zobrazení při přetékání obsahu
  • visibility – viditelnost elementů
  • z-index – možnosti překrývání
  • page-break, orphans, widows – typografická pravidla pro dělení stránek
  • table-layout, border-collapse, border-spacing, caption-side, empty-cells – nové možnosti pro zobrazení tabulek
  • direction – směr psaní textu

CSS 3 se mj. pojí s budoucím standardem HTML5, jež je má plně využívat. Přináší následující možnosti:

  • animace – CSS3 přímo podporuje animaci elementů (jejich vlastností), doposud se animace dělaly přes DHTML, např. jQuery
  • dodatečné možnosti stylování pozadí blokových elementů, včetně např. oříznutí jejich pozadí, vržených stínů nebo zakulacených okrajů
  • dodatečná pravidla pro přetékání obsahu blokových elementů
  • opacita – míra neprůhlednosti prvků
  • další podpora stránkovaného obsahu – záložky a možnosti dělení textu
  • flexibilní blokové elementy
  • dodatečné vlastnosti pro písma – načítání písma z externího zdroje, přizpůsobení velikosti při nízké čitelnosti, zužování/rozšiřování písma
  • vlastnosti pro generovaný obsah – zkracování obsahu s možností expanze, přesunování elementů dále ve stránce
  • mřížky (zatím nikde neimplementované)
  • cílové odkazy – jak a kde se mají otevírat
  • vlastnosti pro drag'n'drop
  • nové vlastnosti pro marquee
  • automatický vícesloupcový layout
  • nové vlastnosti Ruby
  • vlastnosti pro čtený text
  • 2D a 3D transformace
  • vlastnosti spolupracující s navigací
  • uživatelsky definované vlastnosti

Výhody CSS

editovat

Používání kaskádových stylů ve srovnání se samotným HTML v praxi přináší výhody:

  • Rozsáhlejší možnosti formátování. Například pro formátování bloku textu – tj. určení vzdálenosti od jejich elementu či okraje stránky nenabízí HTML nic. CSS má vlastnosti padding[12] a margin.[13] V HTML by bylo potřeba vytvořit složitou konstrukci vnořených tabulek.[14]
  • Jednodušší údržba webové prezentace. Pokud chceme změnit nějaký detail, jako třeba barvu nadpisu, nemusíme složitě procházet HTML kód nebo různé HTML šablony, ale můžeme změnit pouze jednu vlastnost v CSS souboru, který je přilinkován ke všem stránkám.
  • Oddělení struktury a stylu. V jednom (HTML) dokumentu budeme mít pouze sémanticky označen obsah a v druhém (CSS) dokumentu máme definice vzhledu stránek. Tím dosáhneme snadnějšího strojového zpracování samotného obsahu stránek, do kterého se nám nepletou prvky definující vzhled.
  • Cachování stylů – webový prohlížeč si může soubor se styly uložit do cache paměti, čímž může být dosaženo zrychlení načtení stránky. Na druhou stranu při použití externího CSS souboru dochází k dalšímu HTTP požadavku navíc oproti tomu, když bychom použili buď online CSS nebo přímo formátování HTML.
  • CSS vlastnosti jednotlivých elementů můžeme dynamicky měnit pomocí Javascriptu.[15]
  • S pomocí CSS můžeme jednoduše formátovat i jakýkoliv jazyk XML.[16]
  • Mohou také existovat různé styly pro různá výstupní zařízení. Jednoduše tak můžeme nadefinovat různý styl pro tisk, projekci, mobil, PDA, běžný prohlížeč či dokonce pro každý prohlížeč jiný styl. Specifikace CSS nezapomínají ani na zrakově postižené – je možno napsat styly pro hlasový syntetizátor nebo hmatovou čtečku Braillova písma.[17]
  • Koncový uživatel si může napsat svůj vlastní CSS styl pro libovolnou stránku. Většina prohlížečů nějakým způsobem podporuje uživatelské styly, takže uživatel si může například nastavit, aby měl všechny odkazy na všech webech vždy podtržené nebo aby na tomto konkrétním webu mělo písmo vždy černou barvu.[18]
  • V kombinaci s Javascriptem mohou vzniknout účinné bookmarklety, které mohou různě vylepšovat vzhled stránky. Například odstranit všechny obrázky na pozadí, změnit pozadí na bílé a písmo na černé apod.[19]

Nevýhody

editovat

Hlavní nevýhodou CSS je ne vždy dostatečná podpora v majoritních prohlížečích. Prohlížeče obsahují v implementaci CSS chyby a je někdy nesnadné napsat kód tak, aby se ve všech (resp. v běžných) prohlížečích výsledek zobrazil stejně. Situace se poslední dobou značně zlepšuje, mj. opravami chyb v prohlížečích a nástupem nových verzí Internet Exploreru, který byl ve své šesté verzi zdrojem častých chyb v CSS.

Občas se používají podmíněné komentáře, které umožňují definovat na úrovni HTML kód, který bude viditelný pouze Internet Exploreru či naopak.[20][21] Příklad:

 <!--[if IE]>
 <style type="text/css">
 #upozorneni {
   color: blue;
 }
 </style>
 <![endif]-->

Tento kód bude interpretován pouze Internet Explorerem, ostatní prohlížeče uvidí obyčejný HTML komentář a interní stylopis tak nebudou interpretovat.

Limity CSS

editovat
  • CSS selektory neposkytují přístup k rodičovským prvkům, jako to umožňují sofistikovanější jazyky jako například XPath. Nemůžete například nastylovat jen ty odstavce, které obsahují odkaz.
  • Horizontální kontrola prvků na stránce je intuitivní a jednoduchá, naopak vertikální stylování vyžaduje komplexnější přístup (např.: flexbox nebo grid).
  • CSS neposkytuje možnost pro symbolický zápis proměnné nebo konstanty, všechny hodnoty musí být vepsány přímo v kódu. Například pokud se na vícero místech používá stejná barva, nemůže se použít symbolický zápis barva=red; a poté už jen psát proměnnou barva, všude se musí uvádět přímo hodnota red. Toto omezení odstraňují CSS preprocesory (např. SASS, LESS, Stylus).
  • CSS2 nenabízí žádnou možnost pro tvorbu kulatých rámečků nebo jiných kulatých objektů. Pracuje pouze s obdélníky.
  • CSS2 nenabízí žádnou možnost, jak jednomu elementu přiřadit více obrázků na pozadí.

Standardizace

editovat

CSS frameworky jsou předpřipravené knihovny, které mají umožnit snadnější stylování webových stránek více vyhovující standardům pomocí jazyka Cascading Style Sheets. Rámce CSS zahrnují Blueprint, Bootstrap, Foundation a Materialize. Stejně jako knihovny programovacích a skriptovacích jazyků jsou frameworky CSS obvykle začleněny jako externí listy .css, na které se odkazuje v HTML <head>. Poskytují řadu předpřipravených možností pro návrh a uspořádání webové stránky. Přestože bylo publikováno mnoho z těchto frameworků, někteří autoři je používají většinou pro rychlé prototypování nebo pro učení se z, a dávají přednost „ručnímu“ CSS, které je vhodné pro každý publikovaný web, aniž by bylo nutné navrhovat, udržovat a stahovat režii s mnoha nevyužitými funkcemi. ve stylu webu.[22]

Reference

editovat
  1. CSS2.1 and the CSS3 Color Module Become Official W3C Recommendations [online]. 03-09-2011. Dostupné online. 
  2. Příručka k HTML a CSS. broe.hyperlink.cz [online]. [cit. 2010-01-06]. Dostupné v archivu pořízeném dne 2010-03-03. 
  3. (anglicky)Rule sets, declaration blocks, and selectors
  4. Interval.cz: CSS2 - selektory, pseudotřídy a pseudoelementy
  5. Polopatě: Zápis CSS
  6. (anglicky)Linking to style sheets with HTTP headers
  7. HTML 4 5 6: Řešení hádanky
  8. In CSS, “px” Is Not An Angular Measurement And It Is Not Non-Linear
  9. Dokumentace barev v CSS na Mozilla Developer Network
  10. CSS Color Module Level 4 Editor’s Draft, 15. 5. 2017
  11. http://www.kosek.cz/clanky/web/css-ref.html
  12. Jak psát web: padding
  13. Jak psát web: margin
  14. Jak psát web: Design pomocí tabulek
  15. CSS: Spojení s JavaScriptem
  16. (anglicky)How to add style to XML
  17. Jak psát web: Odlišné formátování tisku
  18. Vlastní styly v prohlížeči Firefox. carnero.cc [online]. [cit. 2010-01-06]. Dostupné v archivu pořízeném dne 2009-10-30. 
  19. (anglicky)Pixy.cz: My Favorite Favelets
  20. Mraveniště.org: Podmíněné komentáře. www1.mraveniste.org [online]. [cit. 2010-01-06]. Dostupné v archivu pořízeném dne 2010-04-06. 
  21. LaTrine: Kouzlo s podmíněným komentářem. latrine.dgx.cz [online]. [cit. 2010-01-06]. Dostupné v archivu pořízeném dne 2009-12-27. 
  22. CEDERHOLM, Dan. Handcrafted CSS : more bulletproof web design. Berkeley, Calif.: New Riders 1 online resource (xx, 204, [12] pages) s. Dostupné online. ISBN 978-0-321-63828-1, ISBN 0-321-63828-X. OCLC 599823292 

Související články

editovat

Externí odkazy

editovat