Menu

CSS calc(): Birimleri Karıştırma, Söz Dizimi ve Örnekler

calc() CSS'te hesap yapmanı ve birimleri karıştırmanı sağlar, örneğin %100 eksi sabit 200px'lik bir kenar çubuğu. Söz dizimi kurallarını (boşluklar önemlidir), CSS değişkenleriyle calc()'ı, çözdüğü yaygın düzenleri ve geçersiz bir calc()'ın neden sessizce yok sayıldığını öğren.

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

calc() ne yapar

calc() bir CSS değerinin içinde aritmetik yapar ve ancak düzen sırasında boyut kazanan birimleri karıştırabilir. Klasik durum "tam genişlik eksi sabit bir kenar çubuğu"dur:

100% ancak sayfa yerleştirildiğinde bilinir, 180px ise sabittir, bu yüzden tek bir birim bunu ifade edemezdi. calc() bunu hesaplar: 800px genişliğindeki bir önizlemede satır 784px'tir ve ana sütun 604px alır; düzenin altındaki satır gerçek sayıları yazdırır. Bugün flexbox ya da grid bu düzeni hesap yapmadan kurar, ama aynı çıkarma hâlâ her yerde karşına çıkar: bir yükseklik eksi bir başlık, bir genişlik eksi bir boşluk.

Söz dizimi kuralları

width: calc(100% - 2rem);          /* + and - need spaces on both sides */
width: calc(100% / 3);             /* divide by a plain number */
margin: calc(var(--space) * 2);    /* multiply by a plain number */
height: calc(100vh - (64px + 1rem)); /* parentheses group */
KuralGeçerliGeçersiz
+ ve - çevresinde boşlukcalc(100% - 20px)calc(100%-20px)
*: en az bir taraf düz bir sayıcalc(2 * 1rem)calc(2px * 3px)
/: bir uzunluğu düz bir sayıya bölcalc(100% / 3)width: calc(300px / 3px) (uzunluk değil)
Birimler uyumlu olmalıcalc(1rem + 10px)calc(1rem + 2s)

Boşluk kuralı, 100% -20px'in ikincisi negatif bir sayı olan iki ayrı değer olarak okunacağı için vardır. Bir calc() geçersiz olduğunda bildirimin tamamı atılır ve element önceki kurallardan gelen değeri korur.

Bir ifade dene

Kutunun genişliği için herhangi bir ifade yaz. Tarayıcı geçerli olup olmadığını ve çözdüğü genişliği bildirir:

100%-200px (geçersiz, boşluk yok), 100% / 3, 50% + 4rem, 2 * 120px, 200px * 2px (geçersiz) ve (100% - 40px) / 2 dene.

CSS değişkenleriyle calc()

Değişkenler ve calc() birlikte çalışır: bir temel değeri bir kez sakla ve geri kalanı ondan türet. Birimsiz bir değişken, bir birimle çarpıldığında bir uzunluğa dönüşür:

--space'i 12px ya da --cols'u 4 yap, türetilen her değer takip eder. Tanımlamayı ve kapsamı CSS değişkenleri sayfası anlatıyor.

Yaygın kullanımlar

İhtiyaçcalc()
Sabit bir elementin yanındaki alanı doldurmakwidth: calc(100% - 240px)
Sabit bir başlığın altındaki bölümmin-height: calc(100vh - 64px)
Genişliğin yarısı eksi boşluğun yarısıwidth: calc(50% - 8px)
Absolute konumlu 100px'lik bir kutuyu ortalamakleft: calc(50% - 50px)
Ekranla biraz büyüyen yazı boyutufont-size: calc(1rem + 0.5vw)
Sayı değişkenini uzunluğa çevirmekcalc(var(--n) * 1px)
Bir değişkenin negatificalc(var(--space) * -1)

Sınırlar arasında kalması gereken bir değer için argümanlarında calc() yazmadan aynı hesabı kabul eden clamp() kullan.

calc() nerede çalışır

Bir uzunluğa, yüzdeye, sayıya, açıya ya da süreye izin verilen her yerde: width, margin, padding, top, font-size, line-height, grid iz boyutları, transition-delay ve transform içindeki açılar. İç içe yazılabilir ve iç içe bir calc() düz parantezlerle aynıdır.

Açılar iyi bir örnektir. Aşağıdaki her çentiğin kendi --i değeri var (0'dan 11'e) ve tek bir kural onu calc(var(--i) * 30deg) ile bir açıya çeviriyor:

Üçüncü çentik (--i: 3) rotate(90deg) alıyor ve Chrome bunu matrix(0, 1, -1, 0, 0, 0) matrisi olarak bildiriyor: çeyrek tur. left: calc(50% - 2px), kendi 4px genişliğinin yarısını çıkararak her çentiği ortalıyor.

Sık yapılan hatalar

  • - ya da + çevresinde boşluk yok. calc(100%-20px) geçersizdir ve yok sayılır.
  • İki uzunluğu çarpmak. calc(10px * 2px)'in CSS'te bir anlamı yoktur. *'nin bir tarafı düz bir sayı olmalıdır.
  • Ebeveyn yüksekliği olmadan yüzdelik bir yükseklik için calc() kullanmak. height için calc(100% - 20px), tıpkı height: 100% gibi yüksekliği ayarlı bir ebeveyn ister.
  • Flexbox ya da grid'in yeteceği yerde calc() kullanmak. Sütunlar için width: calc(33.333% - 10px) kırılgandır; display: grid; grid-template-columns: repeat(3, 1fr); gap: 15px hiç hesap gerektirmez.
  • Bir hata mesajı beklemek. Tarayıcı geçersiz bir calc() için uyarmaz. Elementi geliştirici araçlarında kontrol et: geçersiz bir bildirim üstü çizili gösterilir.

Sıkça Sorulan Sorular

CSS'te calc() ne işe yarar?

+, -, * ve / içeren bir ifadeden bir değer hesaplar ve tarayıcının ancak düzen sırasında bildiği birimleri karıştırabilir. width: calc(100% - 200px), ebeveynin genişliği ne olursa olsun ebeveynin tam genişliği eksi 200px'tir.

calc()'ım neden çalışmıyor?

En yaygın neden eksik boşluklardır: + ve - iki yanında boşluk ister, bu yüzden calc(100%-20px) geçersizdir. Diğer nedenler iki uzunluğu çarpmak (10px * 2px) ya da bir uzunluğa bölmektir; bunlar bir uzunluk vermez. Geçersiz bir calc() bütün bildirimi geçersiz yapar, bu yüzden tarayıcı onu yok sayar.

calc() içinde CSS değişkenleri kullanılabilir mi?

Evet. calc(var(--gap) * 2) bir değişkeni ikiye katlar, calc(var(--columns) * 1px) ise birimsiz bir sayıyı piksele çevirir. Önce değişkenin değeri yerine konur, sonra hesap yapılır.

calc() içinde * ve / çevresinde boşluk gerekir mi?

Hayır. Yalnızca + ve - boşluk ister, çünkü boşluk olmadan -20px negatif bir sayı olarak okunurdu. * ve / çevresindeki boşluklar isteğe bağlıdır, ama her yerde boşluk yazmak akılda tutulması en kolay kuraldır.

calc() ile clamp() arasındaki fark nedir?

calc() bir ifadeden tek bir değer hesaplar. clamp(MIN, VAL, MAX) ise bir değeri iki sınır arasında tutar. İkisi birleşir: clamp()'in her argümanı clamp(1rem, 1rem + 2vw, 3rem) gibi calc tarzı hesap zaten içerebilir.

Coddy programming languages illustration

Coddy ile kodlamayı öğren

BAŞLA