Výška podle šířky v CSS

Při tvorbě webu, který má být responsivní, se můžeme dostat do situace, kdy je šířka neznámá (zadána v procentech) a výšku potřebujeme takovou, aby se v určitém poměru odvozovala od výšky.

Stanovení výšky podle šířky

Poznámka: Nastavování výšky (height) často značí špatný postup. V případě, že v elementu s natvrdo nastavenou výškou bude nějaký text, je prakticky nemožné zajistit, aby se při různých velikostech písma řádně vešel.

Řešení

Celý trik spočívá v tom, že procentuální hodnota vlastnosti padding se počítá z šířky rodiče. Stačí tedy:

  1. výšku vynulovat (height: 0),
  2. spodní padding nastavit na požadovaný procentuální podíl na šířce,
  3. použít obsahový box model (box-sizing: content-box – výchozí), který sčítá okraje a právě padding připočítává do výsledných rozměrů (výška je ale nulová, takže ji celou zajistí právě padding).
.box {
  height: 0;
  padding-bottom: 25%;
}

Níže uvedený <div> má vždy čtvrtinovou výšku (25 %) oproti šířce, přesvědčte se změnou šířky jeho rodiče.

0 % 100 %

Pevná šířka v pixelech

Je-li potřeba, aby byla výška závislá na šířce, ale ta má být zadaná v pixelech, není to problém. Obal elementu, co má mít výšku podle šířky, zkrátka bude mít rozměry v px. Ukázka.

Proč spodní padding?

Natáhnout výšku je možné i horním paddingem nebo kombinací (padding-top + padding-bottom). V případě samostatného padding-top to však má nevýhodu, že do elementu nepůjde rozumně vkládat obsah, protože celý začátek obsahu zabere právě padding.

Teoreticky to jde řešit odečtením marginu (ukázka) nebo absolutně posicovaným dalším elementem uvnitř (ukázka).

Použít kombinaci může mít smysl právě pro cílené odsazení obsahu shora bez dalšího vnořeného <div>u (ukázka).

Přetečení

V případě, že by se obsah náhodou nevešel do vymezeného prostoru, nabízí se:

  • oříznutí (overflow: hiddenukázka),
  • zobrazení rolovací lišty (overflow: autoukázka), k tomu se ale hodí spíš ono absolutní posicování, jinak by se spodní padding započítal do výšky a vytvořil by ve Webkitu nežádoucí prostor na konci obsahu (ukázka).

Řešení v JavaScriptu

Ve stanoveném podílu lze výšku nastavovat i JavaScriptem. Jako výška se v takovém případě použije vydělená vlastnost clientWidth.

el.style.height = (el.clientWidth / 4) + "px";

Ukázka obou postupů

To je všechno. Líbil se vám článek a chcete se dozvědět, až vyjde další?

Sledujte:

 

Připomínky mi pište do komentářů ↓

Skloňování v CSS

„Programování“ v HTML a CSS

I bez úprav logiky serverového skriptu lze lecčeho dosáhnout samotným CSS.

Centrování v CSS

Centrování na webových stránkách

Ucelený popis různých způsobů vertikálního i horizontálního centrování. Se známou i neznámou šířkou nebo výškou.

CSS vyhledávání a filtrování

CSS vyhledávání a filtrování obsahu

Jak pomocí CSS se špetkou JS filtrovat obsah stránky nebo na ní vyhledávat.

Zobrazení popisku při najetí myší

Popisek po najetí myší

Kterak zobrazovat obsah v tooltipu po najetí myši.

Vícenásobné CSS pozadí

Více obrázků na pozadí

Jak v CSS jednomu elementu přiřadit více obrázků na pozadí.

Komentáře