คุณไม่สามารถใช้ค่าสีที่มีอยู่แล้วใช้ช่องอัลฟากับค่านั้นได้ กล่าวคือคุณไม่สามารถใช้ค่าฐานสิบหกที่มีอยู่เช่น#f0f0f0
ให้องค์ประกอบอัลฟาและใช้ค่าผลลัพธ์กับคุณสมบัติอื่น
อย่างไรก็ตามคุณสมบัติที่กำหนดเองช่วยให้คุณสามารถแปลงค่าฐานสิบหกของคุณเป็น RGB triplet เพื่อใช้กับrgba()
เก็บค่านั้นในคุณสมบัติที่กำหนดเอง (รวมถึงเครื่องหมายจุลภาค!) แทนที่ค่านั้นโดยใช้var()
ในrgba()
ฟังก์ชันด้วยค่าอัลฟาที่คุณต้องการและมันจะ เพียงแค่ทำงาน:
:root {
--color: 240, 240, 240;
}
body {
color: #000;
background-color: #000;
}
#element {
background-color: rgba(var(--color), 0.8);
}
<p id="element">If you can see this, your browser supports custom properties.</p>
ดูเหมือนว่าเกือบจะดีเกินไปที่จะเป็นจริง 1มันทำงานอย่างไร?
ความมหัศจรรย์อยู่ที่ความจริงที่ว่าค่าของคุณสมบัติที่กำหนดเองจะถูกแทนที่เช่นเดียวกับเมื่อแทนที่var()
การอ้างอิงในค่าคุณสมบัติก่อนที่จะคำนวณมูลค่าของคุณสมบัตินั้น ซึ่งหมายความว่าเท่าคุณสมบัติแบบกำหนดเองที่มีความกังวลค่าของ--color
ในตัวอย่างของคุณไม่ได้เป็นค่าสีที่ทุกคนจนกว่าvar(--color)
แสดงออกปรากฏที่ไหนสักแห่งที่คาดว่าค่าสี (และเฉพาะในบริบทนั้น) จากส่วน 2.1ของข้อมูลจำเพาะตัวแปร css:
ไวยากรณ์ที่อนุญาตสำหรับคุณสมบัติแบบกำหนดเองนั้นอนุญาตอย่างยิ่ง การผลิต <declaration-value> ตรงกับลำดับของโทเค็นอย่างน้อยหนึ่งรายการตราบใดที่ลำดับนั้นไม่มี <bad-string-token>, <bad-url-token>, ไม่ตรงกัน <) - โทเค็น>, <] - โทเค็น> หรือ <} - โทเค็น> หรือโทเค็น <semicolon-token> ระดับบนสุดหรือโทเค็น <delim-token> ที่มีค่า "!"
ตัวอย่างเช่นต่อไปนี้เป็นคุณสมบัติแบบกำหนดเองที่ถูกต้อง:
--foo: if(x > 5) this.width = 10;
แม้ว่าค่านี้จะไม่มีประโยชน์ในฐานะตัวแปรอย่างเห็นได้ชัดเนื่องจากค่านี้จะไม่ถูกต้องในคุณสมบัติปกติใด ๆ ก็ตาม แต่ JavaScript อาจอ่านและดำเนินการได้
และส่วนที่ 3 :
หากคุณสมบัติมีฟังก์ชัน var () อย่างน้อยหนึ่งฟังก์ชันและฟังก์ชันเหล่านั้นถูกต้องตามหลักไวยากรณ์ไวยากรณ์ของคุณสมบัติทั้งหมดจะต้องถือว่าถูกต้องในเวลาแยกวิเคราะห์ มีการตรวจสอบไวยากรณ์ในเวลาที่คำนวณค่าเท่านั้นหลังจากแทนที่ฟังก์ชัน var () แล้ว
ซึ่งหมายความว่า240, 240, 240
ค่าที่คุณเห็นด้านบนจะถูกแทนที่โดยตรงในrgba()
ฟังก์ชันก่อนที่จะคำนวณการประกาศ ดังนั้นสิ่งนี้:
#element {
background-color: rgba(var(--color), 0.8);
}
ซึ่งดูเหมือนจะไม่เป็น CSS ที่ถูกต้องในตอนแรกเนื่องจากrgba()
คาดว่าจะมีค่าตัวเลขที่คั่นด้วยจุลภาคไม่น้อยกว่าสี่ค่ากลายเป็น:
#element {
background-color: rgba(240, 240, 240, 0.8);
}
ซึ่งแน่นอนว่าเป็น CSS ที่ถูกต้องอย่างสมบูรณ์
ก้าวไปอีกขั้นคุณสามารถจัดเก็บองค์ประกอบอัลฟาในคุณสมบัติที่กำหนดเองได้:
:root {
--color: 240, 240, 240;
--alpha: 0.8;
}
และแทนที่ด้วยผลลัพธ์เดียวกัน:
#element {
background-color: rgba(var(--color), var(--alpha));
}
สิ่งนี้ช่วยให้คุณมีค่าอัลฟาที่แตกต่างกันซึ่งคุณสามารถสลับไปมาได้ทันที
1 ก็คือถ้าคุณกำลังเรียกใช้ข้อมูลโค้ดในเบราว์เซอร์ที่ไม่รองรับคุณสมบัติที่กำหนดเอง