Bu CSS nasıl bir çevre oluşturur?


206

Bu CSS:

div {
    width: 0;
    height: 0;
    border: 180px solid red;
    border-radius: 180px;
}

Aşağıdaki daireyi nasıl üretiyor?

Resim açıklamasını buraya girin

Bir dikdörtgen genişliği 180 piksel ve yüksekliği 180 piksel ise, şöyle görünür:

Resim açıklamasını buraya girin

Sınır yarıçapı 30 piksel uygulandıktan sonra şu şekilde görünecektir:

Resim açıklamasını buraya girin

Dikdörtgen küçülüyor, yani yarıçap boyutu arttığında neredeyse kaybolacak.

Peki, 180 piksellik bir kenarlık 180 piksel height/width-> 0pxyarıçaplı bir daire haline nasıl gelir?


14
Etrafında yuvarlatılmış köşeleri olan 180 piksel kenarlıklı bir 0x0 nesnesidir . Yani yuvarlatılmış köşeler bir dairenin çeyreği.
Kaz

aklımda neden circlesınır ile yapmak istediğiniz aptalca bir soru var ??? kolayca yapabilir circleile widthve heightbiz ile yapmak neden bu kadarborder
Mekanik

7
FYI, daire yapmak için <code> kenarlık yarıçapını kullanın:% 50 </code> - mizanpajınızı doğru yaparken yalnızca genişlik / yüksekliği ayarlamayı kolaylaştırır.
David Gilbertson

Evet bayanlar, bu bir matematik
Medet Tleukabiluly

Yanıtlar:


372

Yükseklik / genişlik> 0 piksel olan 180 piksel kenarlık, 180 piksel yarıçaplı bir daire haline nasıl gelir?

Bunu iki soruya dönüştürelim:

Nerede widthve heightgerçekten başvurmak?

Tipik bir kutunun ( kaynak ) alanlarına bir göz atalım :

W3C: Tipik bir kutunun alanları

heightVe widthdoğru kutu modeli (hayır tuhaflıklar modu, hiçbir eski Internet Explorer) kullanılıyorsa, yalnızca içeriğine uygulanır.

Nerede border-radiusgeçerlidir?

border-radiusÇerçeve-kenarında uygulanır. Dolgu veya kenarlık yoksa, içerik kenarınızı doğrudan etkiler, bu da üçüncü örneğinizle sonuçlanır.

Bu sınır yarıçapımız / dairemiz için ne anlama geliyor?

Bu, CSS kurallarınızın yalnızca kenarlıktan oluşan bir kutu ile sonuçlandığı anlamına gelir. Kurallarınız, bu kenarlığın her iki tarafta maksimum 180 piksel genişliğinde olması gerektiğini, diğer yandan aynı boyutta maksimum yarıçapa sahip olması gerektiğini belirtiyor:

Örnek resim

Resimde, öğenizin gerçek içeriği (küçük siyah nokta) gerçekten mevcut değil. Eğer hiç uygulamadıysanız border-radiusyeşil kutu ile sonuçlanırsınız. border-radiusSana mavi daireyi verir.

Sadece border-radius iki köşeye uygularsanız anlaşılması kolaylaşır :

#silly-circle{
    width:0; height:0;
    border: 180px solid red;
    border-top-left-radius: 180px;
    border-top-right-radius: 180px;
}

Sınır yalnızca iki köşeye uygulanır

Örneğinizde tüm köşeler / kenarlıklar için boyut ve yarıçap eşit olduğundan bir daire elde edersiniz.

Diğer kaynaklar

Referanslar

Gösteriler

  • Lütfen aşağıdaki demoyu açın, bu border-radiusda kenarlığın nasıl etkilendiğini gösterir (içerik kutusu olarak iç mavi kutuyu, dolgu sınırı olarak iç siyah sınırı, dolgu olarak boş alanı ve dev kırmızı kenarlığı, sınırı). İç kutu ile kırmızı kenarlık arasındaki kesişimler genellikle içerik kenarını etkiler.


Ben css3-background css3-box (css3-box bir yeniden yazma bekliyor) herhangi bir referans yapar sanmıyorum.
BoltClock

@BoltClock: Css3-box'ın kenarları tanımlayacağını düşündüm . Girişte yalnızca (normatif olmayan) css2.1-box'a bir referans var ve verilen görüntü de orada, bu yüzden css3-box'ı anlamak için gerçekten gerekli değil border-radius(css3- Kutu?).
Zeta

@Zeta kafamda neden circlesınırla yapmak istediğini aptalca bir sorum var ??? kolayca yapabilir circleile widthve heightbiz ile yapmak neden bu kadarborder
Mekanik

1
@Sarfaraz: OP'nin şu sorusuna bir göz atın: "Peki, 180 piksellik bir kenarlık 180 piksellik height/width-> 0pxyarıçaplı bir daire haline nasıl geliyor ?" . Sadece soruyu cevapladım. Bir daire oluşturmanın başka yolları da vardır, ancak OP yalnızca bu özel yöntemin nasıl çalıştığıyla ilgiliydi.
Zeta

@Zeta: Tam olarak neyin değiştirileceğinden emin değilim, ancak WD'nin 6 yıl içinde güncellenmediği göz önüne alındığında, bunun çoğundan şüpheleniyorum. Bölüm 11'in ( overflowmülk ailesi) artık kendi modülünde, css-overflow-3'te yaşadığını biliyorum , ancak bu henüz ED'ye yansıtılmadı. ED'de
BoltClock

94

gösteri

Bu resim gösterimi ile soruyu başka bir şekilde inceleyelim:

Önce sınır yarıçapının nasıl üretildiğini görelim mi?

Yarıçap üretmek için sınırının iki tarafını alır. Kenarlık yarıçapını 50 piksele ayarlarsanız, bir taraftan 25 piksel ve başka bir taraftan 25 piksel gerekir.

Resim açıklamasını buraya girin

Ve her iki taraftan da 25 piksel alarak şu şekilde üretilir:

div{
    width: 0px;
    height: 0px;
    border: 180px solid red;
    border-radius: 0 50px 0 0;
}

Resim açıklamasını buraya girin

Şimdi bir köşeye uygulamak için en fazla karenin ne kadar sürebileceğini görün.

Yukarıdan 180 piksele, sağdan 180 piksele kadar sürebilir. Sonra şöyle üretilir:

div{
    width: 0px;
    height: 0px;
    border: 180px solid red;
    border-radius: 0 180px 0 0;
}

Resim açıklamasını buraya girin

Ve buna bakın, eşit olmayan bir yarıçap değeri ayarlarsak nasıl üretir?

Sınır yarıçapını yalnızca iki köşeye eşit olmayan bir şekilde uygularsanız:

  • sağ üst köşeden 180 piksele

  • sağ alt köşeden 100 piksele

Sonra alacaktı

  • sağ üst: üstten 90 piksel ve sağdan 90 piksel

  • sağ alt: sağdan 50 piksel ve alttan 50 piksel

Sonra böyle üretecekti

div{
    width: 0px;
    height: 0px;
    border: 180px solid red;
    border-radius: 0 180px 100px 0;
}

Resim açıklamasını buraya girin

Her kenarına uygulamak için sınırının en fazla ne kadarı kare alabilir? Ve nasıl bir çember oluşturduğunu görüyor musunuz?

Sınır boyutunun yarısına kadar, yani 180 piksel / 2 = 90 piksel sürebilir. Sonra böyle bir daire üretirdi

div{
    width: 0px;
    height: 0px;
    border: 180px solid red;
    border-radius: 180px;
}

Resim açıklamasını buraya girin

Neden her tarafa uygulamak için karenin sadece yarısını alıyor?

Çünkü tüm köşeler yarıçap değerlerini eşit olarak ayarlamak zorundadır.

Sınırının eşit parçalarını alarak bir daire oluşturur.


7
Aslında bu cevabın şu anki versiyonu biraz ileri götürüyor. Soru basitçe "bu CSS nasıl bir daire oluşturur?" Değil, genel olarak sınır yarıçapı nasıl çalışır? Ayrıca soruyu yeniden biçimlendirebilir ve kod ortamlarına gerçek kodu koyabilirsiniz.
Zeta

3

Kenarlıklar, herhangi bir içeriğin dış kutusudur ve üzerine yarıçap uygularsanız, basitçe dairesel kenar üretecektir.


3

Ben başlangıçta dikdörtgen oluşturmak height and width = 180pxve daha sonra 30pxher köşe gibi verilen yarıçapı ile eğri yapmak düşünüyorum . Böylece borderverilen ile ayarlanır radius.


1

Her ikisi de .ave .baynı çıktıyı verecektir.

S. Neden kullandım width: 360px; height: 360px;?

A. border: 180px solid red;gibi .aişlerde border-width: 180px 180px 180px 180px; /* Top Right Bottom Left */.

Umarım bu keman kavramı anlamanıza yardımcı olur.

.a{
    width: 0;
    height: 0;
    border: 180px solid red;
    border-radius: 180px;
}
.b{
    background:red;
    width: 360px;
    height: 360px;
    border-radius: 180px;
}

9
Ha? ".A nasıl çalışır?" "İşte .a ve .b arasında bir karşılaştırma" Burada ne söylemeye çalıştığınızdan emin değilim.
BoltClock
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.