Yüzde (%) ve piksel (px) veya em cinsinden kenarlık yarıçapı


124

Kenarlık yarıçapı için bir piksel veya em değeri kullanırsam, kenar yarıçapı, değer öğenin en büyük kenarından büyük olsa bile her zaman dairesel bir yay veya hap şeklidir .

Yüzdeleri kullandığımda , kenar yarıçapı eliptiktir ve öğenin her iki yanının ortasından başlayarak oval veya elips bir şekil oluşturur :

piksel (piksel) kenarlık yarıçapıyüzde (%) border-radius

Kenarlık yarıçapı için piksel değeri:

Kenarlık yarıçapı için yüzde değeri:

Yüzde cinsinden kenarlık yarıçapı neden piksel veya em değerleriyle ayarlanan kenarlık yarıçapı ile aynı şekilde davranmıyor?

Yanıtlar:


181

Sınır yarıçapı:

Öncelikle, border-radius özelliğinin 2 değer aldığını anlamanız gerekir. Bu değerler, köşenin şeklini tanımlayan çeyrek elipsin X / Y eksenindeki yarıçaplardır.
Değerlerden yalnızca biri ayarlanırsa, ikinci değer ilkine eşittir. Yani border-radius: xeşdeğerdir border-radius:x/x;.

Yüzde değerleri

W3C özelliklerine atıfta bulunarak: CSS Arka Planları ve Kenarlıklar Modülü Seviye 3 border-radius özelliği , yüzde değerleriyle ilgili okuyabileceğimiz şey:

Yüzdeler: Kenarlık kutusunun karşılık gelen boyutuna bakın.

Yani border-radius:50%;elipsin raddisini şu şekilde tanımlar:

  • X eksenindeki yarıçap , kap genişliğinin % 50'si kadardır
  • Y eksenindeki yarıçap , konteyner yüksekliğinin % 50'si kadardır

Yüzde (%) olarak sınır yarıçapı bir elips oluşturur

Piksel ve diğer birimler

Kenarlık yarıçapı için yüzde dışında bir değer kullanmak (em, in, görüntü alanıyla ilgili birimler, cm ...) her zaman aynı X / Y yarıçapına sahip bir elips ile sonuçlanacaktır. Başka bir deyişle, bir daire .

border-radius:999px;Çemberin yarıçapını ayarladığınızda 999px olmalıdır. Ancak , eğriler üst üste geldiğinde çemberin yarıçapını en küçük kenarın yarı boyutuna düşürdüğünde başka bir kural uygulanır . Yani örneğinizde bu, elemanın yüksekliğinin yarısına eşittir: 50px.

Piksel (px) cinsinden kenarlık yarıçapı bir hap şekli oluşturur


Bu örnek için (sabit boyutlu bir öğeyle) aynı sonucu hem piksel hem de yüzdelerle elde edebilirsiniz. Öğe olduğu 230px x 100pxgibi border-radius: 50%;, şuna eşittir border-radius:115px/50px;(her iki tarafın% 50'si):

div {
  display: inline-block;
  background: teal;
  width: 230px;
  height: 100px;
  padding: 40px 10px;
  box-sizing: border-box;
  font-family: courier;
  font-size: 0.8em;
  color: #fff;
}
.percent {
  border-radius: 50%;
}
.pixels {
  border-radius: 115px/50px;
}
<div class="percent">border-radius:50%;</div>
<div class="pixels">border-radius:115px/50px;</div>


6
Mükemmel cevap. Yüzdelik yarıçap değerlerinin genişlik ve yükseklik için ayrı ayrı hesaplanması üzücü. Bu, nesnenin boyut oranını bilmeden nesnenin boyutuna göre ölçeklenen dairesel köşeler elde edemeyeceğim anlamına geliyor. Yüzde daha büyük nesnelerin boyutlarına uygulanırsa hoş olmaz mıydı?
Chris Dennis

4
@ChrisDennis Bu doğru değil. OP'nin dediği gibi, kullanabilirsiniz border-radius: 999px;. Bu şekilde dairesel köşelerinizi elde edersiniz ve öğenizle ölçeklendiklerinden emin olursunuz
Gust van de Wal

9
Ama kutuya yarım daire şeklinde uçlar istemeyebilirim. X-yarıçapını, kutunun genişliğinin% 10'u ve x-yarıçapına eşit y-yarıçapı olarak belirleyebilmek istiyorum.
Chris Dennis

4
Hey, bunun gibi kendi kendine cevaplanan başka bir gönderi yaptın mı? Bunları okumaktan memnun olurum.
Ced

3
Ancak yüzde ile gerçekten işe border-radius: 50%/100%
yarayan

6

İlk değeri istediğiniz yüzdeye bölmeniz yeterlidir.% 50'lik bir kenarlık yarıçapı istiyorsanız şunu yazın:

border-radius: 25%/50%; 

veya başka bir örnek:

border-radius: 15%/30%;

Matematiği js veya SASS'de kolayca yapabilirsiniz.


1
Bu sadece genişliğin% 25'i ve yüksekliğin% 50'si değil mi? Bu, hem X hem de Y yönlerinde yüksekliğin% 50'si ile aynı şey değildir.
mpen

bu sözdizimi de neyin nesi! işe yarıyor! Var olduğunu hiç bilmiyordum, güzel!
Uri Kutner

Bu sadece matematik kardeşim
CyberJ

1
Ne tür bir matematik yaptığını bilmiyorum ama bu "sadece matematik" değil. Bu, aritmetik bölme ile hiçbir ilgisi olmayan, border-radius için özel olarak tanımlanmış bir kısaltmadır. w3.org/TR/css-backgrounds-3/#border-radius
MI Wright
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.