Yüksek Çözünürlüklü CSS Renk Kılavuzu

CSS Renk 4, web'e daha fazla renk, değişiklik işlevleri ve daha iyi renk geçişleri gibi geniş renk gamı araçları ve özellikleri sunar.

Adam Argyle
Adam Argyle

25 yıldan uzun süredir sRGB (standart kırmızı yeşil mavi), CSS gradyanları ve renkleri için rgb(), hsl() ve onaltılık gibi renk alanı seçenekleri bulunan tek renk gamı olmuştur. Ekranlar arasında en yaygın olan renk gamı özelliğidir ve ortak bir paydadır. Bu renk gamı içindeki renkleri belirtmeye çok alıştık.

Görülme sayısına göre en popüler renk biçimleri.
https://almanac.httparchive.org/tr/2022/css#colors

Ekranlar çok çeşitli renkler gösterebilmeye uygun hale geldikçe, CSS'nin renkleri bu geniş aralıklar içindeki renkleri belirtmek için bir yola ihtiyacı olur. Mevcut renk biçimlerinde, geniş renk aralıkları için dil yoktur.

CSS hiç güncellenmezse sonsuza kadar 90'ların renk aralıklarında kalır, hiçbir zaman resimlerde ve videolarda bulunan geniş yelpaze teklifleriyle eşleşmeye zorlanmazdı. Tutuldu, insan gözünün görebildiği renklerin yalnızca% 30'u gösteriliyor. Başta Lea Verou ve Chris Liley tarafından yazılan bu tuzaktan kaçmamıza yardımcı olduğu için CSS'ye Color Level 4 (Renk Düzeyi 4) teşekkür ederiz.

Chrome 111'de CSS Renk 4 gamları ve renk alanları desteklenirken, 2016'dan beri display-p3 desteği bulunan Safari'ye katıldınız. CSS artık HD (yüksek tanımlı) ekranları destekleyebilir ve HD gamlarındaki renkleri belirtir ve uzmanlıkları olan renk alanları sunar. Bu kılavuzda, bu yeni renk dünyasından yararlanmaya nasıl başlayabileceğiniz açıklanmaktadır.

Geniş ve dar renk gamları arasında geçiş yapan bir dizi resim, renklerin canlılığını ve efektlerini gösteriyor.
Kendiniz deneyin

Desteklenen tarayıcılarda, aralarından seçim yapabileceğiniz% 50 daha fazla renk vardır! 16 milyon rengin kulağa çok hoş geldiğini düşündünüz. Bu yeni alanlardan bazılarının kaç renk gösterebileceğini görene kadar bekleyin. Ayrıca, yeterli bit derinliği olmadığı için bantlı tüm bu gradyanları düşünün, bu da çözülmüştür.

Yeni renk alanları, daha fazla renge (muhtemelen ekranın sahip olduğu en canlı renklere) ek olarak, renk sistemlerini yönetmek ve oluşturmak için benzersiz araçlar ve yöntemler sunar. Örneğin, bundan önce web geliştiricilerin en iyisi olan HSL ve "lightness" kanalımız vardı. Şimdi CSS'de, LCH'nin "algılanan hafifliği"ni kullanabiliyoruz.

Yan yana duran iki renkli tablo. İlk tabloda yaklaşık 10 renkten oluşan bir HSL gökkuşağı, yanında ise bu HSL renklerinin açıklığını temsil eden gri tonlamalı renkler gösterilmektedir. İkinci tabloda ise çok daha az canlı olan bir LCH gökkuşağı gösterilmektedir ancak yanındaki gri tonlamalı renkler tutarlıdır.
    Bu, LCH'nin sağlıklı bir sabit açıklık değerine sahipken HSL'nin nasıl olmadığını gösterir.
Önizleme yapın: https://codepen.io/web-dot-dev/pen/poZgXxy

Dahası, renk geçişleri ve karıştırma bazı iyileştirmeler yapar: renk alanı desteği, ton interpolasyonu seçenekleri ve daha az şerit oluşturma. Aşağıdaki resimde bazı karma yükseltmeler gösterilmektedir. En iyi iki renk karışımı sRGB'dir. En alttaki iki renk kombinasyonu p3 ekranında gösteriliyor. p3 ekranındaki renkler daha canlı. Karışımlar sayesinde orta kısımda tamamen siyah beyaz ortaya çıkıyor. sRGB'nin biraz doygunluğu azalmış göründüğü, ortadaki karışımların ise tam siyah veya beyaz sonuçlar olmadığı bir durumda.

En iyi iki renk karışımı, sRGB renklerine sahip sRGB'dir. En alttaki iki renk kombinasyonu p3 ekranındadır. Display p3 daha canlı renklere sahiptir. Karışımlar orta kısmı siyah ve beyaz gösterir. sRGB biraz solmuş görünürken orta kısımdaki karışımlar siyah beyaz sonuçlardan ibaret değildir.
https://codepen.io/web-dot-dev/pen/poZgXQb

Bu kılavuzda, rengin ne zaman olduğu, nereye gittiği ve CSS'nin web geliştiricilerinin renkleri yönetme özelliğini nasıl etkinleştireceği ve bunu nasıl desteklediği ele alınmaktadır.

Genel bakış

Renk ve web ile ilgili sorun, CSS'nin yüksek çözünürlüklü resimler olmamasıdır. Çoğu kişinin cebinde, üst tarafında veya duvara monte ettiği ekranlar, geniş yelpazede ve yüksek çözünürlüklü renklere sahiptir. Ekranların renk özelliği CSS'ye göre daha hızlı büyüdü. Şimdi CSS buna yetişecek.

"Daha fazla renk"ten çok daha fazlası vardır. Bu makalenin sonunda, daha fazla renk belirleyebilecek, gradyanları iyileştirebilecek ve her bir görev için en iyi renk alanlarını ve renk gamlarını seçebileceksiniz.

Renk gamı nedir?

Gamut, bir şeyin boyutunu temsil eder. "Milyonlarca renk" ifadesi, bir ekranın gamı veya aralarından seçim yapılması gereken renk aralığıyla ilgili bir yorumdur. Aşağıdaki resimde, üç gam karşılaştırılmıştır ve boyut ne kadar büyükse o kadar çok renk sunmaktadır.

Renk gamları, üçgen şekli olarak yan yana karşılaştırılır.
  sRGB en küçük, Rec2020 ise en büyük boyuttur.

Renk gamının da adı olabilir. Örneğin, basketbol topu, beyzbol topu, havalandırma ızgarası ve büyük kahve fincanı gibi. Beden adı, insanların iletişim kurmasına yardımcı olabilir. Bu renk gamı adlarını öğrenmek, iletişim kurmanıza ve bir renk aralığını hızlı bir şekilde anlamanıza yardımcı olur.

Bu makalede, tümü sRGB'den daha geniş bir yelpazeye sahip olan yedi yeni gam tanıtılacak ve hangisini kullanacağınızı seçmenize yardımcı olmak için bunların farklı özellikleri açıklanacaktır:

İnsan görsel gamı

Renk gamları genellikle insan gözünün görebildiğine inandığımız renk gamı ile karşılaştırılır. HVS genellikle aşağıdaki gibi bir kromatiklik diyagramıyla gösterilir:

Canlı bir gradyanla ortasında boş bir üçgen bulunan at nalı şekli.
Kaynak: Wikipedia

En dıştaki şekil insan olarak görebildiğimiz şekildir. İç üçgen ise rgb() fonksiyonları aralığı, yani sRGB renk alanıdır.

Yukarıda üçgenleri gördüğünüz gibi, gam boyutlarını karşılaştırdığımızda, aşağıda üçgenleri de görebilirsiniz. Sektörde renk gamları hakkında iletişim kurma ve bunları karşılaştırma yöntemi budur.

Renk alanı nedir?

Renk alanları, şekil oluşturan ve renklere erişme yöntemi oluşturan bir gamın düzenlemeleridir. Bunların çoğu küp veya silindir gibi basit 3D şekillerdir. Bu renk düzenlemesi, hangi renklerin yan yana olduğunu ve renklere erişip bunları interpolasyon uygulama yöntemiyle belirler.

RGB, renklere 3 eksende koordinatlar belirlenerek erişildiği dikdörtgen renk alanı gibidir. HSL, renklere ton açısı ve 2 eksende koordinatlarla erişilen silindir şeklindeki renk alanıdır

Yan yana yarım kesilmiş, açık bir RGB küpü ve dilimler HSL silindiri kullanılarak her bir boşlukta renklerin nasıl bir araya toplandığı gösteriliyor.
https://en.wikipedia.org/wiki/HSL_and_HSV

4. seviye spesifikasyonu, daha önce paylaşılan 7 yeni gamdaki renkleri aramak için 12 yeni renk alanı sunar:

Bunlar, önceden kullanılabilen 4 renk alanına ek olarak sunulmaktadır:

Renk gamı ve renk alanı özeti

Renk alanı, renk gamının bir renk aralığı olduğu durumlarda renklerin eşlenmesidir. Renk gamını, parçacıkların toplamı ve bu tanecik aralığını barındırmak için yapılmış bir şişe olarak renk alanı olarak düşünün.

Aşağıda Alexey Ardov'un renk alanlarının gösterildiği etkileşimli bir görsel yer almaktadır. Bu demoda kamerayı yakınlaştırın, sürükleyin ve yakınlaştırın. Diğer alanların görselleştirmesini görmek için renk alanını değiştirin.

  • Düşük aralık veya dar gam ile yüksek aralık veya geniş gam gibi çeşitli renkler hakkında konuşmak için renk gamlarını kullanın.
  • Renk düzenlemeleri hakkında konuşmak için renk alanlarını ve bir rengi belirtmek, rengi değiştirmek ve renklerin arabuluculuğu yapmak için kullanılan söz dizimini kullanın.
Çok sayıda renkli noktayla dolu bir küp.
Yukarıda, RGB küp renk alanına sığan sRGB parçacık gamı gösterilmektedir Resim kaynağı

Daha fazla renge, yeni alanlara ve hata ayıklama sonuçlarına erişme

CSS Color 4, CSS ve renk için bir dizi yeni özellik ve aracı özetler. İlk olarak, bu yeni özelliklerden önceki rengi özetleyelim. Ardından, yeni renk alanlarına, söz dizimlerine ve araçlara genel bakış.

Aşağıdaki Codepen, tüm yeni ve eski renk söz dizimini bir arada gösterir:

Klasik renk alanlarının incelenmesi

2000'lerden beri, bir rengi değer olarak kabul eden tüm CSS özellikleri için şunları kullanabiliyorsunuz: onaltılık (onaltılık sayı), rgb(), rgba(), hotpink gibi ada göre veya currentColor gibi anahtar kelimelerle. 2010 yılı civarında tarayıcınıza bağlı olarak CSS hsl() renkleri kullanabilir. Daha sonra 2017'de alfa ile onaltılık kullanıma sunuldu. Son olarak, çok kısa bir süre önce hwb() tarayıcılarda destek almaya başladı.

Bu klasik renk alanlarının tümü, aynı sRGB aralığındaki renge referans verir.

ONALTILIK

Tarayıcı Desteği

  • 1
  • 12
  • 1
  • 1

Kaynak

Onaltılık renk alanı, R, G, B ve A'yı onaltılık sayılarla belirtir. Aşağıdaki kod örneklerinde, bu söz diziminin kırmızı, yeşil ve mavi artı opaklığı belirtebileceği tüm yollar gösterilmektedir.

.valid-css-hex-colors {
  /* classic */
  --3-digits: #49b;
  --6-digits: #4499bb;

  /* hex with opacity */
  --4-digits-opaque: #f9bf;
  --8-digits-opaque: #ff99bbff;
  --4-digits-with-opacity: #49b8;
  --8-digits-with-opacity: #4499bb88;
}

RGB

Tarayıcı Desteği

  • 1
  • 12
  • 1
  • 1

Kaynak

RGB renk alanı, kırmızı, yeşil ve mavi kanallara doğrudan erişim sağlar. 0 ile 255 arasında bir tutarın veya 0 ile 100 arasında bir yüzde değeri olarak belirtilmesine olanak tanır. Bu söz dizimi, teknik özelliklerde bazı söz dizimi normalleştirmelerinden önce kullanılıyordu. Bu yüzden, genel olarak virgül ve virgül yok söz dizimini göreceksiniz. Artık virgül kullanılması gerekmiyor.

.valid-css-rgb-colors {
  --classic: rgb(64, 149, 191);
  --modern: rgb(64 149 191);
  --percents: rgb(25% 58% 75%);

  --classic-with-opacity-percent: rgba(64, 149, 191, 50%);
  --classic-with-opacity-decimal: rgba(64, 149, 191, .5);

  --modern-with-opacity-percent: rgb(64 149 191 / 50%);
  --modern-with-opacity-decimal: rgb(64 149 191 / .5);

  --percents-with-opacity-percent: rgb(25% 58% 75% / 50%);
  --percents-with-opacity-decimal: rgb(25% 58% 75% / 50%);

  --empty-channels: rgb(none none none);
}

HSL

Tarayıcı Desteği

  • 1
  • 12
  • 1
  • 3.1

Kaynak

İnsan dili ve iletişim becerisine odaklanan ilk renk alanlarından biri olan HSL (ton doygunluğu ve açıklık), sRGB gamındaki tüm renkleri sunarken beyninizin kırmızı, yeşil ve mavinin nasıl etkileşimde bulunduğunu bilmesini gerektirmez. RGB gibi, başlangıçta söz diziminde de virgül kullanılıyordu, ancak ileride virgül kullanılması gerekmiyor.

.valid-css-hsl-colors {
  --classic: hsl(200deg, 50%, 50%);
  --modern: hsl(200 50% 50%);

  --classic-with-opacity-percent: hsla(200deg, 50%, 50%, 50%);
  --classic-with-opacity-decimal: hsla(200deg, 50%, 50%, .5);

  --modern-with-opacity-percent: hsl(200 50% 50% / 50%);
  --modern-with-opacity-decimal: hsl(200 50% 50% / .5);

  /* hueless and no saturation */
  --empty-channels-white: hsl(none none 100%);
  --empty-channels-black: hsl(none none 0%);
}

HWB

Tarayıcı Desteği

  • 101
  • 101
  • 96
  • 15

Kaynak

İnsanların rengi tanımlamasına odaklanan bir başka sRGB renk gamı renk alanı da HWB'dir (ton, beyazlık, siyahlık). Yazarlar bir ton seçip beyaz veya siyahı karıştırarak istedikleri rengi bulabilirler.

.valid-css-hwb-colors {
  --modern: hwb(200deg 25% 25%);
  --modern2: hwb(200 25% 25%);

  --modern-with-opacity-percent: hwb(200 25% 25% / 50%);
  --modern-with-opacity-decimal: hwb(200 25% 25% / .5);

  /* hueless and no saturation */
  --empty-channels-white: hwb(none 100% none);
  --empty-channels-black: hwb(none none 100%);
}

Yeni web renk alanlarıyla tanışın

Aşağıdaki renk alanları, sRGB'den daha büyük gamlara erişim sunar. display-p3 renk alanı, RGB'den neredeyse iki kat daha fazla renk sunarken Rec2020, display-p3'ün neredeyse iki katı renk sunar. Bir sürü renk var.

Yeni renk alanlarının her birinin ilişkisini ve boyutunu göstermeye yardımcı olması için farklı renklerde üst üste beş üçgen.

color() işlevi

Tarayıcı Desteği

  • 111
  • 111
  • 113
  • 15

Kaynak

Yeni color() işlevi R, G ve B kanallarındaki renkleri belirten herhangi bir renk alanında kullanılabilir. color() önce renk alanı parametresini, ardından RGB için bir dizi kanal değerini ve isteğe bağlı olarak bir miktar alfa değerini alır.

rgb, srgb, hsl, hwb gibi özel işlevlere sahip olmak uzun bir listeye dönüştüğü ve renk alanının parametre olması daha kolay olduğu için yeni renk alanlarının çoğunun bu işlevi kullandığını görebilirsiniz.

Artıları

  • RGB kanalları kullanan renk alanlarına erişmek için normalleştirilmiş bir alan.
  • RGB tabanlı herhangi bir geniş gama göre ölçeklenebilir.

Eksileri

  • HSL, HWB, LCH, okLCH veya okLAB ile çalışmaz
.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);
}

color() aracılığıyla sRGB

Tamamen opak olan tek renk sRGB üçgeni, aralığın boyutunu görselleştirmeye yardımcı olur.

Bu renk alanı, rgb() ile aynı özellikleri sunar. Ayrıca, tam olarak% 0 ile %100 arasında kullanılan 0 ile 1 arasında ondalık sayılar da sunar.

Artıları

  • Neredeyse tüm ekranlar bu renk aralığını destekler.
  • Tasarım aracı desteği.

Eksileri

  • Doğrusal olarak doğrusal değil (lch() gibi)
  • Geniş renk gamı yok.
  • Renk geçişleri genellikle ölü bölgeden geçer.
.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);
}

color() aracılığıyla doğrusal sRGB

Tamamen opak olan tek renk sRGB üçgeni, aralığın boyutunu görselleştirmeye yardımcı olur.

RGB'nin bu doğrusal alternatifi tahmin edilebilir kanal yoğunluğu sunar.

Artıları

  • Oyun motorları veya ışık gösterileri gibi özellikler için kullanışlı olan RGB kanallarına doğrudan erişim.

Eksileri

  • Doğrusal olarak algılanmıyor.
  • Kenarlarda siyah beyaz paketler.
.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);
}

Renk geçişleri daha sonra ayrıntılı olarak ele alınmaktadır, ancak farkları göstermek için srgb ve linear-srgb siyah-beyaz renk geçişini görmek hızlı bir şekilde anlamlı hale gelir:

Karşılaştırmayı kolaylaştırmak için iki yatay gradyan iki satırda gösteriliyor. Uzun yıllardır gördüğümüz gibi sRGB gradyanı yumuşaktır. Ancak sRGB doğrusal gradyanı, ilk% 5'te çok koyu, son %10'da ise çok açık olduğundan ortadaki renk uzun bir süre boyunca çok açık gri olur.

LCH

Tarayıcı Desteği

  • 111
  • 111
  • 113
  • 15

Kaynak

Bu yayının ilk alanı, RGB gamı dışındaki renklere erişim için söz dizimini tanıtmaktır. Bu aynı zamanda, bir ekran için renk gamı dışında bir şekilde reklam oluşturmayı da son derece kolay hale getiren ilk örnektir. Bunun nedeni, tüm CIE alanı renklerinin (lch, oklch, lab, oklab) tüm insan görünür renk spektrumunu temsil edebilmesidir.

Bu renk alanı, insan görüşüne göre modellenmiştir ve bu renkleri ve daha fazlasını belirtmek için söz dizimi sunar. LCH kanalları açıklık, renk ve ton şeklindedir. Ton, HSL ve HWB'de olduğu gibi bir açıdır. Açıklık 0 ile 100 arasında bir değerdir, ancak HSL'nin hafifliği gibi değil, özel, "algısal olarak doğrusal", insan merkezli bir hafifliktir. Renk doygunluğuna benzerdir. 0 ile 230 arasında değişebilir ancak teknik olarak sınırsızdır.

Artıları

  • Çoğunlukla doğrusal olarak algılandığı için tahmin edilebilir renk değişikliği (bkz. oklch).
  • Tanıdık kanalları kullanmalıdır.
  • Genellikle canlı renk geçişlerine sahiptir.

Eksileri

  • Ürün yelpazesinin aşılması çok kolaydır.
  • Nadir olarak, renk kaymasını önlemek için renk geçişinin ayar orta noktasının olması gerekebilir.
.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);
}

Laboratuvar

Tarayıcı Desteği

  • 111
  • 111
  • 113
  • 15

Kaynak

CIE gamına erişmek için yine algılanan doğrusal bir açıklık (L) boyutuna sahip başka bir renk alanı kullanılmıştır. LAB'deki A ve B, insan rengi görmenin benzersiz eksenlerini temsil eder: kırmızı-yeşil ve mavi-sarı. A'ya pozitif bir değer verildiğinde değeri kırmızıya, 0'ın altına düştüğünde ise yeşile eklenir. B'ye pozitif bir sayı verildiğinde sarıyla toplanır, negatif değerler maviyi temsil eder.

Artıları

  • Algısal olarak tutarlı renk geçişleri.
  • Yüksek dinamik aralık.

Eksileri

  • Ton kayması potansiyeli.
  • Değerleri okurken metni yazmak veya bir renk tahmin etmek zor.
.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);
}

OKLCH

Tarayıcı Desteği

  • 111
  • 111
  • 113
  • 15,4

Kaynak

Bu renk alanı, LCH için düzelticidir. LCH gibi, (L) de algılanan doğrusal açıklığı, renk için C ve ton için H'yi temsil etmeye devam etmektedir.

Daha önce daha önce HSL veya LCH ile çalıştıysanız burası tanıdık geliyor. Renk çemberinde H için bir açı seçin, L değerini ayarlayarak açıklık veya koyuluk değerini seçin. Ancak sonra doygunluk yerine renk kullanılır. Açıklık ve renk ayarlamaları genellikle çiftler halinde yapılması dışında oldukça benzerdirler veya hedef gamın dışına çıkan yüksek renk renklerini istemek kolay olabilir.

Artıları

  • Mavi ve mor tonlarla çalışırken sizi şaşırtmaz.
  • Doğrusal olarak algılanan açıklık.
  • Tanıdık kanalları kullanmalıdır.
  • Yüksek dinamik aralık.
  • Modern bir renk seçici vardır: Evil Martians'tan.

Eksileri

  • Ürün yelpazesinin aşılması çok kolaydır.
  • Yeni ve nispeten az keşfedilmemiş.
  • Az sayıda renk seçici.
.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

Tarayıcı Desteği

  • 111
  • 111
  • 113
  • 15,4

Kaynak

Bu alan, LAB için düzeltme amaçlıdır. Bu alanın, resim işleme kalitesi için optimize edilmiş bir alan olduğu da iddia ediliyor. CSS'de ise bu, gradyanlar ve renk işlevi değiştirme kalitesi anlamına gelir.

Artıları

  • Animasyonlar ve interpolasyonlar için varsayılan alan.
  • Doğrusal olarak algılanan açıklık.
  • LAB gibi renk tonu kayması olmaz.
  • Algısal olarak tutarlı renk geçişleri.

Eksileri

  • Yeni ve nispeten az keşfedilmemiş.
  • Az sayıda renk seçici.
.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);
}

Ekran P3

Tarayıcı Desteği

  • 111
  • 111
  • 113
  • 15

Kaynak

Display P3 üçgeni, gamın boyutunu görselleştirmeye yardımcı olması için tamamen opak olan tek üçgendir. En küçükten 2'nci gibi görünüyor.

Ekran P3 gamı ve renk alanı, Apple'ın bu özellikleri 2015'ten beri iMac'te desteklemesinden bu yana popüler hale geldi. Apple ayrıca, CSS aracılığıyla web sayfalarında bulunan 2016'dan beri, diğer tüm tarayıcılardan beş yıl önce Display-p3'ü de destekliyordu. sRGB'den geliyorsanız bu, stilleri daha yüksek bir dinamik aralığa taşırken çalışmaya başlamak için mükemmel bir renk alanıdır.

Artıları

  • HDR ekranların temel değeri olarak kabul edilen mükemmel destek.
  • sRGB'den% 50 daha fazla renk.
  • Geliştirici Araçları mükemmel bir renk seçici sunar.

Eksileri

  • Bu alanın yerini Rec2020 ve CIE alanları gelecek.
.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

Tarayıcı Desteği

  • 111
  • 111
  • 113
  • 15

Kaynak

Tamamen opak olan tek Rec2020 üçgeni, gamın boyutunu görselleştirmeye yardımcı olur. En büyük olandan 2'nci gibi görünüyor.

Rec2020, 4K ve 8k medyalarda geniş bir renk yelpazesiyle UHDTV'ye (ultra yüksek çözünürlüklü televizyon) geçişin bir parçasıdır. Rec2020, display-p3'ten daha geniş, ancak tüketiciler arasında Display P3 kadar yaygın olmayan başka bir RGB tabanlı yelpazedir.

Artıları

  • Ultra HD renkler.

Eksileri

  • Tüketiciler arasında yaygın değil (henüz).
  • Avuç içi veya tabletlerde yaygın şekilde bulunmaz.
.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

Tarayıcı Desteği

  • 111
  • 111
  • 113
  • 15

Kaynak

Tamamen opak olan tek dikdörtgen A98 üçgenidir. Bu, gamın boyutunun görselleştirilmesine yardımcı olur. Orta boy üçgen gibi görünür.

Adobe 1998 RGB'nin kısaltması olan A98 RGB, CMYK yazıcılardan alınabilen renklerin çoğunu sunmak için Adobe tarafından oluşturulmuştur. Özellikle camgöbeği ve yeşil tonlarda sRGB'den daha fazla renk sunar.

Artıları

  • sRGB ve Display P3 renk alanlarından daha büyük.

Eksileri

  • Dijital tasarımcılar tarafından çalışılan ortak bir alan değil.
  • CMYK'dan palet aktaran pek fazla kişi yoktur.
.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);
}

ProPhoto RGB

Tarayıcı Desteği

  • 111
  • 111
  • 113
  • 15

Kaynak

Tamamen opak olan tek üçgen ProPhoto üçgeni, gamın boyutunu görselleştirmeye yardımcı olur. En büyüğü gibi görünüyor.

Kodak tarafından oluşturulan bu geniş ürün yelpazesi, benzersiz bir şekilde çok çeşitli birincil renkler sunar ve ışığı değiştirirken minimum ton kayması sunar. Ayrıca 1980'de Michael Pointer tarafından belgelendiği gibi gerçek dünyadaki yüzey renklerinin% 100'ünü kapladığını iddia etmektedir.

Artıları

  • Açıklık değiştirilirken minimum ton kaymaları.
  • Canlı birincil renkler.

Eksileri

  • Sunulan renklerin yaklaşık% 13'ü hayali, yani insanlar tarafından görülebilen spektrumda değil.
.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

Tarayıcı Desteği

  • 111
  • 111
  • 113
  • 15

Kaynak

CIE XYZ renk alanı, ortalama görüşe sahip bir kişinin görebildiği tüm renkleri kapsar. Bu nedenle diğer renk alanları için standart bir referans olarak kullanılır. Y parlaklık, X ve Z ise belirtilen Y parlaklığı içindeki olası renklerdir.

d50 ile d65 arasındaki fark, beyaz noktadır. Burada d50, d50 beyaz noktalarını, d65 ise d65 beyaz noktasını kullanır.

Artıları

  • Doğrusal ışık erişiminin bazı kullanışlı kullanım alanları vardır.
  • Fiziksel renk karıştırma için idealdir.

Eksileri

  • Lch, oklch, laboratuvar ve oklab gibi algılanan doğrusal bir hareket değildir.
.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);
}

Özel renk alanları

CSS Renk 5 spesifikasyonunda, tarayıcıya bir özel renk alanını öğretmek için bir yol da bulunur. Bu, tarayıcıya renkleri nasıl çözümleyeceğini bildiren bir ICC profilidir.

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

Yüklendikten sonra, color() işleviyle bu özel profildeki renklere erişin ve bunun için kanal değerlerini belirtin.

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

Renk interpolasyonu

Bir renkten diğerine geçişe animasyon, renk geçişleri ve renk karıştırma denir. Bu geçiş genellikle bir başlangıç rengi ve bitiş rengi olarak belirtilir. Bitiş renginde ise tarayıcının bunlar arasında ara değer oluşturması beklenir. Bu durumda interpolasyon, hazır geçiş yerine yumuşak bir geçiş oluşturmak için renkler arasında bir dizi oluşturmak anlamına gelir.

Gradyan kullanıldığında interpolasyon, bir şekil üzerindeki bir dizi renktir. Animasyonda ise zaman içindeki bir renk dizisi var.

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

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

Gradyan ile, aradaki renkler aynı anda gösterilir:

Renk interpolasyonundaki yenilikler

Yeni gamlar ve renk alanlarının eklenmesiyle birlikte interpolasyon için yeni ek seçenekler ortaya çıktı. Bir renge in hsl maviden beyaza geçirildiğinde sRGB'den çok farklı bir sonuç elde edilir.

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

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

Codepen demosunu göremiyor musunuz?

Bir HSL gradyanı üzerinde gösterilen sRGB gradyanı.

Bu durumda, bir boşluktaki renkten tamamen farklı bir alandaki bir renge geçiş yaparsanız ne olur?

.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%));
}

Codepen demosunu göremiyor musunuz?

bir LCH gradyanı üzerinde gösterilen okLAB gradyanı.

Neyse ki Color 4 spesifikasyonu, tarayıcılara yönelik bu renk alanı interpolasyonlarının nasıl ele alınacağına dair talimatlar içermektedir. Yukarıdaki .gradient örneğinde, tarayıcılar ayırt edilen renk alanlarını fark eder ve varsayılan renk alanını oklab kullanır. Tarayıcının renk alanı olarak lch'yi kullanacağını düşünebilirsiniz, çünkü bu ilk renktir, ancak bunu yapmaz. Bu nedenle, ikinci bir karşılaştırma gradyanı .lch gösteriyorum. .lch renk geçişi, lch renk alanından gelen bir gradyandır.

16 bit renk sayesinde daha az şerit oluşumu

Bu renk çalışmadan önce tüm renkler, dört kanalı (kırmızı, yeşil, mavi ve alfa) temsil etmek üzere tek bir 32 bitlik tam sayı halinde kaydediliyordu. Bu, kanal başına 8 bit ve 2^ 24 olası renktir (alfayı göz ardı eder). 2 ^ 24 = 16.777.216, "milyonlarca renk."

Bu renk işleminden sonra, dört adet 16 bitlik kayan nokta değeri, her kanalın bir araya toplanmak yerine kendi kayan noktası olur. Bu, toplamda 64 bit veridir ve milyonlarca renkten çok daha fazlasını ortaya çıkarır.

Bu çalışma, HD rengi desteklemek için gereklidir. Bu, depolanabilecek renk bilgisi miktarını artırır. Bu da tarayıcının bir gradyanda daha fazla renk kullanabileceği anlamına gelir.

Gradyan şerit oluşturma, yumuşak bir gradyan oluşturmak için yeteri kadar renk olmadığında ve renk "çizgileri" görünür olduğunda ortaya çıkar. Daha yüksek çözünürlüklü renklere yükseltmeyle, şerit oluşturma büyük ölçüde azaltılır.

Altı panel gösterilmiştir. Panellerin her birinin farklı miktarda gradyan şeridi olması, ayrıca sıkıştırma ve bit derinliği hakkında biraz bilgi vardır.
Resim kaynağı

İnterpolasyonu kontrol etme

İki nokta arasındaki en kısa mesafe her zaman düz bir çizgidir. Renk interpolasyonu sayesinde tarayıcılar varsayılan olarak kısa rotayı kullanır. HSL renk silindirinde iki noktanın bulunduğu bir senaryo düşünün. Gradyan, iki nokta arasındaki çizgi boyunca gidilerek renk adımlarını edinir.

linear-gradient(to right, #94e99c, #e06242)
Yeşilden kırmızıya doğru, daire içinde düz bir çizgiyle beyaz alanlardan geçen
    dairesel gradyan.
(örnek tanıtım)
Renk duraklarının arasında bir çizgi bulunan HSL silindirinin yukarıdan aşağı görünümü

Yukarıdaki gradyan çizgisi, yeşilimsi renk ile kırmızımsı renk arasında, renk alanının merkezinden geçerek düz bir şekilde geçer. Yukarıda anlatılanlar, durumu anlamaya yardımcı olmak açısından çok yararlı olsa da, tam olarak böyle değildir. Aşağıda, aşağıdaki Codepen'deki gradyan yer almaktadır. Örnek örnekte gösterildiği gibi ortada beyaz renk olmadığı açıktır.

Bununla birlikte, renk geçişinin orta alanı canlılığını kaybetti. Bunun nedeni, en canlı renklerin interpolasyonun yaklaştığı merkezde değil, renk alanı şeklinin kenarında olmasıdır. Bu durum genellikle "ölü bölge" olarak adlandırılır. Bu sorunu düzeltmenin veya çözmenin birkaç yolu vardır.

Ölü bölgeden kaçınmak için daha fazla gradyan durağı belirtme

Günümüzde ölü bölgeden kaçınmak için bir teknik, gradyana daha fazla renk noktası eklemektir. Bu noktalar, interpolasyonu kasıtlı olarak bir renk alanının canlı aralıklarında kalacak şekilde yönlendirir. Ek duraklar ölü bölgede ilerlemesine yardımcı olduğundan, bu tam anlamıyla geçici bir çözüm.

Erik Kennedy tarafından oluşturulan ve ek renk duraklarını hesaplayan bir renk geçişi aracı vardır. Bu araç, söz konusu alana doğru çekilen renk alanlarında bile ölü bölgeden kaçınmanıza yardımcı olur. Bunu kullanarak ilk örnekteki aynı renkleri geçirerek ancak renk interpolasyonunu HSL olarak değiştirerek şu sonucu verir:

linear-gradient(90deg, #94e99c, #99e789, #ace67d, #c4e472, #e2e366, #e2bf5a, #e1934e, #e06242);
Merkezin etrafında kıvrılan bir çizginin yer aldığı ve yol boyunca çok sayıda gradyan durağının merkezden uzaklaşmasına yol açan dairesel bir gradyan.
(örnek tanıtım)
9 farklı renk noktası içeren eğri bir çizginin olduğu HSL silindirinin yukarıdan aşağı görünümü

Rehberli durak noktaları sayesinde interpolasyon artık düz bir çizgi değil, ölü bölge çevresinde eğri görünüyor. Bu da doygunluğun korunmasına yardımcı olarak çok daha canlı bir gradyan sağlıyor.

Araç harika bir iş çıkarsa da doğrudan CSS'den benzer veya daha fazla kontrole sahip olabilseydiniz nasıl olurdu?

Renk interpolasyonunu yönlendirme

Renk 4'te, Ton interpolasyonu stratejisini kontrol etme özelliği eklendi ve ölü bölgede yeni bir yol (:wink:) sağladı. Bir ton açısı düşünün. Örneğin, renk tonu 140deg değerinden 240deg değerine değişerek yalnızca açıyı değiştiren 2 noktalı bir gradyan düşünün.

Daha kısa ve daha uzun ton interpolasyonu

Renk geçişi, longer rotasını almasını belirtmediğiniz sürece varsayılan olarak shorter rotasını alır. Ton interpolasyonu seçenekleri açı dönüşünü yönlendirir. Örneğin, birine sağa yerine sola dönmesini söyleyebilirsiniz (heh, Zoolander):

Aynı gradyan çemberi daha öncekiyle aynı ancak bu kez kısa yol ile uzun yolu gösteren bir iç daire çizilmiş.

Yukarıdaki görsel ton interpolasyonu mesafeleri örneğinde, farkı göstermek için kısa yol ve uzun yol simüle edilmiştir. Kısa mesafenin aralarında daha az renk tonu vardır, çünkü mümkün olan en az mesafe katedilmiş, uzun mesafe ise daha fazla ton üzerinde kat edilmiş olur.

Ton interpolasyonunu artırma ve azaltma

Renk 4'te iki ton interpolasyonu stratejisi daha vardır, ancak bunlar silindir renk alanlarına özeldir. Önceki örneklerde verilen iki renkten yola çıkarak, görsel artık artış ve azalmanın nasıl işlediğini göstermektedir.

Yukarıdaki Codepen, beklenen sonucu göstermek için ColorJS kullanmıştır. Javascript kitaplığı olmadan aynı etkiyi elde etmek için yazacağınız CSS şöyle olur:

.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%)
  );
}

Ton interpolasyonunu kapatmak için burada, tonu 2 renk noktası arasında değiştirebileceğiniz, bir ton interpolasyonu seçiminin etkilerini ve renk alanlarının gradyan sonuçlarını nasıl değiştirdiğini görebileceğiniz eğlenceli bir oyun alanı bulunmaktadır. Efektler çok farklı olabilir. Bunu, renk araç kemerinize eklenen dört yeni ipucu olarak düşünün.

Farklı renk alanlarında renk geçişleri

Benzersiz şekli ve renk düzeniyle her renk alanı, farklı bir gradyanla sonuçlanır. Aşağıdaki örneklere, özellikle de "maviden beyaza" konusuna bakın. Her bir renk alanının bunu nasıl farklı şekilde ele aldığına bakın. Ortada kaç tane mor renge dönüştüğüne dikkat edin. Buna interpolasyon sırasında "renk kayması" denir.

Codepen demosunu göremiyor musunuz?

Maviden beyaza gradyan grubunun ekran görüntüsü.

Gösterilen görsel, Codepen'deki birçok örnekten yalnızca bir tanesidir. Bunları kendiniz görmek için Canary veya Safari Teknik Önizleme'yi deneyebilirsiniz.

Bu alanlardaki bazı renk geçişleri, diğerlerinden daha canlı olur veya ölü bölgelerde daha az yol alır. lab gibi alanlar, renkleri doygunluk için optimize edilmiş bir şekilde bir araya getirir. Bunun aksine, hwb() gibi alanlarda insanların renk yazması için optimize edilmiş alanlar kullanılır.

.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));
}

Yukarıdaki demo, sonuçlarda çok zor olmasa da laboratuvar ile daha tutarlı interpolasyon göstermektedir. Ancak lab'in söz dizimini okumak kolay değildir. rgb veya hsl'den gelirken hiç tanımadığınız negatif sayılar vardır. Size iyi bir haberimiz var. Bildiğimiz bir söz dizimi için hwb'yi kullanabiliriz ancak renk geçişinin oklab gibi başka bir renk alanında tamamen interpole edilmesini isteyebiliriz.

.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%));
}

Codepen demosunu göremiyor musunuz?

Karşılaştırma yapmanıza yardımcı olmak için üst üste yerleştirilmiş iki canlı renk geçişi. HWB gradyanı biraz daha canlıdır.

Bu örnek, hwb'de aynı renkleri kullanır ancak hwb veya oklab'e interpolasyon için renk alanını belirtir. hwb, yüksek titreşim için harika bir renk alanıdır ancak ölü alanlar veya parlak noktalar olması muhtemeldir (üst örnekteki camgöbeği sıcak noktaya bakın). oklab, doygun olduğu algılanan doğrusal renk geçişleri için idealdir. Bu özellik, hangi renk gradyanını en çok sevdiğinizi görmek için birkaç farklı renk alanını deneyebileceğinizden çok eğlenceli.

Aşağıda, renk geçişlerini ve renk alanlarını deneyen, karıştırma ve eşleştirme stratejilerini deneyen bir Codepen'i görebilirsiniz. Siyahtan beyaza geçiş bile her renk alanında farklıdır!

Codepen demosunu göremiyor musunuz?

Her renk alanı, siyahtan beyaza nasıl interpolasyon yaptığını gösterir ve her biri farklı sonuç verir.

Gamut sınırlama

Bir rengin, gam dışında bir şey istediği senaryolar vardır. Aşağıdaki rengi düşünün:

rgb(300 255 255)

rgb renk alanında bir renk kanalı için maksimum değer 255 olsa da burada 300 değeri kırmızı için belirtilmiş. Süreç Gamut sınırlama.

Sabitleme, fazladan bilgilerin kaldırılmasıdır. 300, renk motorunun içinde 255 haline gelir. Renk artık kendi alanına sabitlenmiş.

Renk alanı seçme

Pek çok kişi bu renk alanlarını ve etkilerini öğrendikten sonra, bunaldığını hisseder ve hangisini seçeceğini bilmek ister. Çalışmalarıma ve deneyimlerime göre tüm görevlerim için tek bir renk alanı görmüyorum. Her birinin, istenen sonuca ulaştığı anlar vardır.

En iyi tek bir alan olsaydı, bu kadar çok yeni alan tanıtılmazdı.

Ancak, CIE alanları lab, oklab, lch ve oklch benim başlangıç noktalarım. Sonuçlar beklediğim bu değilse başka alanları test edeceğim. Renkleri karıştırmak ve renk geçişleri oluşturmak için oklab olan varsayılan spesifikasyon seçimini kabul ediyorum. Renk sistemleri ve genel kullanıcı arayüzü renkleri için oklch kullanmayı tercih ediyorum.

Burada, kullanıcıların bu yeni renk alanları ve özellikleri göz önünde bulundurarak güncellenmiş renk stratejilerini paylaştığı birkaç makaleyi bulabilirsiniz. Örneğin, Andrey Sitnik oklch'i denedi, belki sizi de aynısını yapmaya ikna edebilir:

  1. Andrey Sitnik'ten CSS'de OKLCH: Why we görüntülenmiyor from RGB and HSL (CSS'de OKLCH: RGB ve HSL'den neden taşındık)
  2. Color Formats - Josh W. Comeau
  3. OK, OKLCH - Chris Coyier

HD CSS rengine geçiş yapma

Web projenizin rengini geniş aralıklı görüntüleri destekleyecek şekilde güncellemek için iki temel strateji vardır:

  1. Zararlı renk düşüşü
    Yeni renk alanlarını kullanın ve tarayıcı ile işletim sisteminin görüntüleme özelliklerine göre hangi rengin gösterileceğini belirlemesine izin verin.

  2. Progresif geliştirme
    Kullanıcının tarayıcısının özelliklerini değerlendirmek için @supports ve @media kullanın ve koşullar karşılanırsa geniş renk gamı sağlayın.

Tarayıcı display-p3 rengini anlamazsa:

color: red;
color: color(display-p3 1 0 0);

Tarayıcı display-p3 rengini anlarsa:

color: red;
color: color(display-p3 1 0 0);

Her birinin avantajları ve dezavantajları vardır. Artılarının ve eksilerinin kısa bir listesini burada bulabilirsiniz:

Kontrollü azalma

  • Artıları
    • En basit rota.
    • Tarayıcı, geniş gamlı bir ekran değilse eşlemeyi değiştirir veya sRGB'ye sıkıştırılır. Dolayısıyla sorumluluk tarayıcıdadır.
  • Eksileri
    • Tarayıcı, sevmediğiniz bir renge kayabilir veya harita gamı genişleyebilir.
    • Tarayıcı, renk isteğini anlamayabilir ve tamamen başarısız olabilir. Bununla birlikte, rengin iki kez belirtilmesi ve şelalenin anladığı önceki renge dönmesine izin vererek bu durumu hafifletebilirsiniz.

Progresif geliştirme

  • Artıları
    • Yönetilen renk doğruluğu ile daha fazla kontrol.
    • Mevcut renkleri etkilemeyen bir ekleme stratejisi.
  • Eksileri
    • İki ayrı renk söz dizimini yönetmeniz gerekir.
    • İki ayrı renk gamını yönetmeniz gerekir.

Renk gamı ve renk alanı desteği kontrol ediliyor

Tarayıcı, CSS ile JavaScript'ten gelen geniş yelpaze özellikleri ve renk söz dizimi desteğinin kontrol edilmesine olanak tanır. Kullanıcının verdiği renk gamı tam olarak sunulmuyor, genel bir cevap sağlanıyor ve kullanıcı gizliliğinin korunuyor. Yine de, kullanıcının donanımının (ör. gam) özelliklerine özel olmadığından tam renk alanı desteği de sunulmaktadır.

Renk gamı destek sorguları

Aşağıdaki kod örneklerinde, ziyaret eden kullanıcının ekranlarındaki renk aralığı kontrol edilir.

CSS'den kontrol ediliyor

En az spesifik destek sorgusu, dynamic-range medya sorgusudur:

Tarayıcı Desteği

  • 98
  • 98
  • 100
  • 13.1

Kaynak

@media (dynamic-range: high) {
  /* safe to use HD colors */
}

color-gamut medya sorgusundan yaklaşık olarak veya daha fazla destek için sorgu alınabilir:

Tarayıcı Desteği

  • 58
  • 79
  • 110
  • 10

Kaynak

@media (color-gamut: srgb) {
  /* safe to use srgb colors */
}

@media (color-gamut: p3) {
  /* safe to use p3 colors */
}

@media (color-gamut: rec2020) {
  /* safe to use rec2020 colors */
}

Desteğin kontrol edilmesi için ek iki medya sorgusu daha bulunuyor:

  1. @media (color)
  2. @media (color-index)
JavaScript'ten kontrol ediliyor

JavaScript'te window.matchMedia() işlevi çağrılabilir ve değerlendirme için bir medya sorgusu iletilebilir.

Tarayıcı Desteği

  • 9
  • 12
  • 6
  • 5.1

Kaynak

const hasHighDynamicRange = window
.matchMedia('(dynamic-range: high)')
.matches;

console.log(hasHighDynamicRange); // true || false

const hasP3Color = window
.matchMedia('(color-gamut: p3)')
.matches;

console.log(hasP3Color); // true || false

Yukarıdaki kalıp, medya sorgularının geri kalanı için kopyalanabilir.

Renk alanı desteği sorguları

Aşağıdaki kod örneklerinde, ziyaret eden kullanıcının tarayıcısı ve çalışmak için kullanılacak renk alanı seçimi incelenmiştir.

CSS'den kontrol ediliyor

Bireysel renk alanı desteği, @supports sorgusu üzerinden sorgulanabilir:

Tarayıcı Desteği

  • 28
  • 12
  • 22
  • 9

Kaynak

@supports (background: rgb(0 0 0)) {
  /* rgb color space supported */
}


@supports (background: color(display-p3 0 0 0)) {
  /* display-p3 color space supported */
}


@supports (background: oklch(0 0 0)) {
  /* oklch color space supported */
}
JavaScript'ten kontrol ediliyor

JavaScript'te CSS.supports() işlevi çağrılabilir ve tarayıcının bunu anlayıp anlamadığını görmek için bir özellik ve değer çifti iletilebilir.

CSS.supports('background: rgb(0 0 0)')
CSS.supports('background: color(display-p3 0 0 0)')
CSS.supports('background: oklch(0 0 0)')

Donanımı yerleştirme ve ayrıştırma kontrolleri bir araya getirilir

Her tarayıcının bu yeni renk özelliklerini uygulamasını beklerken, hem donanım hem de renk ayrıştırma özelliğini kontrol etmek iyi bir fikirdir. Renkleri kademeli olarak yüksek tanımlı hale getirirken genellikle bunu kullanıyorum:

:root {
  --neon-red: rgb(100% 0 0);
  --neon-blue: rgb(0 0 100%);
}

/* is the display HD? */
@media (dynamic-range: high) {

  /* does this browser understand display-p3? */
  @supports (color: color(display-p3 0 0 0)) {

    /* safe to use display-p3 colors */
    --neon-red: color(display-p3 1 0 0);
    --neon-blue: color(display-p3 0 0 1);
  }
}

Chrome Geliştirici Araçları ile renk hatası ayıklama

Güncellenen Chrome Geliştirici Araçları, geliştiricilerin HD rengi oluşturmasına, dönüştürmesine ve hatalarını ayıklamasına yardımcı olacak yeni araçlarla donatılmıştır.

Renk seçici güncellendi

Renk seçici artık tüm yeni renk alanlarını destekliyor. Yazarların, kanal değerleriyle tıpkı kendileri gibi etkileşim kurmasına olanak tanır.

display-p3 renk desteğini gösteren Geliştirici Araçları.

Gamut sınırları

Srgb ve display-p3 gamutları arasına bir çizgi çizen gamı sınır çizgisi de eklendi. Seçilen rengin hangi gamda olduğunun net olarak anlaşılmasını sağlar.

Renk seçicide bir gam çizgisi gösteren Geliştirici Araçları.

Bu, yazarların HD renkleri ile HD olmayan renkleri görsel olarak ayırt etmesine yardımcı olur. Bu özellik, hem HD olmayan hem de HD renkler üretebildiğinden color() işlevi ve yeni renk alanlarıyla çalışırken özellikle faydalıdır. Renginizin hangi renk gamında olduğunu kontrol etmek istiyorsanız renk seçiciyi açın ve bakın.

Renkler dönüştürülüyor

Geliştirici Araçları, yıllardır hsl, hwb, rgb ve hex gibi desteklenen biçimler arasında renkleri dönüştürebiliyor. shift + click bu dönüşümü gerçekleştirmek için Stiller bölmesinde kare renk kartelasını üzerine yazın. Yeni renk araçları yalnızca dönüşümler arasında geçiş yapmaz, aynı zamanda yazarların istedikleri dönüşümü görüp seçebileceği bir pop-up oluşturur.

Dönüştürme işlemi sırasında, dönüşümün alana sığacak şekilde kırpılıp kırpılmadığını bilmek önemlidir. Geliştirici Araçları'nda artık, dönüştürülen renk için sizi bu kırpma işlemiyle ilgili uyaran bir uyarı simgesi bulunur.

Geliştirici Araçları, rengin yanında bir uyarı simgesiyle dönüşümünüze gamut kırpma hakkında bilgi verir.

Son duyurularında, Geliştirici Araçları'nda sunulan daha fazla CSS hata ayıklama özelliğini keşfedebilirsiniz.

Sonuç

Web'deki sRGB olmayan renk alanları daha çok kullanılmaya başlandı, ancak zamanla tasarımcıların ve geliştiricilerin kullanımında artış olacağına inanıyorum. Örneğin, bir tasarım sisteminin hangi renk alanında kurulacağını bilmek, içerik oluşturucunun araç kemerinde yer alırken güçlü bir araçtır. Her renk alanı, benzersiz özellikler ve CSS spesifikasyonuna eklenmesi için bir neden sunar. Bunlarla küçük adımlarla başlayıp gerektiğinde ekleme yapmak sorun yaratmaz.

Bu yeni renkli oyuncaklarla oynamanın keyfini çıkarın! Daha fazla canlılık, tutarlı manipülasyon ve interpolasyonlar ile genel olarak kullanıcılarınıza daha renkli bir deneyim sunulur.

Ek kaynaklar

Renk Düzeyi 5 ile ilgili diğer makaleler