Mã màu CSS ngẫu nhiên


10

Bài đăng trên blog này về việc tạo mã màu CSS ngẫu nhiên trong JavaScript có nhiều giải pháp để tạo màu ngẫu nhiên trong JavaScript. Ngắn nhất tôi có thể tìm thấy là đây:

'#'+(Math.random()*0xffffff).toString(16).slice(-6)

Nếu bạn không quen thuộc với mã màu CSS, hãy đọc tài liệu ở đây.

Chúng ta có thể làm tốt hơn không? Những ngôn ngữ khác thì sao?


Của bạn bị hỏng, bạn đang mất tích +sau'#'
Doorknob

1
Bạn có thể xóa lát cắt bằng cách thực hiện việc này#'+(Math.random()*0xffffff|0).toString(16)
Griffin

1
"0xffffff" cần thiết là gì? Tôi không thấy nhiều sự khác biệt trong kết quả của mình nếu không có nó.
path411

4
@ path411 Về mặt lý thuyết, Math.random().toString(16)có thể tạo ra một biểu diễn có ít hơn 6 chữ số hex sau dấu thập phân (hexa), trong trường hợp đó hàm sẽ bị hỏng. Ví dụ: 0.1658172607421875 trở thành 0.2A73 ở dạng hex.
primo

Câu trả lời:


26

PHP 23 byte

#<?=md5(rand())&ÿÿÿÿÿÿ;

Trong trường hợp ÿlà nhân vật 255. Bitwise và sẽ cắt ngắn chuỗi trở về từ md5, đó là đã có trong định dạng thập lục phân.


7
Đây là một trong những giải pháp yêu thích của tôi trên trang web.
Griffin

7

Ba mã ký tự cũng hợp lệ, vì vậy tôi có thể lưu một số ký tự ( 4095 == 0xfff):

Ruby, 24 23 22 18

'#%03x'%rand(4095)

Nếu tôi phải sử dụng 6-char, thì:

Ruby, 28 27 26 24 20

Cạo sạch một nhân vật vì 8**8-1 == 0xffffff

'#%06x'%rand(8**8-1)

Cảm ơn chron cho chuỗi định dạng, tiết kiệm 4 ký tự!


Gian lận (với dải xkcd này trong tâm trí):

Ruby / JS / Python / Perl / nhiều hơn nữa, 6 (hoặc 5)

"#a83"

Tôi đảm bảo với bạn, tôi tạo ra nó một cách ngẫu nhiên!

Một phiên bản thậm chí gian lận hơn:

"red"

Bạn không cần dấu ngoặc đơn cho các cuộc gọi phương thức trong Ruby, phải không?
Mohsen

@Mohsen Vâng, nhưng Ruby bị nhầm lẫn và nghĩ rằng tôi đang kêu gọi to_strên 4095nếu tôi bỏ qua chúng.
Doorknob

Bạn có thể giảm xuống còn 20 với chuỗi định dạng sprintf:'#%06x'%rand(8**8-1)
Paul Prestidge

@ync Nice, cảm ơn! Chỉnh sửa
Doorknob

6

Javascript

'#'+Math.random().toString(16).substr(2,6)

Chỉ ngắn hơn một chút ở mức 42.


1
Tôi không chắc tại sao điều này lại bị hạ thấp. Nó hoạt động tốt trong mọi trình duyệt tôi đã thử nghiệm. +1
primo

5
#'+Math.random().toString(16).slice(-6)
Mohsen

@Mohsen tốt đẹp! Không biết lát có thể làm tiêu cực.
tristin

3

Cá 79

vnnnnnnnn 
601234567;
>xxxxxxxx<
 89""""""?
 nnABCDEF:
 vv""""""-
 vvoooooo1
 >>>>>>>>^

Không phải là giải pháp ngắn nhất trên thế giới, nhưng thật thú vị khi viết mã :)

Đây cũng không phải là một phân phối đồng đều, nhưng tất cả các kết quả đầu ra có xác suất khác không 7 và F là các chữ số rất có thể.

Đầu ra:

python fish.py randomColor.fish
07FFF7

python fish.py randomColor.fish
07EFD7

python fish.py randomColor.fish
366F67

python fish.py randomColor.fish
977FD7

python fish.py randomColor.fish
97F7F7

python fish.py randomColor.fish
87F6FF

1

APL (17)

'#',(⎕D,⎕A)[6?16]

Giải trình:

  • 6?16: 6 số ngẫu nhiên từ 1 đến 16
  • ⎕D,⎕A: các chữ số ( 0..9) theo sau là bảng chữ cái ( A..Z) (nhưng chỉ 16 giá trị đầu tiên được sử dụng, nghĩa là 0..F)
  • '#',: thêm một #vào phía trước

6?16là 6 giá trị ngẫu nhiên không lặp lại , tuy nhiên, thu hẹp không gian màu một chút ...
mniip

1

Bash (51)

od -N4 -An -tx /dev/urandom | cut -c2-7 | sed s/^/#/

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.