web design uiNovember 5, 20267 min read

CSS Gradyan Renkleri: Gradyanlar Neden Ortada Griye Döner ve 3 Çözüm

Maviyi sarıya karıştırın, orta kısım griye döner, çünkü hex renkler RGB'de karışır. Orta bir durak ekleyin, OKLCH'de karıştırın ya da renk çarkında komşu renkleri seçin. Beş hazır gradyan dahil.

By Boone
XLinkedIn
CSS Gradient Colors: Why Gradients Turn Gray in the Middle and 3 Ways to Fix It

Bir gradyan ortada griye döner, çünkü tarayıcı hex renkleri RGB'de karıştırır ve birbirinin tam karşısında duran iki renk yarı yolda birbirini yok eder. Çözüm, ortaya bilerek bir renk vermek ya da karışımın hesaplanma biçimini değiştirmektir. İşte üç çözüm ve yapıştırabileceğiniz beş gradyan.

Orta neden griye kaçar

Bulanık görünen bir gradyana bakın ve uçları boşverin. Uçlar iyi. Onları siz seçtiniz. Ortayı ise kimse seçmedi.

Gradyan bir karışımdır ve karışım matematik ister. Hex renkler RGB değerleridir, bu yüzden tarayıcı varsayılan olarak onları kanal kanal karıştırır.

Mavi ile sarının tam ortasında kırmızı 0 ile 255'in ortasında, yeşil 0 ile 255'in ortasında, mavi de 255 ile 0'ın ortasındadır. Her kanal 128 civarına düşer. Eşit kırmızı, yeşil ve mavi, grinin tanımıdır.

#0000FF'den #FFFF00'a

Maviden sarıya giden ve ortada düz griye dönen bir gradyan

#0EBAAE orta duraklı

Aynı maviden sarıya gradyan, ortası deniz mavisi ve baştan sona renkli kalıyor
Aynı iki uç. Solda karışım doğrudan #808080'in içinden geçiyor. Sağda orta bir deniz mavisi, yani gradyan baştan sona canlı kalıyor.

Bu sizin monitörünüzün ya da sıkıştırmanın sorunu değil. Bu aritmetik ve iki renk renk çarkında birbirinden uzak olduğunda ortaya çıkıyor. Mavi ve sarı neredeyse tam zıt, yani en kötü senaryo.

Çözüm 1: orta durak ekleyin

En doğrudan çözüm, ortayı şansa bırakmayı bırakmak. %50'ye sizin seçtiğiniz bir renkle üçüncü bir renk durağı ekleyin.

css
background: linear-gradient(90deg, #0000FF, #0EBAAE, #FFFF00);

#0EBAAE, algılanan renk olarak mavi ile sarı arasında duran bir deniz mavisidir. Karışım artık maviden deniz mavisine, sonra deniz mavisinden sarıya gider ve iki yarı da griden geçmez.

Bu her tarayıcıda çalışır ve yeni bir sözdizimi gerektirmez, yani her yerde aynı görünmesi gereken bir tasarım için güvenli seçimdir. Orta rengi gözle seçin, sonra iki ucun yanında kontrol edin. Bedeli, artık iki yerine üç renge sahip olmanız.

Çözüm 2: OKLCH'de karıştırın

Diğer çözüm renk eklemek yerine matematiği değiştirir. CSS, karışımın hangi renk uzayında yapılacağını seçmenize izin verir ve OKLCH rengi açıklık, kroma ve ton olarak tanımlar. Kroma bir rengin ne kadar renkli olduğudur, yani krormayı koruyan bir karışım renkli kalır.

css
background: linear-gradient(in oklch, #0000FF, #FFFF00);

in oklch ile tarayıcı, gri merkezin içinden dümdüz geçmek yerine renk çarkının çevresinden dolaşır, yeşillerden ve deniz mavilerinden geçer. İki renk kalır ve kod kısa kalır. MDN bunu gradyan fonksiyonunun içindeki renk interpolasyon yöntemi olarak belgeler ve eski hex renkler, eski sayfalarla uyumlu kalmak için siz bir şey seçmediğinizde yalnızca RGB kullanır.

Bilmeniz gereken iki şey var. Bu yolculuktaki bazı renkler ekranın gösterebileceğinin dışına düşebilir, bu yüzden tarayıcılar onları gösterilebilir en yakın değere kırpar. Ayrıca izlediği rota çarkın kısa tarafıdır, o yüzden seçtiği yolun hoşunuza gidip gitmediğini kontrol edin. Modern CSS'te OKLCH renk rehberimiz bu uzayı daha derin anlatıyor.

Çözüm 3: komşu renkleri seçin

Üçüncü çözüm koda dokunmaz. Birbirini yok edemeyecek renkler seçer.

#0066FF'den #FF8800'e

Maviden turuncuya giden ve ortada donuk kahverengimsi griye dönen bir gradyan

#6440E0'dan #E040A0'a

Morumsu maviden pembeye giden ve baştan sona parlak kalan bir gradyan
Mavi ve turuncu zıttır, bu yüzden donuk bir #807780'de buluşurlar. Menekşe ve pembe komşudur, bu yüzden zengin bir #A240C0'da buluşurlar.

Zıt renkler griye karışır. Komşu renkler, aralarında hâlâ renk olan bir şeye karışır. Bir marka iki zıt rengi eşleştiriyorsa, yine de gradyanda kullanabilirsiniz: aralarına bir orta durak koyun ya da OKLCH'de karıştırın.

Maviden turuncuya, varsayılan karışım

Ortası kahverengimsi gri olan maviden turuncuya gradyan

Maviden turuncuya, oklch'de

OKLCH'de karıştırılmış aynı maviden turuncuya gradyan, griye değil menekşe ve pembeye uğruyor
Öncekiyle aynı iki uç, yalnızca karışım değişti. Gri gitti ve orta parlak bir pembe.

Kendi gradyanınızı nasıl kontrol edersiniz

  1. Uçlara değil, ortaya bakın.
  2. Orada gördüğünüz rengi adlandırın. Ad gri, kahverengi ya da çamursa, #808080 veya #807780'de olduğu gibi, sorun budur.
  3. Yukarıdaki çözümlerden birini seçin ve iki sürümü yan yana karşılaştırın.

Bir gradyan en kötü noktası kadar iyidir ve en kötü noktası neredeyse her zaman ortasıdır.

Çalabileceğiniz beş gradyan

Her biri ortasının renkli kaldığı doğrulanarak kontrol edildi. İlkinde yerleşik bir orta durak var. Diğer dördü komşu tonlar kullanıyor. Kopyalamak için bir koda dokunun.

Maviden deniz mavisi üzerinden sarıya bir gradyan
Mavi, deniz mavisi, sarı. Kodunu kopyalamak için bir renge dokunun.
Menekşeden pembeye bir gradyan
Menekşeden pembeye. Kodunu kopyalamak için bir renge dokunun.
Maviden deniz mavisine bir gradyan
Maviden deniz mavisine. Kodunu kopyalamak için bir renge dokunun.
Turuncudan şok pembeye bir gradyan
Turuncudan şok pembeye. Kodunu kopyalamak için bir renge dokunun.
Yeşilden misket limonuna bir gradyan
Yeşilden misket limonuna. Kodunu kopyalamak için bir renge dokunun.
GradyanBaşlangıçOrtaBitişNeden işe yarıyor
Mavi, deniz mavisi, sarı#0000FF#0EBAAE#FFFF00Zıt uçlar, gerçek bir orta durakla kurtarıldı
Menekşeden pembeye#6440E0yok#E040A0Çarkta komşular
Maviden deniz mavisine#2F5BEAyok#14B8A6Çarkta komşular
Turuncudan şok pembeye#FF7A00yok#FF2E93Çarkta komşular
Yeşilden misket limonuna#00A86Byok#C6F432Çarkta komşular

Bunu geliştiricinize verin

css
.gradient-sunrise { background: linear-gradient(90deg, #0000FF, #0EBAAE, #FFFF00); } .gradient-violet { background: linear-gradient(90deg, #6440E0, #E040A0); } .gradient-ocean { background: linear-gradient(90deg, #2F5BEA, #14B8A6); } .gradient-sunset { background: linear-gradient(90deg, #FF7A00, #FF2E93); } .gradient-meadow { background: linear-gradient(90deg, #00A86B, #C6F432); } /* Two opposite colors, no middle stop: choose the blend space instead. */ .gradient-opposites { background: linear-gradient(in oklch, #0066FF, #FF8800); }

Bir tarayıcı in oklch ifadesini anlamazsa tüm bildirimi yok sayar. Yedek olarak önce sade bir linear-gradient(...) satırı yazın, ardından OKLCH satırını ekleyin.

SSS

Gradyanım neden ortada griye dönüyor?

Hex renkler RGB'de karışır ve renk çarkında birbirinden uzak iki rengin ortalaması griye çıkar. Mavi #0000FF ile sarı #FFFF00 #808080'de buluşur.

CSS gradyanının bulanık görünmesini nasıl engellerim?

Gerçek renkli bir orta renk durağı ekleyin, linear-gradient(in oklch, ...) ile OKLCH'de karıştırın ya da çarkta yan yana duran iki renk seçin.

CSS gradyanında "in oklch" ne yapar?

Tarayıcıya renkleri RGB yerine OKLCH renk uzayında karıştırmasını söyler, böylece orta kısım griye düşmek yerine rengini korur.

Hangi gradyan renkleri birlikte iyi görünür?

Renk çarkında komşu olanlar, örneğin menekşe #6440E0'dan pembe #E040A0'a ya da yeşil #00A86B'den misket limonu #C6F432'ye. Karışımları baştan sona parlak kalır.

Tüm tarayıcılar OKLCH'de gradyanı destekliyor mu?

Modern tarayıcılar destekliyor, ama desteklemeyen bir tarayıcı bildirimi atar. Yedek olarak öncesine sade bir gradyan satırı ekleyin.

Maviden sarıya neden yeşil değil de gri oluyor?

Çünkü karışım RGB'deki düz yolu izler ve ikisinin ortalaması griye çıkar. Yeşil bir orta ancak onu durak olarak eklerseniz ya da OKLCH'de karıştırırsanız ortaya çıkar.

Kaynaklar

  • CSS Color Module Level 4, interpolation: hex gibi eski sRGB renkler varsayılan olarak sRGB'de interpolasyon yapar, diğer uzaylar renk interpolasyon yöntemiyle seçilir.
  • MDN, linear-gradient(): <color-interpolation-method> sözdizimi, in oklch.
  • MDN, OKLCH color: açıklık, kroma ve ton.
  • (0, 0, 255) ile (255, 255, 0) değerlerinin orta noktası (127,5, 127,5, 127,5) olup bu, OKLCH kroması 0 olan #808080'dir. #0066FF'den #FF8800'e (#807780) ve #6440E0'dan #E040A0'a (#A240C0) orta noktalar tarafımızca sRGB'de hesaplandı. Bu sayfadaki çubuklar bu hesaplardan üretildi ve OKLCH çubuğu, tarayıcıların yaptığı gibi ekran aralığı dışındaki renkleri kırpıyor.
  • İlk olarak UX Brainy üzerinde bir carousel olarak yayımlandı.

Want gradients, color and every other detail designed as one system? Our team designs and builds product UI that holds up on every screen.

Get Started

More from Brainy Papers

Keep reading