在页面加载时使用php生成随机背景颜色的最佳方法

时间:2014-01-08 19:07:30

标签: php random colors background pageload

我正在尝试创建一些在页面加载时生成随机背景颜色的代码,但也会输出一些颜色取决于背景颜色的文本。 EG如果背景颜色较暗,则会显示浅色文字。

到目前为止,我已经创建了以下内容,但是我不确定这是否是实现它的最佳方式。

我创建了一个数组,随机决定背景颜色应该是浅色还是暗色,并且这样做了所以我可以根据$ scheme设置两种备用字体颜色。我确定会有一种更有活力的方法来做到这一点吗?

然后我又设置了两个阵列,列出了暗和亮方案的多种颜色,并使用elseif语句输出相关的css。

关于这一点,我想查询一下:

1)为什么数组中的最后一个字符串永远不会输出?它使得我必须在每个数组中添加一个空字符串,这样就不会省略前一个字符串。

2)实现这一目标的最佳实践是什么,以及最具活力的方法。

<?php
header("Content-type: text/css; charset: UTF-8");


$input = array("dark", "light", "");
$rand_keys = array_rand($input, 2);

$scheme = $input[$rand_keys[0]];


if ($scheme == "dark") {

$darkBg = array('212a34', '383838', '000');
$rand_keys_1 = array_rand($input, 2);

$bg_colour = $darkBg[$rand_keys_1[0]];

echo 'body {background-color:#' . "$bg_colour" . '}';
echo 'h2 { color:#fff; }';

}

elseif ($scheme == "light") {

$lightBg = array('ebecee', '31a989', 'fff');
$rand_keys_2 = array_rand($input, 2);

$bg_colour = $lightBg[$rand_keys_2[0]];

echo 'body {background-color:#' . "$bg_colour" . '}' ;
    echo 'h2 { color:#000; }'; 

}

else { echo 'body {background-color: #ef3c39;}'; }


?>

//应该注意到,它将是预定义的颜色列表

3 个答案:

答案 0 :(得分:0)

这样可以解决问题:

echo dechex(mt_rand(0, 0xFFFFFF));

如果您想从一组已知颜色中随机选择,请执行以下操作:

$colors = array($color1, $color2);
echo $colors[array_rand($colors)];

答案 1 :(得分:0)

正如Dagon所说,对于用户界面来说这听起来像是一个可怕的想法但是我会这样做:

//starts off with dark text
$textcolor = '222222';

$rand1 = rand(0,255);
$rand2 = rand(0,255);
$rand3 = rand(0,255);

$bgcolor = sprintf("%02X",$rand1) . sprintf("%02X",$rand2) . sprintf("%02X",$rand3);

$total = $rand1 + $rand2 + $rand3;
//if total is less than 400 it is most likely a darker color unless one or more color is accounting for most of the 400
if($total < 400 && $rand1 < 180 && $rand2 < 180 && $rand3 < 180) {
    $textcolor = 'dddddd';
}

与背景相比,它不是完美的,但99%的时间是可读的。

答案 2 :(得分:0)

对于任何有兴趣的人,我已经找到了一个更好的方法来减少代码量,获得更好的随机分布以及更具动态性。

<?php

$bgColours = array(

"414245"=>"dark", //one
"333333"=>"dark", //two
"e25359"=>"dark", //three
"ebeced"=>"light", //six
"edd6b4"=>"light" //seven

);

$bgColour = (array_rand($bgColours,1));

$colourScheme = $bgColours[$bgColour];

if ("$colourScheme" == "dark") {

 echo 'body {background-color:#' . "$bgColour" . '}';
 echo 'h2 { color:#fff; }';
}

elseif ($colourScheme == "light") {

echo 'body {background-color:#' . "$bgColour" . '}' ;
    echo 'h2 { color:#333333; }'; 

}

else  { echo 'body {background-color: #ef3c39;}'; }

?>