Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
Classe que cria o style do seu site ;)
<?php
class css {
public $css = "";
public function build( $name, $property, $value, $show ) {
define("NAME", "$name");
define("PROPERTY", "$property");
define("VALUE", "$value");
if($show == true):
$this->css = "<style>".NAME." { ".PROPERTY.":".VALUE."; }</style>";
else:
$this->css = "".NAME." { ".PROPERTY.":".VALUE."; }";
endif;
}
public function start( $name ){
return "<style> ".$name." {";
}
public function create( $property, $value ){
return $this->css = "{$property}:{$value};";
}
public function close(){
return " } </style>";
}
}
//apenas uma propriedade:
$css = new css();
$css->build("#div", "color", "#CCC", true); //imprimi p { border:1px solid #CCC; }
echo $css->css;
//multiplas propriedades:
$css_2 = new css();
echo $css_2->start("#div");
echo $css_2->create("background", "#EEE"); //imprimi #div {background:#EEE;border:1px solid #CCC; }
echo $css_2->create("border", "1px solid #CCC");
echo $css_2->close();
?>
<div id="div">Deu certo !</div>Obrigado pelas dicas na próxima atualizo tudo ;)
@EDIT:
fiz rapidamente aqui oque você me falou e ficou com código menor e mais bonito obrigado:
<?php
class css {
public function addSelector($name) {
echo "<style> {$name} {";
return $this;
}
public function addRules( $property, $value ) {
echo "{$property}:{$value};";
return $this;
}
public function CloseSelector() {
echo "} </style>";
return $this;
}
}
$css = new css(); -> CloseSelector();
?>eu pessoalmente não gosto, e nem vejo utilidade nesse tipo de coisa.
Ok, e qual a aplicabilidade ?
Um cara de FrontEnd nem sabe(na maioria das vezes), programar php. Então torna-se dificil q você explique pra ele como usar essa class.
além doq, css deve ser colocado numa arquivo externo. Por vários motivos.
Outra coisa q não curti, foi esse fechamento assim.. tendo q instanciar um novo objeto a cada seletor css.
Pense em usar o método toString(), para só colocar o <style></style> no final de todos os seletores e regras mesmo.
bacana pelo estudo.. só não serve para o "mundo real".
As únicas aplicações para essa classe seriam se o método que montar o CSS, fizer mais do que apenas montar, como minimizar no final.
E tambémpara criação de CSS dinâmicos, com por exemplo, definição de corpo e famílias de fontes com base numa preferência do usuário (mesmo que o layout fique uma nhaca).
Aqui onde estou temos um script em ruby que roda depois de cada pull do git, para fazer o minify.
Desnecessário esse 'closeSelector', joga ele no
__destruct
, fica melhor mesma coisa vale pro __construct adicionando a tag '<style>', o seletor não tem nada haver com o elemento style.
Isso aí funciona? o.O
Olha, define() não se usa com Orientação a Objetos. Constantes de classe se define com a palavra-chave const e ficam fora de quaiquer métodos.
Fora que, tanto define() quanto const, criam uma CONSTANTE, isto é, um valor que não muda, não pode mudar e jamais poderá. Por isso que não pode atribuir variáveis à elas.
Se não viu nenhum erro ao fazer isso, ou seus alertas estão muito baixos (ou desativados) ou você conseguiu tapear o interpretador com a variável dentro de aspas duplas (string interpretável).
Fora isso, você poderia fazer de forma mais eficiente.
Veja, se você fizesse:
Você criaria os seletores separadamente às regras, armazenaria tudo numa matriz e depois com um único loop montava tudo.
Usando Fluent Interfaces, seu código ficaria ainda mais bonito e eficiente:
$css -> addSelector( '#div' )
-> addRules( 'background-color', '#FFFF00' )
-> addRules( 'border','1px solid yellow' );
No caso o método addRules() usaria o seletor anteriormente criado. Mas claro que você também poderia oferecer a possibilidade de se escolher o seletor, talvez brincando com func_num_args() / func_get_args().
E você poderia adicionar a possibilidade de recursão também, onde os índices de um possível array seriam as propriedades e os valores, os valores (duh):
$css -> addRules( array( 'background-color' => '#FFFF00', 'border' => '1px solid yellow' ) );