Akses lebih banyak warna dan ruang baru

Dokumen ini adalah bagian dari panduan warna CSS definisi tinggi.

CSS Warna 4 menguraikan banyak fitur dan alat baru untuk CSS dan warna. Codepen berikut menampilkan semua sintaksis warna baru dan lama secara bersamaan:

Baca ringkasan ruang warna klasik.

Spesifikasi level 4 memperkenalkan 12 ruang warna baru untuk mencari warna, naik dari 7 gamut baru yang dibagikan sebelumnya:

Inilah ruang warna web baru

Ruang warna berikut menawarkan akses ke gamut yang lebih besar daripada sRGB. Ruang warna display-p3 menawarkan warna hampir dua kali lebih banyak daripada RGB, sedangkan Rec2020 menawarkan hampir dua kali lebih banyak dari display-p3. Banyak sekali warnanya!

Lima segitiga bertumpuk dengan berbagai warna untuk membantu menggambarkan
  hubungan dan ukuran setiap ruang warna baru.

Fungsi color()

Dukungan Browser

  • 111
  • 111
  • 113
  • 15

Sumber

Fungsi color() baru dapat digunakan untuk setiap ruang warna yang menentukan warna dengan saluran R, G, dan B. color() mengambil parameter ruang warna terlebih dahulu, lalu serangkaian nilai saluran untuk RGB, dan (opsional) beberapa alfa.

Anda akan menemukan banyak ruang warna baru menggunakan fungsi ini karena memiliki fungsi khusus seperti rgb, srgb, hsl, hwb, dll., bertambah menjadi daftar panjang, lebih mudah untuk menjadikan ruang warna sebagai parameter.

Kelebihan

  • Ruang yang dinormalkan untuk mengakses ruang warna yang menggunakan saluran RGB.
  • Dapat meningkatkan skala ke ruang warna berbasis RGB gamut apa pun.

Kekurangan

  • Tidak berfungsi dengan HSL, HWB, LCH, okLCH, atau okLAB
.valid-css-color-function-colors {
  --srgb: color(srgb 1 1 1);
  --srgb-linear: color(srgb-linear 100% 100% 100% / 50%);
  --display-p3: color(display-p3 1 1 1);
  --rec2020: color(rec2020 0 0 0);
  --a98-rgb: color(a98-rgb 1 1 1 / 25%);
  --prophoto: color(prophoto-rgb 0% 0% 0%);
  --xyz: color(xyz 1 1 1);
}

sRGB melalui color()

Segitiga sRGB adalah satu-satunya satu-satunya yang sepenuhnya buram, untuk membantu memvisualisasikan ukuran gamut.

Ruang warna ini menawarkan fitur yang sama dengan rgb(). Sistem ini juga menawarkan desimal antara 0 dan 1, digunakan persis seperti 0% hingga 100%.

Kelebihan

  • Hampir semua layar mendukung rentang ruang warna ini.
  • Dukungan alat desain.

Kekurangan

  • Tidak linear (seperti lch())
  • Tidak ada warna gamut lebar.
  • Gradien sering kali melewati zona mati.
.valid-css-srgb-colors {
  --percents: color(srgb 34% 58% 73%);
  --decimals: color(srgb .34 .58 .73);

  --percents-with-opacity: color(srgb 34% 58% 73% / 50%);
  --decimals-with-opacity: color(srgb .34 .58 .73 / .5);

  /* empty */
  --empty-channels-black: color(srgb none none none);
  --empty-channels-black2: color(srgb);
}

sRGB linear melalui color() {#linear-sRGB}

Segitiga sRGB adalah satu-satunya satu-satunya yang sepenuhnya buram, untuk membantu memvisualisasikan ukuran gamut.

Alternatif linear untuk RGB ini menawarkan intensitas saluran yang dapat diprediksi.

Kelebihan

  • Akses langsung ke saluran RGB, yang berguna untuk berbagai hal seperti game engine atau pertunjukan cahaya.

Kekurangan

  • Tidak linear secara persepsi.
  • Hitam dan putih dikemas di tepi.
.valid-css-srgb-linear-colors {
  --percents: color(srgb-linear 34% 58% 73%);
  --decimals: color(srgb-linear .34 .58 .73);

  --percents-with-opacity: color(srgb-linear 34% 58% 73% / 50%);
  --decimals-with-opacity: color(srgb-linear .34 .58 .73 / .5);

  /* empty */
  --empty-channels-black: color(srgb-linear none none none);
  --empty-channels-black2: color(srgb-linear);
}

Gradien akan dibahas secara mendetail nanti, tetapi akan lebih baik jika Anda melihat srgb dan linear-srgb gradien hitam ke putih untuk mengilustrasikan perbedaannya:

Dua gradien horizontal ditampilkan dalam dua baris untuk memudahkan perbandingan. Gradien sRGB halus, seperti yang telah kita lihat selama bertahun-tahun. Meski demikian, gradien linear sRGB sangat gelap pada 5% pertama dan sangat terang pada 10% terakhir, membuat bagian tengah berwarna abu-abu muda untuk waktu yang lama.

LCH

Dukungan Browser

  • 111
  • 111
  • 113
  • 15

Sumber

LCH memperkenalkan sintaksis untuk mengakses warna di luar gamut RGB. Hal ini juga yang pertama memudahkan pembuatan warna out-of-gamut untuk tampilan. Ini karena semua warna ruang CIE (lch, oklch, lab, oklab) dapat mewakili seluruh spektrum warna yang terlihat oleh manusia.

Ruang warna ini dibuat berdasarkan penglihatan manusia dan menawarkan sintaksis untuk menentukan salah satu warna tersebut dan lainnya. Saluran LCH adalah kecerahan, kroma dan rona. Hue adalah sudut, seperti di HSL dan HWB. Cahaya adalah nilai antara 0 dan 100. Ini adalah kecerahan yang berfokus pada manusia "yang bersifat linier secara persepsi". Chroma mirip dengan saturasi; rentangnya dapat berkisar dari 0 hingga 230, tetapi secara teknis tidak terbatas.

Kelebihan

  • Manipulasi warna yang dapat diprediksi berkat linear secara persepsi, sebagian besar (lihat oklch).
  • Menggunakan saluran yang sudah dikenal.
  • Sering kali memiliki gradien yang cerah.

Kekurangan

  • Mudah untuk keluar dari gamut.
  • Terkadang, gradien mungkin memerlukan titik tengah penyesuaian untuk mencegah pergeseran hue.
.valid-css-lch-colors {
  --percent-and-degrees: lch(58% 32 241deg);
  --just-the-degrees: lch(58 32 241deg);
  --minimal: lch(58 32 241);

  --percent-opacity: lch(58% 32 241 / 50%);
  --decimal-opacity: lch(58% 32 241 / .5);

  /* chromaless and hueless */
  --empty-channels-white: lch(100 none none);
  --empty-channels-black: lch(none none none);
}

LAB

Dukungan Browser

  • 111
  • 111
  • 113
  • 15

Sumber

Ruang warna lain dibuat untuk mengakses gamut CIE, sekali lagi dengan dimensi pencerahan linear persepsi (L). A dan B di LAB mewakili sumbu unik penglihatan warna manusia: merah-hijau, dan biru-kuning. Ketika A diberi nilai positif, maka warna merah akan ditambahkan, dan warna hijau akan ditambahkan saat di bawah 0. Ketika B diberi bilangan positif, maka nilai kuning ditambahkan, sedangkan nilai negatif ditambahkan ke biru.

Kelebihan

  • Gradien konsisten secara persepsi.
  • Rentang dinamis tinggi.

Kekurangan

  • Potensi perubahan hue.
  • Sulit untuk menentukan penulis atau menebak warna saat membaca nilai-nilai.
.valid-css-lab-colors {
  --percent-and-degrees: lab(58% -16 -30);
  --minimal: lab(58 -16 -30);

  --percent-opacity: lab(58% -16 -30 / 50%);
  --decimal-opacity: lab(58% -16 -30 / .5);

  /* chromaless and hueless */
  --empty-channels-white: lab(100 none none);
  --empty-channels-black: lab(none none none);
}

OKE

Dukungan Browser

  • 111
  • 111
  • 113
  • 15,4

Sumber

Ruang warna ini bersifat korektif untuk LCH. Dan seperti LCH, (L) terus mewakili kecerahan linear secara persepsi, C untuk kroma dan H untuk hue.

Ruang ini terasa familier jika Anda pernah bekerja dengan HSL atau LCH. Pilih sudut pada roda warna untuk H, pilih tingkat kecerahan atau kegelapan dengan menyesuaikan L, tetapi kemudian kita memiliki kroma, bukan saturasi. Keduanya cukup identik, kecuali penyesuaian pada kecerahan dan kroma cenderung berpasangan. Jika tidak, akan mudah untuk meminta warna kroma tinggi yang berada di luar gamut target.

Kelebihan

  • Tidak ada kejutan ketika bekerja dengan corak warna biru dan ungu.
  • Cahaya yang linear secara persepsi.
  • Menggunakan saluran yang sudah dikenal.
  • Rentang dinamis tinggi.
  • Memiliki pemilih warna modern - karya Evil Martians.

Kekurangan

  • Mudah untuk keluar dari gamut.
  • Baru dan relatif belum dijelajahi.
  • Sedikit pemilih warna.
.valid-css-oklch-colors {
  --percent-and-degrees: oklch(64% .1 233deg);
  --just-the-degrees: oklch(64 .1 233deg);
  --minimal: oklch(64 .1 233);

  --percent-opacity: oklch(64% .1 233 / 50%);
  --decimal-opacity: oklch(64% .1 233 / .5);

  /* chromaless and hueless */
  --empty-channels-white: oklch(100 none none);
  --empty-channels-black: oklch(none none none);
}

OKLAB

Dukungan Browser

  • 111
  • 111
  • 113
  • 15,4

Sumber

Ruang ini bersifat korektif untuk LAB. Class ini juga diklaim sebagai ruang yang dioptimalkan untuk kualitas pemrosesan gambar. Bagi kita, ini berarti gradien dan kualitas manipulasi fungsi warna dalam CSS.

Kelebihan

  • Ruang default untuk animasi dan interpolasi.
  • Cahaya yang linear secara persepsi.
  • Tidak ada pergeseran hue seperti LAB.
  • Gradien konsisten secara persepsi.

Kekurangan

  • Baru dan relatif belum dijelajahi.
  • Sedikit pemilih warna.
.valid-css-oklab-colors {
  --percent-and-degrees: oklab(64% -.1 -.1);
  --minimal: oklab(64 -.1 -.1);

  --percent-opacity: oklab(64% -.1 -.1 / 50%);
  --decimal-opacity: oklab(64% -.1 -.1 / .5);

  /* chromaless and hueless */
  --empty-channels-white: oklab(100 none none);
  --empty-channels-black: oklab(none none none);
}

Layar P3

Dukungan Browser

  • 111
  • 111
  • 113
  • 15

Sumber

Segitiga P3 Display adalah satu-satunya yang sepenuhnya buram, untuk membantu
  memvisualisasikan ukuran gamut. Terlihat seperti nomor 2 dari yang terkecil.

Tampilan P3 gamut dan ruang warna menjadi populer sejak Apple mendukungnya sejak 2015 di iMac. Apple juga mendukung display-p3 di halaman web melalui CSS sejak 2016, lima tahun lebih cepat dari browser lainnya. Jika berasal dari sRGB, ini adalah ruang warna yang tepat untuk mulai bekerja saat Anda memindahkan gaya ke rentang dinamis yang lebih tinggi.

Kelebihan

  • Dukungan hebat, dianggap sebagai dasar pengukuran untuk layar HDR.
  • 50% lebih banyak warna daripada sRGB.
  • DevTools menawarkan pemilih warna yang bagus.

Kekurangan

  • Pada akhirnya, akan dilampaui oleh ruang Rec2020 dan CIE.
.valid-css-display-p3-colors {
  --percents: color(display-p3 34% 58% 73%);
  --decimals: color(display-p3 .34 .58 .73);

  --percent-opacity: color(display-p3 34% 58% 73% / 50%);
  --decimal-opacity: color(display-p3 .34 .58 .73 / .5);

  /* chromaless and hueless */
  --empty-channels-black: color(display-p3 none none none);
  --empty-channels-black2: color(display-p3);
}

Rec2020

Dukungan Browser

  • 111
  • 111
  • 113
  • 15

Sumber

Segitiga Rec2020 adalah satu-satunya satu-satunya yang sepenuhnya buram, untuk membantu
  memvisualisasikan ukuran gamut. Terlihat seperti nomor 2 dari yang terbesar.

Rec2020 adalah bagian dari gerakan UHDTV (televisi ultra-high-definition), yang menyediakan berbagai warna untuk digunakan dalam media 4k dan 8k. Rec2020 adalah gamut berbasis RGB lainnya, lebih besar dari display-p3, tetapi tidak sama umum di antara konsumen seperti Display P3.

Kelebihan

  • Warna Ultra HD.

Kekurangan

  • Tidak terlalu umum di kalangan konsumen.
  • Tidak biasa ditemukan pada perangkat genggam atau tablet.
.valid-css-rec2020-colors {
  --percents: color(rec2020 34% 58% 73%);
  --decimals: color(rec2020 .34 .58 .73);

  --percent-opacity: color(rec2020 34% 58% 73% / 50%);
  --decimal-opacity: color(rec2020 .34 .58 .73 / .5);

  /* chromaless and hueless */
  --empty-channels-black: color(rec2020 none none none);
  --empty-channels-black2: color(rec2020);
}

A98 RGB {#a98-RGB}

Dukungan Browser

  • 111
  • 111
  • 113
  • 15

Sumber

Segitiga A98 adalah satu-satunya gambar yang sepenuhnya buram, untuk membantu memvisualisasikan ukuran gamut. Ikon ini terlihat seperti segitiga ukuran tengah.

Singkatan dari Adobe 1998 RGB, A98 RGB dibuat oleh Adobe untuk menampilkan sebagian besar warna yang dapat dicapai dari printer CMYK. RGB menawarkan lebih banyak warna daripada sRGB, terutama sian dan rona hijau.

Kelebihan

  • Lebih besar dari ruang warna sRGB dan Display P3.

Kekurangan

  • Bukan ruang umum yang digunakan desainer digital.
  • Tidak banyak orang yang memindahkan palet dari CMYK.
.valid-css-a98-rgb-colors {
  --percents: color(a98-rgb 34% 58% 73%);
  --decimals: color(a98-rgb .34 .58 .73);

  --percent-opacity: color(a98-rgb 34% 58% 73% / 50%);
  --decimal-opacity: color(a98-rgb .34 .58 .73 / .5);

  /* chromaless and hueless */
  --empty-channels-black: color(a98-rgb none none none);
  --empty-channels-black2: color(a98-rgb);
}

RGB ProPhoto

Dukungan Browser

  • 111
  • 111
  • 113
  • 15

Sumber

Segitiga ProPhoto adalah satu-satunya gambar yang sepenuhnya buram, untuk membantu memvisualisasikan ukuran gamut. Sepertinya yang terbesar.

Dibuat oleh Kodak, ruang gamut lebar ini secara unik menawarkan berbagai warna primer dan memiliki perubahan hue minimal saat mengubah kecerahan. Perangkat ini juga mengklaim dapat mencakup 100% warna permukaan dunia nyata seperti yang didokumentasikan oleh Michael Pointer pada tahun 1980.

Kelebihan

  • Pergeseran hue yang minimal saat mengubah kecerahan.
  • Warna primer cerah.

Kekurangan

  • Sekitar 13% warna yang ditawarkan bersifat imajiner, yang berarti warna tersebut tidak berada dalam spektrum yang terlihat manusia.
.valid-css-prophoto-rgb-colors {
  --percents: color(prophoto-rgb 34% 58% 73%);
  --decimals: color(prophoto-rgb .34 .58 .73);

  --percent-opacity: color(prophoto-rgb 34% 58% 73% / 50%);
  --decimal-opacity: color(prophoto-rgb .34 .58 .73 / .5);

  /* chromaless and hueless */
  --empty-channels-black: color(prophoto-rgb none none none);
  --empty-channels-black2: color(prophoto-rgb);
}

XYZ, XYZ-d50, XYZ-d65

Dukungan Browser

  • 111
  • 111
  • 113
  • 15

Sumber

Ruang warna CIE XYZ mencakup semua warna yang terlihat oleh seseorang dengan penglihatan rata-rata. Itulah sebabnya digunakan sebagai referensi standar untuk ruang warna lainnya. Y adalah luminans, X dan Z adalah kemungkinan kroma dalam Y luminans yang ditentukan.

Perbedaan antara d50 dan d65 adalah titik putih, yang mana d50 menggunakan titik putih d50 dan d65 menggunakan titik putih d65.

Istilah Kunci: Titik putih adalah atribut ruang warna, yang berarti putih sebenarnya ada dalam ruang. Untuk layar elektronik, D65 adalah titik putih yang paling umum, dan merupakan kependekan dari 6500 kelvin. Titik putih harus cocok dalam konversi warna agar suhu warna (kehangatan atau kesejukan) tidak terpengaruh.

Kelebihan

  • Akses linier-light memiliki kasus penggunaan yang praktis.
  • Bagus untuk pencampuran warna fisik.

Kekurangan

  • Tidak linear secara persepsi seperti lch, oklch, lab, dan oklab.
.valid-css-xyz-colors {
  --percents: color(xyz 22% 26% 53%);
  --decimals: color(xyz .22 .26 .53);

  --percent-opacity: color(xyz .22 .26 .53 / 50%);
  --decimal-opacity: color(xyz .22 .26 .53 / .5);

  /* chromaless and hueless */
  --empty-channels-black: color(xyz none none none);
  --empty-channels-black2: color(xyz);
}
.valid-css-xyz-d50-colors {
  --percents: color(xyz-d50 22% 26% 53%);
  --decimals: color(xyz-d50 .22 .26 .53);

  --percent-opacity: color(xyz-d50 .22 .26 .53 / 50%);
  --decimal-opacity: color(xyz-d50 .22 .26 .53 / .5);

  /* chromaless and hueless */
  --empty-channels-black: color(xyz-d50 none none none);
  --empty-channels-black2: color(xyz-d50);
}
.valid-css-xyz-d65-colors {
  --percents: color(xyz-d65 22% 26% 53%);
  --decimals: color(xyz-d65 .22 .26 .53);

  --percent-opacity: color(xyz-d65 .22 .26 .53 / 50%);
  --decimal-opacity: color(xyz-d65 .22 .26 .53 / .5);

  /* chromaless and hueless */
  --empty-channels-black: color(xyz-d65 none none none);
  --empty-channels-black2: color(xyz-d65);
}

Ruang warna kustom

Spesifikasi CSS Color 5 juga memiliki jalur untuk mengajarkan ruang warna kustom ke browser. Ini adalah profil ICC yang memberi tahu browser cara menyelesaikan warna.

@color-profile --foo {
  src: url(path/to/custom.icc);
}

Setelah dimuat, akses warna dari profil kustom ini dengan fungsi color() dan tentukan nilai saluran untuknya.

.valid-css-color-from-a-custom-profile {
  background: color(--foo 1 0 0);
}

Jenis interpolasi warna

Transisi dari satu warna ke warna lain dapat ditemukan dalam animasi, gradien, dan pencampuran warna. Transisi ini biasanya ditentukan sebagai warna awal dan warna akhir, yang memungkinkan browser untuk melakukan interpolasi. Interpolasi dalam hal ini berarti menghasilkan serangkaian warna di antara warna untuk membuat transisi yang mulus, bukan transisi instan.

Dengan gradien, interpolasi adalah serangkaian warna di sepanjang bentuk. Dengan animasi, muncul serangkaian warna dari waktu ke waktu.

@keyframes bg {
  0%, 100% {
    background: orange;
  }
  25% {
    background: magenta;
  }
  50% {
    background: lime;
  }
  75% {
    background: cyan;
  }
}

.circle {
  animation: bg 5s ease-in-out infinite;
}

Dengan gradien, warna di antara warna ditampilkan sekaligus:

Yang baru di interpolasi warna

Dengan penambahan gamut dan ruang warna baru, ada opsi tambahan baru untuk interpolasi. Mentransisi warna in hsl dari biru ke putih menghasilkan sesuatu yang sangat berbeda dari sRGB.

.classic-gradient-in-srgb {
  background: linear-gradient(to right, blue, white);
}

.new-gradient-in-hsl {
  background: linear-gradient(in hsl to right, blue, white);
}

Lalu apa yang terjadi jika Anda melakukan transisi dari warna dalam satu ruang ke warna di ruang yang benar-benar berbeda:

.gradient {
  /* oklab will be the common space */
  background: linear-gradient(to right, lch(29.6 131 301), hsl(330 100% 50%));
}

.lch {
  /* lch is specified */
  background: linear-gradient(in lch to right, lch(29.6 131 301), hsl(330 100% 50%));
}

Untungnya, spesifikasi Color 4 memiliki petunjuk untuk browser tentang cara menangani interpolasi lintas warna ini. Untuk .gradient, browser memperhatikan ruang warna yang membedakan dan menggunakan ruang warna default oklab.

Anda mungkin berpikir bahwa browser akan menggunakan lch sebagai ruang warna, karena itu adalah warna pertama, tetapi tidak. Itulah sebabnya saya menampilkan gradien perbandingan kedua .lch. Gradien .lch adalah gradien dari ruang warna lch.

Garis banding yang lebih sedikit berkat warna 16-bit

Sebelum warna ini diterapkan, semua warna disimpan dalam satu bilangan bulat 32-bit untuk mewakili keempat saluran; merah, hijau, biru, dan alfa. Ini adalah 8-bit per saluran dan 2^ 24 warna yang mungkin (mengabaikan alfa). 2 ^ 24 = 16.777.216, "juta warna".

Setelah warna ini berfungsi, empat nilai floating point 16 bit, setiap saluran memiliki floatnya sendiri, bukan disatukan. Ini adalah total 64-bit data, yang menghasilkan lebih dari jutaan warna.

Tindakan ini diperlukan untuk mendukung warna HD. Hal ini meningkatkan jumlah informasi warna yang dapat disimpan, yang memiliki efek samping yang bagus artinya ada lebih banyak warna untuk digunakan oleh browser dalam gradien.

Garis miring gradien adalah saat warna tidak cukup untuk membuat gradien yang mulus dan "garis" warna menjadi terlihat. Banding sangat dimitigasi dengan upgrade ke warna resolusi lebih tinggi.

Enam panel ditampilkan, masing-masing dengan berbagai garis gradasi
    dan sedikit informasi tentang kompresi dan kedalaman bit.
Sumber gambar

Mengontrol interpolasi

Jarak terpendek antara dua titik selalu berupa garis lurus. Dengan interpolasi warna, browser mengambil rute pendek secara default. Pertimbangkan skenario di mana ada dua titik dalam silinder warna HSL. Gradien memperoleh tahapan warna dengan bergerak sepanjang garis di antara dua titik.

linear-gradient(to right, #94e99c, #e06242)
Gradien melingkar dengan garis dari hijau ke merah, lurus
    melalui lingkaran, yang melewati area putih.
(demonstrasi tiruan)
Tampilan vertikal silinder HSL dengan garis di antara perhentian warna

Garis gradien di atas lurus di antara warna kehijauan ke warna kemerahan, yang melewati pusat ruang warna. Meskipun hal di atas sangat bagus untuk membantu pemahaman awal, namun sebetulnya tidak persis seperti itu. Berikut adalah gradien di Codepen berikut, dan jelas tidak berwarna putih di tengahnya seperti demonstrasi tiruan yang ditunjukkan.

Namun, area tengah gradien telah kehilangan vibrasinya. Hal ini karena warna yang paling cerah berada di tepi bentuk ruang warna, bukan di tengah tempat interpolasi berlangsung di dekatnya. Hal ini biasanya disebut sebagai "zona mati". Ada beberapa cara untuk memperbaiki atau mengatasi hal ini.

Menentukan lebih banyak perhentian gradien untuk menghindari zona mati

Teknik untuk menghindari zona mati saat ini adalah dengan menambahkan perhentian warna tambahan dalam gradien yang dengan sengaja memandu interpolasi agar tetap berada dalam rentang yang terang dari ruang warna. Ini benar-benar sebuah solusi, karena perhentian tambahan membantunya bekerja di sekitar zona mati.

Ada alat gradien yang dibuat oleh Erik Kennedy yang menghitung perhentian warna tambahan untuk Anda, untuk membantu Anda menghindari zona mati bahkan di ruang warna yang cenderung mengarah ke arahnya. Dengan meneruskan warna yang sama dari contoh pertama, tetapi mengubah interpolasi warna ke HSL, akan menghasilkan ini:

linear-gradient(90deg, #94e99c, #99e789, #ace67d, #c4e472, #e2e366, #e2bf5a, #e1934e, #e06242);
Gradien lingkaran dengan garis melengkung di bagian tengah dengan banyak gradien berhenti di sepanjang jalan, yang memandunya menjauh dari pusat.
(demonstrasi tiruan)
Tampilan vertikal silinder HSL dengan garis melengkung yang menampilkan 9 perhentian warna

Dengan titik perhentian terpandu, interpolasi tidak lagi garis lurus, tetapi terlihat melengkung di sekitar zona mati, membantu mempertahankan saturasi, yang menghasilkan gradien yang jauh lebih cerah.

Meskipun alat ini berfungsi dengan baik, bagaimana jika Anda bisa memiliki kontrol serupa atau lebih besar langsung dari CSS?

Mengarahkan interpolasi warna

Di Warna 4, kemampuan untuk mengontrol strategi interpolasi hue telah ditambahkan dan merupakan cara baru untuk (:wink:) zona mati. Pikirkan tentang sudut hue dan pertimbangkan gradien 2 perhentian yang hanya mengubah sudut, beralih hue dari 140deg ke 240deg misalnya.

Jenis interpolasi hue yang lebih pendek vs lebih panjang

Secara default, gradien untuk mengambil rute shorter, kecuali jika Anda menentukannya untuk mengambil rute longer. Opsi interpolasi hue mengarahkan rotasi sudut, seperti memberi tahu seseorang untuk belok ke kiri, bukan ke kanan (heh, Zoolander):

Visual lingkaran gradien yang sama seperti sebelumnya, tetapi kali ini ada lingkaran dalam yang digambar yang menunjukkan jalan panjang vs. jalan pendek.

Dalam contoh jarak interpolasi hue, jalur pendek dan jalur panjang disimulasikan untuk menggambarkan perbedaannya. Jarak pendek memiliki lebih sedikit corak warna karena telah melakukan perjalanan dengan jarak yang paling sedikit, sedangkan jarak jauh telah melalui lebih banyak corak.

Meningkatkan vs menurunkan interpolasi hue

Ada dua strategi interpolasi hue lagi di Warna 4, tetapi strategi tersebut eksklusif untuk ruang warna silinder. Tetap menggunakan dua warna dari contoh sebelumnya, visual kini menunjukkan cara kerja peningkatan dan penurunan.

Codepen di atas menggunakan ColorJS untuk menunjukkan hasil yang diharapkan. CSS yang akan Anda tulis untuk mencapai efek yang sama tanpa library JavaScript adalah:

.longer-hue-interpolation-in-css {
  background: linear-gradient(
    to right in hsl longer hue,
    hsl(180deg 100% 75%),
    hsl(240deg 100% 75%)
  );
}

.decreasing-hue-interpolation-in-css {
  background: linear-gradient(
    to right in hsl decreasing hue,
    hsl(180deg 100% 75%),
    hsl(240deg 100% 75%)
  );
}

Untuk menutup interpolasi hue, berikut adalah playground yang menyenangkan tempat Anda dapat mengubah hue antara 2 perhentian warna dan melihat efek pilihan interpolasi hue serta bagaimana ruang warna mengubah hasil gradien. Efeknya bisa sangat berbeda; anggap ini sebagai empat trik baru yang baru saja masuk ke panel warna Anda.

Gradien dalam ruang warna yang berbeda

Setiap ruang warna, diberi bentuk dan pengaturan warna yang unik, akan menghasilkan gradien yang berbeda. Pada contoh berikut, lihat cara setiap ruang warna menangani hal tersebut secara berbeda, terutama pada biru ke putih. Perhatikan berapa banyak yang menjadi ungu di tengah; itu disebut pergeseran hue selama interpolasi.

Beberapa gradien di ruang ini lebih dinamis daripada yang lain atau bergerak lebih sedikit melalui zona mati. Ruang seperti lab mengemas warna bersama dengan cara yang dioptimalkan untuk saturasi, bukan ruang yang dioptimalkan agar manusia dapat menulis warna seperti hwb().

.hwb {
  background: linear-gradient(to right, hwb(250 10% 10%), hwb(150 10% 10%));
}
.lab {
  background: linear-gradient(to right, lab(30 59.4 -96), lab(80 -64 36.2));
}

Demo di atas, meskipun kecil dalam hasilnya, menunjukkan interpolasi yang lebih konsisten dengan lab. Sintaks lab tidak mudah dibaca, tetapi ada angka negatif yang sangat asing ketika berasal dari rgb atau hsl. Kabar baik, kita dapat menggunakan hwb untuk sintaksis yang sudah dikenal, tetapi meminta agar gradien diinterpolasi sepenuhnya dalam ruang warna lain, seperti oklab.

.hwb {
  background: linear-gradient(in hwb to right, hwb(250 10% 10%), hwb(150 10% 10%));
}
.lab {
  background: linear-gradient(in oklab to right, hwb(250 10% 10%), hwb(150 10% 10%));
}

Contoh ini menggunakan warna yang sama pada hwb, tetapi menentukan ruang warna untuk interpolasi ke hwb atau oklab. hwb adalah ruang warna yang bagus untuk getaran tinggi, tetapi mungkin dengan zona mati atau titik terang (lihat hot spot sian pada contoh atas). oklab sangat bagus untuk gradien linear persepsi yang tetap saturasi. Fitur ini sangat menyenangkan karena Anda dapat mencoba beberapa ruang warna berbeda untuk melihat gradien mana yang paling Anda sukai.

Berikut adalah Codepen yang bereksperimen dengan gradien dan ruang warna, strategi mencampur dan mencocokkan untuk mengeksplorasi kemungkinannya. Bahkan transisi dari hitam ke putih pun berbeda di setiap ruang warna!

Penjepit gamut

Ada skenario saat warna dapat meminta sesuatu di luar gamut. Pertimbangkan warna berikut:

rgb(300 255 255)

Batas maksimum untuk saluran warna di ruang warna rgb adalah 255, tetapi di sini 300 ditentukan untuk merah. Apa yang terjadi? Penjepit gamut.

Clamping adalah saat informasi tambahan dihapus begitu saja. 300 menjadi 255 secara internal untuk mesin warna. Warnanya sekarang telah dibatasi di dalam ruangnya.

Memilih ruang warna

Setelah mempelajari ruang warna ini dan efeknya, banyak orang merasa kewalahan dan ingin tahu "satu" mana yang harus dipilih. Berdasarkan studi dan pengalaman saya, saya tidak melihat satu ruang warna sebagai satu warna untuk semua tugas saya. Masing-masing memiliki momen ketika menghasilkan hasil yang diinginkan.

Jika ada satu ruang terbaik, tidak akan ada begitu banyak ruang baru yang diperkenalkan.

Namun, saya dapat mengatakan bahwa ruang CIE—lab, oklab, lch, dan oklch—adalah tempat awal saya. Jika hasilnya tidak sesuai dengan yang saya cari, maka saya akan menguji bidang lainnya. Untuk mencampur warna dan membuat gradien, saya setuju dengan pilihan spesifikasi default oklab. Untuk sistem warna dan warna UI keseluruhan, saya suka oklch.

Berikut adalah beberapa artikel di mana orang-orang telah membagikan strategi warna terbaru mereka mengingat ruang dan fitur warna baru ini. Misalnya, Andrey Sitnik telah menggunakan oklch secara menyeluruh, mungkin mereka akan meyakinkan Anda untuk melakukan hal yang sama:

  1. OKLCH di CSS: alasan kita beralih dari RGB dan HSL oleh Andrey Sitnik
  2. Color Formats oleh Josh W. Comeau
  3. OK, OKLCH oleh Chris Coyier

Langkah berikutnya

Setelah memahami ruang dan alat warna baru, Anda dapat bermigrasi ke warna HD.

Lebih banyak getaran, manipulasi dan interpolasi yang konsisten, dan secara keseluruhan memberikan pengalaman yang lebih berwarna bagi pengguna.

Baca referensi warna lainnya dari panduan ini.