
Výška závislá na šířce
Jak v CSS nastavit výšku v závislosti na procentuální i pevné šířce.
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.

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:
- výšku vynulovat (
height: 0), - spodní
paddingnastavit na požadovaný procentuální podíl na šířce, - použít obsahový box model (
box-sizing: content-box– výchozí), který sčítá okraje a právěpaddingpř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: hidden– ukázka), - zobrazení rolovací lišty (
overflow: auto– ukázka), k tomu se ale hodí spíš ono absolutní posicování, jinak by se spodnípaddingzapočí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";
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.