Přesné obtékání obrázku textem

Tento článek je určen spíše začátečníkům v oboru a to zejména takzvaným hračičkům, budu totiž popisovat, kterak za pomoci pouze HTML a CSS docílit stavu, kdy bude obrázek obtékán přesně podle jeho grafických hranic. Cílem tedy bude dosáhnout tohoto stavu:

Ilustrační obrázek

K dispozici máme tento obrázek:

Ilustrační obrázek

Zelený strom teorie

Jediný použitelný způsob, kterak psát do prostoru, který je vymezen pro obrázek, je nastavení tohoto obrázku jako pozadí nějakého prvku. Vytvoříme si tedy box o libovolné šířce a minimální výšce, která je rovna výšce obrázku. Pro minimální výšku máme v CSS vlastnost min-height. Bohužel Internet Explorer tuto vlastnost nezná, zná však špatně vlasnost height, se kterou nakládá stejně jako rozumné prohlížeče s min-height. Je tedy třeba prohlížeče rozlišit. Já v příkladu používám hack se selektorem potomka, který Internet Explorer nezná a tudíž v něm můžeme nastavit vlastnosti pro ostatní prohlížeče a vynulovat nastavenou výšku.

#box { background-image: url('screw.jpg'); background-repeat: no-repeat; width: 360px; height: 175px; }
body > #box { min-height: 175px; height: auto; }

Nyní můžeme vložit text to boxu #box. Zatím se však bude vykreslovat v celém boxu, tedy i přes obrázek.

Trik

Logicky je třeba nějak zajistit, aby v levé části obrázku v odpovídající míře „něco“ bylo. K tomuto účelu velice dobře poslouží pár plovoucích DIVů s definovanou výškou a šířkou, které vytvoří tzv. plovoucí okraj obrázku a které bude text přirozeně obtékat. Pro jednotlivé divy můžeme v CSS obecně nastavit následující:
div.indent { height: 15px; float: left; line-height: 0; clear: left; }

Výška 15 pixelů je adekvátní z hlediska poměru počtu DIVů a zubatosti okraje. Výška řádku je nastavena na nulu z toho důvodu, aby některé prohlížeče (zcela konkrétně opět Internet Explorer) neměnily výšku DIVu s rostoucí velikostí písma. Clear: left zaručí, že každý DIV bude na samostatném řádku.

V kódu samotné stránky potom chvilku experimentujeme s šířkou a počtem jednotlivých DIVů. Vyjde nám něco takového:

<div id="box">

          <div class="indent" style="width: 70px;">&nbsp;</div>
          <div class="indent" style="width: 90px;">&nbsp;</div>
          <div class="indent" style="width: 110px;">&nbsp;</div>
          <div class="indent" style="width: 120px;">&nbsp;</div>
          <div class="indent" style="width: 130px;">&nbsp;</div>
          <div class="indent" style="width: 150px;">&nbsp;</div>
          <div class="indent" style="width: 170px;">&nbsp;</div>
          <div class="indent" style="width: 190px;">&nbsp;</div>
          <div class="indent" style="width: 210px;">&nbsp;</div>
          <div class="indent" style="width: 210px;">&nbsp;</div>
          <div class="indent" style="width: 210px;">&nbsp;</div>

          Lorem ipsum ...

</div>

A vida! Výsledný efekt je na světě. Můžete se podívat na hotové řešení. Řešení je zcela nezávislé na zvolené velikosti písma.

8. 11. 2005, 21.04 | (X)HTML, CSS.


55 komentářů k “Přesné obtékání obrázku textem”

  1. Acci říká:
  2. No ale fuj. To už radši, ať je to hranaté.


  3. Dero říká:
  4. Acci, souhlasím, že v praxi je to téměř nevyužitelné kvůli zbytečné robustnosti potřebného kódu, ale myslím, že pro někoho může být zajímavé zjišťení, že to vůbec jde.

    Připadám si v posledních dvou spotech jako Jára Cimrman, také objevuji slepé uličky a říkám: "Tudy tedy ne, přátelé!" :o)


  5. ronan říká:
  6. Tak me napada, musi byt hrozne porad pri praci narazet na problemy s IE, ne:)? Ja se s tim nastesti setkavam malokdy, ale vzdy kdyz to musim resit me to dost ubiji


  7. Dero říká:
  8. ronan: Svým způsobem už v drtivé většině případů vím, co od toho molocha čekat. :o) Ale je pravda, že ten program má v rukávu neskutečné množství… odlišností.


  9. Jan Brašna říká:
  10. Fujky :) Na podobné kejkle by byl ideální CSS generovaný obsah, strukturálně to vypadá děsivě.


  11. Multimotyl říká:
  12. Na podobné kejkle je hlavně SVG! Na podporu v majoritních prohlížečích se těším jako malej kluk.


  13. Martin Picek říká:
  14. Mně je jedno, přes co to vzniká, ale blbě se to čte. ;-)


  15. llook říká:
  16. Mě se to líbí. Taky mi občas leze krkem, že je na webu všechno tak hranatý.

    [6] Lepší by bylo říct "by byl". Nebo pokud jsi velký optimista, tak "snad jednou bude". Také bych byl rád, kdyby se konečně nějaký podobný vektorový formát ujal. VML se to nepovedlo, snad se to povede SVG.


  17. Lukáš Mačí říká:
  18. Pěkná ukázka. Bohužel HTML a CSS jsou zatím hranaté a díky IE jsou i s hranatými věcmi potíže. Takže pokud si grafici nějakou takovouto věc vymyslí a zákazník to prostě chce,není prakticky možné jiné řešení.


  19. spud říká:
  20. Zdarec, inspiroval si me a zkusil jsem to tvy reseni trochu vylepsit – nechat html klasicke (obrazek je tam coby img) a obtekani pres divy udelat scriptem. Funguje to v pohode v IE a Mozile, ale Opera nejak nechce zpracovat vlastnost float u nove generovanych divu. Treba prijdes na to, jak to osetrit v Opere (nebo to v ni vubec nespoustet) a trochu to zobecnis… ja jsem na to moc linej. :-) viz "http://bacha.cz/mess/imgfloat/"


  21. Arcao říká:
  22. Uz jsem to nekde videl, ale jinak delany (jednodusseji). Rozkouskuje se obrazek na radky a pak pres foating se hodi na patricnou stranu. Treba takhle: http://www.meyerweb.com/…at/demo.html


  23. Roj říká:
  24. Ja jsem to dosud delal pre rozsekany obrazek, ale TOHLE JE LEPSI!!! A uz vim, kde to pouziju. Tohle ma tu vyhodu, ze ten text muze obrazek v potrebnych mistech castecne PREKRYVAT, coz se u rozkouskovaneho obrazku dosahnout neda.

    SUPR SUPR SUPR!!!!


  25. Fred říká:
  26. Kolikrát mě naštve, že skoro všechno už tady bylo viz odkaz na meyerweb, nejsi asi ani první koho na tom štvalo to řezání toho obrázku viz http://flumpcakes.co.uk/css/chef-curv , ale to spudovo řešení má šťávu, žádné zbytečné divy navíc, a bez js žádná pohroma. Takže se zase ukázalo, že má smysl psát i o věcech již objevených. Jen škoda tý opery, asi je lepší jí odříznout. function noopera(){if(!window.opera){obtekej()}} window.onload = noopera;


  27. Fred říká:
  28. Update nastav to float přes className a funguje to i v Opeře

    css:.divElm{float:left;clear:left;line-height:0;margin-right:0;}

    js: divElm=document.createElement(‚div‘); divElm.className=‚divElm‘; with(divElm.style){ width=screwWidths[i]+‚px‘;


  29. spud říká:
  30. Fred: Prima, s tim jmenem tridy jsem to taky zkousel a neslo to. Jeste koukam, ze IE trosku osekne nektery pismenka, ale to neni takovej problem a dal by se taky doresit (uprava stylu pro IE, transparentni pozadi obrazku). Opravil jsem ten svuj "link"


  31. Fred říká:
  32. Ještě to trochu blbne při zvětšování písma v MSIE a ve starších operách (7.23,7.5) poslal jsem Ti to mailem opravené.


  33. spud říká:

  34. Dero říká:
  35. Velice hezká práce, spude!

    Nevyužiješ Ty, využijí jiní. Budeš slavný, ženy Ti budou padat k nohám, muži s respektem kynout a programátoři závidět. To je přeci krásné!

    Jsem rád, že Tě provokuji k takovým lotrovinám. :o)


  36. Fred říká:
  37. Teď už je to dokonalost sama :-)


  38. Plaváček říká:
  39. Co na to říct. Snad jen, že ta javascritptová vymyšlenost je pěkná vyfikundace (omlouvám se za to slovo, jiné mě nenapadlo), ale pokud se hluboce zamyslíte, zjistíte, že podobná řešení jsou už ze své podstaty nesmyslná. V konečném důsledku je totiž vitacit (šumák), jestli text obrázek obtéká či nikoliv. Jinak řečeno, důležité je vlastní sdělení, nikoliv jeho forma.

    Já osobně tohle přetahování fajnovůstek z DTP na web moc v lásce nemám, zvláště pokud vyžadují podobné obezličky.

    Nicméně, Spudovo řešení je velmi elegantní a ve výjimečných případech se může hodit, to musím uznat.


  40. ald říká:
  41. fuuuuuuuuuj to snad ani omylem, brrr nikdy


  42. Petr Klouček říká:
  43. Taky dobrý, ale stejně je nejlepší fotbal:)


  44. Anonymous říká:
  45. Ach jo řešeni to je…...Ale docela vyřečný


  46. zirafka říká:
  47. [18]

    … Budeš slavný, ženy Ti budou padat k nohám…

    2spud: BÁC!


  48. sdf říká:
  49. sdfwholesale nfl</br>aweq wholesale mbt shoes</br> wholesale abercrombie</br>dsfds


  50. lady bags říká:
  51. mioob airbags handbags lady bags golf bags


  52. replica watches říká:
  53. cheap replica watches
    Rolex DateJust watches<BR


  54. jersey říká:
  55. Bohužel Internet Explorer tuto vlastnost nezná, zná však špatně vlasnost height, se kterou nakládá stejně jako rozumné dd


  56. replica watches říká:
  57. cartiervacheron constantin


  58. gucci říká:
  59. Thank you .gucci bags sale gucci gucci handbags cheap gucci bags


  60. dsfds říká:
  61. christian louboutin sale


  62. johnhand říká:
  63. Tom Penny and Antwian Dixon. Apart from a large fan base compromising skateboarders, supra vaider high tophas also aught the attention of the music industries big names such as Jay-Z, Justin Timberlake and Lil Wayne. supra vaider black high boots, it is the main creative recreation sneakers teal we push in our online shop these days.


  64. johnhand říká:
  65. Check out our new models, you can have your own Timberland boots mailed right to your door a few seconds from now. What are you waiting for? timberland boots uk.
    timberland boots were created closely and carefully designed to provide its wearer with comfort and protection necessary for outdoor activities.they continuetimberland Shoes to adjust how and with what materials boots are made.


  66. Dream World říká:
  67. This is my first time i visit here. I found so many interesting stuff in your blog especially its discussion. From the tons of comments on your articles, I guess I am not the only one having all the enjoyment here! keep up the good work.Jewish Directory Hot Fix Motif Catering Service Home Gift


  68. sdfsd říká:
  69. gucci bags sells Designsfsgjulreer


  70. Gucci Outlet říká:
  71. Thank you very much.gucci bags sale gucci gucci handbags cheap gucci bags http://www.guccis.net


  72. hollister uk říká:
  73. hollister uk good think


  74. UGG Classic Tall Boots říká:
  75. [url=http://www.uggboots5815.com]UGG Boots,UGG Boots 5815[/url] [url=http://www.uggboots5815.com]UGG Classic Boots,UGG Boots Classic Tall[/url] [url=http://www.uggboots5815.com]UGG Classic Tall Boots,UGG Boots 5815[/url]


  76. UGG 5825 říká:
  77. UGG Boots 5163, 03.


  78. UGG 5825 říká:
  79. UGG Classic Short Boots --


  80. UGG 5825 říká:
  81. ghd hair straighteners, ghd styler 9990


  82. Gucci Handbags říká:
  83. Gucci Handbags,Gucci Bags --


  84. Gucci Handbags říká:
  85. UGG Boots,UGG Classic Boots -/-


  86. UGG Classic Tall Boots říká:
  87. http://uggboots5815.com http://uggboots5815.com http://uggboots5815.com http://uggboots5815.com


  88. abercrombie říká:
  89. It's always nice when you can not only be informed, but also engaged! abercrombie fitch


  90. tiffany online říká:
  91. Well said, such a person should be a good sentenceed eyebrow with this as welltiffany outletouiu dsiufnhyshd nmdjsfjiuhnc


  92. Wholesale accessories říká:
  93. This way you have one for fine details,Wholesale Accessories and another for larger fill areas,China Wholesale so you don't have to start and stop in the middle.tattoo machine More than two allows you to switch from one color to another fluidly.


  94. womens ugg boots říká:
  95. Not even as I shook womens ugg boots and trembled uncontrollably in the trenches, did I forget your ugg boots face. I would sit huddled into the wet mud, terrified, as the ugg australia hails of bullets and mortars crashed down around me. WYQ


  96. Wholesale Accessories říká:
  97. This way you Kawasaki ZX-12R have one for fineKawasaki ZX 2 R details,and another for larger fillSuzuki RGV 250 areas


  98. louis vuitton wallet říká:
  99. Online buy Louis Vuitton Outlet at wholesale price from lv handbags online store, 24/7 live service, Free Shipping and accept PayPal.


  100. lv říká:
  101. Cheap Louis Vuitton handbags sale and Cheap Louis Vuitton bags sale and Cheap Louis Vuitton purses sale and Cheap Louis Vuitton luggage sale


  102. UGG Boots říká:
  103. so you don'tUGG Boots Bailey Button have to start and stop in the middleUGG Mini Boots 5854.More than two allows you to switch from one color Corum Replica Watchesto another fluidly.


  104. NFL Jersey říká:
  105. Nice post.Thank you for taking the time to publish this information very useful! I’m still waiting for some interesting thoughts from your side in your next post thanks


  106. Nike Air Jordan říká:
  107. I've been reading a few posts and i'm adding Abercrombie Onlineyour Nike Air Jordan blog to my rss reader , thanks !


  108. Timberland Boots říká:
  109. I admire what you have done here. I like the part where you say you are doing this to Timberland Boots give back but I would assume by all the comments that this is working for you as well.


Zanechte komentář





Můžete použít Texy! formátování.
Pokud se obsah boxů níže mění, zatímco píšete, potom žádné číslice nevyplňujte. V takovém případě antispam funguje, pouze se prohlížeči nepovedlo skrýt tento box.