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

在页面加载时使用php生成随机背景颜色的最佳方法,php,random,colors,background,pageload,Php,Random,Colors,Background,Pageload,我试图创建一些代码,在页面加载时生成一个随机的背景颜色,但也会输出一个颜色依赖于背景颜色的文本。例如,如果背景颜色为深色,它将显示浅色文本 到目前为止,我已经创建了以下内容,它是有效的——尽管我不确定这是否是实现它的最佳方式 我创建了一个随机决定背景颜色是浅还是暗的数组,这样我就可以根据$scheme使用两种可选的字体颜色。我相信会有一个更具活力的方式来做到这一点 然后,我又设置了两个数组,列出了暗模式和亮模式的多种颜色,并使用elseif语句输出相关css 关于这一点,我想问几个问题: 1)

我试图创建一些代码,在页面加载时生成一个随机的背景颜色,但也会输出一个颜色依赖于背景颜色的文本。例如,如果背景颜色为深色,它将显示浅色文本

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

我创建了一个随机决定背景颜色是浅还是暗的数组,这样我就可以根据$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;}'; }


?>


//可能已经注意到,它将是一个预定义的颜色列表,这将实现以下功能:

echo dechex(mt_rand(0, 0xFFFFFF));
如果要从一组已知颜色中随机选择,请执行以下操作:

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

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

//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';
}
//以黑色文本开始
$textcolor='2222222';
$rand1=兰特(0255);
$rand2=兰特(0255);
$rand3=兰特(0255);
$bgcolor=sprintf(“%02X”,$rand1)。sprintf(“%02X”,2美元)。sprintf(“%02X”,3美元);
$total=$rand1+$rand2+$rand3;
//如果总数小于400,则最有可能是较暗的颜色,除非一种或多种颜色占400种颜色的大部分
如果($total<400&&$rand1<180&&$rand2<180&&$rand3<180){
$textcolor='dddddddd';
}

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

对于任何感兴趣的人,我发现了一种更好的方法,可以减少代码量,获得更好的随机分布,也更具动态性

<?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;}'; }

?>


我不想访问这样做的网站aaahhhhhhhh。。。。我的眼睛!O.oCalm down,这只是一个学习项目。非常感谢您的帮助,尽管我应该在一开始就提到它是用于预定义颜色列表的。谢谢您的帮助,我想我忘了提到它将用于预定义的调色板。很好的代码让我去研究和学习。你可以设置一个颜色数组,比如$colors=array($color1,$color2),然后调用$colors[array\u rand($colors)]