One feature designers often wished they had with style sheets are constants –- the chance to define something once and reuse it over and over in the style sheet document. This article shows some techniques for how to achieve that and discusses their pros and cons.
There is no end to the usefulness of this approach. We can reuse cookie data or grab selector names from a database or a parsed document. We could allow an XML notation for the CSS and turn it into valid CSS on the fly.
An example of how to use parameters sent to the page could be to allow visitors to define a width of the content:
<?php
header('content-type:text/css');
header("Expires: ".gmdate("D, d M Y H:i:s", (time()+900)) . " GMT");
// grab the parameter w and set the variable w to its value
// if the parameter is not an integer, set w to 740
$w=740;
if(isset($_GET['w']))
{
$w=preg_match('/(\D)/',$_GET['w'])?$w:$_GET['w'];
}
/* Company Colours */
$blue='#369';
$green='#363';
$lgreen='#cfc';
?>
#boundary{
width:<?php echo $w;?>px;
}
ul#navigation{
background:<?php echo $blue;?>;
color:#fff;
}
h1{
border-bottom:1px solid <?php echo $green;?>;
}
Or we can apply different color schemes according to the section:
<?php
header('content-type:text/css');
header("Expires: ".gmdate("D, d M Y H:i:s", (time()+900)) . " GMT");
$self=$_SERVER['PHP_SELF'];
/* Colour schemes */
if (preg_match('/aboutus/',$self))
{
// About us
$colour1='#369';
$colour2='#69c';
$colour3='#9cf';
}
else if (preg_match('/clients/',$self))
{
// Clients
$colour1='#963';
$colour2='#c96';
$colour3='#fc9';
}
else if (preg_match('/downloads/',$self))
{
// Downloads
$colour1='#693';
$colour2='#9c6';
$colour3='#cf9';
}
?>
ul#navigation{
background:
<?php echo $colour1;?>;
color:#fff;
}
h1{
border-bottom:1px solid
<?php echo $colour3;?>;
color:
<?php echo $colour2;?>;
}
Each of these examples requires the maintainer of the site to know about PHP, and may give her the chance to break it or add unsafe code. If we want to ensure that we have something like CSS constants with a less steep learning curve and less power to the maintainer, we can parse a CSS file with PHP.