CSS шістнадцятковий RGBA?


199

Я знаю, ти можеш написати ...

background-color: #ff0000;

... якщо ви хочете чогось червоного.

І ти можеш написати ...

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

... якщо ви хочете чогось червоного і напівпрозорого.

Чи існує якийсь короткий спосіб написання частково прозорих кольорів шістнадцятковим? Я хочу щось подібне:

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

... або ...

background-color: #ff0000 50%;

Я отримую всі мої кольори в шістнадцятковій формі, і мені доведеться конвертувати їх у десяткову шкалу 0-255 - це дратує.


1
Ви можете експериментувати з різними позначеннями, але я не досяг успіху. rgb(0xff,\x80,#44)дивовижно уявлення восьмеричної , здається, йорк трохи rgb(0100, 0200,0300)буде#4080C0
yunzen

Ви можете скористатися ColorPic, який показує десяткові цифри для вибраного
yunzen

2
Як запропонував Сломоджо, у Менші можна зробити фоновий колір: # ff0000 + rgba (0, 0, 0, .8); який перетворить шістнадцяткову для вас і все-таки застосовуватиме прозорість, але це неможливо зробити за допомогою нативного CSS.
fl3x7

1
Для повноти, як обговорюють Slomojo та fl3x7, це можна зробити в Sass легко : background-color: opacify(#ff0000, 0.5);або background-color: transparentize(#ff0000, 0.5);Ви можете надати Sass-шестигранні змінні кольору для цих функцій Sass також.
Адам Порожня

Відповіді:


112

Кольоровий модуль CSS рівня 4, ймовірно, підтримуватиме 4-х та 8-значні шістнадцяткові позначення RGBA!

Три тижні тому (18 грудня 2014 р.) Проект редактора CSS Color Module Level 4 був поданий до робочої групи CSS W3C. Хоча в стані, який дуже сприйнятливий до змін, поточна версія документа передбачає, що в деякому найближчому майбутньому CSS підтримуватиме як 4, так і 8-значну шістнадцяткову нотацію RGBA.

Примітка. Наступна цитата має вирізані нерелевантні фрагменти, і джерело, можливо, було сильно змінено до того часу, як ви це прочитали (як уже згадувалося вище, це редактор редакції, а не остаточний документ).
Якщо речі сильно змінилися, будь ласка, залиште коментар, який дасть мені знати, щоб я міг оновити цю відповідь!

§ 4.2. Шістнадцяткові позначення RGB: #RRGGBB

Синтаксис a <hex-color>- це <hash-token>маркер , значення якого складається з 3, 4, 6 або 8 шістнадцяткових цифр . Іншими словами, шістнадцятковий колір записується як хеш-символ "#", а потім деяка кількість цифр 0-9або літер a-f(справа букв не має значення - #00ff00ідентична #00FF00).

8 цифр

Перші 6 цифр інтерпретуються ідентично 6-розрядним позначенням. Остання пара цифр, інтерпретована як шістнадцяткове число, вказує альфа-канал кольору, де 00представлений повністю прозорий колір і ffявляє собою повністю непрозорий колір.

Приклад 3
Іншими словами, #0000ffccявляє собою той же колір, що і rgba(0, 0, 100%, 80%)(злегка прозорий синій).

4 цифри

Це коротший варіант 8-розрядних позначень, "розширений" так само, як і 3-розрядне позначення. Перша цифра, інтерпретована як шістнадцяткове число, вказує червоний канал кольору, де 0представляє мінімальне значення та fпредставляє максимум. Наступні три цифри представляють зелений, синій та альфа-канали відповідно.

Що це означає для майбутнього кольорів CSS?

Це означає, що якщо припустити, що це не повністю вилучено з документа рівня 4, ми незабаром зможемо визначити наші кольори RGBA (або кольори HSLA, якщо ви один із цих хлопців) у шістнадцятковому форматі у браузерах, які підтримують колір Синтаксис рівня модуля 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>

Поки ви переглядаєте цю відповідь у веб-переглядачі, який підтримує backgroundі colorвластивості в CSS, <figure>елемент в результаті наведеного фрагмента буде виглядати дуже схожим на це:

Зображення результату фрагменту коду

Використовуючи останню версію Chrome в Windows (v39.0.2171) для перевірки нашого <figure>елемента, ми побачимо наступне:

Приклад інспектора елемента

Шестицифрове шестизначне зворотнє зворотнє відношення переосмислюється rgba()значеннями, а наші 8-значні шістнадцяткові значення ігноруються, оскільки вони CSS-аналізатором CSS Chrome зараз вважають недійсними. Щойно наш браузер підтримує ці 8-значні значення, вони перевершать ці rgba().

ОНОВЛЕННЯ 2018-07-04: Firefox, Chrome та Safari підтримують цю нотацію зараз, Edge все ще відсутня, але, ймовірно, буде слідувати ( https://caniuse.com/#feat=css-rrggbbaa ).


1
Я пам’ятаю, як це було підписано у списках розсилки не пізніше року або близько того (ідея мати 4- / 8-значний шестигранник - це ніщо не нове). Радий побачити, що зараз введено Кольори 4.
BoltClock

@BoltClock сподіваємось, він також залишиться тут!
Джеймс Доннеллі

Firefox Nightly щойно реалізував це :)
Флорі

/* Fall... foward? */»Я пропоную стрибати вперед. Відступ і стрибок уперед: ^ p
WoodrowShigeru

Просто додайте корисне посилання. Посилання містить список значень непрозорості у шістнадцятковій формі. gist.github.com/lopspower/03fb1cc0ac9f32ef38f4
Ашиш Кумар

33

Я знайшов відповідь після публікації розширення до питання. Вибачте!

MS Excel допомогла!

просто додайте префікс Hex до значення шестигранного кольору, щоб додати альфа, яка має еквівалентну непрозорість як значення%.

(у rbga відсоткова непрозорість виражається у вигляді десяткової, як згадувалося вище)

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)?
юнзен

це префікс, а не суфікс. Значення ви додаєте його в передню частини 6 цифр шістнадцятирічного значення кольору #000000стає #7F000000.
T9b

7
@ T9b: CSS3 не підтримує цю нотацію. Кінець історії.
Вказано вухами

@PointedEars неправильно в обох значеннях. В ОП конкретно не згадується CSS3, і, на мою думку, це питання, можливо, буде більше пов'язане з конкретними проблемами IE, які всі ми знаємо, є складними. ІНе використовує як CSS, так і значення Hex прозорості у своєму CSS.
T9b

4
@ T9b Дурниці. В ОП є питання CSS про значення RGBA. Підтримка RGBA в CSS до CSS3 не підтримується. Якщо IE / MSHTML підтримує вашу нотацію, то це є власником , не сумісним і по суті ненадійним. І, звичайно, ви не пропонуєте використовувати сценарій на стороні клієнта, щоб зробити цю нотацію, чи не так? Бо це не було б сумісним і було б також ненадійним.
Вказівний вуха

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) + ')';
Вказано вухами

2
Якщо ви приїжджаєте зі світу Реагу:<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>
Атул Ядав

14

Дивіться тут http://www.w3.org/TR/css3-color/#rgba-color

Це неможливо, швидше за все, тому що 0xFFFFFFFF більше максимального значення для 32-бітових цілих чисел


28
#ffffff(шість шістнадцяткових цифр) - це насправді 24-бітове значення кольору; 0xFFFFFFFF - це фактично 2³² − 1, і його можна представити як непідписане 32-бітове ціле число. Я думаю, що причина, за якою #ffffffff(вісім шістнадцяткових цифр) не вказана, полягає в тому, що кольори CSS вкорінені в кольоровому просторі sRGB, і що восьми шестизначна цифра буде неоднозначною для пристрою відображення, який підтримує глибину кольору 32 біт. Пам’ятайте, що все ще існує #fffтак, що це означає rgb(100%, 100%, 100%)- білий - як із глибиною кольорів 8 біт (256 кольорів), так і з 16 бітами (65536 або 64K кольорів).
Вказівний вуха

5
Насправді саме це здатне вмістити 32-бітове ціле число. 2 шістнадцяткових цифр можуть містити стільки ж значень, скільки 8 двійкових цифр. Або ... 8 шістнадцяткових цифр може містити стільки значень, скільки 32 двійкових цифр.
Піжусн

Хоча немає жодної основної причини, функція CSS не повинна була бути розроблена таким чином з самого початку (як і rgba (0,0, 0,5, 1,0) плаває для нормалей, щоб відповідати іншим кольоровим функціям). Що стосується 32-бітної підтримки кольорового дисплея, то вона не існує з 6-значного RGB для початку і справді є кращим випадком. У мене немає проблем з навчанням різних форматів, але є випадки, коли ви можете отримати динамічний колір у шістнадцятковій формі і вам потрібно створити CSS з нього під час виконання. Для цього потрібен додатковий крок перетворення з шістнадцяткового в десятковий, якщо ви хочете додати до нього альфа, що є незграбним.
Beejor

13

Chrome 52+ підтримує альфа-шістнадцятку:

background: #56ff0077;

4
Я був схвильований, щоб побачити це, а потім спробував це у програмах devtools на Chrome 55. Без кісток, це помилка як недійсне значення властивості ...¯\_(ツ)_/¯
ericsoco

1
Схоже, у нього виникли різні проблеми, ось сторінка статусу для цієї функції.
Біллі

Chrome видалив підтримку, у Safari та Firefox є підтримка. Не використовуйте це.
Справа

5
Станом на липень 2019 року, 84,5% усіх браузерів підтримують цю функцію в усьому світі. caniuse.com/#search=rrggbbaa
Андре

10

Використовуйте red, green, blueщоб перетворити в RGBA:

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

4
SASS підтримує фоновий колір: rgba ($ color, .2);
джибе

це не є дійсними методами css - вам слід згадати про це
Piotr Karbownik

7

Боюся, це неможливо. rgbaформат , який ви знаєте , це тільки один.


1
@mdmullinax: Але хто вказує шістнадцяткові кольори у позначенні HSL?
BoltClock

1
Я пов'язую все в житті з нотацією
HSLA

@mdmullinax: О, це насправді досить приголомшливо!
BoltClock

6
@mdmullinax: Це може вас порадувати, якщо ви ще цього не бачили: mothereffinghsl.com
BoltClock

@BoltClock Мені подобається цей сайт, Пол Ірландський - це перемога
MikeM

5

Якщо ви можете використовувати менше, існує функція зникнення.

@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

Чарівний принц:

Тільки Інтернет-провідник дозволяє 4-байтний шістнадцятковий колір у форматі ARGB, де A - канал Альфа. Його можна використовувати в градієнтних фільтрах, наприклад:

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

Де реж може бути: 1 (горизонтальний) або 0 (вертикальний), а кольорові рядки можуть бути шістнадцятковими кольорами (# FFAAD3) або шестигранними кольорами argb (# 88FFAAD3).


0

Що ж, різні кольорові позначення - це те, що вам доведеться навчитися.
Кулер дає кращі шанси знайти колір і в декількох позначеннях.
Hex не відрізняється від RGB, FF = 255 і 00 = 0, але це те, що ви знаєте. Таким чином, вам доведеться візуалізувати це.
Я використовую Hex, RGBA та RGB. Якщо не потрібно масового перетворення, це вручну допоможе вам запам'ятати кілька незвичайних 100 кольорів та їх коди.
Для масової конверсії напишіть такий сценарій, як той, який дав Аларі. Провести вибух із кольорами.



-2

чому б не використовувати background-color: #ff0000; opacity: 0.5; filter: alpha(opacity=50); /* in IE */

якщо ви орієнтуєтесь на колір тексту чи, можливо, елемент, це зробити набагато простіше.


9
-1 непрозорість впливає на весь вміст, а не лише на фоновий колір
yunzen

тоді об'єкт може бути подвоєний, один повинен містити елемент, інший - той, який знаходиться всередині контейнера, який має непрозорість. тому що з питання користувач хоче іншого способу, ніж звичайний rgba.
Чарівний принц

1
Він як і раніше хоче того ж результату, і я краще використовувати rgba () або будь-яку іншу нотацію, ніж модифікацію HTML.
FelipeAls

це відповідь, яку я шукав, залиште шістнадцяткові кольори в спокої і змініть непрозорість, використовуючи opacityвластивість css.
тут
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.