2014-01-08 3 views
0

Я пытаюсь создать код, который генерирует случайный цвет фона при загрузке страницы, но также выставляет текст с цветом, зависящим от цвета фона. EG, если цвет фона темный, на нем будет отображаться светлый текст.Лучший способ генерировать случайный цвет фона с 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;}'; } 


?> 

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

+1

я не хотел бы, чтобы посетить сайт, который сделал это –

+0

* aaahhhhhhhhhhh .... * мои глаза! O.o – Jakub

+2

Успокойтесь, это всего лишь учебный проект. – s3r3nd1p1ty

ответ

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

?> 
+0

создает текст на веб-сайте ... – tijnn

1

Это будет делать трюк:

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

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

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

Спасибо за вашу помощь, подумал, что забыл упомянуть, что это будет для предопределенной цветовой палитры. Ничего страшного кода мне меня заглянуть и изучить. – s3r3nd1p1ty

+0

Вы можете установить массив цветов, например $ colors = array ($ color1, $ color2), а затем вызвать $ colors [array_rand ($ colors)] – jccguimaraes

0

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

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

+0

Действительно оцените вашу помощь, хотя я должен был сначала упомянуть, что ее для предопределенного списка цветов. – s3r3nd1p1ty