CSSUITasarım1 dk okuma

İç İçe Öğelerde Kusursuz Yuvarlak Köşeler

Yuvarlak bir kutuyu başka bir yuvarlak kutunun içine koyun, ikisine de aynı border-radius'u verin; bir şeyler tuhaf görünür. Aralarındaki boşluk kenarlar boyunca eşittir ama köşelerde şişer. Yarıçapı değiştirin ve iki boşluğu karşılaştırın.

Etkileşimli
Kenardaki boşluk
20px
Köşedeki boşluk
28.3px
Boşluk kenarda 20px, ama köşede daha geniş. Nedenini görmek için düğmeye basın.

Sebebi şu: Her yuvarlak köşe bir çemberin parçasıdır ve border-radius o çemberin yarıçapıdır. İki eğri ancak çemberleri aynı merkezi paylaşıyorsa, bir ağacın halkaları gibi, birbirinden hep aynı uzaklıkta kalır. Yarıçaplar aynıyken iç çember dıştaki kadar büyüktür ama daha içeriden başlar, bu yüzden merkezi yanlış yerdedir.

İç merkezi dıştakinin üzerine taşımak için iç çemberin, iki kenar arasındaki mesafe kadar küçük olması gerekir. Bu mesafeye boşluk diyelim: padding ve dış kutunun kenarlığı varsa o kenarlık. Yani iç yarıçap, dış yarıçap eksi boşluktur.

Etkileşimli

20px = max(0, 40 − 16 − 4)

Kenardaki boşluk
20px
Köşedeki boşluk
20px
İki çember aynı merkezi paylaşıyor, bu yüzden boşluk her yerde aynı.

Padding'i dış yarıçapın ötesine iterseniz sonuç negatif olur. Yarıçap negatif olamaz, bu yüzden iç köşe düz olur. Bundan sonra köşedeki boşluk her zaman kenarlardakinden biraz geniştir. Bunu düzeltmek için dış yarıçapı büyütün ya da boşluğu küçültün.

CSS'te hesabı tarayıcıya bırakabilirsiniz. Sayıları custom property'lerde tutun ve iç yarıçapı onlardan hesaplayın. Bir calc() sonucu negatif çıkarsa tarayıcı onu zaten 0 kabul eder, ama max() bunu kodu okuyan herkese açıkça gösterir.

CSS
.outer {
  --radius: 24px;
  --padding: 8px;
  --border: 1px;

  border: var(--border) solid #333;
  border-radius: var(--radius);
  padding: var(--padding);
}

.inner {
  border-radius: max(0px, var(--radius) - var(--padding) - var(--border));
}

Aynı merkez, aynı mesafe. Kart içinde kart, araç çubuğunda düğme ya da çerçeve içinde görsel gibi yuvarlak şekilleri iç içe koyduğunuzda boşluğu dış yarıçaptan çıkarın; köşeler birbirini izleyecektir.

Bu içeriği sen destekleyebilirsinBu alanı sen al
yazar@aykutkardas

0/50 alkış

Bu içerik size yardımcı olduysa bana bir kahve ısmarlayabilirsiniz.


yapay zeka, yazılım ve tasarım üzerine etkileşimli yazı ve kurslardan haberdar olmak için bültene katılabilirsiniz. Ayda en fazla birkaç e-posta alırsınız.

800’den fazla meraklı okura sen de katıl.


Destekçiler arasına katılın