
Dlouhou dobu bylo v CSS možné (a známé) pouze vytváření objektů ve tvaru čtverců a obdélníků.
Pomocí vlastnosti
border-radiusjde vytvářet kulaté rohy nebo kulaté obrázky.- Vhodnou kombinací tloušťky a barvy rámečků jde kreslit šipky/trojúhelníky.
Jak vytvořit něco se zkosenou hranou?
Pomocí border trojúhelníku
Pomocí vytvořeného trojúhelníku z rámečku jde zajistit šikmou hranu.
Trojúhelník je vytvořen pomocí pseudo-elementu :after, který je umístěn za obsah.
Obsah se šikmou hranou
Samostatná ukázka – šikmá hrana
Podpora tohoto řešení je vynikající (rámečky fungují všude). Horší je to s vyhlazováním – šikmá hrana může vypadat kostrbatě.
Taktéž nastavení požadovaného zkosení není úplně intuitivní. Nakonec je podmínkou, aby pozadí bloku bylo jednobarevné kvůli napojení.
Oříznutí clip
Jako dělaná je pro tyto případ oříznutí CSS vlastnost clip-path s funkcí polygon:
.sikmy {
clip-path: polygon(0 0, 100% 0, 75% 100%, 0 100%);
}
Ta bez problému funguje i s obrázkovým pozadím:

Výsledek:
Obsah se šikmou hranou
Nevýhoda je slabší podpora v prohlížečích. Nepravidelné oříznutí podporuje Chrome 24+, Opera 15+ a Safari 8+. Pro lepší podporu je dobré použít CSS prefixy.
Zkosení transform: skewX
CSS transformace skew dokáže zkosit celý element. Zkosení zároveň deformuje i obsah – text – což je nežádoucí. Nabízí se tedy použít deformaci pouze pro pseudo-element, který se potom umístí na správné místo absolutním posicováním.
Obsah se šikmou hranou
CSS vlastnost transform a zkosení skewX/skewY je podporováno s prefixy už od IE 9, Firefoxu 3.5, Chrome 4 a Opera 11.5.
Pomocí z-indexu se zkosení umístí za obsah.
Zkosení na obou stranách
Bylo-li by cílem mít zkosené hrany na obou stranách, šlo by element včetně písma zkosit a pouze samotný text vrátit zpět opačnou hodnotou:
Obsah se šikmými hranami
Samostatná ukázka – zkosení na obou stranách
Možná u tohoto postupu bude někde problém s vyhlazováním písma.
Bez použití pseudo-elementu by šlo případně jednu šikmou stranu oříznout:
Živá ukázka – oříznutí jedné zkosené hrany
Rotace
Teoreticky by šlo vytvořit šikmou plochu i rotací, ale těžko říct, jestli to přináší nějaké výhody oproti zkosení. Podpora v prohlížečích je obdobná.
Odkazy jinam
Co si myslíte o tomto článku?
Diskuse
Související články
CSS item-pack: balance – vyvážené rozložení flex položek
Vlastnost item-pack: balance rozděluje flex položky rovnoměrně mezi řádky, podobně jako text-wrap: balance vyvažuje řádky textu.
CSS Container Queries – responsivní komponenty
Jak pomocí @container, container-type a container-name vytvářet komponenty, které se přizpůsobí velikosti svého rodiče místo viewportu.
CSS Anchor Positioning – posicování elementů relativně k jiným
Jak pomocí anchor-name, position-anchor a funkce anchor() posicovat elementy relativně k jiným bez JavaScriptu.
Centrování na webových stránkách
Moderní způsoby vertikálního i horizontálního centrování v CSS. Flexbox, Grid, margin auto a další techniky.