Menu

CSS clamp(): Akışkan Yazı Boyutu, min() ve max()

clamp(MIN, PREFERRED, MAX) tercih edilen değeri döndürür, ama asla MIN'den küçük ya da MAX'tan büyük değil. Yazı boyutlarını ve boşlukları medya sorgusu olmadan nasıl akışkan yaptığını, ortadaki değerin nasıl hesaplandığını ve min() ile max()'ın onunla ilişkisini öğren.

Bu sayfada çalıştırılabilir editörler var - düzenle, çalıştır ve sonucu anında gör.

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ümanRolüTipik birim
MINdeğerin olabileceği en küçük halrem
PREFERREDekranla değişen değerrem + vw (ya da cqi)
MAXdeğerin olabileceği en büyük halrem

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:

  1. Eğim: (24 − 16) ÷ (1280 − 320) = 8 ÷ 960 = 0,00833; bu 0.833vw demektir (vw 100px başınadır).
  2. Başlangıç noktası: 16px − 0,00833 × 320px = 13,33px; bu 0.833rem demektir.
  3. 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çin max(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. Bir rem terimi ekle.
  • MIN'in MAX'tan büyük olması. Sonuç her zaman MIN'dir, bu da nadiren kastedilen şeydir.
  • Yazı boyutları için px cinsinden sınırlar. Metni daha büyük görmesi gereken okuyucular için bile sınırlarlar. rem kullan.

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.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA