CSS thập lục phân CSSA?


199

Tôi biết bạn có thể viết ...

background-color: #ff0000;

... Nếu bạn muốn thứ gì đó màu đỏ.

Và bạn có thể viết ...

background-color: rgba(255, 0, 0, 0.5);

... Nếu bạn muốn một cái gì đó màu đỏ và mờ.

Có cách nào ngắn gọn để viết màu trong suốt một phần thập lục phân không? Tôi muốn một cái gì đó như:

background-color: #ff000088; <--- the 88 is the alpha

... hoặc là ...

background-color: #ff0000 50%;

Tôi đang nhận được tất cả các màu của mình theo hệ thập lục phân và việc phải chuyển đổi tất cả các màu thành tỷ lệ 0-255 thập phân là khó chịu.


1
Bạn có thể thử nghiệm với các ký hiệu khác nhau, nhưng tôi đã không thành công. rgb(0xff,\x80,#44)đáng ngạc nhiên đại diện Octal dường như hơi york một chút rgb(0100, 0200,0300)#4080C0
yunzen

Bạn có thể muốn sử dụng ColorPic, hiển thị các số thập phân cho một màu được chọn iconico.com/colorpic
yunzen

2
Như Slomojo đã đề xuất, trong LESS bạn có thể thực hiện màu nền: # ff0000 + rgba (0, 0, 0, .8); sẽ chuyển đổi hex cho bạn và vẫn áp dụng độ trong suốt nhưng điều này không thể được thực hiện bằng CSS nguyên gốc.
fl3x7

1
Để đầy đủ, như Slomojo và fl3x7 thảo luận, điều này có thể được thực hiện dễ dàng trong Sass : background-color: opacify(#ff0000, 0.5);hoặc background-color: transparentize(#ff0000, 0.5);Bạn cũng có thể cung cấp các biến màu hex Sass cho các hàm Sass đó.
Adam Caviness

Câu trả lời:


112

Mô-đun màu CSS cấp 4 có thể sẽ hỗ trợ ký hiệu RGBA thập lục phân 4 và 8 chữ số!

Ba tuần trước (ngày 18 tháng 12 năm 2014) bản nháp của trình soạn thảo CSS Mô-đun cấp 4 đã được gửi cho Nhóm làm việc CSS W3C. Mặc dù trong tình trạng đó là rất nhiều nhạy cảm với sự thay đổi, phiên bản hiện tại của tài liệu ngụ ý rằng trong phần nào tương lai CSS gần sẽ hỗ trợ cả 4 và 8 chữ số ký hiệu thập lục phân RGBA.

Lưu ý: trích dẫn sau đây có các đoạn không liên quan bị cắt bỏ và nguồn có thể đã bị sửa đổi nhiều vào thời điểm bạn đọc bài này (như đã đề cập ở trên, đó là bản nháp của biên tập viên chứ không phải tài liệu hoàn chỉnh).
Nếu mọi thứ đã thay đổi nhiều, xin vui lòng để lại một bình luận cho tôi biết để tôi có thể cập nhật câu trả lời này!

§ 4.2. Các ký hiệu thập lục phân RGB: #RRGGBB

Cú pháp của a <hex-color><hash-token>mã thông báo có giá trị bao gồm 3, 4, 6 hoặc 8 chữ số thập lục phân . Nói cách khác, màu hex được viết dưới dạng ký tự băm, "#", theo sau là một số chữ số 0-9hoặc chữ cái a-f(trường hợp các chữ cái không quan trọng - #00ff00giống hệt #00FF00).

8 chữ số

6 chữ số đầu tiên được hiểu theo ký hiệu 6 ký tự. Cặp chữ số cuối cùng, được hiểu là số thập lục phân, chỉ định kênh alpha của màu, trong đó 00đại diện cho một màu hoàn toàn trong suốt và ffđại diện cho một màu hoàn toàn mờ đục.

Ví dụ 3
Nói cách khác, #0000ffccbiểu thị cùng màu với rgba(0, 0, 100%, 80%)(một màu xanh hơi trong suốt).

4 chữ số

Đây là một biến thể ngắn hơn của ký hiệu 8 chữ số, "mở rộng" theo cách tương tự như ký hiệu 3 chữ số. Chữ số đầu tiên, được hiểu là số thập lục phân, chỉ định kênh màu đỏ của màu, trong đó 0biểu thị giá trị tối thiểu và fđại diện cho mức tối đa. Ba chữ số tiếp theo tương ứng là các kênh màu lục, lam và alpha.

Điều này có ý nghĩa gì đối với tương lai của màu CSS?

Điều này có nghĩa là giả sử điều này không bị xóa hoàn toàn khỏi tài liệu cấp 4, chúng tôi sẽ sớm có thể xác định màu RGBA (hoặc màu HSLA, nếu bạn là một trong số những người đó ) ở định dạng thập lục phân trong các trình duyệt hỗ trợ Màu Cú pháp cấp 4 của mô-đun.

Thí dụ

elem {
    background: rgb(0, 0, 0);           /* RGB notation (no alpha). */
    background: #000;                   /* 3-digit hexadecimal notation (no alpha). */
    background: #000000;                /* 6-digit hexadecimal notation (no alpha). */
    background: rgba(0, 0, 0, 1.0);     /* RGBA notation. */

    /* The new 4 and 8-digit hexadecimal notation. */
    background: #0000;                  /* 4-digit hexadecimal notation. */
    background: #00000000;              /* 8-digit hexadecimal notation. */
}

Khi nào tôi có thể sử dụng điều này trong các sản phẩm của khách hàng?

Tumble cỏ dại là phản ứng thực sự duy nhất ...

Bỏ qua tất cả những trò đùa: hiện tại chỉ mới bắt đầu năm 2015, vì vậy những thứ này sẽ không được hỗ trợ trong bất kỳ trình duyệt nào trong một thời gian dài - ngay cả khi sản phẩm của bạn chỉ được thiết kế để hoạt động trên các trình duyệt cập nhật nhất mà bạn có thể không được nhìn thấy điều này trong hành động sản xuất bất cứ lúc nào sớm.

Xem hỗ trợ trình duyệt hiện tại cho ký hiệu màu #RRGGBBAA

Tuy nhiên, điều đó nói rằng, cách CSS hoạt động có nghĩa là chúng ta thực sự có thể bắt đầu sử dụng những thứ này ngay hôm nay! Nếu bạn thực sự muốn bắt đầu sử dụng chúng ngay bây giờ, miễn là bạn thêm lại bất kỳ trình duyệt không hỗ trợ nào sẽ chỉ cần bỏ qua các thuộc tính mới cho đến khi chúng được coi là hợp lệ:

figure {
  margin: 0;
  padding: 4px;
  
  /* Fall back (...to browsers which don't support alpha transparency). */
  background: #FEFE7F;
  color: #3F3FFE;
  
  /* Current 'modern' browser support. */
  background: rgba(255, 255, 0, 0.5);
  color: rgba(0, 0, 255, 0.75);
  
  /* Fall... foward? */
  background: #ffff007F; /* Or, less accurately, #ff08 */
  color: #0000ffbe;      /* Or #00fc */
}
<figure>Hello, world!</figure>

Miễn là bạn đang xem câu trả lời này trên trình duyệt hỗ trợ các thuộc tính backgroundcolorCSS, <figure>phần tử trong đoạn trích trên sẽ trông rất giống với điều này:

Đoạn mã hình ảnh kết quả

Sử dụng phiên bản Chrome mới nhất trên Windows (v39.0.2171) để kiểm tra <figure>yếu tố của chúng tôi , chúng tôi sẽ thấy như sau:

Ví dụ thanh tra phần tử

Các rgba()giá trị thập lục phân 6 chữ số được ghi đè bởi các giá trị và các giá trị thập lục phân 8 chữ số của chúng tôi bị bỏ qua vì chúng hiện được coi là không hợp lệ bởi trình phân tích cú pháp CSS của Chrome. Ngay khi trình duyệt của chúng tôi hỗ trợ các giá trị 8 chữ số này, các giá trị này sẽ ghi đè lên các giá trị này rgba().

CẬP NHẬT 2018-07-04: Firefox, Chrome và Safari hiện đang hỗ trợ ký hiệu này, Edge vẫn còn thiếu nhưng có thể sẽ đi theo ( https://caniuse.com/#feat=css-rrggbbaa ).


1
Tôi nhớ đã thấy điều này được đưa lên trong danh sách gửi thư cách đây một năm hoặc lâu nhất (ý tưởng có hex 4/8 chữ số không có gì mới). Vui mừng khi thấy nó đã vào Colors 4 ngay bây giờ.
BoltClock

@BoltClock hy vọng nó cũng sẽ ở đây!
James Donnelly

Firefox Nightly vừa mới thực hiện điều này :)
Florrie

/* Fall... foward? */»Tôi đề nghị jumpforward. Dự phòng và nhảy về phía trước: ^ p
WoodrowShigeru

Chỉ cần thêm một liên kết hữu ích. Liên kết chứa danh sách giá trị độ mờ trong hex. gist.github.com/lopspower/03fb1cc0ac9f32ef38f4
Ashish Kumar

33

Tôi tìm thấy câu trả lời sau khi đăng bài nâng cao cho câu hỏi. Lấy làm tiếc!

MS Excel đã giúp!

chỉ cần thêm tiền tố Hex vào giá trị màu hex để thêm alpha có độ mờ tương đương với giá trị%.

(trong rbga, độ mờ phần trăm được biểu thị dưới dạng thập phân như đã đề cập ở trên)

Opacity %   255 Step        2 digit HEX prefix
0%          0.00            00
5%          12.75           0C
10%         25.50           19
15%         38.25           26
20%         51.00           33
25%         63.75           3F
30%         76.50           4C
35%         89.25           59
40%         102.00          66
45%         114.75          72
50%         127.50          7F
55%         140.25          8C
60%         153.00          99
65%         165.75          A5
70%         178.50          B2
75%         191.25          BF
80%         204.00          CC
85%         216.75          D8
90%         229.50          E5
95%         242.25          F2
100%        255.00          FF

Đừng hiểu một cách tương đối. Bạn có nghĩa #FF00000Clà tương đương với rgba(255,0,0,0.05)?
yunzen

tiền tố của nó không phải là hậu tố. Có nghĩa là bạn thêm nó vào phía trước giá trị màu hex 6 chữ số của bạn #000000trở thành #7F000000.
T9b

7
@ T9b: CSS3 không hỗ trợ ký hiệu này. Kết thúc câu chuyện.
PointedEars

@PointedEars sai về cả hai số đếm. OP không đề cập cụ thể đến CSS3 và câu hỏi này tôi có thể nghĩ có khả năng liên quan nhiều hơn đến các vấn đề cụ thể của IE mà tất cả chúng ta đều biết là khó khăn. Không có IE sử dụng cả hai giá trị trong suốt của CSS và Hex trong CSS của nó.
T9b

4
@ T9b Vô nghĩa. OP có một câu hỏi CSS về các giá trị RGBA. Không có hỗ trợ RGBA trong CSS trước CSS3. Nếu IE / MSHTML hỗ trợ ký hiệu của bạn, thì đó là độc quyền , không tương thích và vốn không đáng tin cậy. Và chắc chắn bạn không đề xuất sử dụng kịch bản phía máy khách để làm cho ký hiệu đó hoạt động, phải không? Vì điều đó sẽ không tương thích và cũng không đáng tin cậy.
PointedEars

22
RGB='#ffabcd';
A='0.5';
RGBA='('+parseInt(RGB.substring(1,3),16)+','+parseInt(RGB.substring(3,5),16)+','+parseInt(RGB.substring(5,7),16)+','+A+')';

var rgb = '#ffabcd'; var a = '0.5'; var matches = rgb.match(/#([\da-f]{2})([\da-f]{2})([\da-f]{2})/i); var rgba = 'rgba(' + matches.slice(1).map(function(m) { return parseInt(m, 16); }).concat(a) + ')';
PointedEars

2
Nếu bạn đến từ một thế giới của React:<div style={ { backgroundColor: `rgba(${ parseInt(color.substring(1,3),16) }, ${ parseInt(color.substring(3,5),16) }, ${ parseInt(color.substring(5,7),16) }, 0.5)` } }></div>
Atul Yadav

14

Xem tại đây http://www.w3.org/TR/css3-color/#rgba-color

Không thể, hầu hết có thể là do 0xFFFFFFFF lớn hơn giá trị tối đa cho số nguyên 32 bit


28
#ffffff(sáu chữ số hex) thực sự là một giá trị màu 24 bit ; 0xFFFFFFFF thực tế là 2³² 1 và có thể được biểu diễn dưới dạng số nguyên 32 bit không dấu . Tôi nghĩ lý do tại sao #ffffffff(tám chữ số hex) không được chỉ định là cả hai màu CSS được bắt nguồn từ không gian màu sRGB và ký hiệu tám chữ số sẽ không rõ ràng với thiết bị hiển thị hỗ trợ độ sâu màu 32 bit. Hãy nhớ rằng vẫn còn #fffcó nghĩa là rgb(100%, 100%, 100%)- màu trắng - cả hai đều có độ sâu màu là 8 bit (256 màu) và 16 bit (65536 hoặc 64K màu).
PointedEars

5
Trên thực tế đó chính xác là những gì số nguyên 32 bit có khả năng giữ. 2 chữ số hex có thể chứa nhiều giá trị như 8 chữ số nhị phân. Hoặc ... 8 chữ số hex có thể chứa nhiều giá trị như 32 chữ số nhị phân.
Pijusn

Mặc dù không có lý do chính nào mà chức năng CSS không nên được thiết kế theo cách này ngay từ đầu (cũng như rgba (0.0, 0.5, 1.0) cho các quy tắc phù hợp với các chức năng màu khác). Đối với hỗ trợ màu hiển thị 32 bit, điều này không tồn tại với RGB 6 chữ số để bắt đầu và thực sự là một trường hợp cạnh. Tôi không gặp vấn đề với việc học các định dạng khác nhau, nhưng có những trường hợp bạn có thể có màu động ở dạng hex và cần tạo CSS từ nó khi chạy. Điều này đòi hỏi thêm bước chuyển đổi từ hex sang thập phân nếu bạn muốn thêm alpha vào nó, điều này thật khó hiểu.
Beejor

13

Chrome 52+ hỗ trợ alpha hex:

background: #56ff0077;

4
Tôi đã rất phấn khích khi thấy điều này và sau đó đã thử nó trong devtools trên Chrome 55. Không có xúc xắc, nó có lỗi như một giá trị tài sản không hợp lệ ...¯\_(ツ)_/¯
ericsoco

1
Có vẻ như nó đã có nhiều vấn đề khác nhau ở đây là trang trạng thái cho tính năng này.
Billy

Chrome đã xóa hỗ trợ, Safari và Firefox có hỗ trợ. Không sử dụng cái này.
Trường hợp

5
Tính đến tháng 7 năm 2019, có 84,5% tất cả các trình duyệt trên toàn cầu hỗ trợ tính năng này. caniuse.com/#search=rrggbbaa
André Kuhlmann

10

Sử dụng red, green, bluechuyển đổi sang RGBA:

background-color: rgba(red($color), green($color), blue($color), 0.2);

4
SASS hỗ trợ màu nền: rgba ($ color, .2);
djibe

những phương pháp css không hợp lệ - bạn nên đề cập đến điều đó
Piotr Karbownik

7

Tôi sợ điều đó là không thể. các rgbađịnh dạng mà bạn biết là người duy nhất.


1
@mdmullinax: Nhưng ai chỉ định màu hex trong ký hiệu HSL?
BoltClock

1
Tôi liên kết mọi thứ trong cuộc sống với ký hiệu HSLA, đó là phiên bản của
khớp

@mdmullinax: Ồ, điều đó thực sự tuyệt vời!
BoltClock

6
@mdmullinax: Điều này có thể làm bạn thích thú nếu bạn chưa nhìn thấy nó: Mothereffinghsl.com
BoltClock

@BoltClock Tôi thích trang web đó, Paul Irish là người chiến thắng
MikeM

5

Nếu bạn có thể sử dụng LESS, có chức năng fade.

@my-opaque-color: #a438ab;
@my-semitransparent-color: fade(@my-opaque-color, 50%);

background-color:linear-gradient(to right,@my-opaque-color, @my-semitransparent-color); 

// result: 
background-color: linear-gradient(to right, #a438ab, rgba(164, 56, 171, 0.5));

và sass / scss có chức năng tương đương:rgba(base-color, 0.5)
LocustHorde

2

Hoàng tử quyến rũ:

Chỉ có trình duyệt internet explorer mới cho phép màu hex 4 byte ở định dạng ARGB, trong đó A là kênh Alpha. Nó có thể được sử dụng trong các bộ lọc gradient chẳng hạn:

filter  : ~"progid:DXImageTransform.Microsoft.Gradient(GradientType=@{dir},startColorstr=@{color1},endColorstr=@{color2})";

Trong đó dir có thể là: 1 (ngang) hoặc 0 (dọc) Và các chuỗi màu có thể là màu hex (# FFAAD3) hoặc màu hex argb (# 88FFAAD3).


0

Vâng, các ký hiệu màu sắc khác nhau là những gì bạn sẽ phải học.
Kuler cung cấp cho bạn một cơ hội tốt hơn để tìm màu sắc và trong nhiều ký hiệu.
Hex không khác với RGB, FF = 255 và 00 = 0, nhưng đó là những gì bạn biết. Vì vậy, theo một cách nào đó, bạn phải hình dung nó.
Tôi sử dụng Hex, RGBA và RGB. Trừ khi cần chuyển đổi hàng loạt, làm thủ công sẽ giúp bạn nhớ một số 100 màu lẻ và mã của chúng.
Để chuyển đổi hàng loạt, hãy viết một số tập lệnh giống như tập lệnh do Alarie đưa ra. Có một vụ nổ với màu sắc.



-2

tại sao không sử dụng background-color: #ff0000; opacity: 0.5; filter: alpha(opacity=50); /* in IE */

nếu bạn nhắm mục tiêu một màu cho một văn bản hoặc có thể là một yếu tố, điều này sẽ dễ thực hiện hơn nhiều.


9
Độ mờ -1 ảnh hưởng đến tất cả nội dung, không chỉ màu nền
yunzen

sau đó đối tượng có thể được nhân đôi, một nên là phần tử chứa, phần còn lại phải là phần tử bên trong vùng chứa có độ mờ. bởi vì từ câu hỏi người dùng muốn một phương pháp khác ngoài rgba thông thường.
Hoàng tử quyến rũ

1
Anh ấy vẫn muốn kết quả tương tự, và tôi nên sử dụng rgba () hoặc bất kỳ ký hiệu nào khác hơn là sửa đổi HTML.
FelipeAls

đây là câu trả lời tôi đang tìm kiếm, để các màu hex một mình và thay đổi độ mờ bằng cách sử dụng thuộc tính opacitycss.
ở đây
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.