Border-radius dalam persentase (%) dan piksel (px) atau em

124

Jika saya menggunakan piksel atau nilai em untuk radius-batas, radius tepi selalu berupa busur lingkaran atau bentuk pil bahkan jika nilainya lebih besar dari sisi terbesar elemen.

Saat saya menggunakan persentase , jari-jari tepi berbentuk elips dan dimulai di tengah setiap sisi elemen yang menghasilkan bentuk oval atau elips :

radius batas piksel (piksel)persen (%) radius batas

Nilai piksel untuk radius batas:

Nilai persen untuk radius-perbatasan:

Mengapa radius batas dalam persentase tidak bertindak dengan cara yang sama seperti radius batas yang disetel dengan nilai piksel atau em?

web-tiki
sumber

Jawaban:

181

Radius batas:

Pertama, Anda perlu memahami bahwa properti border-radius memiliki 2 nilai. Nilai-nilai ini adalah jari-jari pada sumbu X / Y dari seperempat elips yang menentukan bentuk sudut.
Jika hanya satu dari nilai yang ditetapkan maka nilai kedua sama dengan yang pertama. Begitu border-radius: xpula dengan border-radius:x/x;.

Nilai persentase

Mengacu pada spesifikasi W3C: CSS Backgrounds and Borders Module Level 3 border-radius property inilah yang dapat kita baca mengenai nilai persentase:

Persentase: Mengacu pada dimensi yang sesuai dari kotak perbatasan.

Jadi border-radius:50%;tentukan raddi elips dengan cara ini:

  • jari-jari pada sumbu X adalah 50% dari lebar kontainer
  • jari-jari pada sumbu Y adalah 50% dari tinggi kontainer

Jari-jari batas dalam persentase (%) membuat elipsis

Pixel dan unit lainnya

Menggunakan satu nilai selain persentase untuk radius perbatasan (em, in, viewport related units, cm ...) akan selalu menghasilkan elips dengan jari-jari X / Y yang sama. Dengan kata lain, lingkaran .

Saat Anda mengatur border-radius:999px;jari-jari lingkaran harus 999px. Tetapi aturan lain diterapkan ketika kurva tumpang tindih mengurangi jari-jari lingkaran menjadi setengah ukuran sisi terkecil. Jadi dalam contoh Anda, itu sama dengan setengah tinggi elemen: 50px.

Border-radius dalam piksel (px) membuat bentuk pil


Untuk contoh ini (dengan elemen ukuran tetap) Anda bisa mendapatkan hasil yang sama dengan piksel dan persentase. Karena elemennya 230px x 100px, border-radius: 50%;setara dengan border-radius:115px/50px;(50% dari kedua sisi):

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>

web-tiki
sumber
6
Jawaban yang sangat bagus. Sangat disayangkan bahwa nilai radius persentase dihitung secara terpisah untuk lebar dan tinggi. Artinya saya tidak bisa mendapatkan sudut melingkar yang berskala dengan ukuran objek, tanpa mengetahui rasio aspek objek. Bukankah lebih baik jika persentase diterapkan pada dimensi objek yang lebih besar?
Chris Dennis
4
@Ini tidak benar. Seperti yang dikatakan OP, Anda cukup menggunakan border-radius: 999px;. Dengan begitu Anda mendapatkan sudut melingkar dan memastikan bahwa ukurannya sesuai dengan elemen Anda
Gust van de Wal
9
Tapi saya mungkin tidak ingin ujung setengah lingkaran ke kotak. Saya ingin menentukan radius-x sebagai, katakanlah, 10% dari lebar kotak dan radius-y sama dengan radius-x.
Chris Dennis
4
Hei, apakah Anda melakukan posting yang dijawab sendiri seperti ini? Saya akan menghargai membaca itu.
Menyerahkan
3
Tetapi yang benar-benar berfungsi dengan persentase adalah: border-radius: 50%/100%(Diuji di Chrome 60 + 61)
denns
6

Bagilah nilai pertama dengan% yang Anda inginkan .. jadi jika Anda menginginkan radius-batas 50%, tulis:

border-radius: 25%/50%; 

atau contoh lain:

border-radius: 15%/30%;

Anda dapat dengan mudah melakukan matematika di js atau SASS.

CyberJ
sumber
1
Bukankah itu hanya 25% dari lebar dan 50% dari tinggi? Itu tidak sama dengan 50% tinggi di kedua arah X dan Y.
mpen
apa sintaks ini! berhasil! Saya tidak pernah tahu itu ada, itu bagus!
Uri Kutner
Ini hanya matematika bro
CyberJ
1
Saya tidak tahu jenis matematika apa yang Anda lakukan, tapi ini bukan "hanya matematika". Ini adalah singkatan yang didefinisikan secara khusus untuk radius-batas yang tidak ada hubungannya sama sekali dengan pembagian aritmatika. w3.org/TR/css-backgrounds-3/#border-radius
MI Wright