Co znamená float? Jasná funkce pro řešení problémů. Rozdíly mezi plovoucími a polohovými prvky

Před několika lety, když vývojáři poprvé začali přecházet na beztabulkové značkování HTML, vlastnost float CSS najednou získala velmi důležitou roli. Důvodem, proč se vlastnost float stala tak běžnou, bylo to, že ve výchozím nastavení se prvky bloku neřadily vedle sebe ve formátu založeném na sloupcích. Vzhledem k tomu, že sloupce jsou vyžadovány prakticky v každém schématu CSS, tato vlastnost si zvykla – a dokonce i zneužívána.

Vlastnictví float v CSS, umožňuje vývojáři zahrnout do značek HTML sloupce podobné tabulkám bez použití tabulek. Pokud ne pro nemovitost plovák, pak by rozložení CSS nebylo možné jinak než pomocí absolutního a relativního umístění – což by bylo nedbalé a rozložení rozložení by bylo neudržitelné.

V tomto článku vám to prozradíme co je vlastnost plovák a jak ovlivňuje prvky v konkrétních kontextech. Také se podíváme na některé rozdíly, které mohou s touto vlastností nastat v nejběžněji používaných prohlížečích. Nakonec předvedeme několik praktických aplikací nemovitosti plovák. To by také mělo poskytnout komplexní a důkladnou diskusi o této vlastnosti a jejím dopadu na vývoj CSS.

Definice a syntaxe vlastnosti CSS Float

Účelem vlastnosti float je posunout prvek bloku doleva nebo doprava a vyjmout jej z toku dokumentu. To umožňuje, aby se aktuální obsah přirozeně sbalil kolem plovoucího prvku. Tento koncept je podobný tomu, co můžete vidět každý den v tištěné literatuře, kde jsou fotografie a další grafické prvky zarovnány na jednu stranu a obsah (obvykle text) přirozeně plyne kolem prvku zarovnaného kolem levého nebo pravého okraje.

Obrázek nahoře ukazuje sekci „Čtenáři“ na webu časopisu .net se 3 fotografiemi čtenářů, které jsou ve sloupcích zarovnány vlevo s obtékáním textu kolem obrázků. Toto je základní myšlenka vlastnosti float v rozvrženích CSS a demonstruje jednu z technik používaných v tabulkovém návrhu.

Efektivitu použití plováků ve vícesloupcových rozvrženích vysvětlil Douglas Bowman v roce 2004 ve své klasické prezentaci No More Tables:

Bowman vysvětlil principy beztabulkového rozvržení s použitím starého webu Microsoftu jako reference. Plováky byly prominentně použity v jeho falešné generální opravě značek Microsoft.

Syntax

Vlastnost Float může mít jednu ze 4 hodnot: left, right, none a inherit. To je deklarováno tak, jak je uvedeno v kódu níže:

#sidebar (plovoucí: vlevo; )

#sidebar (

plavat vlevo;

Nejčastěji používané hodnoty jsou vlevo a vpravo. Hodnota none nebo počáteční plovoucí hodnota pro jakýkoli prvek stránky HTML je výchozí hodnotou. Dědičná hodnota, kterou lze použít pro téměř každou vlastnost CSS, nefunguje ve verzích Internet Exploreru, včetně 7.

Vlastnost float nevyžaduje použití žádné další vlastnosti na prvek float, ale aby fungovala správně, bude float za určitých okolností fungovat efektivněji.

Obvykle by měl mít plovoucí prvek explicitně nastavit šířku(pokud se nejedná o nahrazený prvek, jako je obrázek). To zajišťuje, že se float chová podle očekávání, a pomáhá vyhnout se problémům v některých prohlížečích.

#sidebar ( float: left; width: 350px; )

#sidebar (

plavat vlevo;

šířka: 350px;

Vlastnosti plovoucích prvků

Níže je uveden seznam chování plovoucích prvků podle specifikace CSS2:

Blok plovoucí doleva bude plovoucí doleva, dokud se jeho levá hrana (nebo hranice hrany, pokud hrana nemá) dotkne buď okraje obsahu bloku, nebo okraje jiného plovoucího bloku.

Pokud velikost plovoucího bloku překročí dostupný horizontální prostor, bude plovoucí blok posunut dolů

Nepolohované, neplovoucí blokové prvky působí jako plovoucí prvky, tzn. je mimo tok dokumentů

Okraje plovoucího bloku nebudou odpovídat hranám sousedních bloků

Kořenový prvek ( ) nelze plout

Vložený prvek, který je plovoucí, se převede na prvek bloku

Plavat v praxi

Nejčastějším případem použití vlastnosti float je plovoucí obrázek s obtékáním textu. Například:

Aenean ultricies mi vitae est. Mauris placerat eleifend leo. Quisque sit amet est et sapien ullamcorper pharetra. Vestibulum erat wisi, condimentum sed, commodo vitae, ornare sit amet, wisi. Aenean fermentum, elit eget tincidunt condimentum, eros ipsum rutrum orci, sagittis tempus lacus enim ac dui.

Donec non enim in turpis pulvinar facilisis. Ut felis. Praesent dapibus, neque id cursus faucibus, tortor neque egestas augue, eu vulputate magna eros eu erat. Aliquam erat volutpat. Nam dui mi, tincidunt quis, accumsan porttitor, facilisis luctus, metus.

CSS použité na obrázek ve výše uvedeném poli vypadá takto:

img ( float: left; margin: 0 15px 5px 0; border: solid 1px #bbb; )

img (

plavat vlevo;

okraj : 0 15px 5px 0 ;

border : solid 1px #bbb ;

Jedinou vlastností, která může dosáhnout tohoto efektu, je vlastnost float. Ostatní vlastnosti (margin a border) jsou zde z estetických důvodů. Další prvky v bloku (tagy

S textem v nich) nepotřebují žádné styly.

Jak již bylo zmíněno dříve, plovoucí prvky jsou vytlačeny z toku dokumentu a ostatní prvky bloku zůstávají v toku a chovají se, jako by tam plovoucí prvek ani nebyl. Vizuálně je to ukázáno níže:

Toto pole je plovoucí vlevo

Tento

Prvek má jinou barvu pozadí, aby bylo vidět, že přesahuje šířku svého rodiče, přičemž se ignoruje plovoucí prvek. Tento vložený text se však obtéká kolem plovoucího rámečku.

Ve výše uvedeném příkladu

prvek na úrovni bloku, takže ignoruje plovoucí prvek přesahující šířku kontejneru (mínus odsazení). Všechny neplovoucí prvky blokového typu se budou chovat podobně.

Text v odstavci je vložený, takže zalamuje plovoucí prvek. Plovoucímu bloku jsou také dány možnosti okrajů, aby byl odsazen od odstavce, takže je vizuálně čistý, takže prvek odstavce plovoucí blok ignoruje.

Čištění plováků

Problémy s rozvržením s plovoucími prvky jsou obvykle vyřešeny pomocí vlastnosti clear CSS, která vám umožňuje „vymazat“ plovoucí prvky zleva nebo zprava, nebo obojí.

Podívejme se na příklad, který je často k vidění – zápatí, které se vine kolem pravé strany rozvržení 2 klonů:

Levý sloupec plul doleva

Pokud se podíváte na stránku IE6 a IE7, žádné problémy neuvidíte. Levý a pravý sloupec jsou na svém místě a zápatí je dole. Ale ve Firefoxu, Opeře, Safari a Chrome uvidíte, že se zápatí posune z místa. To je způsobeno aplikací float na sloupce. Toto je správné chování, i když je problematičtější. K vyřešení tohoto problému používáme výše uvedenou vlastnost clear, vzhledem k zápatí:

#footer ( jasné: obojí; )

#zápatí (

jasné: obojí;

Výsledek je uveden níže:

Levý sloupec plul doleva

Pravý sloupec se také vznášel vlevo

Vlastnost clear vymaže pouze plovoucí prvky, takže použití clear: obojí na oba sloupce nezpůsobí pokles zápatí, protože zápatí není plovoucí prvek.

Vlastnost clear vymaže pouze plovoucí prvky. Použití clear je toto: oba sloupce nevynechají zápatí, protože se nejedná o plovoucí prvek.

Použijte tedy clear na neplovoucích prvcích, a dokonce někdy i na plovoucích prvcích, abyste přinutili prvky stránky, aby obsadily své určené pozice.

Oprava odchodu rodiče

Jedním z nejběžnějších rysů float markup je „leave-parent“. To je ukázáno na příkladu níže:

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas sempre.

Všimněte si, že základna plovoucího obrázku se objevuje mimo svého rodiče. Rodič není plně rozbalen, aby obsahoval plovoucí obrázek. To je způsobeno tím, co jsme probrali dříve: plovoucí prvek je mimo přirozený tok dokumentu, ačkoli jsou zobrazeny všechny prvky bloku, ale plovoucí prvek tam není. Nejedná se o chybu CSS, vše je podle specifikace CSS. Všechny prohlížeče v tomto příkladu postupují stejně. Je třeba říci, že v tomto příkladu může přidání šířky kontejneru zabránit problému v IE, ale mělo by to také vyřešit problém pro Firefox, Opera, Safari nebo Chrome.

Řešení 1: Plovák pro kontejner

Nejjednodušší způsob, jak tento problém vyřešit, je vznést nadřazený prvek:

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas sempre.

Kontejner se nyní rozšíří, aby se do něj vešly všechny podřízené prvky. Ale bohužel tato oprava bude fungovat pouze v omezeném počtu případů, protože plovoucí rodič může mít nežádoucí důsledky pro vaše rozvržení.

Řešení 2: Přidejte další značky

Toto je zastaralá metoda, ale je to jednoduchá možnost. Jednoduše přidejte přídavný prvek na dno nádoby a "vyčistěte" ji. Takto bude HTML kód vypadat po implementaci této metody:

XHTML

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas sempre.

"//media.smashingmagazine.com/cdn_smash/wp-content/uploads/2009/10/lifesaver.jpg"šířka = "200" výška = "222" alt = "" />

Pellentesque habitant morbi tristique senectus et netus et malesuada fames ac turpis egestas. Vestibulum tortor quam, feugiat vitae, ultricies eget, tempor sit amet, ante. Donec eu libero sit amet quam egestas sempre.

V důsledku toho se CSS použije na nové prvky:

Clearfix (clear: obojí; )

Clearfix (

jasné: obojí;

Můžete to také provést prostřednictvím
tag s aktuálním stylem. V každém případě získáte požadovaný výsledek: nadřazený kontejner se rozšíří tak, aby zahrnoval všechny jeho potomky. Tato metoda se však nedoporučuje, protože do vašeho označení přidává nesémantický kód.

Řešení 3: Pseudoprvek after

Pseudoprvek :after přidá prvek do vykreslené stránky HTML. Tato metoda byla poměrně široce používána k řešení problémů s čištěním plováků. Takto vypadá CSS:

Clearfix:after ( content: "."; display: block; height: 0; clear: both; viditelnost: skrytý; )

Clearfix:after (

obsah : "." ;

displej: blok;

výška: 0;

jasné: obojí;

viditelnost: skrytý;

Třída CSS „clearfix“ se vztahuje na jakýkoli kontejner, který má podřízené objekty typu float a nerozšíří se tak, aby je zahrnoval.

Tato metoda však nefunguje pro Internet Explorer do verze 7, takže pro IE musíte použít jednu z následujících možností:

Clearfix ( zobrazení: inline-block; ) .clearfix ( zoom: 1; )

Clearfix (

displej: inline-block;

Clearfix (

zoom: 1;

V závislosti na typu problému máte co do činění s jedním ze dvou řešení, která tento problém vyřeší v aplikaci Internet Explorer. Je třeba poznamenat, že vlastnost zoom není standardní vlastností společnosti Microsoft, a proto se vaše CSS stane neplatným.

Vzhledem k tomu, že pseudoelement :after nefunguje v IE6/7, kód je trochu nafouklý a složitý a je vyžadován další styl, který není platný pouze pro IE, takže toto řešení není nejlepší způsob, ale je to asi to nejlepší, co jsme zatím viděli.

Řešení 4: Vlastnost přetečení

Zdaleka nejlepším a nejsnadnějším způsobem, jak vyřešit problém s nadřazeným výpadkem, je přidat do nadřazeného prvku overflow: hidden nebo overflow: auto. Je přehledný, snadno se udržuje, funguje téměř ve všech prohlížečích a nepřidává žádné zbytečné značky.

Všimněte si, že jsem řekl "téměř" ve všech prohlížečích. To proto, že to nefunguje v IE6. Ale v mnoha případech bude mít nadřazený kontejner nastavenou šířku, což řeší problém v IE6. Pokud nadřazený kontejner nemá šířku, můžete přidat jednoduchý styl IE6 s následujícím kódem:

// Tato oprava je pouze pro IE6 .clearfix ( výška: 1 %; přetečení: viditelné; )

// Tato oprava je pouze pro IE6

Clearfix (

výška: 1 %;

přepad: viditelný;

V IE6 je s vlastností height nesprávně zacházeno jako s min-height, takže to přinutí kontejner zahrnout své potomky. Vlastnost Přetečení je pak nastavena zpět na „viditelné“, aby se zajistilo, že obsah nebude skrytý nebo procházení.

Jedinou nevýhodou použití metody přetečení (v jakémkoli prohlížeči) je možnost, že obsah prvku bude mít posuvníky nebo skryje obsah. Pokud jsou v nadřazeném prvku nějaké prvky se zápornými okraji nebo absolutním umístěním, budou skryty, pokud přesahují nadřazený prvek, proto je třeba tuto metodu používat opatrně. Je třeba také poznamenat, že pokud by měl obsažený prvek zadanou výšku nebo minimální výšku, rozhodně byste nemohli použít metodu přetečení.

Není tedy opravdu snadné tento problém vyřešit pomocí různých prohlížečů. Ale téměř jakýkoli problém s čištěním plováků lze vyřešit jednou z výše uvedených metod.

Související chyby plovoucí v aplikaci Internet Explorer

V průběhu let bylo na internetu publikováno mnoho článků, které diskutovaly o běžných chybách spojených s plovoucími prvky v značkách CSS. Nepřekvapivě všechny řeší problémy specifické pro Internet Explorer. Níže naleznete seznam odkazů na řadu článků, které pojednávají o problémech souvisejících s plovoucím zařízením:

Změna vlastnosti float pomocí JavaScriptu

Chcete-li změnit hodnotu CSS v JavaScriptu, musíte získat přístup ke stylu objektu převedením zamýšlené vlastnosti CSS na „Camel case“, například vlastnost CSS „margin-left“ se změní na marginLeft, vlastnost background-color se změní na BackgroundColor , a tak dále. Ale s vlastností float jsou věci jiné, protože slovo float je již rezervováno v JavaScriptu. Proto následující bude nesprávné:

Styl. styleFloat = "vlevo" ;

// Pro všechny ostatní prohlížeče

myDiv. styl. cssFloat = "vlevo" ;

Praktické použití plováku

Floaty lze použít k vyřešení řady problémů se značkami CSS. Některé příklady jsou popsány zde.

2-sloupový, pevná šířka

3 sloupce, rozvržení se stejnou výškou

Plovoucí obrázek s názvem.

Podobně jako to, o čem jsme hovořili dříve v části Float in Practice, Max Design popisuje, jak plovoucí obrázek s nadpisem umožňuje, aby se kolem něj přirozeně obtékal text.

Horizontální navigace s neuspořádanými seznamy

Vlastnost float je klíčovou součástí při kódování horizontálních navigačních pruhů založených na spritech. Chris Spooner z Line25 popisuje vytvoření Menu of Awesomeness, které taguje

  • , přidržením navigačních tlačítek použijte plovoucí: vlevo:

    Abychom demonstrovali důležitost vlastnosti float v tomto příkladu, zde je snímek obrazovky stejného obrázku po použití firebug k odstranění float: left:

    Grid-založené fotogalerie

    Jednoduchým použitím vlastnosti float je float:left série fotografií obsažených v neuspořádaném seznamu, což vede ke stejnému výsledku, jako byste viděli v označení tabulky.

    Především kanadská produktová stránka (viz obrázek výše) zobrazuje své produkty ve formátu mřížky vedle postranního panelu. Fotografie se zobrazují jako neuspořádaný seznam s vlastností float pro všechny

  • prvky nastavené na plovoucí: vlevo. Funguje to lépe než mřížka tabulky, protože počet fotografií v galerii se může změnit, aniž by to ovlivnilo rozvržení.

    Stránka futonů Paragon Furniture (viz obrázek výše) je dalším příkladem produktové stránky používající neuspořádaný seznam s plovoucími značkami

  • .

    Stránka s výsledky vyhledávání iStockphoto (viz obrázek výše) má stejnou mřížku strukturovaných fotografií, zde fotografie obsahují float:left

    značky, ne
  • značky.

    Zarovnání pole s tlačítkem

    Modelování výchozích prvků formuláře pro různé prohlížeče může být problematické. Často je třeba vložit do jednoho pole formuláře, jako je vyhledávací formulář vedle tlačítka „odeslat“.

    V moderním web designu, majetku plovák používá se téměř na každém kroku. Ale i přes tuto prevalenci ne každý rozumí mechanismu plovoucích bloků, jejich chování a jaké důsledky může mít jejich použití.

    Co je to "float"?

    Plovák Toto je vlastnost umístění CSS. Abyste pochopili jeho podstatu a původ, musíte věnovat pozornost tištěnému designu. V tištěných rozvrženích může být obrázek umístěn tak, aby text obtékal. To se obvykle nazývá " zalamování textu".



    V rozvržení stránky lze určit, že se má použít blok, který obsahuje text obtékání textu kolem obrázku nebo ignorovat obal. Ignorování zalamování textu umožní, aby slova přetékala přes obrázek, jako by tam nebyla. To je rozdíl, zda je obrázek součástí toku na stránce nebo ne. Ve webdesignu je vše velmi podobné.



    Ve webovém designu se na něj vztahuje prvek s vlastností CSS plovák se bude chovat jako obrázek s obtékajícím textem v tištěném rozvržení. Plovoucí prvky zůstávají součástí toku webové stránky. To je zcela odlišné od absolutně umístěných prvků, které jsou odstraněny z toku, jako by v tištěném rozvržení bylo textovému bloku řečeno, aby ignoroval zalamování obrázku. Absolutně umístěné prvky neovlivňují umístění ostatních prvků a ostatní prvky neovlivňují jejich umístění.

    Nastavení vlastnosti plovák pro prvky používající CSS vypadá takto:

    #sidebar ( float: right; )

    Pro vlastnost jsou platné čtyři hodnoty plovák - vlevo, odjet, že jo, žádný, zdědit. První dva vlevo, odjet A že jo označte směr umístění - vlevo a vpravo. Žádný- výchozí hodnota, označuje, že prvek není plovoucí a zdědit pokyn prvku, aby zdědil hodnotu vlastnosti plovák z rodičovského prvku.

    K čemu se plovák používá?

    Kromě jednoduchého příkladu obtékání textu kolem obrázku, plovák lze použít k vytváření webových rozvržení.



    Plovák, je také vhodné použít pro malé prvky rozvržení. Vezměme si například tento malý fragment webové stránky. Pokud nastavíme vlastnost plovák U malého obrázku avatara se při změně velikosti obrázku změní obtékání podle nových rozměrů obrázku:



    Stejné rozložení lze implementovat pomocí relativního umístění kontejneru a absolutního umístění avatara a textu v něm. V rozložení implementovaném podle tohoto schématu však změna velikosti obrázku neovlivní textový blok, protože prvky s absolutním umístěním neovlivňují ostatní prvky a jiné prvky je neovlivňují.


    Zabalit reset

    Průhledná související majetek s majetkem plovák. Prvek se sadou vlastností Průhledná se nebude pohybovat nahoru kolem prvku se sadou vlastností plovák, ale bude se pohybovat dolů a ignorovat tok. A opět ilustrace, která vše bez dalšího vysvětlí.



    Ve výše uvedeném příkladu se postranní panel vznášel napravo od bloku hlavního obsahu. „Zápatí“ se přesunulo do volného prostoru pod postranním panelem a obtéká blok s hlavním obsahem. Chcete-li tento problém vyřešit, musíte zadat hodnotu vlastnosti clear:both zápatí, aby se "vyčistil" tok kolem obou sloupců.

    #footer ( jasné: obojí; )

    Vlastnictví Průhledná má čtyři významy. Oba slouží k uvolnění proudění v obou směrech. Vlevo, odjet A Že jo slouží k resetování jednoho směru - vlevo nebo vpravo, resp. Žádný- výchozí hodnota. Zdědit může být pátá hodnota, ale překvapivě není podporována internet Explorer. Resetování pouze levého nebo pravého toku je poměrně vzácné, ale má praktické výhody.


    Velký kolaps

    Jedna věc o práci s plovák Co je záhadné, je účinek této vlastnosti na rodičovské prvky. Pokud nadřazený prvek neobsahuje žádné jiné prvky než float, pak se jeho výška doslova zhroutí. To není vždy patrné, zvláště pokud nadřazený prvek nemá výrazné pozadí, ale je důležité to mít na paměti.



    Ale alternativa k takovému kolapsu je ještě horší. Zvažte následující scénář:



    Pokud se horní blok automaticky rozšíří, aby se do něj vešel plovoucí prvek, skončíme s mezerou v toku textu mezi odstavci, kterou nelze nijak opravit. Pokud by tomu tak bylo, pak by si vývojáři na toto chování plovoucích bloků stěžovali mnohem častěji než nyní na kolaps.

    Sbalení byste měli mít vždy na paměti, abyste předešli podivnému chování rozvržení a problémům s různými prohlížeči. Tento problém můžeme vyřešit pomocí Průhledná po plovoucím prvku v nádobě, ale před uzavřením nádoby.

    Techniky zrušení balení

    Pokud jste v situaci, kdy víte, kde bude další prvek, můžete použít clear:both a jít na věc. To je ideální, protože nevyžaduje žádné hacky ani další prvky. Ale bohužel většinou ne všechno jde tak, jak bychom chtěli, a v tomto případě můžete využít následující nástroje.

    Metoda prázdného bloku.

    Je to doslova prázdný blok.

    . Někdy můžete najít prvek
    nebo jakýkoli jiný náhodný prvek, ale div je nejběžnější, protože nemá žádný výchozí styl v prohlížečích, nemá žádnou speciální funkci a je nepravděpodobné, že by se jednalo o obecný styl CSS. Tuto metodu sémantičtí puristé odmítají, protože její přítomnost nemá na stránce žádný kontextový význam a je zde pouze pro vzhled. V přísném slova smyslu mají samozřejmě pravdu, ale on dělá svou práci a nikomu neubližuje.

    Metoda přetečení.

    Na základě specifikace vlastností CSS přetékat pro nadřazený prvek. Pokud je tato vlastnost nastavena na auto nebo skrytý u nadřazeného prvku se roztáhne po plovoucím prvku, čímž se účinně obnoví jeho obalování pro následující prvky. Tato metoda může být sémanticky krásná, protože nevyžaduje další prvky. Nicméně, jak vidíte, přidali jsme nový div použít tuto metodu, která je ekvivalentní použití nesémantického prázdného bloku a je méně flexibilní. Je třeba také připomenout, že vlastnost přetékat není určen k deaktivaci zalamování. Dávejte pozor, abyste omylem neskryli obsah nebo nezpůsobili nežádoucí posuvníky.

    Snadná metoda čištění.

    K odstranění zalamování používá pseudoselektor CSS (:after). Místo užívání nemovitosti přetékat Pro nadřazený prvek pro něj nastavte další třídu, například „clearfix“ a použijte následující styl CSS:

    Clearfix:after ( obsah: "."; viditelnost: skrytá; zobrazení: blok; výška: 0; vymazat: obojí; )

    To používá malý kousek obsahu skrytý před pohledem, který se nachází za nadřazeným prvkem, který resetuje obal. Tato metoda není úplná, protože je třeba ji zlepšit, aby podporovala starší prohlížeče.

    Různé situace vyžadují různé metody úlevy při blafování. Vezměme si jako příklad mřížku různých typů bloků.



    Pro lepší vizuální kombinaci podobných bloků bychom měli při změně barvy začít nový řádek. Pokud má každá skupina barev nadřazený prvek, můžeme použít metodu přetečení nebo vymazání světla. Nebo použijeme metodu prázdných bloků mezi skupinami. Tři rodičovské bloky, které dříve neexistovaly, nebo tři prázdné bloky, které dříve neexistovaly. Je na vás, abyste se rozhodli, která metoda je lepší.


    Problémy s plovoucími prvky

    Plovoucí prvky jsou často kritizovány kvůli jejich křehkosti. Velká část této křehkosti pochází z IE6 a jeho plovákově orientované chyby. Ale jak stále více vývojářů upouští od podpory IE6, možná o tom nepřemýšlíte, ale pro ty, kterým záleží na kompatibilitě, zde je krátký seznam.

    Pushdown, je příznak, že prvek uvnitř plovoucího bloku je širší než tento blok (to se obvykle stává u obrázků). Většina prohlížečů vykreslí plovoucí prvek vyčnívající, ale to nebude mít žádný vliv na rozvržení. IE rozšíří plovoucí blok a často to má drastický vliv na rozložení. Typickým příkladem je obrázek trčící z hlavního bloku obsahu, který tlačí postranní lištu dolů.



    Rychlé řešení problému: použití přetečení: skryté; odříznout přebytek.

    Chyba dvojitého okraje- další věc, kterou je třeba pamatovat při práci s IE6. Tato chyba je vyjádřena v tom, že pokud je pole na stejné straně, jako je orientováno plovák, pole je zdvojnásobeno. Například:

    Dostaneme levé pole 40 pixelů., namísto 20 pixelů.

    Rychlé řešení problému: Nastavte zobrazení: inline pro plovoucí blok a nebojte se, prvek zůstane na úrovni bloku.

    3px Jog. Podstatou této chyby je, že text umístěný vedle plovoucího prvku je podivně posunut o tři pixely, jakoby pod vlivem silového pole umístěného kolem plovoucího prvku. Rychlé řešení problému: Nastavte šířku a výšku dotčeného textu.

    Objevuje se v IE7 Chyba na spodním okraji, kdy je nadřazený prvek plovoucím prvkem a jeho podřízený prvek umístěný uvnitř je také plovoucím prvkem. Spodní okraj (margin-bottom) potomka je ignorován prvkem předka. Rychlé řešení problému: Použijte padding-bottom na nadřazený prvek namísto margin-bottom na podřízený prvek.

    Otázky o tom, jak fungují vlastnosti CSS float left a float right, se objevují se záviděníhodnou pravidelností. To se stává obzvláště bolavým tématem pro designéry a programátory, kteří léta sestavují rozvržení na tabulkách a nyní jsou nuceni pracovat s bloky. Navíc to zhoršují problémy s rozložením cossbrowseru, i když v poslední době toto téma nějak začalo zmenšovat nervy specialistů.

    Každopádně místo neustálého odpovídání na stejné otázky, jak fungují vlastnosti CSS float left a float right, jsem se rozhodl napsat příspěvek a poslat do něj všechny trpící.

    Ujišťuji vás, že v tomto příspěvku nebude nic nového. Takových informací je na internetu spousta. Ale pokaždé, když ukážu příklad na prstech nebo hledám odkaz, kam poslat svého dalšího zaměstnance, už jsem unavený. Proto zde uvedeme krátkou sbírku toho, s čím se nejčastěji setkáváme.

    Bloky v kontejneru s nastavenými vlastnostmi CSS float left a float right

    Typický problém:

    1. Existuje kontejner se dvěma nebo více bloky.
    2. Vnitřní bloky mají nastavenou vlastnost CSS float left nebo right.
    3. Pokud velikost bloku nestačí, obsah zespodu se začne vejít do bloku a celé rozložení se rozpadne.

    Níže uvedené ilustrace ukazují několik takových případů.

    Situace se dvěma nebo více bloky s vlastností float left CSS

    To by mělo být:

    Situace, kdy jeden blok má vlastnost CSS plovoucí vlevo a jiný vpravo

    To by mělo být:

    Jak to vypadá, když je rozložení nesprávné:

    Proč k této situaci došlo?

    Naše bloky s vlastnostmi CSS float left a float right jsou umístěny uvnitř kontejneru, který má na dně určitou výplň. Navzdory zdánlivě správným parametrům odsazení zespodu nejen že nefunguje, ale také nám obsah spodních bloků leze do horního bloku.

    Jde o to, že bloky se specifikovanými vlastnostmi float neovlivňují změnu výšky jejich kontejneru.

    Například: v prvním případě jsou všechny bloky uvnitř kontejneru plovoucí. Proto bude výška kontejneru nulová.

    V druhém případě máme v kontejneru kromě plovoucích bloků i text. Výška kontejneru tedy bude odpovídat výšce textu vyplňujícího tento blok. Pokud je tedy text větší než výška vnitřních plovoucích bloků, problém si nevšimnete. Pokud není dostatek textu, jako ve výše uvedeném příkladu, obsah spodních bloků se rozšíří až ke spodnímu okraji kontejneru.

    Řešení 1 Přidejte prázdný blok s vlastností CSS clear: both

    Před uzavírací značku kontejneru musíte umístit blok s vlastností CSS clear:both. Poté bude kontejner rozšířen na spodní blok, protože tato vlastnost blokuje vliv bloků s vlastnostmi CSS float left a float right.

    Ukázkový kód stránky:

    Okolí Epsilon, jak známo, obrací abstraktní Taylorovu sérii podle očekávání.
    Okolí Epsilon, jak známo, obrací abstraktní Taylorovu sérii podle očekávání.

    Můžete také umístit blok s vlastností clear:both bezprostředně za uzavírací značku kontejneru nebo za poslední plovoucí blok. Kontejner v této situaci nezmění svou velikost. A celkově to nebude potřeba, ale blok s vlastností clear: both jednoduše odřízne obsah od plovoucích bloků.

    Ukázkový kód stránky:

    Okolí Epsilon, jak známo, obrací abstraktní Taylorovu sérii podle očekávání.
    Okolí Epsilon, jak známo, obrací abstraktní Taylorovu sérii podle očekávání.
    Okolí Epsilon, jak známo, obrací abstraktní Taylorovu sérii podle očekávání.

    Ne každý však ví, že směrové pole odpovídá determinantu soustavy lineárních rovnic, což není překvapivé. Navíc determinant systému lineárních rovnic kategoricky obnovuje vektor, jak se očekávalo. Okolí bodu je stále žádané. Lema, jak vyplývá z výše uvedeného, ​​výrazně stabilizuje abstraktní divergentní řadu, což nás nepochybně dovede k pravdě. Lema smysluplně rozplétá nevyvratitelný přirozený logaritmus, další výpočty přenecháme studentům jako jednoduchý domácí úkol.

    Ukázkový kód CSS:

    Container ( display: block; ) .in_block ( display: block; float: left; width: 100px; height: 100px; margin-right: 10px; ) .clear ( display: block !important; margin: 0px !important; padding: 0px !důležité: oba !důležité; žádné !důležité;

    Metodologicky to není nejelegantnější řešení, i když si zaslouží právo na život, protože je docela efektivní. Zjevnou nevýhodou je fakt, že do textu stránky musíme přidat další kód.

    Řešení 2: Explicitně specifikujte výšku kontejneru

    Možnost nastavení výšky nádoby je dobrá pouze v případě, že přesně znáte předpokládanou velikost obsahu této nádoby. Pak bude naše CSS vypadat nějak takto:

    Kontejner ( display: block; height: 100px; ) .in_block ( display: block; float: left; width: 100px; height: 100px; margin-right: 10px; )

    V případě, že je obsah dynamický nebo rozložení je „plynulé“ a šířka kontejneru se může měnit, pak to nebude tak dobré řešení.

    Řešení 3: Nastavte vlastnost CSS overflow na kontejneru

    Pokud nastavíte hodnotu vlastnosti kontejneru přetékat rovnat se auto nebo skrytý, prohlížeč znovu sestaví kontejner tak, aby se do něj vešly všechny plovoucí bloky a nezobrazovaly se posuvníky.

    Pokud nastavíte vlastnost overflow na auto, připravte se na to, že se v některých situacích mohou stále zobrazovat posuvníky. Proto byste měli důkladně zkontrolovat rozložení v různých režimech.

    Ukázkový kód CSS:

    Kontejner ( display: block; overflow: auto; ) .in_block ( display: block; float: left; width: 100px; height: 100px; margin-right: 10px; )

    Dva bloky na stejné úrovni se zadanými vlastnostmi CSS plavou vlevo a plovoucí vpravo

    Typická situace: text, který obtéká dva bloky s nějakým obsahem. V tomto případě jsou bloky umístěny po stranách textu.

    To by mělo být:

    Vlastnost Float je významným a výkonným přínosem pro webové vývojáře pracující s HTML a CSS. Na druhou stranu může být frustrující a matoucí, pokud plně nerozumíte tomu, jak tato vlastnost funguje.

    Překlad článku CSS Floats 101. Původní alistapart.com

    Také v minulosti bylo kvůli některým docela ošklivým chybám v prohlížeči normální být při používání vlastnosti nervózní plovák ve vašich sadách pravidel CSS. Pojďme ale uklidnit nervy a pokusme se zmírnit zklamání. Ukážu vám, co přesně vlastnost float dělá s vašimi prvky a jak ji pohodlně používat.

    Každý den vidíme v tištěném světě plováky, když se podíváme na článek v časopise s obrázkem umístěným vlevo nebo vpravo a textem pěkně uspořádaným kolem něj. Ve světě HTML/CSS text zalomí obrázek v závislosti na vlastnosti float, která je na tento obrázek aplikována. Použití vlastnosti float na obrázku je jen jedním z mnoha příkladů. Jako další příklad, pomocí vlastnosti float můžeme velmi snadno vytvořit oblíbené dvousloupcové rozložení. Vlastnost float můžete ve skutečnosti použít na jakýkoli prvek ve vašem HTML. Když se naučíte a pochopíte použití vlastnosti float spolu s vlastností position, můžete se při vytváření jakéhokoli rozvržení cítit pohodlně a sebejistě.

    Definice plováku

    Začněme tím, že definujeme, co je plovák.

    Float je pole, které se pohybuje doprava nebo doleva podél aktuálního řádku. Nejzajímavější vlastností plováku je, že obsah může proudit po jeho boku. Při použití vlastnosti float: left bude obsah stékat dolů po boxu na pravé straně a podobně s float: right - dolů na levé straně.

    Vlastnost float má 4 hodnoty, které můžeme použít: left , right , inherint a none . Každý význam je docela jasný. Pokud například na prvku použijete float: left, přesune se k levému okraji vzhledem k nadřazenému prvku. A pokud zadáte float: right , prvek se podobně přesune doprava. Hodnota ihnerit říká prvku, aby zdědil vlastnost od svého nadřazeného prvku. A poslední hodnota none je výchozí a říká, že se vlastnost nemá použít plovák k tomuto prvku.

    #container ( width: 960px; margin: 0 auto; ) #content ( float: left; width: 660px; background: #fff; ) #navigation ( float: right; width: 300px; background: #eee; ) #footer ( clear: both background: #aaa; padding: 10px )

    Naše #zápatí uvízlo pod #navigačním blokem. Stalo se to proto, že pod #navigačním blokem je prostor pro #zápatí a pro normální tok umístění bloku je to správné chování. Ale to rozhodně není to, co potřebujeme, že? Předpokládám, že již vidíte vztah mezi float a clear a chápete, jak se vzájemně doplňují.

    Pokud máte obsedantně-kompulzivní poruchu jako já, možná jste si všimli různé výšky sloupců #content a #navigation v příkladu F; Existuje několik řešení, ale to je nad rámec tohoto článku. Vřele doporučuji přečíst si Faux Columns od Dana Cederholma, abyste se naučili, jak vyrobit bloky stejné výšky, bez ohledu na obsah uvnitř.

    Nejprve plavte

    Zatím jsme viděli několik docela jednoduchých příkladů, které nezpůsobují mnoho bolestí hlavy. Existuje však několik úskalí, na která je třeba si uvědomit při používání vlastnosti float. Jedno z největších úskalí má překvapivě méně společného s CSS a více s HTML. Umístění plovoucího prvku do HTML může vést k různým výsledkům. Podívejte se na příklad H.

    Zde máme malý blok, který má obrázek s vlastností float:right a textem, který jej obklopuje. Naše CSS vypadá takto:

    #container ( šířka: 280px; okraj: 0 auto; odsazení: 10px; pozadí: #aaa; okraj: 1px plný #999; ) img ( plovoucí: vpravo; )

    Náš nadřazený prvek #container má úzkou šířku a udržuje náš plovoucí prvek (obrázek) ve svých hranicích. Náš HTML kód vypadá takto:


    Tento příklad nám dává požadovaný výsledek, ale co když vezmeme a přeuspořádáme některé prvky v HTML? V příkladu I jsem se přestěhoval za textem

    Toto je nějaký text obsažený v malém rámečku. Používám to jako příklad toho, jak může umístění vašich plovoucích prvků v různých pořadích v HTML ovlivnit vaše rozvržení. Podívejte se například na tento skvělý zástupný symbol fotografie, který by měl sedět vpravo.


    Náš výsledek není takový, jaký jsme očekávali. Náš obrázek se posunul doprava, ale už není v horním rohu, jak bychom chtěli, ale klesl pod odstavec; Ještě horší je, že vyčnívá ze spodní části našeho nadřazeného prvku #container. Co se děje?

    Za prvé. Mým pravidlem, které jsem si pro sebe našel, je nejprve plout prvky. V mém HTML téměř vždy přidávám plovoucí prvky na začátek označení a před všechny neplovoucí prvky, se kterými budou moje plovoucí prvky interagovat, jako je odstavec ve výše uvedeném příkladu. Ve většině případů to dává pozitivní výsledek

    Za druhé. Důvodem, proč se zdá, že obrázek vyčnívá ze spodní části našeho #container bloku, je něco, čemu se říká kolaps. Pojďme mluvit o kolapsu a řešeních.

    Zhroucení

    Sbalení nastane, když prvek, který má libovolný počet plovoucích prvků, nerozšíří své hranice kolem svých vnořených prvků, jako by tomu bylo, kdyby vnořené prvky nebyly plovoucí.

    Nyní to zkusme opravit pomocí CSS namísto přidávání dalších značek HTML do našeho dokumentu, jako jsme to dělali dříve. Existuje metoda, která umožňuje rodičovskému prvku "aplikovat" vlastnost clear po všech plovoucích prvcích. K tomu použijte vlastnost CSS overflow s hodnotou hidden . Vezměte prosím na vědomí, že vlastnost overflow nebyla určena k použití tímto způsobem a může způsobit určité problémy, jako je skrytí obsahu nebo zobrazení nežádoucího posuvníku. V našem příkladu však stále použijeme vlastnost overflow: hidden na náš nadřazený prvek #container:

    #container ( přetečení: skryté; šířka: 260px; okraj: 0 auto; výplň: 10px 0 10px 10px; pozadí: #aaa; rám: 1px plný #999; )

    A nakonec, Eric Meyer vysvětluje třetí řešení tohoto problému ve svém článku obsahující plováky. Podle specifikace CSS 2.1:

    prvek s vlastností float rozšíří své hranice na plovoucí prvky uvnitř.

    Takže použitím vlastnosti float na #container bude náš kontejner obsahovat náš obrázek a odstavec, podobně jako výše popsané metody.

    Všechna tato řešení nakonec dělají totéž. Přinutí rodičovské prvky, aby započítaly své plovoucí prvky do toku. Každá metoda má své výhody a výhody. Musíte porozumět každému z nich a poté použít ty, které budou ve vaší situaci fungovat nejlépe.

    Závěr

    Použitím vlastnosti float můžete výrazně zlepšit svou techniku ​​aranžování prvků. Pochopení toho, jak daná vlastnost funguje a co ovlivňuje její chování, vám dá pevný základ pro efektivní používání float.



  • 
    Horní