21. září bude sraz! Od 18.00 v restauraci Tradice v Praze u Anděla
Autor Zpráva
kuxa
Profil
Zdravím,
chtěl bych se zeptat, existuje v CSS něco jako GET parametry?
Například (blbý příklad), když bych chtěl, aby uživatel poslal formem kód barvy, a já mu tu barvu vykreslil, teď bych to udělal PHP souborem a interním CSS skriptem:

index.php
<?
//PHP KÓD
?>
<style>
.barva
 {
  background-color: #<? echo $_POST["barva"] ?>;
 }
</style>
<?
//DALŠÍ PHP
?>

Což mi ale přijde celkem neestetické. Neexistuje pro CSS něco jako toto?

index.php
<?
//PHP KÓD
?>
<link rel="StyleSheet" href="styly.css" type="text/css" media="screen" get="barvicka: <? echo $_POST["barva"] ?>;">
<?
//DALŠÍ PHP
?>

styly.css
/*CSS*/
.barva
 {
  background-color: # get(barvicka);
 }
/*DALŠÍ CSS*/

Vím, že je to kravina :D Ale chci se zeptat, jestli neexistuje něco podobného. Děkuji předem
Keeehi
Profil
kuxa:
Krátká odpověď:
Neexistuje.

Dlouhá odpověď:
Jedinou možností by byla simulace php scriptem, který by generoval css.
<link rel="StyleSheet" href="styly.php?barva=FF0055" type="text/css" media="screen">

styly.php
.barva {
  background-color: #<? echo $_GET"barva"] ?>;
 }
</style>
Taps
Profil
kuxa:
existují obarvovače kódu, viz např. jush - http://jush.sourceforge.net/
mimochodec
Profil
Pomocí htaccessu by nejspíš šlo zařídit, aby se dejme tomu požadavek na "barvy.css?b=ee0000" přesměroval na php, které by ti
.barva { background-color: #ee0000; } vygenerovalo, ale myslím, že je to špatný nápad. Jestli máš info o barvě v php, přiřaď to prostě inline zápisem.
juriad
Profil
Taps:
Tady spíš jde o to, že si uživatel může vybrat svojí barvu schématu webové stránky.
Trejpa
Profil
kuxa:
1) Přejmenuješ soubor stylů na styly.php,
2) uvnitř změníš MIME <?php header('Content-type: text/css'); ?>
3) a můžeš si třeba celé CSS vygenerovat na základě GET.

Ovšem pak narazíš na to, že se CSS soubory kešují, takže budeš obcházet kešováním třeba náhodným číslem nebo jménem uživatele v parametru:
<link rel="stylesheet" href="styly.php?user_1234">.
Keeehi
Profil
Trejpa:
Pokud to má pro stejné parametry generovat pořád stejný stylopis (což podle jeho ukázky ano) tak je naopak kešování správné.
Trejpa
Profil
Keeehi:
Pokud se proměnné mají brát výhradně z GET, tak ano, protikešovací balast potřeba nebude.

Hodil by se v případě, že by se uživatelské proměnné dostávaly do CSS z jiného zdroje na serveru (PHP soubor, databáze).
kuxa
Profil
Jak vás tady tak čtu, tak bude asi nejlepší to vyřešit interně, než zbytečně kvůli jednomu divu překopávat celej CSS soubor
Amunak
Profil
kuxa:
Nevím jak moc ty barvy mají být unikátní, ale jestli máš několik barevných schémat, rozliž je prostě pomocí CSS třídy a jen pomocí PHP doplňuj v HTML správnou třídu. A jestli se to mění hodně, ale hodnot třeba není nějak extrémní množství, můžeš mít přímo <style></style> v tom HTML a jeho obsah generovat pomocí PHP.

Generovat přímo CSS soubory pomocí PHP není sice typické, ale nemá to žádné zásadní problémy.
juriad
Profil
Amunak:
S přichodem CSS preprocesorů to naopak typické může být. Styly se udržují v nějakém SASSu a request zjistí, zda se SASSový zdroják nezměnil, a pokud ano, cachovaný CSS přegeneruje, a následně cachovaný CSS odešle.
Juraj Hajdúch
Profil
Len pre inšpiráciu:

Spracujete si premennu $_GET["barva"] (napr. #ffcc00) do sttylopisu ako CSS premennu a vygenerovany string inkludujete do predmetneho suboru (do tagu <head>):
<?php
// NEZABUDNITE OSETRIT $_GET["barva"] -> htmlspecialchars() a pod.
// NEZABUDNITE NA TO, CO SA STANE AK NEEXISTUJE $_GET["barva"] -> if(isset($_GET["barva"]))
$string = "<style>".PHP_EOL;
$string .= "\t:root {".PHP_EOL;
$string .= "\t\t--own-bg-color: ".$_GET["barva"].";".PHP_EOL;
$string .= "\t}".PHP_EOL;
$string .= "</style>".PHP_EOL;
echo $string;
?>
Vznikne vam toto:
<style>
  :root {
    --own-bg-color: #ffcc00;
  }
</style>
V predmetnom súbore samozrejme mate klasicky stylopis (je jedno ci nalinkovany alebo vlozeny), ale pouzijete v nom nyzvy premennych obsahujucich informacie, ktore prenasate cez $_GET:
<style>
.span{
  color: #ff0000;
  background-color: var(--own-bg-color);
}
</style>
A v predmetnom subore bude mat nasledujuci text cervenu farbu na zltom pozadi:
<span class="span">lorem ipsum</span>

POZOR: Nie som si istý s podporou CSS premenných v jednotlivých prehliadačoch (môj FF v36.0.1 to berie).
mimochodec
Profil
Já vám do toho nechci mluvit, ale nemůžu se zbavit pocitu, že je to trochu překombinované. Ze všeho nejjednodušší mi připadá, kdyby se do html hlavičky přidala sekce css, tam by se phpkem nastavily barvy a je vyřešeno. Ostatní řešení mi připadají spíš jako teoretická cvičení o tom, jak ještě by to šlo provést, ale přínos v tom nevidím žádný.
Juraj Hajdúch
Profil
mimochodec:
Ja som sem chodieval roky a takéto teoretické veci ma v mnohom inšpirovali a veľa naučili, ale súhlasím, že priamym vložením ošetrenej premennej $_GET to príslušného elementu (atribut style prebije ostatné stylopisy) je tá najschodnejšia cesta.
juriad
Profil
Juraj Hajdúch:
Prosím ověř si ty informace, než budeš navrhovat podobně problematické řešení; caniuse.com/#feat=css-variables
Nějaké starší povídání k tématu: www.zdrojak.cz/clanky/nebylo-aneb-promenne-css-prichazeji
Juraj Hajdúch
Profil
juriad:
Prosím ověř si ty informace, než budeš navrhovat podobně problematické řešení; caniuse.com/#feat=css-variables

Prave preto som na to vyslovene upozornil a napisal 'len pre inspiraciu' a som prekvapeny, ze to podporuje len FF. To je naozaj malo na to, aby sa to mohlo nasadit na ostru prevadzku. :(

Diky za link.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0