Tämän koodin olisi tarkoitus tulostaa jotain vihreää, jonka sisällä on tekstiä, mutta vihreää ei tule.
<html> <head><style type="text/css"> #box1{ background-color:green; } </style> </head> <div id="box1">asdas</div>
Ongelma saattaa olla todella aloittelijamainen, koska koodaan pitkästä aikaa css.
Kyllä se toimii. Olet mokaillut jotain testauksessasi. Tyhjennä selaimen välimuisti ja avaa sivu uudestaan.
Koodi toimii testi.php-tiedostossa, muttei index.php:ssa. (nettisivuilla oleva lähdekoodi on 100% sama)
Ainut ero on se, että index.php:hen koodi tulee PHP:n kautta.
Ongelman luulisi nyt ensisilmäyksellä liittyvän siihen, että index.php:ssa tuo html/css-koodi tulostuu sivulle itsemäärittelemäni funktionin kautta.
Toivon että ongelmaan on ratkaisu, ja sanokaa jos tarvitsette jotain lisätietoa.
Jos tuo koodi on oikeasti sivulla, se myös oikeasti toimii. Vika on siis jossain muussa asiassa. Ehkä et ole osannut tulostaa koodia sivulle ollenkaan, tai ehkä et osaa päivittää sivua selaimella ja saat vain jonkin vanhan version.
Jos kerran mielestäsi vika on CSS-koodissa ja ”vihreää ei tule”, näkyykö sivulla siis kuitenkin teksti ”asdas”?
Kyllä se "asdas" näkyy. Kun laitan molemmilla sivuilla "näytä lähdekoodi", koodi on aivan sama. Huomasin nyt testaillessani oudon jutun: vihreä väri ei näy luultavasti, koska php koodi on tämmöinen:
echo' <head><style type="text/css"> #box'.$boxid.'{ '.$box1.' } </style> </head> <div id="box'.$boxid.'">asdas</div> ';
Koodi lakkasi toimimasta, kun lisäsin tuon $box1-variablen. $box1 sisältää merkkijonon
background-color:green;
.
Lopputulos on siis HTML-kielessä ihan sama, mutta onko tämä joku PHP:n bugi vai?
PHP ei vaikuta asiaan, vaan HTML-koodi ratkaisee. Kuitenkin ilmeisesti tulostamassasi HTML-koodissa (ja CSS-koodissa) on jotain eroa, muuten se toimisi oikein.
2h etsimisen jäälkeen taisin löytää syypään..
$box1 on tässä tilanteessa "green".
Se ei ole puhtaasti green, vaan periaatteessa "[tyhjä][tyhjä]green", koska käytän yhdessä vaiheessa koodia:
<?php $box1[0] = ""; $box1[1] = "";
, kun $box1 on muodossa "cogreen".
Jos en käytä noita yllä mainittuja koodeja, tulee CSS:ässä "background-color:cogreen". Miten saan väännettyä $box1 arvoksi "green" "cogreen"istä? Yritin säätää jotain for-silmukalla mutten onnistunut.
$box1 = substr($box1, 2);
btw - suosittelisin välttämään kaikenlaista inline css:ää. Jos oikein ymmärsin tarkoituksesi ja haluat värjätä elementin tiettyjen ehtojen mukaan, tee 2 erillistä classia, näille eri css-ominaisuudet ja laita php vain muuttamaan classin nimi koodista.
Tuossa onnistut sijoittamaan tekstiin nollatavuja, jotka ovat laittomia HTML:ssä ja monissa muissakin kielissä. Näet ne esimerkiksi funktiolla json_encode: "\u0000\u0000green".
henkkeli kirjoitti:
$box1 = substr($box1, 2);
Ei ei ei ei ei. Ei mitään helvetin purkkaa. Jos merkkijonossa on jotain roskaa, niin pitää olla lisäämättä sitä roskaa - ei myöhemmin kikkailla jotta sen saisi jotenkin leikeltyä pois.
JuustoPala kirjoitti:
Miten saan väännettyä $box1 arvoksi "green" "cogreen"istä?
if ($box1 === "cogreen") { $box1 = "green"; }
Aihe on jo aika vanha, joten et voi enää vastata siihen.