Лучший способ создать случайный цвет фона с помощью php при загрузке страницы

Я пытаюсь создать код, который генерирует случайный цвет фона при загрузке страницы, но также выводит текст с цветом, зависящим от цвета фона. Например, если цвет фона темный, текст будет отображаться светлым.

До сих пор я создал следующее, которое работает, хотя я не уверен, что это лучший способ добиться этого.

Я создал массив, который случайным образом определяет, должен ли цвет фона быть светлым или темным, и сделал это, чтобы иметь два альтернативных цвета шрифта на основе схемы $. Я уверен, что будет гораздо более динамичный способ сделать это?

Затем я установил еще два массива, в которых перечислены несколько цветов для темной и светлой схем, с оператором 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;}'; }


?>

// Вероятно, следовало бы отметить, что это будет предопределенный список цветов


person s3r3nd1p1ty    schedule 08.01.2014    source источник
comment
я бы не хотел посещать сайт, который сделал это   -  person    schedule 08.01.2014
comment
ааааааааааа.... мои глаза! о.о   -  person Jakub    schedule 08.01.2014
comment
Успокойтесь, это всего лишь учебный проект.   -  person s3r3nd1p1ty    schedule 09.01.2014


Ответы (3)


Для всех, кому это интересно, я нашел лучший метод, заключающийся в следующем, с точки зрения уменьшения объема кода, получения лучшего случайного распределения, а также более динамичного.

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

?>
person s3r3nd1p1ty    schedule 11.01.2014

Как сказал Дагон, это звучит как ужасная идея для пользовательского интерфейса, но вот как я бы это сделал:

//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% случаев текст читается по сравнению с фоном.

person Pitchinnate    schedule 08.01.2014
comment
Очень ценю вашу помощь, хотя я должен был изначально упомянуть, что это для предопределенного списка цветов. - person s3r3nd1p1ty; 09.01.2014

Это поможет:

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

если вам нужен случайный набор известных цветов, вы делаете следующее:

$colors = array($color1, $color2);
echo $colors[array_rand($colors)];
person jccguimaraes    schedule 08.01.2014
comment
Спасибо за вашу помощь, я забыл упомянуть, что это будет для предопределенной цветовой палитры. Хороший кусок кода, который мне нужно изучить и изучить. - person s3r3nd1p1ty; 09.01.2014
comment
Вы можете установить массив цветов, например $colors = array($color1, $color2), а затем вызвать $colors[array_rand($colors)] - person jccguimaraes; 09.01.2014