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)ตัวแทน Octal อย่างน่าประหลาดใจดูเหมือนว่า york เล็กน้อยrgb(0100, 0200,0300)คือ#4080C0
yunzen

คุณอาจต้องการใช้ ColorPic ซึ่งจะแสดงตัวเลขทศนิยมสำหรับiconico.com/colorpic
yunzen

2
ตามที่แนะนำ Slomojo ใน LESS คุณสามารถทำ background-color: # ff0000 + rgba (0, 0, 0, .8); ซึ่งจะแปลง hex ให้คุณและยังคงใช้ความโปร่งใส แต่ไม่สามารถทำได้โดยใช้ CSS ดั้งเดิม
fl3x7

2
เพื่อความสมบูรณ์เป็น Slomojo และ fl3x7 หารือนี้สามารถทำได้ใน Sass ได้อย่างง่ายดาย : background-color: opacify(#ff0000, 0.5);หรือbackground-color: transparentize(#ff0000, 0.5);คุณสามารถจัดหา Sass ตัวแปรสีฐานสิบหกให้กับผู้ฟังก์ชั่น Sass เช่นกัน
Adam Caviness

2
มีความเป็นไปได้ที่จะเป็นตัวแทน
58

คำตอบ:


112

CSS Color Module Level 4 อาจรองรับรูปแบบเลขฐานสิบหก RGBA 4 และ 8 หลัก!

สามสัปดาห์ที่ผ่านมา (วันที่ 18 ธันวาคม 2014) ร่างแบบแก้ไข CSS โมดูลสีระดับ 4ถูกส่งไปยังคณะทำงาน CSS W3C แม้ว่าในรัฐซึ่งเป็นอย่างยิ่งไวต่อการเปลี่ยนแปลงรุ่นปัจจุบันของเอกสารที่แสดงให้เห็นว่าในบ้างในอนาคตอันใกล้จะ CSS สนับสนุนทั้ง 4 และ 8 หลักเลขฐานสิบหก RGBA

หมายเหตุ: ข้อความต่อไปนี้มีเนื้อหาที่ไม่เกี่ยวข้องถูกตัดออกและแหล่งที่มาอาจได้รับการแก้ไขอย่างมากในเวลาที่คุณอ่าน (ตามที่กล่าวถึงข้างต้นเป็นร่างของบรรณาธิการและไม่ใช่เอกสารสรุป)
หากสิ่งมีการเปลี่ยนแปลงอย่างมากโปรดออกความคิดเห็นแจ้งให้ฉันทราบเพื่อให้ฉันสามารถอัปเดตคำตอบนี้!

§ 4.2 สัญลักษณ์เลขฐานสิบหก RGB: #RRGGBB

ไวยากรณ์ของ<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. */
}

ฉันจะสามารถใช้ผลิตภัณฑ์นี้กับผลิตภัณฑ์ที่ลูกค้าต้องเผชิญได้เมื่อใด

Tumble weed เป็นคำตอบเดียวที่แท้จริง ...

เรื่องตลกทั้งหมด:ขณะนี้เป็นเพียงการเริ่มต้นของปี 2015 ดังนั้นสิ่งเหล่านี้จะไม่ได้รับการสนับสนุนในเบราว์เซอร์ใด ๆ มาระยะหนึ่งแล้ว - แม้ว่าผลิตภัณฑ์ของคุณจะได้รับการออกแบบมาให้ทำงานกับเบราว์เซอร์รุ่นล่าสุดเท่านั้น ไม่เห็นการดำเนินการนี้ในเบราว์เซอร์ที่ใช้งานจริงเร็ว ๆ นี้

ดูการสนับสนุนเบราว์เซอร์ปัจจุบันสำหรับสัญกรณ์สี #RRGBGBBAA

อย่างไรก็ตามที่กล่าวว่าวิธีการทำงานของ 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>องค์ประกอบของเราเราจะเห็นสิ่งต่อไปนี้:

ตัวอย่างการตรวจสอบองค์ประกอบ

การถอยกลับเลขฐานสิบหก 6 หลักจะถูกแทนที่ด้วยrgba()ค่าและค่าเลขฐานสิบหก 8 หลักของเราจะถูกละเว้นเนื่องจากในขณะนี้ค่าตัวแยกวิเคราะห์ CSS ของ Chrome นั้นไม่ถูกต้อง ทันทีที่เบราว์เซอร์ของเรารองรับค่า 8 หลักเหล่านี้จะแทนที่ค่าเหล่าrgba()นั้น

อัปเดต 2018-07-04: Firefox, Chrome และ Safari ได้รับการสนับสนุนในขณะนี้ Edge ยังคงหายไป แต่อาจจะติดตาม ( https://caniuse.com/#feat=css-rrggbbaa )


1
ฉันจำได้ว่าเห็นสิ่งนี้เกิดขึ้นในรายชื่อผู้รับจดหมายเมื่อประมาณหนึ่งปีที่ผ่านมา (ความคิดของการมีเลขฐานสิบหก 4- / 8 หลักนั้นไม่มีอะไรใหม่) ดีใจที่ได้เห็นมันเข้าสู่ Colors 4 ในตอนนี้
BoltClock

@BoltClock หวังว่ามันจะอยู่ที่นี่เช่นกัน!
James Donnelly

Firefox Nightlyเพิ่งนำสิ่งนี้ไปใช้ :)
Florrie

/* Fall... foward? */»ฉันขอแนะนำให้กระโดดไปข้างหน้า ทางเลือกและ
กระโดดไปข้าง

เพียงเพิ่มลิงค์ที่มีประโยชน์ ลิงก์มีรายการค่าความทึบในฐานสิบหก gist.github.com/lopspower/03fb1cc0ac9f32ef38f4
Ashish Kumar

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)หรือไม่
yunzen

มันเป็นคำนำหน้าไม่ใช่คำต่อท้าย ความหมายที่คุณเพิ่มเข้าไปในด้านหน้าของ 6 บาทค่าสีฐานสิบหกของคุณจะกลายเป็น#000000 #7F000000
T9b

8
@ T9b: CSS3 ไม่รองรับสัญลักษณ์นี้ ตอนจบของเรื่อง.
แหลม

@PointedEars ผิดทั้งสองข้อ OP ไม่ได้กล่าวถึง CSS3 โดยเฉพาะและคำถามนี้ฉันคิดว่าน่าจะเกี่ยวข้องกับปัญหาเฉพาะ IE ที่เราทุกคนรู้ดีกว่า IE ที่ไม่มีน้อยใช้ทั้ง CSS และ Hex โปร่งใสใน CSS
T9b

4
@ T9b เรื่องไร้สาระ OP มีคำถาม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>
Atul Yadav

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 เลขฐานสอง
Pijusn

แม้ว่าจะไม่มีเหตุผลสำคัญที่ฟังก์ชั่น CSS ไม่ควรได้รับการออกแบบด้วยวิธีนี้ตั้งแต่เริ่มต้น (รวมถึง rgba (0.0, 0.5, 1.0) ลอยตัวเพื่อให้เป็นไปตามบรรทัดฐานเพื่อให้ตรงกับฟังก์ชั่นสีอื่น ๆ ) สำหรับการสนับสนุนการแสดงผลสีแบบ 32- บิตนี้ไม่ได้มี RGB 6 หลักที่จะเริ่มต้นด้วยและเป็นกรณีขอบ ฉันไม่ได้มีปัญหากับการเรียนรู้รูปแบบที่แตกต่างกัน แต่มีบางกรณีที่คุณอาจได้รับสีแบบไดนามิกในฐานสิบหกและต้องสร้าง CSS จากรันไทม์ ขั้นตอนนี้ต้องใช้ขั้นตอนพิเศษในการแปลงจากฐานสิบหกเป็นทศนิยมหากคุณต้องการเพิ่มอัลฟ่าลงไปซึ่งเป็น clunky
Beejor

13

Chrome 52+ รองรับ alpha hex:

background: #56ff0077;

4
ฉันรู้สึกตื่นเต้นที่ได้เห็นสิ่งนี้และลองใช้งานใน devtools บน Chrome 55 ไม่มีลูกเต๋าข้อผิดพลาดในฐานะมูลค่าทรัพย์สินที่ไม่ถูกต้อง ...¯\_(ツ)_/¯
ericsoco

1
ดูเหมือนว่าจะมีปัญหาหลายอย่างนี่คือหน้าสถานะของสถานที่
Billy

Chrome ได้ลบการสนับสนุน Safari และ Firefox มีการสนับสนุน ห้ามใช้สิ่งนี้
คดี

5
ตั้งแต่เดือนกรกฎาคม 2019 มี 84.5% ของเบราว์เซอร์ทั้งหมดทั่วโลกที่สนับสนุนคุณสมบัตินี้ caniuse.com/#search=rrggbbaa
André Kuhlmann

10

การใช้งานred, green, blueแปลง RGBA:

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

4
SASS รองรับพื้นหลังสี: rgba ($ color, .2);
djibe

1
สิ่งเหล่านี้ไม่ใช่วิธีการ CSS ที่ถูกต้อง - คุณควรระบุว่า
Piotr Karbownik

7

ฉันกลัวว่าเป็นไปไม่ได้ rgbaรูปแบบที่คุณรู้ว่าเป็นเพียงคนเดียว


1
@mdmullinax: แต่ใครจะระบุสีฐานสิบหกในสัญลักษณ์ HSL?
BoltClock

1
ฉันทุกอย่างในชีวิตร่วมกับสัญกรณ์ HSLA ก็รุ่นสาธิต :)
MikeM

@mdmullinax: โอ้จริง ๆ แล้วมันยอดเยี่ยมมาก!
BoltClock

6
@mdmullinax: นี่อาจทำให้คุณพอใจหากคุณยังไม่เคยเห็น: mothereffinghsl.com
BoltClock

@BoltClock ฉันชอบไซต์นั้น Paul Irish เป็นผู้ชนะ
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

เจ้าชายที่มีเสน่ห์:

Internet explorer เท่านั้นที่อนุญาตให้มีสีฐานสิบหกไบต์ในรูปแบบของ ARGB โดยที่ A คือช่องอัลฟ่า มันสามารถใช้ในตัวกรองไล่ระดับสีเช่น:

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

โดยที่ dir สามารถเป็น: 1 (แนวนอน) หรือ 0 (แนวตั้ง) และสตริงสีสามารถเป็นสีฐานสิบหก (# FFAAD3) หรือสีฐานสิบหก (# 88FFAAD3)



0

สัญลักษณ์สีต่างกันคือสิ่งที่คุณจะต้องเรียนรู้
Kulerช่วยให้คุณมีโอกาสที่ดีขึ้นในการค้นหาสีและในหลาย ๆ สัญลักษณ์
Hex ไม่แตกต่างจาก RGB, FF = 255 และ 00 = 0 แต่นั่นคือสิ่งที่คุณรู้ ดังนั้นในทางหนึ่งคุณจะต้องเห็นภาพ
ฉันใช้ Hex, RGBA และ RGB การแปลงด้วยตนเองจะช่วยให้คุณจำสีและรหัสของมันได้ 100 สี
สำหรับการแปลงมวลเขียนสคริปต์เช่นเดียวกับที่ได้รับโดย Alarie มีการระเบิดด้วยสี


-2

ทำไมไม่ใช้ background-color: #ff0000; opacity: 0.5; filter: alpha(opacity=50); /* in IE */

หากคุณกำหนดเป้าหมายสีสำหรับข้อความหรือองค์ประกอบอาจจะทำได้ง่ายกว่ามาก


9
ความทึบ -1 ส่งผลกระทบต่อเนื้อหาทั้งหมดไม่ใช่แค่สีพื้นหลัง
yunzen

จากนั้นวัตถุสามารถเพิ่มเป็นสองเท่าได้หนึ่งควรเป็นองค์ประกอบที่บรรจุอีกชิ้นหนึ่งควรอยู่ในคอนเทนเนอร์ที่มีความทึบ เพราะจากคำถามที่ผู้ใช้ต้องการวิธีอื่นนอกเหนือจาก rgba ทั่วไป
เจ้าชายมีเสน่ห์

1
เขายังคงต้องการผลลัพธ์ที่เหมือนกันและฉันควรใช้ rgba () หรือสัญลักษณ์อื่น ๆ มากกว่าการแก้ไข HTML
FelipeAls

นี่คือคำตอบที่ฉันกำลังมองหาปล่อยให้สีหกเหลี่ยมอยู่คนเดียวและเปลี่ยนความทึบโดยใช้opacityคุณสมบัติ css
ที่นี่
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.