CSS 16 진 RGBA?


199

나는 당신이 쓸 수 있다는 것을 알고 있습니다 ...

background-color: #ff0000;

... 빨간색의 것을 원한다면.

그리고 당신은 쓸 수 있습니다 ...

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

... 붉고 반투명 한 것을 원한다면.

16 진수로 부분적으로 투명한 색상을 작성하는 간결한 방법이 있습니까? 나는 다음과 같은 것을 원한다 :

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

... 또는 ...

background-color: #ff0000 50%;

나는 16 진수로 모든 색상을 얻고 있으며 모두 0-255 스케일로 변환해야한다는 것은 성가신 일입니다.


1
다른 표기법으로 실험 해 볼 수도 있지만 성공하지 못했습니다. rgb(0xff,\x80,#44)놀라 울 진수 표현은 조금 뉴욕에 것 rgb(0100, 0200,0300)입니다#4080C0
yunzen

당신은 ColorPic를 사용할 수있는 표시하는 고른 색상의 진수 수치 iconico.com/colorpic
yunzen

2
Slomojo가 제안한 것처럼 LESS에서는 배경색을 사용할 수 있습니다. # ff0000 + rgba (0, 0, 0, .8); 16 진수를 변환하고 여전히 투명도를 적용하지만 기본 CSS를 사용하여 수행 할 수는 없습니다.
fl3x7

1
완성도를 높이기 위해 Slomojo 및 fl3x7에서 설명한 것처럼 Sass에서 쉽게 수행 할 수 있습니다 . background-color: opacify(#ff0000, 0.5);또는 background-color: transparentize(#ff0000, 0.5);Sass 16 진수 색상 변수를 해당 Sass 함수에도 제공 할 수 있습니다.
Adam Caviness

답변:


112

CSS 컬러 모듈 레벨 4는 아마도 4 자리 및 8 자리 16 진수 RGBA 표기법을 지원할 것 입니다 !

3 주 전 (2014 년 12 월 18 일) CSS 색상 모듈 레벨 4 편집자 초안 이 CSS W3C 실무 그룹에 제출되었습니다. 문서의 현재 버전은 변경하기가 매우 쉬운 상태이지만 다소 가까운 장래에 CSS가 4 자리 및 8 자리 16 진수 RGBA 표기법을 모두 지원할 것임을 암시합니다 .

참고 : 다음 인용문은 관련없는 청크가 잘리지 않았으며이 내용을 읽을 때 소스가 크게 수정되었을 수 있습니다 (위에서 언급 한 것처럼 최종 문서가 아니라 편집자의 초안 임).
상황이 크게 변경된 경우이 답변을 업데이트 할 수 있도록 알려주십시오.

§ 4.2. RGB 16 진 표기법 : #RRGGBB

(A)의 문법 <hex-color>A는 <hash-token>토큰 값이 3, 4, 6, 8 또는 16 진수로 구성 . 즉, 16 진 색상은 해시 문자 "#"로 기록되고 그 뒤에 몇 자릿수 0-9또는 문자 a-f가옵니다 (문자의 경우 중요하지 않음- #00ff00와 동일 함 #00FF00).

8 자리

처음 6 자리 숫자는 6 자리 표기법과 동일하게 해석됩니다. 16 진수로 해석되는 마지막 숫자 쌍은 색상의 알파 채널을 지정합니다. 여기서 00완전히 투명한 색상을 ff나타내고 완전히 불투명 한 색상을 나타냅니다.

예 3
즉, (약간 투명한 파란색) #0000ffcc과 동일한 색상을 나타냅니다 rgba(0, 0, 100%, 80%).

4 자리

이는 3 자리 표기법과 같은 방식으로 "확장"된 8 자리 표기법의 짧은 변형입니다. 16 진수로 해석되는 첫 번째 숫자는 색상의 빨간색 채널을 지정합니다. 여기서 0최소값을 f나타내고 최대 값을 나타냅니다. 다음 3 자리 숫자는 각각 녹색, 파란색 및 알파 채널을 나타냅니다.

CSS 색상의 미래에 이것이 무엇을 의미합니까?

이것은 이것이 레벨 4 문서에서 완전히 제거되지 않았다고 가정하면 색상 을 지원하는 브라우저에서 RGBA 색상 (또는 중 하나 인 경우 HSLA 색상 )을 16 진수 형식 으로 정의 할 수 있음을 의미합니다 모듈 레벨 4의 구문.

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. */
}

클라이언트 쪽 제품에서 언제 사용할 수 있습니까?

전락 잡초는 유일한 실제 반응입니다 ...

모든 농담은 제쳐두고 : 현재 2015 년 시작일 뿐이므로 제품이 최신 브라우저에서만 작동하도록 설계되어 있어도 브라우저에서 아직 지원되지 않습니다. 조만간 프로덕션 브라우저에서이 기능이 작동하지 않습니다.

#RRGGBBAA 색상 표기법에 대한 현재 브라우저 지원보기

그러나 CSS가 작동하는 방식은 실제로 이것을 사용할 수 있다는 것을 의미합니다! 지원하지 않는 브라우저가 폴백을 추가하는 한 실제로 사용하기 시작하려면 유효한 것으로 간주 될 때까지 새 속성을 무시합니다.

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>

CSS 에서 backgroundcolor속성 을 지원하는 브라우저에서이 답변을 보는 <figure>한 위의 스 니펫 결과 요소는 다음과 매우 유사합니다.

코드 스 니펫 결과 이미지

Windows에서 최신 버전의 Chrome (v39.0.2171)을 사용하여 <figure>요소 를 검사 하면 다음이 표시됩니다.

요소 검사기 예

6 자리 16 진수 폴백은 rgba()값으로 대체되며, 8 자리 16 진수 값은 현재 Chrome의 CSS 파서에서 유효하지 않은 것으로 간주되므로 무시됩니다. 브라우저가이 8 자리 값을 지원하자마자이 값을 덮어 씁니다 rgba().

업데이트 2018-07-04 : Firefox, Chrome 및 Safari는 현재이 표기법을 지원하지만 Edge가 여전히 누락되었지만 아마도 https://caniuse.com/#feat=css-rrggbbaa를 따릅니다 .


1
나는 이것이 1 년 전쯤 메일 링리스트에서 최근에 나온 것을 본 것을 기억합니다 (4/8 자리 16 진수를 갖는 아이디어는 새로운 것이 아닙니다). 지금은 Colors 4에 들어간 것을 기쁘게 생각합니다.
BoltClock

@BoltClock도 여기에 머무를 수 있기를 바랍니다!
James Donnelly

Firefox Nightly 는 이것을 구현했습니다 :)
Florrie

/* Fall... foward? */»점프 포워드를 제안합니다. 폴백 및 점프 : ^ p
WoodrowShigeru

유용한 링크를 추가하기 만하면됩니다. 링크는 16 진수로 불투명도 값 목록을 포함합니다. gist.github.com/lopspower/03fb1cc0ac9f32ef38f4
Ashish Kumar

33

개선 사항을 질문에 게시 한 후 답변을 찾았습니다. 죄송합니다!

MS Excel이 도와주었습니다!

16 진수 색상 값에 16 진수 접두사를 추가하기 만하면 % 값과 동일한 불투명도를 가진 알파를 추가 할 수 있습니다.

(rbga에서 불투명도 백분율은 위에서 언급 한 것처럼 10 진수로 표시됩니다)

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

확실하게 이해하지 마십시오. 당신 #FF00000C은 같은 의미 rgba(255,0,0,0.05)입니까?
yunzen

접두사가 아닌 접두사. 6 자리의 16 진수 색상 값 앞에 추가한다는 의미 #000000가됩니다 #7F000000.
T9b

7
@ T9b : CSS3은이 표기법을 지원하지 않습니다. 이야기의 끝.
PointedEars

두 가지 모두 @PointedEars가 잘못되었습니다. OP는 CSS3에 대해 구체적으로 언급하지 않았으며, 내가 생각했던이 질문은 우리 모두가 어려운 IE 관련 문제와 더 관련이있을 것으로 생각됩니다. 그럼에도 불구하고 IE는 CSS에서 CSS와 Hex 투명도 값을 모두 사용합니다.
T9b

4
@ T9b 넌센스 OP에는 RGBA 값에 대한 CSS 질문이 있습니다. CSS3 이전의 CSS에서는 RGBA가 지원되지 않습니다. 만약 IE / MSHTML이 당신의 표기법을 지원한다면, 그것은 독점적 이며 호환되지 않으며 본질적으로 신뢰할 수 없습니다. 그리고 분명히 클라이언트 측 스크립팅을 사용하여 그 표기법이 작동하도록 제안하지 않습니까? 그것은 호환되지 않으며 신뢰할 수 없을 것입니다.
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
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

여기를 참조하십시오 http://www.w3.org/TR/css3-color/#rgba-color

0xFFFFFFFF가 32 비트 정수의 최대 값보다 크기 때문에 가능하지 않습니다.


28
#ffffff(6 개의 16 진수)는 실제로 24 비트 색상 값입니다. 0xFFFFFFFF는 실제로 2³²-1이며 부호없는 32 비트 정수 로 표시 될 수 있습니다 . #ffffffff(8 진수 16 자리)가 지정되지 않은 이유 는 CSS 색상이 sRGB 색상 공간에 뿌리를두고 있으며 8 비트 16 진수 표기법이 32 비트의 색 심도를 지원하는 디스플레이 장치에서 모호하기 때문입니다. 8 비트 (256 색) 및 16 비트 (65536 또는 64K 색)의 색상 심도를 가진 흰색 #fff이라는 의미 는 여전히 rgb(100%, 100%, 100%)있습니다.
PointedEars

5
실제로 그것은 정확히 32 비트 정수가 유지할 수있는 것입니다. 2 개의 16 진 숫자는 8 개의 2 진 숫자만큼 많은 값을 보유 할 수 있습니다. 또는 ... 8 개의 16 진수는 32 개의 2 진수만큼 많은 값을 보유 할 수 있습니다.
Pijusn

CSS 함수가 처음부터 이런 식으로 설계되어서는 안되는 주요한 이유는 없지만 (다른 색상 함수와 일치하도록 법선에 대한 rgba (0.0, 0.5, 1.0) 부동 소수점). 32 비트 디스플레이 색상 지원의 경우 6 자리 RGB에는 존재하지 않으며 실제로는 가장자리입니다. 다른 형식을 배우는 데는 문제가 없지만 16 진수로 동적 색상을 얻거나 런타임에 CSS를 만들어야하는 경우가 있습니다. 알파를 추가하려면 16 진수에서 10 진수로 변환하는 추가 단계가 필요합니다.
Beejor

13

Chrome 52 이상 알파 16 진수를 지원합니다 .

background: #56ff0077;

4
나는 이것을보고 매우 ¯\_(ツ)_/¯
기뻤다

1
다양한 문제 발생한 것 같습니다. 여기 에 해당 기능의 상태 페이지가 있습니다.
Billy

Chrome은 지원을 제거했으며 Safari 및 Firefox는 지원을 제공합니다. 이것을 사용하지 마십시오.
Case

5
2019 년 7 월 현재 전 세계적으로이 기능을 지원하는 모든 브라우저의 84.5 %가 있습니다. caniuse.com/#search=rrggbbaa
André Kuhlmann

10

사용 red, green, blueRGBA로 변환 :

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

4
SASS는 배경색을 지원합니다 : rgba ($ color, .2);
djibe

사람들은 유효하지 CSS의 방법입니다 - 당신이 언급해야
표트르 Karbownik

7

나는 그것이 불가능하다는 것을 두려워합니다. rgba알고 있는 형식은 유일한 형식입니다.


1
@ mdmullinax : 그러나 누가 HSL 표기법으로 16 진수 색상을 지정합니까?
BoltClock

1
HSLA 표기법과 생활에서 나는 동료 다, 그것은 : 공감각의 버전입니다
MikeM

@ mdmullinax : 아, 그것은 실제로 꽤 굉장합니다!
BoltClock

6
@mdmullinax : 아직 보지 못했다면 기뻐할 것입니다 : mothereffinghsl.com
BoltClock

해당 사이트와 같은 @BoltClock 나는, 폴 아일랜드 인 승리
MikeM

5

LESS를 사용할 수 있으면 페이드 기능이 있습니다.

@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));

sass / scss는 동등한 기능을 가지고 있습니다.rgba(base-color, 0.5)
LocustHorde

2

멋진 왕자:

인터넷 익스플로러 만이 ARGB 형식의 4 바이트 16 진수 색상을 허용합니다. 여기서 A는 알파 채널입니다. 예를 들어 그라디언트 필터에 사용할 수 있습니다.

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

dir은 1 (수평) 또는 0 (세로) 일 수 있으며 색상 문자열은 16 진 색상 (# FFAAD3) 또는 argb 16 진 색상 (# 88FFAAD3) 일 수 있습니다.


0

글쎄, 다른 색 표기법을 배워야 할 것입니다.
Kuler 는 색상과 여러 표기법을 찾을 수있는 더 나은 기회를 제공합니다.
16 진수는 RGB, FF = 255 및 00 = 0과 다르지 않습니다. 그러나 그것은 당신이 알고있는 것입니다. 어떤 식 으로든 시각화해야합니다.
16 진수, RGBA 및 RGB를 사용합니다. 대량 변환이 필요하지 않은 경우 수동으로이 작업을 수행하면 100 개의 이상한 색상과 해당 코드를 기억하는 데 도움이됩니다.
대량 변환의 경우 Alarie에서 제공 한 것과 같은 스크립트를 작성하십시오. 색상으로 폭발하십시오.



-2

왜 사용하지 background-color: #ff0000; opacity: 0.5; filter: alpha(opacity=50); /* in IE */

텍스트 또는 요소의 색상을 대상으로하는 경우 훨씬 쉽게 수행 할 수 있습니다.


9
-1 불투명도, 모든 콘텐츠에 영향을 미칠뿐만 아니라 배경 색상
yunzen

객체는 두 배가 될 수 있습니다. 하나는 포함하는 요소 여야하고 다른 하나는 불투명 한 컨테이너 내부의 것이어야합니다. 질문에서 사용자는 기존의 rgba와 다른 방법을 원하기 때문입니다.
Charming Prince

1
그는 여전히 동일한 결과를 원하며 rgba () 또는 HTML을 수정하는 것보다 다른 표기법을 사용하는 것이 좋습니다.
FelipeAls

이것은 내가 찾은 대답이며 16 진수 색상을 그대로두고 opacitycss 속성을 사용하여 불투명도를 변경하십시오 .
여기
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.