
Obtékání v CSS
Detailní popis obtékání (float) a clearování v CSS, stavba stránky pomocí obtékání, vysvětlení možných risik a úskalí.
K čemu je float? Zjednodušeně řečeno je to způsob, jak dostat různé elementy stránky vedle sebe.
Vlastnost float
Rozplavání elementu se zajistí hodnotou float, může mít tři hodnoty:
none(výchozí; element neplave),left(element se snaží doplavat co nejvíce doleva)right(totéž, coleft, jen plave doprava)
Vlastnost clear
Vlastnost clear slouží k tomu, aby element ukončil obtékání, tj. takový element (a všechny elementy následující) se nebude snažit připlout k předcházejícím s float: left nebo float: right.
Clear může nabývat 4 hodnoty:
none(výchozí),left(element neobtéká elementy sfloat: left)right(neobtéká elementy sfloat: right)both(neobtéká nic)
Nejlepší je si to vyzkoušet:
První element
float:clear:
Druhý element
float:clear:
Třetí element
float:clear:
Zajímavé poznatky ohledně obtékání a clearování
- Budou-li mít všechny elementy nastaveny
floatjinak než nanone, vyplavou z rodičovského elementu — proti tomu lze použít právě vlastnosticlear. - Má-li element s nastaveným
clearem zároveňfloat, vyplavání nezabrání. - Nastavením prvnímu elementu
float: righta druhémufloat: leftlze prohodit pořadí sloupců. - Pokud se elementy do dostupného místa nevejdou, obtékání se očekávaným způsobem neprojeví.
- Element s nastaveným
floatem se stane blokovým, je-li ve výchozím stavu řádkový, proto je zbytečné nastavovatdisplay: block. - Ve starších prohlížečích než Explorer 8 nelze
clearovat sinlineelementem.
Jednoduchý floatovaný layout
Jednoduchý dvousloupcový layout stránky pomocí obtékání může vypadat následovně (ještě je přidáno centrování):
(Stejně vysoké sloupce by šlo vyřešit obrázkem.)
HTML
<div class="stranka">
<div class="hlavicka">
<p>Logo</p>
</div>
<div class="obsah">
<h1>Název stránky</h1>
<p>Obsah</p>
</div>
<div class="menu">
<ul>
<li><a href="#">Odkaz</a></li>
</ul>
</div>
<div class="paticka">
<p>Patička</p>
</div>
</div>
CSS
.stranka {margin: auto; width: 960px; background: #ccc}
.hlavicka {background: #1081DD; padding: 1em}
.obsah {float: right; width: 600px; padding-left: 30px; background: #E36FAF}
.menu {float: left; width: 330px; background: #0E5EAD}
.paticka {clear: both; background: #7F8DCD; padding: 1em}
Poznámky
- Při počítání šířky, je-li použit i
paddingneboborder, je třeba dát pozor nabox-model. - Po obtékaných (
floatovaných) elementech je nutnoclearovat.
Clearování
Kromě obyčejného ukončení obtékání přes clear: both (<div style="clear: both"></div>) existují ještě další možnosti.
<br clear=all>V dobách před CSS mohli plavat například obrázky a
<br clear=all>jejich obtékání ukončovalo.Funguje dodnes a je to velmi rychlý způsob, jak obtékání ukončit.
overflow: hiddenU clearování pomocí přenastavení
overflowz výchozí hodnotyvisible(overflow: hidden|auto|scroll) pro rodičefloatovaných elementů je skoro s podivem, že to funguje.Vhodné řešení, pokud se nám nechce / není možné měnit HTML kód (ukázka).
<div style="overflow: hidden"> <div style="float: left; width: 50%"></div> <div style="float: right; width: 50%"></div> </div>.rodic:afterOd Internet Exploreru 8 lze centrovat elementem vytvořeným pseudo-elementem
:after..rodic:after { content: "."; display: block; clear: both; visibility: hidden; line-height: 0; height: 0; }Ve starších Explorerech lze
clearovat zapnutímhasLayoutu, tedy například:.rodic { zoom: 1 }Tím získáme rovněž řešení, kdy se nemusí zasahovat do HTML kódu a přidávat čistič (ukázka).
Element (obrázek) obtékaný textem
Umístíme-li nějaký element s floatem do běžného textu, text bude kolem elementu obtékat. Může to být například i obrázek.
Obtékaný elment před nebo za textem
V případě, že obtékaný text má být úplně vlevo nebo úplně vpravo od textu, řešení je následující:
- Má-li být vlevo, umístí se do kódu před text s
float: left. - Má-li být vpravo, umístí se do kódu před text s
float: right.
Přesné nepravidelné obtékání
Text obtékající relativně přesně obrázek. Obrázek je nastaven jako
background: url(obrazek.jpg) rodiči, kde je tento text.
V kódu před textem jsou elementy s float: right a různou šířkou,
které zabírají prostor nad částí obrázku, která nemá být překryta.
Obtékání s neznámou šířkou
Mohou se obtékat i elementy s neurčenou šířkou, je to ale takové nejisté, neb nevíme, kdy se ten či ten element roztáhne a sloupce tak skončí nechtěně pod sebou.
Odkazy jinam
- Floatování na JPW
- How Floating Works – jak funguje obtékání
Související články
Možnosti stylování <iframe>
Co lze a nelze u <iframe> ovlivnit pomocí CSS a jak na změnu textu nebo barev.