clamp() ne yapar
clamp(MIN, PREFERRED, MAX) üç değer alır ve diğer ikisinin arasında kaldığı sürece ortadakini döndürür. Klasik kullanım, ekranla birlikte büyüyen ama hiç medya sorgusu olmadan makul sınırlarda duran bir başlıktır:
Tercih edilen değer 1rem + 3vw: 16px artı genişliğin %3'ü. 800px genişliğindeki bir önizlemede bu 16 + 24 = 40px'tir; 24px (1.5rem) ile 48px (3rem) arasında kaldığı için başlık 40px olur. 320px'lik bir telefonda tercih edilen değer 25,6px'tir. 1067px'in ötesinde 48px'i aşar, bu yüzden 48px'te durur. Sayının değişmesini izlemek için pencereyi yeniden boyutlandır; buradaki vw, önizleme çerçevesinin genişliğinin bir yüzdesidir.
Pencereyi boyutlandırmadan gör
vw viewport'u takip eder ve okurken onu kolayca değiştiremezsin. Container query birimleri ise bir kapsayıcıyı takip eder: cqi, kapsayıcının genişliğinin %1'idir. Kutuyu değiştirmek için kaydırıcıyı sürükle, aynı türden bir clamp() tepki verir:
Başa kaydır, başlık 20px'te (MIN) durur. Sona kaydır, 40px'te (MAX) durur. Arada 0.5rem + 6cqi'yi takip eder. Bu, daha küçük bir cetvelle vw sürümüyle aynı mekanizmadır.
Üç argüman
font-size: clamp(1rem, 0.8rem + 1vw, 1.5rem);
/* MIN PREFERRED MAX */
| Argüman | Rolü | Tipik birim |
|---|---|---|
| MIN | değerin olabileceği en küçük hal | rem |
| PREFERRED | ekranla değişen değer | rem + vw (ya da cqi) |
| MAX | değerin olabileceği en büyük hal | rem |
Her argümanın içinde calc() yazmadan matematik çalışır: 1rem + 2vw olduğu gibi yazılabilir. + ve - iki yanında boşluk ister, yoksa bütün bildirim geçersiz olur.
MIN, MAX'tan büyükse MIN kazanır: clamp(3rem, 5vw, 2rem) her zaman 3rem'dir.
Ortadaki değeri hesaplamak
Bir yazıyı 320px'lik bir ekranda 16px'ten 1280px'lik bir ekranda 24px'e büyütmek için:
- Eğim: (24 − 16) ÷ (1280 − 320) = 8 ÷ 960 = 0,00833; bu 0.833vw demektir (vw 100px başınadır).
- Başlangıç noktası: 16px − 0,00833 × 320px = 13,33px; bu 0.833rem demektir.
- Sınırları çevresine koy:
font-size: clamp(1rem, 0.833rem + 0.833vw, 1.5rem);
320px genişlikte bu 13,33 + 2,67 = 16px, 1280px'te 13,33 + 10,67 = 24px verir ve bu aralığın dışında sınırlarda kalır. Çevrim içi "clamp hesaplayıcıları" tam olarak bu aritmetiği yapar.
min() ve max()
clamp() iki basit fonksiyonun birleşimidir:
min(a, b)küçük değeri döndürür, yani bir üst sınır koyar.max(a, b)büyük değeri döndürür, yani bir alt sınır koyar.clamp(MIN, VAL, MAX),max(MIN, min(VAL, MAX))ile aynıdır.
Adlar ilk başta ters gelir: "en fazla 600px" demek için min() kullanırsın.
Geniş önizlemede ilk kart 420px'te duruyor. 260px'lik ebeveynin içinde 100% küçük değerdir, bu yüzden ikinci kart 260px. max(12px, 3%) ilk karta ebeveyninin genişliğinin %3'ünü veriyor (body: 800px'lik bir önizlemede yaklaşık 23,5px), ikincisine ise 12px, çünkü 260px'in %3'ü (7,8px) tabanın altında.
width: min(100%, 420px), eski width: 100%; max-width: 420px; ikilisinin yerini tek bir bildirimle alır.
Yazı boyutlarının ötesinde: boşluklar ve genişlikler
clamp() uzunluk alan her özellikte çalışır. Ortadaki değerde yüzdeler, bir bileşeni viewport yerine ebeveynine göre akışkan yapar:
300px'lik ebeveynde kart 240px genişliğinde (%80) ve 15px padding'e sahip (300px'in %5'i). 760px'lik ebeveynde %80 608px olurdu, bu yüzden kart 520px'lik maksimumunda duruyor; 760px'in %5'i 38px olduğu için padding de 32px'te duruyor.
Erişilebilirlik: ortadaki değerde rem tut
font-size: 5vw gibi yalnızca vw'den oluşan bir yazı boyutu, okuyucu tarayıcı ayarlarında varsayılan yazı boyutunu büyüttüğünde büyümez; tarayıcı yakınlaştırmasıyla da büyümez, çünkü yakınlaştırma viewport'u CSS pikselleri cinsinden daraltır. Bir rem kısmı (1rem + 2vw) ve rem sınırları eklemek metni okuyucunun ayarına bağlı tutar. rem ve vw'yi birimler sayfası ayrıntılı anlatıyor.
Sık yapılan hatalar
- Bir minimum için
min()kullanmak.min()küçük değeri seçer, bu da bir üst sınırdır. "En az 12px" içinmax(12px, ...)kullan. +ya da-çevresinde boşluk yok.clamp(1rem, 1rem+2vw, 3rem)geçersizdir ve özellik önceki değerine döner.- Ortada yalnızca
vw. Metin bu durumda okuyucunun yazı boyutu ayarını yok sayar. Birremterimi ekle. - MIN'in MAX'tan büyük olması. Sonuç her zaman MIN'dir, bu da nadiren kastedilen şeydir.
- Yazı boyutları için
pxcinsinden sınırlar. Metni daha büyük görmesi gereken okuyucular için bile sınırlarlar.remkullan.
Sıkça Sorulan Sorular
CSS'te clamp() ne işe yarar?
clamp(MIN, PREFERRED, MAX) tercih edilen değeri iki sınırın arasında kaldığı sürece, aksi halde en yakın sınırı kullanır. font-size: clamp(1rem, 4vw, 2rem) viewport genişliğinin %4'ünü takip eder ama asla 1rem'in altına ya da 2rem'in üstüne çıkmaz.
clamp ile esnek bir yazı boyutu nasıl yapılır?
Ortaya viewport tabanlı bir değer, yanlara sabit sınırlar koy ve metin okuyucunun yazı boyutu ayarını hâlâ takip etsin diye ortaya rem karıştır: font-size: clamp(1.5rem, 1rem + 2vw, 3rem);.
clamp()'te minimum maksimumdan büyükse ne olur?
Minimum kazanır. clamp(3rem, 5vw, 2rem) her zaman 3rem'e çözülür, çünkü clamp() minimumu maksimumdan sonra uygular.
CSS'te min() ile max() arasındaki fark nedir?
min() değerlerinin en küçüğünü döndürür, bu yüzden bir üst sınır gibi davranır: width: min(100%, 600px) asla 600px'ten geniş olmaz. max() en büyüğü döndürür, bu yüzden bir alt sınır gibi davranır: font-size: max(1rem, 2vw) asla 1rem'den küçük olmaz.
clamp() bütün tarayıcılarda destekleniyor mu?
Evet, clamp(), min() ve max() Chrome, Edge, Firefox ve Safari'nin bütün güncel sürümlerinde çalışır ve uzunluk, sayı, yüzde ya da açı alan her özellikte kullanılabilir.