รัศมีขอบเป็นเปอร์เซ็นต์ (%) และพิกเซล (px) หรือ em


125

ถ้าฉันใช้ค่าพิกเซลหรือ emสำหรับ border-radius รัศมีขอบจะเป็นส่วนโค้งวงกลมหรือรูปเม็ดยาเสมอแม้ว่าค่าจะมากกว่าด้านที่ใหญ่ที่สุดขององค์ประกอบก็ตาม

เมื่อฉันใช้เปอร์เซ็นต์รัศมีขอบจะเป็นรูปไข่และเริ่มต้นที่ตรงกลางของแต่ละด้านขององค์ประกอบทำให้เป็นรูปวงรีหรือวงรี :

รัศมีเส้นขอบพิกเซล (px)เปอร์เซ็นต์ (%) เส้นขอบรัศมี

ค่าพิกเซลสำหรับรัศมีขอบ:

ค่าเปอร์เซ็นต์สำหรับรัศมีขอบ:

เหตุใดรัศมีเส้นขอบในหน่วยเปอร์เซ็นต์จึงไม่ทำหน้าที่เช่นเดียวกับรัศมีขอบที่กำหนดด้วยค่าพิกเซลหรือค่า em

คำตอบ:


182

เส้นขอบรัศมี:

ขั้นแรกคุณต้องเข้าใจว่าคุณสมบัติ border-radius รับ 2 ค่า ค่าเหล่านี้คือรัศมีบนแกน X / Y ของวงรีหนึ่งในสี่ที่กำหนดรูปร่างของมุม
หากมีการตั้งค่าเพียงค่าเดียวค่าที่สองจะเท่ากับค่าแรก ดังนั้นจะเทียบเท่ากับ border-radius: xborder-radius:x/x;

ค่าเปอร์เซ็นต์

การอ้างถึงข้อกำหนด W3C: พื้นหลัง CSS และคุณสมบัติขอบเขตขอบของโมดูลระดับ 3นี่คือสิ่งที่เราสามารถอ่านเกี่ยวกับค่าเปอร์เซ็นต์:

เปอร์เซ็นต์: อ้างถึงมิติที่สอดคล้องกันของกล่องเส้นขอบ

ดังนั้นborder-radius:50%;กำหนด raddi ของวงรีด้วยวิธีนี้:

  • รัศมีบนแกน Xเท่ากับ 50% ของคอนเทนเนอร์ความกว้าง
  • รัศมีบนแกน Yคือ 50% ของความสูงของคอนเทนเนอร์

เส้นขอบรัศมีเป็นเปอร์เซ็นต์ (%) ทำให้เป็นจุดไข่ปลา

พิกเซลและหน่วยอื่น ๆ

การใช้ค่าหนึ่งค่าอื่นที่ไม่ใช่เปอร์เซ็นต์สำหรับรัศมีขอบ (em, in, หน่วยที่เกี่ยวข้องกับวิวพอร์ต, cm ... ) จะทำให้ได้วงรีที่มีรัศมี X / Y เท่ากันเสมอ กล่าวอีกนัยหนึ่งคือวงกลมเป็นวงกลม

เมื่อคุณตั้งค่าborder-radius:999px;รัศมีของวงกลมควรเป็น 999px แต่จะใช้กฎอีกข้อหนึ่งเมื่อเส้นโค้งที่เหลื่อมกันลดรัศมีของวงกลมเหลือครึ่งหนึ่งของขนาดด้านที่เล็กที่สุด ดังนั้นในตัวอย่างของคุณจะเท่ากับครึ่งหนึ่งของความสูงขององค์ประกอบ: 50px

เส้นขอบรัศมีเป็นพิกเซล (px) ทำให้เป็นรูปเม็ดยา


สำหรับตัวอย่างนี้ (ที่มีองค์ประกอบขนาดคงที่) คุณจะได้ผลลัพธ์เดียวกันโดยมีทั้ง px และเปอร์เซ็นต์ ในฐานะที่เป็นองค์ประกอบคือ230px x 100px, border-radius: 50%;เทียบเท่ากับborder-radius:115px/50px;(50% ของทั้งสองฝ่าย):

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
คำตอบที่ยอดเยี่ยม น่าเสียดายที่ค่าเปอร์เซ็นต์รัศมีคำนวณแยกกันสำหรับความกว้างและความสูง หมายความว่าฉันไม่สามารถรับมุมวงกลมที่ปรับขนาดตามขนาดของวัตถุโดยไม่ทราบอัตราส่วนภาพของวัตถุ จะดีไหมถ้าเปอร์เซ็นต์ที่ใช้กับขนาดวัตถุที่ใหญ่กว่า
Chris Dennis

4
@ChrisDennis นั่นไม่จริง เช่นเดียวกับ OP กล่าวคุณสามารถใช้border-radius: 999px;ไฟล์. ด้วยวิธีนี้คุณจะได้มุมวงกลมและต้องแน่ใจว่ามันปรับขนาดตามองค์ประกอบของคุณ
Gust van de Wal

9
แต่ฉันอาจไม่ต้องการปลายครึ่งวงกลมที่กล่อง ผมอยากจะระบุ x-radius เป็น 10% ของความกว้างของกล่องและ y-radius เท่ากับ x-radius
Chris Dennis

4
เฮ้คุณทำโพสต์ตอบตัวเองแบบนี้หรือเปล่า? ฉันขอขอบคุณที่อ่านสิ่งเหล่านี้
Ced

3
แต่สิ่งที่ใช้งานได้จริงกับเปอร์เซ็นต์: border-radius: 50%/100%(ทดสอบใน Chrome 60 + 61)
denns

6

เพียงแค่หารค่าแรกด้วย% ที่คุณต้องการ .. ดังนั้นหากคุณต้องการรัศมีขอบ 50% ให้เขียน:

border-radius: 25%/50%; 

หรือตัวอย่างอื่น:

border-radius: 15%/30%;

คุณสามารถทำคณิตศาสตร์ใน js หรือ SASS ได้อย่างง่ายดาย


1
นั่นไม่ใช่แค่ 25% ของความกว้างและ 50% ของความสูง? นั่นไม่ใช่สิ่งเดียวกับ 50% ของความสูงทั้งในทิศทาง X และ Y
mpen

ไวยากรณ์นี่มันอะไรกัน! มันได้ผล! ฉันไม่เคยรู้เลยว่ามันมีอยู่จริงมันดีมาก!
Uri Kutner

มันเป็นแค่คณิตศาสตร์เท่านั้น
CyberJ

1
ฉันไม่รู้ว่าคุณเรียนคณิตศาสตร์แบบไหน แต่ไม่ใช่ "แค่คณิตศาสตร์" เป็นชวเลขที่กำหนดไว้เป็นพิเศษสำหรับเส้นขอบรัศมีที่ไม่มีส่วนเกี่ยวข้องกับการหารเลขคณิตเลย w3.org/TR/css-backgrounds-3/#border-radius
MI Wright
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.