Anda tidak dapat mengambil nilai warna yang sudah ada dan menerapkan saluran alfa padanya. Yaitu, Anda tidak dapat mengambil nilai hex yang sudah ada seperti #f0f0f0
, memberinya komponen alfa dan menggunakan nilai yang dihasilkan dengan properti lain.
Namun, sifat kustom memungkinkan Anda untuk mengkonversi nilai hex Anda menjadi triplet RGB untuk digunakan dengan rgba()
, toko yang nilai dalam properti kustom (termasuk koma!), Pengganti yang nilai menggunakan var()
menjadi rgba()
fungsi dengan yang diinginkan nilai alpha Anda, dan itu akan hanya bekerja:
: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>
Ini sepertinya terlalu bagus untuk menjadi kenyataan. 1 Bagaimana cara kerjanya?
Keajaibannya terletak pada kenyataan bahwa nilai properti kustom diganti seperti saat mengganti var()
referensi dalam nilai properti, sebelum nilai properti tersebut dihitung. Ini berarti bahwa sejauh sifat kustom yang bersangkutan, nilai --color
dalam contoh Anda bukanlah nilai warna sama sekali sampai suatu var(--color)
ekspresi muncul di suatu tempat yang mengharapkan nilai warna (dan hanya dalam konteks itu). Dari bagian 2.1 spesifikasi variabel css:
Sintaks yang diizinkan untuk properti kustom sangat permisif. Produksi <declaration-value> cocok dengan urutan apa pun dari satu atau beberapa token, selama urutan tersebut tidak berisi <bad-string-token>, <bad-url-token>, tidak cocok <) - token>, <] - token>, atau <} - token>, atau token <semicolon-token> tingkat atas atau token <delim-token> dengan nilai "!".
Misalnya, berikut ini adalah properti khusus yang valid:
--foo: if(x > 5) this.width = 10;
Meskipun nilai ini jelas tidak berguna sebagai variabel, karena tidak valid di properti normal mana pun, nilai ini mungkin dibaca dan ditindaklanjuti oleh JavaScript.
Dan bagian 3 :
Jika sebuah properti berisi satu atau beberapa fungsi var (), dan fungsi tersebut valid secara sintaksis, seluruh tata bahasa properti harus dianggap valid pada waktu parse. Ini hanya diperiksa sintaksnya pada waktu nilai komputasi, setelah fungsi var () diganti.
Ini berarti bahwa 240, 240, 240
nilai yang Anda lihat di atas diganti langsung ke dalam rgba()
fungsi sebelum deklarasi dihitung. Jadi ini:
#element {
background-color: rgba(var(--color), 0.8);
}
yang pada awalnya tampaknya tidak valid karena rgba()
mengharapkan tidak kurang dari empat nilai numerik yang dipisahkan koma, menjadi ini:
#element {
background-color: rgba(240, 240, 240, 0.8);
}
yang, tentu saja, merupakan CSS yang benar-benar valid.
Selangkah lebih maju, Anda dapat menyimpan komponen alfa di properti kustomnya sendiri:
:root {
--color: 240, 240, 240;
--alpha: 0.8;
}
dan gantikan, dengan hasil yang sama:
#element {
background-color: rgba(var(--color), var(--alpha));
}
Hal ini memungkinkan Anda untuk memiliki nilai alfa berbeda yang dapat Anda tukar dengan cepat.
1 Ya, jika Anda menjalankan cuplikan kode di browser yang tidak mendukung properti khusus.