Paveiksliukų ir teksto lygiavimas CSS pagalba

VienasNe kartą esu sakęs ir pasikartosiu darkart: CSS yra GĖRIS! Deja atrodo, kad ne visi tą gėrį pažįsta bei išnaudoja. Vienas mano dažniausiai pastebimų dalykų yra paveiksliukų lygiavimas tekste.

Vietoj to, kad tekstas „apsivyniotų“ aplink paveiksliuką kaip matome pirmame pavyzdyje, dažnai jis yra tiesiog rašomas virš, po, arba tiesiog iš šonų, kaip matome antrame Du pavyzdyje.

Žinoma, visa tai yra skonio reikalas, bet man asmeniškai pirmas variantas kur kas priimtinesnis, todėl papasakosiu kaip tai padaryti.

O daroma tai itin paprastai. Prie standartinio paveiksliuko kodo, kuris atrodo maždaug taip:

<img src=”paveiksliukas.jpg” alt=”Paveiksliukas” />

Tereikia pridėti truputį CSS kodo:

<img src=”paveiksliukas.jpg” alt=”Paveiksliukas” style=”float:left;margin-right:5px;” />

Panaudojus ši kodą, paveiksliukas bus sulygiuotas į kairę, dešinėje pusėje paliekant 5px tarpą iki teksto. Norint jį sulygiuoti į dešinę, kaip pirmame pavyzdyje, kodas atrodytų taip:

<img src=”paveiksliukas.jpg” alt=”Paveiksliukas” style=”float:right;margin-left:5px;” />

Taip pat svarbu žinoti, kad paveiksliuką, aplink kurį bus „vyniojamas“ tekstas, reiktų dėti paragrafo pradžioje, o ne gale.

Na, o paskutinis dalykas, kurį reiktų žinoti, yra tai, kad paveiksliuką įdėjus įrašo pabaigoje bei pritrūkus „vyniojamo“ teksto, į viršų „sulips“ viskas, kas eina po įrašu (komentarai ir pan).

Tai išsprendžiama gan paprastai, tiesiog įrašo gale įterpkite šiek tiek „paturbintą“ break žymelę:

<br style=”clear:both;” />

Šis sprendimas turėtų veikti beveik visuose tinklaraščiuose ar svetainėse. Problemų gali kilti tik jei naudojate kokį mandrą šabloną, kuriame jau aprašytas paveiksliukų santykis su tekstu.

Gal sudomins?

38 Comments

  1. Horde rašo:

    Visiškai pritariu, kad CSS yra gėris. Tiek su HTML nepadarysi, kiek su CSS – ir dar kodas kelis kart sutrumpėja.

  2. Karolis Pocius rašo:

    Priminei, kad pamiršau paminėt jog dar galima ir į failą tas taisykles apsirašyt, o paskui tik klases naudot. Nors pradžiai gal užteks. Kada nors papasakosiu plačiau. Arba tu galėsi papasakot ;)

  3. Denis rašo:

    Na, o kodėl nepanaudojus šioje vietoje [img src="" align="left/right"] ir [br clear="left/right/all"] tam pačiam tikslui pasiekti?
    CSS čia ir ilgesnis ir bjauresnis atrodo…

    Taisa: tavo komentaruose yra filtruojami tagai. Negražu, man teko rinkti naujai. Vietoj filtravimo, taisyklinga būtų tiesiog ekranuoti, t.y. rodyti kaip įvesta.

  4. Ričardas Š. rašo:

    Wordpress kuriant šablonus jau yra nustatytos klasės, tik reikia jas tinkamai CSS faile aprašyti. Ir tada dedant paveiksliuką į tekstą pažymėjus jo meniu centrauoas, dešinė, kairė ir pan. pagal atitinkamą klasę pasidarys.

  5. Karolis Pocius rašo:

    Denis, o kaip su HTML padarysi tarpus? &nbsp; dėsi? O komentaruose galima &lt; ir &gt; naudoti, juk negaliu atspėt kiekvieno skaitytojo norų: kas nori kodą parašyt, o kas gražiai komentarą apipavidalint.

    Ričardai, ne visose temose (šablonuose) tos klasės aprašytos būna.

  6. Ričardas Š. rašo:

    O man kažkaip atrodė, kad pačioje TVS taip jau nustatyta, bent jau sukurtos. Matyt, kažką sumaišiau. :)

  7. Mantvydas rašo:

    Hmm…man kažkaip ant wordpress automatiškai taip gaunasi(1)…gal čia taip naudojant funkcija (centras, kairė, dešinė)

  8. Paulius rašo:

    Denis, img atributas ALIGN yra nebenaudojamas ir nebepalaikomas nuo HTML 4.01, o juo labiau XHTML.
    Karoli, float yra gerai, ypač paveikslėliams, tačiau neretai float’u yra pradedama piktnaudžiauti, ko pasekoje galima gauti ne itin malonių ir tikėtinų rezultatų.

  9. Paulius rašo:

    Beje, pirmame paveikslėlyje panaudotas float: right, o ne float: left.
    Taip pat derėtų prisiminti, jog dėliojant kelis elementus vienas po kito su float: right, jie bus rodomi atvirkštine tvarka, nei užrašyta :)

  10. Karolis Pocius rašo:

    Mantvydai, aš niekad WYSIWWYG WordPress’e nesinaudojau, tad ir tos funkcijos nebandžiau, bet jei taip paprasčiau tai dar geriau. Tiesa, atrodo, kad žmonės net ir to nenaudoja.

    Pauliau, aš float’ais ir nesiūlau piktnaudžiaut — vieną kitą paveiksliuką įraše pozicionuot tai ne piktnaudžiavimas. O apie pašalinius efektus žinau, tam ir šiokį-tokį išsisukimą su break žymele įdėjau.

  11. Denis rašo:

    Karolis Pocius 2008-12-08 16:03 rašė:
    Denis, o kaip su HTML padarysi tarpus? &nbsp; dėsi?

    Tai yra ilgesnė tema – tau reikėtų arba išmokti naudotis visu HTML ir CSS arba nedaryti iš „style=float:left“ stebuklo. CSS yra gėris ne todėl. O dabar tu sužinojai kažkokią smulkmeną, kuri realiuose CSS panaudojimose nenaudojama ir džiaugiesi „CSS yra gėris“. Taip pat galiu pasakyti, kad „HTML yra gėris, nes galiu parašyti <img align=left>“.

    Karolis Pocius 2008-12-08 16:03 rašė:
    O komentaruose galima &lt; ir &gt; naudoti, juk negaliu atspėt kiekvieno skaitytojo norų: kas nori kodą parašyt, o kas gražiai komentarą apipavidalint.

    O kaip tu filtruoji tagus? Tai taip ir daryk – leisk a, blockquote, em, strong, palik galimybę parašyti &lt;, bei likusius tagus neiškirpinėk, o ekranuok.

    Paulius 2008-12-08 19:06 rašė:Denis, img atributas ALIGN yra nebenaudojamas ir nebepalaikomas nuo HTML 4.01, o juo labiau XHTML.

    Pauliau, tu net kažką girdėjai, šaunu! :)
    O dabar paaiškink man, paprastam neišmanėliui – kuo čia dėtas XHTML?
    Ir dar – kas tau pasakė, kad šis puslapis yra HTML 4.01?
    O tokiu atveju – kuo „style=”float:left”“ yra geriau už „align=left“? Tuo, kad ilgiau?

    Apibendrinsiu – šis puslapis nieko bendro su XHTML neturi. Jis nėra ir niekada nebuvo XHTML. Jis net nėra HTML 4.01. O didžiausia paslaptis? Tai nesvarbu!
    Nereikia klausytis tuščių „a, align yra blogis“, kai pats nesupranti ką daro Doctype ir Content-Type, kaip yra parsinamas kodas naršyklėse ir kuo skiriasi HTML 4.01 nuo 3.2.
    Nereikia šokti į traukinį „girdėjau, kad CSS yra kietai“, kai neišmanai, kaip CSS taikomas.
    Tobulėti ir judėti pirmyn – labai gerai. Taip ir toliau. Bet nediskutuokite šitomis temomis, tiesiog pasiklauskite kolegų, kurie tai išmano. Nes viskas jau seniai sugalvota. Iki jūsų. Ir iki manęs.

    Beje, Karoli, aš bijočiau taip filtruoti HTML. Vieną dieną kažkas visgi įmes XSS pro filtrus…

  12. Denis rašo:

    Gyvybingas pavyzdys.
    Ar žinote, kad tai:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <title>foo</title>
    <img align=left src=foo alt=foo>

    yra visiškai tvarkingas HTML 4.01? Netikite? Eikite patikrinti. Patys. Su tikru validatoriumi.

  13. Dominykas rašo:

    Šiaip jau turiu pritarti paskutinei Denis žinutei. Ypač dėl BR su clear: both :) Nu gražus hack’as, bet jeigu jau taip nemėgstam “align” (ne todėl, kad blogai, o todėl, kad prezentaciją/išvaizdą turi valdyti CSS, o HTML turi tik sužymėti semantinę prasmę), tai ta pati taisyklė turi galioti ir BR tag’ui – t.y. jo turi nebūti post’o gale (o pvz visi post’ai naudoja clear: both, arba jeigu gudrus darbininkas – clearfix CSS hacką).

    Pauliau, XHTML transitional (kurį Karolis nurodęs kaip doctype) labai puikiai supranta IMG su ALIGN.

  14. Žemas įėjimo slenkstis…

    I found your entry interesting do I’ve added a Trackback to it on my weblog :)…

  15. Denis rašo:

    Nežinau, kaip veikia Trackback, man jo nusiųsti nepavyko, tad siunčiu rankiniu būdu.

    Parašiau nedidelį įrašą apie HTML žemą įėjimo slenkstį. Nieko žeidžiančio, bet susiję su tema.

    Dominykas 2008-12-08 21:05 rašė:
    Pauliau, XHTML transitional (kurį Karolis nurodęs kaip doctype) labai puikiai supranta IMG su ALIGN.

    Tai kad tai nėra joks XHTML. Tai net ne HTML. Tai šioks toks SGML, kuris parsinamas kaip tag soup ir niekas kita. ,)

  16. Karolis Pocius rašo:

    Denis, aš nelabai suprantu ką tu turi galvoje sakydamas „filtruoti“ ir „ekranuoti“. O dėl šio įrašo, tai aš nepateikinėju jo kaip kažkokios absoliučios tiesos. Dalinuosi skaitytojais tuo, ką moku pats. Galbūt tai neteisinga, tad labai dėkoju už pataisymus, tikiuos skaitytojai nepatingės perskaityti ir komentarų bei teisingai pasirinkti ką daryti toliau.

  17. Denis rašo:

    Na, man kažkodėl šovė į galvą, kad tu pats tvarkai komentarų apdorojimo kodą. Nekreipk dėmesio.

    O dėl įrašo – aš nekritikuoju tavęs, nepyk. Tu fainas. :)
    Tiesiog nesidrovėk šiuo atveju naudoti align=left vietoj style=”float:left”. Juk paprasčiau ir gražiau.
    O tarpas – teisingai, margin lengviau nustatyti style pagalba, nei &nbsp;ais. ,)

  18. Jonas rašo:

    Totaliai nepagaunu Denio minties dėl align. Juk su align paveikslėlis neužima iškart kelių eilučių ir neapgaubia teksto, o tik guli vienoje savo eilutėje. Estetiškai float gražiau.

  19. Karolis Pocius rašo:

    Denis, aš ne iš tų žmonių, kurie pyksta taisomi. Juolab, kad tavo tiesa :) Aš va ir pats įsikalęs į galvą, kad stiliui aprašyti reikia naudoti CSS išskirtinai, nors tuo pat metu ignoruoju vieną esminių CSS privalumų ir rašau jį tiesiai į HTML. Tai iš esmės align=left išties yra paprasčiau parašyt, nors tvarkingumo dėlei aš vistiek linkęs naudot arba vieną arba kitą.

    Jonai, tiesą sakant aš align turbūt nesu naudojęs tai net nežinau koks rezultatas gaunas. Jei tavo tiesa, reiškia mano tiesa, t.y. Denis netiesa :)

  20. Denis rašo:

    Jonas 2008-12-08 22:08 rašė:

    Totaliai nepagaunu Denio minties dėl align. Juk su align paveikslėlis neužima iškart kelių eilučių ir neapgaubia teksto, o tik guli vienoje savo eilutėje. Estetiškai float gražiau.

    O tu pabandyk.

  21. Karolis Pocius rašo:

    Denis, tavo trackback buvo į spam nuėjęs. Išgriebiau aš jį iš ten :)

  22. Įdomus straipsniukas. Pravers..

    Aš Tavo dienos įrašus Karoli, gaunu emailu.. Pamačiau kai ką, ką Tavo email update servisas prie laiško prideda.. :) Žinai, kas mane labai “žudo” (juokina)?… Ogi šitas:

    You are subscribed to email updates from Karolis Pocius
    To stop receiving these emails, you may unsubscribe now.

    If you prefer to unsubscribe via postal mail, write to: Karolis Pocius, c/o FeedBurner, 20 W Kinzie, 9th Floor, Chicago IL USA 60610
    :D
    Koks keistuolis, gali unsubscribe’inti via postal mail? Pl…. bet dar sugalvok taip… :D

  23. @Darius: ne Karolis gi sugalvojo paštu duoti galimybę prenumeratos atsisakyt, o Feedburner tarnyba, tad nors ir keistai atrodo, bet matyt jie turėjo tam pagrindo. Galbūt dėl tokių el. pašto vartotojų, kurie naudoja tarnybas, kurios atspausdina el. paštu gautus laiškus ir siunčia juos tikru paštu ar faksu vartotojui. Tad jis realiai neturi galimybės nei nuorodų paspaust, nei emailo atrašyt…

    Dėl CSS, tai CSS nėra joks gėris, o tiesiog patogus būdas atskirti semantiką nuo išvaizdos. Su float’as prisižaisti realiai neįmanoma gerai suprantant, kaip jie veikia. Nenaudojant align kito būdo paveiksliuką lygiuoti į vieną ar kitą pusę juk ir nėra, t.y. float’as būtent tam ir skirtas.

    Dėl teksto atitraukimo nuo paveiksliuko dar galima naudoti ne tik nbsp;, o ir vspace bei hspace atributus.

    @Denis:

    Denis 2008-12-08 20:37 rašė:

    Gyvybingas pavyzdys.
    Ar žinote, kad tai:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
    <title>foo</title>
    <img align=left src=foo alt=foo>

    yra visiškai tvarkingas HTML 4.01? Netikite? Eikite patikrinti. Patys. Su tikru validatoriumi.

    Todėl, kad jis Transitional. HTML 4.01 Strict nebūtu validus.

  24. lfx rašo:

    Deni, pas Karolį aprašyta xhml schema (
    . Todėl būtent jo pavyzdys tinkamas (būtent čia).
    O tavo pvz veikia, bet tie kalbos elementai yra pasenia. Tokių dalykų naudojimas iš esmės trukdo geresniems produktams išlįsti į šviesą :P

  25. Karolis Pocius rašo:

    Tomai, vspace ir hspace iš abiejų pusių atitraukia, tad to paties rezultato nepasieksi.

    lfx, matos, kad nebuvai Denio pranešime BarCamp’e — aš jau žinau ką jis tau pasakys dėl tų „trukdo geriems produktams“, bet gal aš jam pačiam leisiu pasireikšti :)

  26. Denis rašo:

    Tomas Markauskas 2008-12-09 02:54 rašė:Todėl, kad jis Transitional. HTML 4.01 Strict nebūtu validus.

    O tu Dieve mano, tiesa! Kaip aš to nesupratau?
    O dar jis validus todėl, kad jame yra title tagas. Ir kas iš to? Mano komentaro prasmė buvo – align atributas nėra blogas, jis net validus. Stricte – ne, bet kuo čia dėtas strictas? Kas tau pasakė, kad reikia lygiuotis į strict, kai Karolio puslapis ne tik, kad ne strict 4.01, bet net ne transitional 4.01?

    lfx rašė:Deni, pas Karolį aprašyta xhml schema (
    . Todėl būtent jo pavyzdys tinkamas (būtent čia).

    O tu susimąstei, kokia jo prasmė? Ar susimąstei, kad visos naršyklės tą schemos aprašymą ignoruoja kaip „aj, čia kažkoks brudas mėtosi“, ir tik IE sako „pereisiu į griežtesnį režimą“, į kurį jis pereitų ir su HTML 3.2 schemos aprašymu?

    lfx rašė:O tavo pvz veikia, bet tie kalbos elementai yra pasenia. Tokių dalykų naudojimas iš esmės trukdo geresniems produktams išlįsti į šviesą

    Geresniems produktams išlįsti į šviesą trukdo aklas madų sekimas, nesupranant dalykų esmės.

    O tavo pvz veikia, bet tie kalbos elementai yra pasenia. Tokių dalykų naudojimas iš esmės trukdo geresniems produktams išlįsti į šviesą

    lfx, matos, kad nebuvai Denio pranešime BarCamp’e — aš jau žinau ką jis tau pasakys dėl tų „trukdo geriems produktams“, bet gal aš jam pačiam leisiu pasireikšti :)

  27. lfx rašo:

    Ko gero nebuvau, buvau kažkur kitur :)
    Bet yra standartai kuriais reikia vadovautis, tam ir yra standartai. Žinoma, kai nesilaikoma jų html’e tai naršyklių gamintojai ir sako “o kam mums vadovautis standartais jei jais niekas darydamas html nenaudoja” Taip ir gaunas užburtas ratas.
    Čia panašiai kaip su KET ir jų laikimosi Lietuvoje…

  28. Mantvydas rašo:

    Bet kas juokingiausia ir linksmiausia jog tokia nekalta tema išplieskė tokias diskusijas :) Kaip kas moka taip tas šoka, bet įrašas geras, kadangi kaip matom į tai reikėjo atkreipti blogerių dėmesį.

  29. Karolis Pocius rašo:

    Taip, kaip tik ką tik su kolega šnekėjau, kad rimtos temos susilaukia trijų komentarų, o kai parašai kažką paprasto ir tikiesi tų trijų, gauni 30 :)

  30. Denis rašo:

    lfx 2008-12-09 12:06 rašė:Bet yra standartai kuriais reikia vadovautis, tam ir yra standartai. Žinoma, kai nesilaikoma jų html’e tai naršyklių gamintojai ir sako “o kam mums vadovautis standartais jei jais niekas darydamas html nenaudoja” Taip ir gaunas užburtas ratas.
    Čia panašiai kaip su KET ir jų laikimosi Lietuvoje…

    Jis jau nesilaiko standartų, tad koks skirtumas?

  31. lfx rašo:

    Deni, o kodėl negali pradėti laikytis kūrėjai, o jų pavyzdžiu pradėtu sekti ir gamintojai. Beje FF3b ten kažkuris ir Opera nauja ir net IE8B jau labai stipriai nuėjo link Acid testų. Tai tau nieko nesako?
    Pagal tokią logiką, man važiuojant keliu ir nereikia laikytis KET nes yra tokių, kurie jų nesilaiko? Valdžia ima kyšius, tai man ir imti (nors neįsivaizduoju kas man juos galėtu duoti?:)) ). Su tokiu požiūriu toliau visiškas kolapsas.

    Prisidėjimas prie standartų laikimosi, bet jau vienas iš žingsnių gerinat webdeveloperių gyvenimą. Ar tu IE nekeiki? :)

  32. manoakys rašo:

    O inline css irgi gėris?

  33. Karolis Pocius rašo:

    Jei inline CSS būtų blogis, jis nebūtų sukurtas (čia taip idealistiškai) :) O jei rimtai, mano asmeninė nuomonė yra tokia, kad visas CSS yra gėris jei teisingai, saikingai, laiku, ir vietoj naudojamas.

  34. manoakys rašo:

    Sutinku su žodžiu saikingai :)
    Mano nuomone, inline CSS turėtų būti naudojamas tik tada, kai tsi yra išimtis iš taisyklės. T.y. visas bendras stilius aprašomas css faile, o jau jei ten kokios nors išimtys, pakeitimai ar vienetiniai atvejai – inline į trasą :)

  35. Denis rašo:

    lfx rašė:Deni, o kodėl negali pradėti laikytis kūrėjai, o jų pavyzdžiu pradėtu sekti ir gamintojai.

    Karolio blogo šablonas yra parašytas ne pagal standartus. Taip kad jo atveju nebėra prasmės vienos vietos daryti labiau tvarkingos, nei kitos.
    O svarbiausia – Transitional nėra blogis.

    lfx rašė:
    Beje FF3b ten kažkuris ir Opera nauja ir net IE8B jau labai stipriai nuėjo link Acid testų. Tai tau nieko nesako?

    … Kaip tai susiję su pokalbio tema ir mano teiginiais, atleiski? Dar vienas toks nukrypimas ir nebematysiu prasmės su tavimi diskutuoti.

    Gal tu nori paaiškinti, kodėl tavo, tokio viso tvarkingo, puslapis yra apgailėtinas standartų prasme, o mano – tobulas?

    Inline CSS, mano nuomone, neturi būti naudojamas viešose svetainėse.
    Testuojant – taip. Redaguojant jau ir taip prišiukšlintą šabloną, kaip šis (be pykčių, mano tumblr šablonas irgi blogas) – taip. Bet tikslingai, „išimtys“ ar „vienetiniai atvejai“ – ne. Jeigu žmogus mano, kad jo paveiksliuko pozicianavimo atvejis yra vienetinis, tai, matyt, jis tiesiog tingi padaryti viską tvarkingai. Suprantu, man taip irgi būna. Bet inline CSS nenaudoju.

  36. Denis rašo:

    Ak, ne tą lfx puslapį įdėjau į komentarą. Tačiau ir sodonis.lt yra nevalidus, kad ir koks mažiukas ir paprastas bebūtų… Kodėl?

  37. lfx rašo:

    Nes savo blogu nesiekiu savęs “parduoti”. Nors gėda, kad nevalidus templeitas, žadėjau atsinaujinti jį jau porą kartų, bet..
    Anyway pas tave html4, ar neatrodo, kad truputėli tai jau praeitis? Nors lyginat tiek tavo ar mano su xhtml gaunama nemažai klaidų. Bet aš pasitaisysiu :)

  38. Denis rašo:

    lfx 2008-12-10 05:55 rašė:
    Anyway pas tave html4, ar neatrodo, kad truputėli tai jau praeitis? Nors lyginat tiek tavo ar mano su xhtml gaunama nemažai klaidų. Bet aš pasitaisysiu :)

    Aš netenku amo. Kas tau pasakė, kad HTML 4 yra praeitis? Kas tai per nusistatymas? Kita versija yra HTML 5, ir ji dar nėra išleista, jos yra tik pradiniai draftai, planuojami relyzii bus apie 2010-2012 metus.
    O XHTML – parodyk man bent vieną iš tau artimų puslapių, kurie būtų tikri XHTML. Ir paaiškink to tiesioginę naudą prieš HTML. Dėkui.

Leave a Reply